From 94cedb692a1f6fbaae2ff0b96a7e50512ac6f215 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Fri, 14 Jan 2011 11:02:54 +0100 Subject: Free memory when disabling the unified toolbar. Reviewed-by: Richard Moe Gustavsen --- src/gui/widgets/qmainwindow.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp index da902d5..214cf05 100644 --- a/src/gui/widgets/qmainwindow.cpp +++ b/src/gui/widgets/qmainwindow.cpp @@ -1526,12 +1526,23 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set) #ifdef QT_MAC_USE_COCOA // Activate the unified toolbar with the raster engine. - if (windowSurface()) { + if (windowSurface() && set) { d->layout->unifiedSurface = new QUnifiedToolbarSurface(this); } #endif // QT_MAC_USE_COCOA d->layout->updateHIToolBarStatus(); + +#ifdef QT_MAC_USE_COCOA + // Deactivate the unified toolbar with the raster engine. + if (windowSurface() && !set) { + if (d->layout->unifiedSurface) { + delete d->layout->unifiedSurface; + d->layout->unifiedSurface = 0; + } + } +#endif // QT_MAC_USE_COCOA + // Enabling the unified toolbar clears the opaque size grip setting, update it. d->macUpdateOpaqueSizeGrip(); #else -- cgit v0.12 From 6482a5c5e272d79c312a5f5ef16ee2adf21f4504 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 18 Jan 2011 16:32:17 +0100 Subject: Add a utility function to call setNeedsDisplay: This allows to trigger a drawRect: on the NSView associated with a QWidget. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qt_cocoa_helpers_mac.mm | 7 +++++++ src/gui/kernel/qt_cocoa_helpers_mac_p.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 48d21e9..74d44a3 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1590,6 +1590,13 @@ void qt_mac_display(QWidget *widget) return; } +void qt_mac_setneedsdisplay(QWidget *widget) +{ + NSView *theNSView = qt_mac_nativeview_for(widget); + [theNSView setNeedsDisplay:YES]; + return; +} + #endif // QT_MAC_USE_COCOA QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index 04c2d06..25dcdc3 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -227,7 +227,10 @@ void qt_cocoaPostMessage(id target, SEL selector, int argCount=0, id arg1=0, id void qt_mac_post_retranslateAppMenu(); +#ifdef QT_MAC_USE_COCOA void qt_mac_display(QWidget *widget); +void qt_mac_setneedsdisplay(QWidget *widget); +#endif // QT_MAC_USE_COCOA QT_END_NAMESPACE -- cgit v0.12 From b595c2fbe0fa354190b713ef09dd1f348e22e2b6 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Fri, 21 Jan 2011 12:55:23 +0100 Subject: Set the graphics system name in the graphics system factory. This allows us to know which graphics system is in use at runtime. Reviewed-by: Jani Hautakangas --- src/gui/painting/qgraphicssystem_runtime.cpp | 1 - src/gui/painting/qgraphicssystemfactory.cpp | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystem_runtime.cpp b/src/gui/painting/qgraphicssystem_runtime.cpp index a9fbbee..bd27e9d 100644 --- a/src/gui/painting/qgraphicssystem_runtime.cpp +++ b/src/gui/painting/qgraphicssystem_runtime.cpp @@ -322,7 +322,6 @@ QRuntimeGraphicsSystem::QRuntimeGraphicsSystem() : m_windowSurfaceDestroyPolicy(DestroyImmediately), m_graphicsSystem(0) { - QApplicationPrivate::graphics_system_name = QLatin1String("runtime"); QApplicationPrivate::runtime_graphics_system = true; #ifdef QT_DEFAULT_RUNTIME_SYSTEM diff --git a/src/gui/painting/qgraphicssystemfactory.cpp b/src/gui/painting/qgraphicssystemfactory.cpp index 3adeba4..1416f7c 100644 --- a/src/gui/painting/qgraphicssystemfactory.cpp +++ b/src/gui/painting/qgraphicssystemfactory.cpp @@ -45,6 +45,7 @@ #include "qmutex.h" #include "qapplication.h" +#include #include "qgraphicssystem_raster_p.h" #include "qgraphicssystem_runtime_p.h" #include "qdebug.h" @@ -79,6 +80,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key) } #endif + QApplicationPrivate::graphics_system_name = system; if (system == QLatin1String("raster")) return new QRasterGraphicsSystem; else if (system == QLatin1String("runtime")) -- cgit v0.12 From f723903b6990655c12fb1747a816ed62b01e87c0 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 25 Jan 2011 14:50:17 +0100 Subject: Add utility functions for using Core Graphics contexts. These snippets are often used while managing Core Graphics contexts. Putting them in inlined functions makes code easier to read. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qt_cocoa_helpers_mac_p.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index 25dcdc3..b177210 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -232,6 +232,34 @@ void qt_mac_display(QWidget *widget); void qt_mac_setneedsdisplay(QWidget *widget); #endif // QT_MAC_USE_COCOA + +// Utility functions to ease the use of Core Graphics contexts. + +inline void qt_mac_retain_graphics_context(CGContextRef context) +{ + CGContextRetain(context); + CGContextSaveGState(context); +} + +inline void qt_mac_release_graphics_context(CGContextRef context) +{ + CGContextRestoreGState(context); + CGContextRelease(context); +} + +inline void qt_mac_draw_image(CGContextRef context, CGContextRef imageContext, CGRect area, CGRect drawingArea) +{ + CGImageRef image = CGBitmapContextCreateImage(imageContext); + CGImageRef subImage = CGImageCreateWithImageInRect(image, area); + + CGContextTranslateCTM (context, 0, drawingArea.origin.y + CGRectGetMaxY(drawingArea)); + CGContextScaleCTM(context, 1, -1); + CGContextDrawImage(context, drawingArea, subImage); + + CGImageRelease(subImage); + CGImageRelease(image); +} + QT_END_NAMESPACE #endif // QT_COCOA_HELPERS_MAC_P_H -- cgit v0.12 From 85b8631c2f30947e3c8364c903a4f85abb8f11e2 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 25 Jan 2011 15:07:51 +0100 Subject: Small typo fix. Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/kernel/qcocoaview_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index e02cf11..6059946 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -547,7 +547,7 @@ static int qCocoaViewCount = 0; } // Since we don't want to use the native engine, we must exit, however - // widgets that are set to paint on screen, spesifically QGLWidget, + // widgets that are set to paint on screen, specifically QGLWidget, // requires the following code to execute in order to be drawn. if (!qwidget->testAttribute(Qt::WA_PaintOnScreen)) return; -- cgit v0.12 From 26d25ab46900d84b44e451c2a0a986bfed94a3f4 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 25 Jan 2011 15:23:34 +0100 Subject: Move the flushing to [view drawRect:rect] Instead of flushing by grabbing the Core Graphics context, we do it directly in the drawRect: method. This approach allows us to call flush() many times and only proceed to flush when the system is ready. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qcocoaview_mac.mm | 114 +++++++++++++++++++----- src/gui/kernel/qwidget.cpp | 1 + src/gui/kernel/qwidget_p.h | 5 +- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 71 +++------------ src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 7 +- src/gui/painting/qwindowsurface_raster.cpp | 42 +++++---- src/gui/painting/qwindowsurface_raster_p.h | 11 +++ 7 files changed, 153 insertions(+), 98 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 6059946..e50c401 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -52,6 +52,8 @@ #include #include #include +#include +#include #include #include @@ -530,8 +532,86 @@ static int qCocoaViewCount = 0; if (!qwidget) return; + // Getting context. + CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; + qt_mac_retain_graphics_context(context); + // We use a different graphics system. - if (QApplicationPrivate::graphicsSystem() != 0 && !qwidgetprivate->isInUnifiedToolbar) { + if (QApplicationPrivate::graphicsSystem() != 0) { + + // Raster engine. + if (QApplicationPrivate::graphics_system_name == QLatin1String("raster")) { + + if (!qwidgetprivate->isInUnifiedToolbar) { + + // Qt handles the painting occuring inside the window. + // Cocoa also keeps track of all widgets as NSView and therefore might + // ask for a repainting of a widget even if Qt is already taking care of it. + // + // The only valid reason for Cocoa to call drawRect: is for window manipulation + // (ie. resize, ...). + // + // Qt will then forward the update to the children. + if (!qwidget->isWindow()) { + qt_mac_release_graphics_context(context); + return; + } + + QRasterWindowSurface *winSurface = dynamic_cast(qwidget->windowSurface()); + if (!winSurface || !winSurface->needsFlush) { + qt_mac_release_graphics_context(context); + return; + } + + // Clip to region. + const QVector &rects = winSurface->regionToFlush.rects(); + for (int i = 0; i < rects.size(); ++i) { + const QRect &rect = rects.at(i); + CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height())); + } + CGContextClip(context); + + QRect r = winSurface->regionToFlush.boundingRect(); + const CGRect area = CGRectMake(r.x(), r.y(), r.width(), r.height()); + + qt_mac_draw_image(context, winSurface->imageContext(), area, area); + + winSurface->needsFlush = false; + winSurface->regionToFlush = QRegion(); + + } else { + + QUnifiedToolbarSurface *unifiedSurface = dynamic_cast(qwidgetprivate->unifiedSurface); + if (!unifiedSurface || !qwidgetprivate->flushRequested) { + qt_mac_release_graphics_context(context); + return; + } + + // We render the content of the toolbar in the surface. + unifiedSurface->updateToolbarOffset(qwidget); + QRect beginPaintRect(qwidgetprivate->toolbar_offset.x(), qwidgetprivate->toolbar_offset.y(), qwidget->geometry().width(), qwidget->geometry().height()); + QRegion beginPaintRegion(beginPaintRect); + + unifiedSurface->beginPaint(beginPaintRegion); + qwidget->render(unifiedSurface->paintDevice(), qwidgetprivate->toolbar_offset, QRegion(), QWidget::DrawChildren); + + int areaX = qwidgetprivate->toolbar_offset.x(); + int areaY = qwidgetprivate->toolbar_offset.y(); + int areaWidth = qwidget->geometry().width(); + int areaHeight = qwidget->geometry().height(); + const CGRect area = CGRectMake(areaX, areaY, areaWidth, areaHeight); + const CGRect drawingArea = CGRectMake(0, 0, areaWidth, areaHeight); + + qt_mac_draw_image(context, unifiedSurface->imageContext(), area, drawingArea); + + qwidgetprivate->flushRequested = false; + + } + + CGContextFlush(context); + qt_mac_release_graphics_context(context); + return; + } // Qt handles the painting occuring inside the window. // Cocoa also keeps track of all widgets as NSView and therefore might @@ -553,19 +633,8 @@ static int qCocoaViewCount = 0; return; } - CGContextRef cg = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; - CGContextRetain(cg); - qwidgetprivate->hd = cg; - - // We steal the CGContext for flushing in the unified toolbar with the raster engine. - if (QApplicationPrivate::graphicsSystem() != 0 && qwidgetprivate->isInUnifiedToolbar) { - qwidgetprivate->cgContext = cg; - qwidgetprivate->hasOwnContext = true; - qwidgetprivate->unifiedSurface->flush(qwidget, qwidgetprivate->ut_rg, qwidgetprivate->ut_pt); - return; - } - - CGContextSaveGState(cg); + // Native engine. + qwidgetprivate->hd = context; if (qwidget->isVisible() && qwidget->updatesEnabled()) { //process the actual paint event. if (qwidget->testAttribute(Qt::WA_WState_InPaintEvent)) @@ -600,18 +669,18 @@ static int qCocoaViewCount = 0; engine->setSystemClip(qrgn); if (qwidgetprivate->extra && qwidgetprivate->extra->hasMask) { CGRect widgetRect = CGRectMake(0, 0, qwidget->width(), qwidget->height()); - CGContextTranslateCTM (cg, 0, widgetRect.size.height); - CGContextScaleCTM(cg, 1, -1); + CGContextTranslateCTM (context, 0, widgetRect.size.height); + CGContextScaleCTM(context, 1, -1); if (qwidget->isWindow()) - CGContextClearRect(cg, widgetRect); - CGContextClipToMask(cg, widgetRect, qwidgetprivate->extra->imageMask); - CGContextScaleCTM(cg, 1, -1); - CGContextTranslateCTM (cg, 0, -widgetRect.size.height); + CGContextClearRect(context, widgetRect); + CGContextClipToMask(context, widgetRect, qwidgetprivate->extra->imageMask); + CGContextScaleCTM(context, 1, -1); + CGContextTranslateCTM (context, 0, -widgetRect.size.height); } if (qwidget->isWindow() && !qwidgetprivate->isOpaque && !qwidget->testAttribute(Qt::WA_MacBrushedMetal)) { - CGContextClearRect(cg, NSRectToCGRect(aRect)); + CGContextClearRect(context, NSRectToCGRect(aRect)); } // Check for alien widgets, use qwidgetPrivate->drawWidget() to draw the widget if this @@ -653,8 +722,7 @@ static int qCocoaViewCount = 0; " widget outside of the PaintEvent"); } qwidgetprivate->hd = 0; - CGContextRestoreGState(cg); - CGContextRelease(cg); + qt_mac_release_graphics_context(context); } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 16f64ff..056aea6 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -324,6 +324,7 @@ QWidgetPrivate::QWidgetPrivate(int version) hasOwnContext = false; isInUnifiedToolbar = false; unifiedSurface = 0; + askedForFlush = false; #endif // QT_MAC_USE_COCOA #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 6b85391..f5a965c 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -852,13 +852,16 @@ public: // Do we need to change the methods? bool changeMethods; bool hasOwnContext; + + // Unified toolbar variables CGContextRef cgContext; QRegion ut_rg; QPoint ut_pt; bool isInUnifiedToolbar; QWindowSurface *unifiedSurface; QPoint toolbar_offset; -#endif + bool askedForFlush; +#endif // QT_MAC_USE_COCOA void determineWindowClass(); void transferChildren(); bool qt_mac_dnd_event(uint, DragRef); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 02ba8db..38dc632 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -92,6 +92,11 @@ void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &of } } +void QUnifiedToolbarSurface::updateRedirection(QWidget *widget) +{ + recursiveRedirect(widget, widget->d_func()->toolbar_offset); +} + void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offset) { setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME @@ -130,67 +135,13 @@ void QUnifiedToolbarSurface::updateToolbarOffset(QWidget *widget) void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset) { Q_D(QUnifiedToolbarSurface); - - QRegion flushingRegion(widget->rect()); - - if (!d->image || rgn.rectCount() == 0) { - return; - } - Q_UNUSED(offset); - // Get a context for the widget. - CGContextRef context; - if (!(widget->d_func()->hasOwnContext)) { - widget->d_func()->ut_rg = rgn; - widget->d_func()->ut_pt = offset; - qt_mac_display(widget); + if (!d->image || rgn.rectCount() == 0) return; - } else { - // We render the content of the toolbar in the surface. - updateToolbarOffset(widget); - QRect beginPaintRect(widget->d_func()->toolbar_offset.x(), widget->d_func()->toolbar_offset.y(), widget->geometry().width(), widget->geometry().height()); - QRegion beginPaintRegion(beginPaintRect); - - context = widget->d_func()->cgContext; - beginPaint(beginPaintRegion); - widget->render(widget->d_func()->unifiedSurface->paintDevice(), widget->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren); - } - - CGContextSaveGState(context); - - int areaX = widget->d_func()->toolbar_offset.x(); - int areaY = widget->d_func()->toolbar_offset.y(); - int areaWidth = widget->geometry().width(); - int areaHeight = widget->geometry().height(); - const CGRect area = CGRectMake(areaX, areaY, areaWidth, areaHeight); - // Clip to region. - const QVector &rects = flushingRegion.rects(); - for (int i = 0; i < rects.size(); ++i) { - const QRect &rect = rects.at(i); - CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height())); - } - CGContextAddRect(context, area); - CGContextClip(context); - - - CGImageRef image = CGBitmapContextCreateImage(d->image->cg); - CGImageRef subImage = CGImageCreateWithImageInRect(image, area); - - const CGRect drawingArea = CGRectMake(0, 0, areaWidth, areaHeight); - qt_mac_drawCGImage(context, &drawingArea, subImage); - - CGImageRelease(subImage); - CGImageRelease(image); - - CGContextFlush(context); - - // Restore context. - CGContextRestoreGState(context); - CGContextRelease(context); - widget->d_func()->cgContext = 0; - widget->d_func()->hasOwnContext = false; + widget->d_func()->askedForFlush = true; + qt_mac_setneedsdisplay(widget); } void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widget) @@ -254,6 +205,12 @@ void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widge delete oldImage; } +CGContextRef QUnifiedToolbarSurface::imageContext() +{ + Q_D(QUnifiedToolbarSurface); + return d->image->cg; +} + QT_END_NAMESPACE #endif // QT_MAC_USE_COCOA diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 3bc0404..6e40a17 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -82,10 +82,13 @@ public: void setGeometry(const QRect &rect); void beginPaint(const QRegion &rgn); void insertToolbar(QWidget *toolbar, const QPoint &offset); + void updateRedirection(QWidget *widget); + void updateToolbarOffset(QWidget *widget); -private: QPaintDevice *paintDevice(); - void updateToolbarOffset(QWidget *widget); + CGContextRef imageContext(); + +private: void prepareBuffer(QImage::Format format, QWidget *widget); void recursiveRedirect(QObject *widget, const QPoint &offset); diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 2b4e125..92e9425 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -98,6 +98,11 @@ QRasterWindowSurface::QRasterWindowSurface(QWidget *window, bool setDefaultSurfa d_ptr->image = 0; d_ptr->inSetGeometry = false; setStaticContentsSupport(true); + +#ifdef QT_MAC_USE_COCOA + needsFlush = false; + regionToFlush = QRegion(); +#endif // QT_MAC_USE_COCOA } @@ -251,13 +256,23 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi #ifdef Q_WS_MAC + Q_UNUSED(offset); + // This is mainly done for native components like native "open file" dialog. if (widget->testAttribute(Qt::WA_DontShowOnScreen)) { return; } #ifdef QT_MAC_USE_COCOA + this->needsFlush = true; + this->regionToFlush += rgn; + + // The actual flushing will be processed in [view drawRect:rect] + qt_mac_setneedsdisplay(widget); + // Unified toolbar hack. + // We issue a flush call for each QToolBar so they get repainted right after + // the main window. QMainWindow* mWindow = qobject_cast(widget->window()); if (mWindow) { QMainWindowLayout *mLayout = qobject_cast(mWindow->layout()); @@ -267,24 +282,17 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi QToolBar* toolbar = toolbarList.at(i); if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) { QWidget* tbWidget = (QWidget*) toolbar; - if (tbWidget->d_func()->unifiedSurface) { + if (tbWidget->d_func()->unifiedSurface) tbWidget->d_func()->unifiedSurface->flush(tbWidget, rgn, offset); - } } } } -#endif // QT_MAC_USE_COCOA - - Q_UNUSED(offset); +#else // Get a context for the widget. -#ifndef QT_MAC_USE_COCOA CGContextRef context; CGrafPtr port = GetWindowPort(qt_mac_window_for(widget)); QDBeginCGContext(port, &context); -#else - extern CGContextRef qt_mac_graphicsContextFor(QWidget *); - CGContextRef context = qt_mac_graphicsContextFor(widget); -#endif + CGContextRetain(context); CGContextSaveGState(context); @@ -310,16 +318,12 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi CGImageRelease(subImage); CGImageRelease(image); -#ifndef QT_MAC_USE_COCOA QDEndCGContext(port, &context); -#else - CGContextFlush(context); -#endif // Restore context. CGContextRestoreGState(context); CGContextRelease(context); - +#endif // QT_MAC_USE_COCOA #endif // Q_WS_MAC @@ -461,4 +465,12 @@ void QRasterWindowSurface::prepareBuffer(QImage::Format format, QWidget *widget) delete oldImage; } +#ifdef QT_MAC_USE_COCOA +CGContextRef QRasterWindowSurface::imageContext() +{ + Q_D(QRasterWindowSurface); + return d->image->cg; +} +#endif // QT_MAC_USE_COCOA + QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_raster_p.h b/src/gui/painting/qwindowsurface_raster_p.h index a7c3b9f..4674fa0 100644 --- a/src/gui/painting/qwindowsurface_raster_p.h +++ b/src/gui/painting/qwindowsurface_raster_p.h @@ -56,6 +56,10 @@ #include #include "private/qwindowsurface_p.h" +#ifdef QT_MAC_USE_COCOA +# include +#endif // QT_MAC_USE_COCOA + QT_BEGIN_NAMESPACE #ifdef Q_WS_WIN @@ -106,6 +110,13 @@ public: void setGeometry(const QRect &rect); bool scroll(const QRegion &area, int dx, int dy); +#ifdef QT_MAC_USE_COCOA + CGContextRef imageContext(); + + bool needsFlush; + QRegion regionToFlush; +#endif // QT_MAC_USE_COCOA + private: void prepareBuffer(QImage::Format format, QWidget *widget); Q_DECLARE_PRIVATE(QRasterWindowSurface) -- cgit v0.12 From e1a1ff63d3078b01045a526a54d923ac0bae1032 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Wed, 26 Jan 2011 12:43:02 +0100 Subject: Change variable name. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qwidget.cpp | 2 +- src/gui/kernel/qwidget_p.h | 2 +- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 056aea6..88348cd 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -324,7 +324,7 @@ QWidgetPrivate::QWidgetPrivate(int version) hasOwnContext = false; isInUnifiedToolbar = false; unifiedSurface = 0; - askedForFlush = false; + flushRequested = false; #endif // QT_MAC_USE_COCOA #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index f5a965c..4e91358 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -860,7 +860,7 @@ public: bool isInUnifiedToolbar; QWindowSurface *unifiedSurface; QPoint toolbar_offset; - bool askedForFlush; + bool flushRequested; #endif // QT_MAC_USE_COCOA void determineWindowClass(); void transferChildren(); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 38dc632..4c027f8 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -140,7 +140,7 @@ void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QP if (!d->image || rgn.rectCount() == 0) return; - widget->d_func()->askedForFlush = true; + widget->d_func()->flushRequested = true; qt_mac_setneedsdisplay(widget); } -- cgit v0.12 From c710993bc1653e85f598ea099de2eb23904f0bcf Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Wed, 26 Jan 2011 16:17:13 +0100 Subject: Remove useless displayIfNeeded: definition. This is no longer needed for the raster engine. We don't need to sync the backing store this way. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qcocoasharedwindowmethods_mac_p.h | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h index 60cdfb9..0150e75 100644 --- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h +++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h @@ -346,22 +346,6 @@ QT_END_NAMESPACE return dropResult; } -- (void)displayIfNeeded -{ - - QWidget *qwidget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self]; - if (qwidget == 0) { - [super displayIfNeeded]; - return; - } - - if (QApplicationPrivate::graphicsSystem() != 0) { - if (QWidgetBackingStore *bs = qt_widget_private(qwidget)->maybeBackingStore()) - bs->sync(qwidget, qwidget->rect()); - } - [super displayIfNeeded]; -} - // This is a hack and it should be removed once we find the real cause for // the painting problems. // We have a static variable that signals if we have been called before or not. -- cgit v0.12 From e10a438a90b369c894b5f39cc1ab61ae68ff200c Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Wed, 26 Jan 2011 16:29:28 +0100 Subject: Force the display: in the unified toolbar. Instead of calling setNeedsDisplay:, we call have to call display: to avoid flickering. Reviewed-by: Richard Moe Gustavsen --- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 4c027f8..5f52679 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -141,7 +141,9 @@ void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QP return; widget->d_func()->flushRequested = true; - qt_mac_setneedsdisplay(widget); + + // We call display: directly to avoid flickering in the toolbar. + qt_mac_display(widget); } void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widget) -- cgit v0.12 From b0d682080023dc07e912bf273d007306e758dd01 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Thu, 27 Jan 2011 10:24:02 +0100 Subject: Move all display: utility functions. All utility functions to call display: are now placed in qt_cocoa_helpers_mac.mm Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qt_cocoa_helpers_mac.mm | 19 ++++++++++++++++++- src/gui/kernel/qt_cocoa_helpers_mac_p.h | 3 ++- src/gui/kernel/qwidget_mac.mm | 23 ++--------------------- src/gui/painting/qwindowsurface_raster.cpp | 2 +- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 74d44a3..71f59e3 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1590,13 +1590,30 @@ void qt_mac_display(QWidget *widget) return; } -void qt_mac_setneedsdisplay(QWidget *widget) +void qt_mac_setNeedsDisplay(QWidget *widget) { NSView *theNSView = qt_mac_nativeview_for(widget); [theNSView setNeedsDisplay:YES]; return; } +void qt_mac_setNeedsDisplayInRect(QWidget *widget, QRegion region) +{ + NSView *theNSView = qt_mac_nativeview_for(widget); + if (region.isEmpty()) { + [theNSView setNeedsDisplay:YES]; + return; + } + + QVector rects = region.rects(); + for (int i = 0; i < rects.count(); ++i) { + const QRect &rect = rects.at(i); + NSRect nsrect = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height()); + [theNSView setNeedsDisplayInRect:nsrect]; + } + +} + #endif // QT_MAC_USE_COCOA QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index b177210..a80c2e1 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -229,7 +229,8 @@ void qt_mac_post_retranslateAppMenu(); #ifdef QT_MAC_USE_COCOA void qt_mac_display(QWidget *widget); -void qt_mac_setneedsdisplay(QWidget *widget); +void qt_mac_setNeedsDisplay(QWidget *widget); +void qt_mac_setNeedsDisplayInRect(QWidget *widget, QRegion region); #endif // QT_MAC_USE_COCOA diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 3c5c458..83483f5 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -580,25 +580,6 @@ inline static void qt_mac_set_window_group_to_popup(OSWindowRef window) } #endif -#ifdef QT_MAC_USE_COCOA -void qt_mac_set_needs_display(QWidget *widget, QRegion region) -{ - NSView *theNSView = qt_mac_nativeview_for(widget); - if (region.isEmpty()) { - [theNSView setNeedsDisplay:YES]; - return; - } - - QVector rects = region.rects(); - for (int i = 0; iimageMask == 0)]; [window invalidateShadow]; } - qt_mac_set_needs_display(q, QRegion()); + qt_mac_setNeedsDisplayInRect(q, QRegion()); } #endif diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 92e9425..8e09c58 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -268,7 +268,7 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi this->regionToFlush += rgn; // The actual flushing will be processed in [view drawRect:rect] - qt_mac_setneedsdisplay(widget); + qt_mac_setNeedsDisplay(widget); // Unified toolbar hack. // We issue a flush call for each QToolBar so they get repainted right after -- cgit v0.12 From c8684662c20deacb791afb4ae3169af997793c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 27 Jan 2011 12:36:20 +0100 Subject: Only const_cast can remove const :) --- src/plugins/platforms/testlite/qtestliteintegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 9b641d1..dc8a6d7 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -140,7 +140,7 @@ bool QTestLiteIntegration::hasOpenGL() const static bool wasEglInitialized = false; if (!eglHasbeenInitialized) { eglHasbeenInitialized = true; - QTestLiteScreen *screen = static_cast(mScreens.at(0)); + const QTestLiteScreen *screen = static_cast(mScreens.at(0)); EGLint major, minor; eglBindAPI(EGL_OPENGL_ES_API); EGLDisplay disp = eglGetDisplay(screen->display()); -- cgit v0.12 From a98c8058e76e8e0418e16a0cbc4b700e81cdcd3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 27 Jan 2011 12:36:51 +0100 Subject: Remove unneeded include --- src/plugins/platforms/wayland/qwaylandglcontext.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandglcontext.cpp b/src/plugins/platforms/wayland/qwaylandglcontext.cpp index 4bf68c4..23631d9 100644 --- a/src/plugins/platforms/wayland/qwaylandglcontext.cpp +++ b/src/plugins/platforms/wayland/qwaylandglcontext.cpp @@ -51,11 +51,7 @@ #include #include -extern "C" { -#include -} - -Q_GLOBAL_STATIC(QMutex,qt_defaultSharedContextMutex); +Q_GLOBAL_STATIC(QMutex,qt_defaultSharedContextMutex) EGLint QWaylandGLContext::contextAttibutes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, -- cgit v0.12 From dbb0f9bfbe98dfd789948ed65fe906b3c2b757f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 27 Jan 2011 15:21:28 +0100 Subject: Precision specifiers are not allowed for shader variables Reviewed-by: sroedal --- .../gl2paintengineex/qglengineshadersource_p.h | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h index 1aacc96..fc8b9ef 100644 --- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h @@ -148,7 +148,7 @@ static const char* const qglslAffinePositionWithPatternBrushVertexShader = qglslPositionWithPatternBrushVertexShader; static const char* const qglslPatternBrushSrcFragmentShader = "\n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ uniform lowp vec4 patternColor; \n\ varying highp vec2 patternTexCoords;\n\ lowp vec4 srcPixel() \n\ @@ -183,7 +183,7 @@ static const char* const qglslAffinePositionWithLinearGradientBrushVertexShader = qglslPositionWithLinearGradientBrushVertexShader; static const char* const qglslLinearGradientBrushSrcFragmentShader = "\n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ varying mediump float index; \n\ lowp vec4 srcPixel() \n\ { \n\ @@ -218,7 +218,7 @@ static const char* const qglslAffinePositionWithConicalGradientBrushVertexShader static const char* const qglslConicalGradientBrushSrcFragmentShader = "\n\ #define INVERSE_2PI 0.1591549430918953358 \n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ uniform mediump float angle; \n\ varying highp vec2 A; \n\ lowp vec4 srcPixel() \n\ @@ -260,7 +260,7 @@ static const char* const qglslAffinePositionWithRadialGradientBrushVertexShader = qglslPositionWithRadialGradientBrushVertexShader; static const char* const qglslRadialGradientBrushSrcFragmentShader = "\n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ uniform highp float fmp2_m_radius2; \n\ uniform highp float inverse_2_fmp2_m_radius2; \n\ varying highp float b; \n\ @@ -304,14 +304,14 @@ static const char* const qglslAffinePositionWithTextureBrushVertexShader // TODO: Special case POT textures which don't need this emulation static const char* const qglslTextureBrushSrcFragmentShader = "\n\ varying highp vec2 brushTextureCoords; \n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ lowp vec4 srcPixel() { \n\ return texture2D(brushTexture, fract(brushTextureCoords)); \n\ }\n"; #else static const char* const qglslTextureBrushSrcFragmentShader = "\n\ varying highp vec2 brushTextureCoords; \n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ return texture2D(brushTexture, brushTextureCoords); \n\ @@ -321,7 +321,7 @@ static const char* const qglslTextureBrushSrcFragmentShader = "\n\ static const char* const qglslTextureBrushSrcWithPatternFragmentShader = "\n\ varying highp vec2 brushTextureCoords; \n\ uniform lowp vec4 patternColor; \n\ - uniform lowp sampler2D brushTexture; \n\ + uniform sampler2D brushTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ return patternColor * (1.0 - texture2D(brushTexture, brushTextureCoords).r); \n\ @@ -337,7 +337,7 @@ static const char* const qglslSolidBrushSrcFragmentShader = "\n\ static const char* const qglslImageSrcFragmentShader = "\n\ varying highp vec2 textureCoords; \n\ - uniform lowp sampler2D imageTexture; \n\ + uniform sampler2D imageTexture; \n\ lowp vec4 srcPixel() \n\ { \n" "return texture2D(imageTexture, textureCoords); \n" @@ -345,7 +345,7 @@ static const char* const qglslImageSrcFragmentShader = "\n\ static const char* const qglslCustomSrcFragmentShader = "\n\ varying highp vec2 textureCoords; \n\ - uniform lowp sampler2D imageTexture; \n\ + uniform sampler2D imageTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ return customShader(imageTexture, textureCoords); \n\ @@ -354,7 +354,7 @@ static const char* const qglslCustomSrcFragmentShader = "\n\ static const char* const qglslImageSrcWithPatternFragmentShader = "\n\ varying highp vec2 textureCoords; \n\ uniform lowp vec4 patternColor; \n\ - uniform lowp sampler2D imageTexture; \n\ + uniform sampler2D imageTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ return patternColor * (1.0 - texture2D(imageTexture, textureCoords).r); \n\ @@ -362,7 +362,7 @@ static const char* const qglslImageSrcWithPatternFragmentShader = "\n\ static const char* const qglslNonPremultipliedImageSrcFragmentShader = "\n\ varying highp vec2 textureCoords; \n\ - uniform lowp sampler2D imageTexture; \n\ + uniform sampler2D imageTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ lowp vec4 sample = texture2D(imageTexture, textureCoords); \n\ @@ -454,7 +454,7 @@ static const char* const qglslMainFragmentShader = "\n\ static const char* const qglslMaskFragmentShader = "\n\ varying highp vec2 textureCoords;\n\ - uniform lowp sampler2D maskTexture;\n\ + uniform sampler2D maskTexture;\n\ lowp vec4 applyMask(lowp vec4 src) \n\ {\n\ lowp vec4 mask = texture2D(maskTexture, textureCoords); \n\ @@ -478,7 +478,7 @@ static const char* const qglslMaskFragmentShader = "\n\ static const char* const qglslRgbMaskFragmentShaderPass1 = "\n\ varying highp vec2 textureCoords;\n\ - uniform lowp sampler2D maskTexture;\n\ + uniform sampler2D maskTexture;\n\ lowp vec4 applyMask(lowp vec4 src) \n\ { \n\ lowp vec4 mask = texture2D(maskTexture, textureCoords); \n\ @@ -487,7 +487,7 @@ static const char* const qglslRgbMaskFragmentShaderPass1 = "\n\ static const char* const qglslRgbMaskFragmentShaderPass2 = "\n\ varying highp vec2 textureCoords;\n\ - uniform lowp sampler2D maskTexture;\n\ + uniform sampler2D maskTexture;\n\ lowp vec4 applyMask(lowp vec4 src) \n\ { \n\ lowp vec4 mask = texture2D(maskTexture, textureCoords); \n\ -- cgit v0.12 From 2ab07dd167e05fe60525fde9b7b180738e431b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 27 Jan 2011 15:25:00 +0100 Subject: Lighthouse: Wayland plugin. Only create depth and stencil buffers once --- src/plugins/platforms/wayland/qwaylandcursor.cpp | 2 +- src/plugins/platforms/wayland/qwaylanddrmsurface.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandcursor.cpp b/src/plugins/platforms/wayland/qwaylandcursor.cpp index 29c6abd..f51281d 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.cpp +++ b/src/plugins/platforms/wayland/qwaylandcursor.cpp @@ -48,7 +48,7 @@ #include -#define DATADIR "/home/jlind/install/share" +#define DATADIR "/usr/share" static const struct pointer_image { const char *filename; diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp index 76c8c33..603c018 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp @@ -77,7 +77,6 @@ QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, mImage = eglCreateDRMImageMESA(mDisplay->eglDisplay(), imageAttribs); - glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); glGenTextures(1, &mTexture); glBindTexture(GL_TEXTURE_2D, mTexture); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); @@ -112,7 +111,6 @@ QWaylandDrmBuffer::~QWaylandDrmBuffer(void) void QWaylandDrmBuffer::bindToCurrentFbo() { Q_ASSERT(QPlatformGLContext::currentContext()); - glBindTexture(GL_TEXTURE_2D, mTexture); glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTexture, 0); QT_CHECK_GLERROR(); @@ -135,6 +133,13 @@ QWaylandPaintDevice::QWaylandPaintDevice(QWaylandDisplay *display, QWindowSurfac glGenFramebuffers(1, &m_thisFBO); glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO); + glGenRenderbuffers(1, &mDepthStencil); + glBindRenderbuffer(GL_RENDERBUFFER_EXT, mDepthStencil); + glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, + GL_RENDERBUFFER_EXT, mDepthStencil); + glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, + GL_RENDERBUFFER_EXT, mDepthStencil); + if (windowSurface->size().isValid()) resize(windowSurface->size()); } @@ -184,15 +189,9 @@ void QWaylandPaintDevice::resize(const QSize &size) } } - glDeleteRenderbuffers(1,&mDepthStencil); - glGenRenderbuffers(1,&mDepthStencil); glBindRenderbuffer(GL_RENDERBUFFER_EXT,mDepthStencil); glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, size.width(), size.height()); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, mDepthStencil); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, mDepthStencil); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); @@ -247,6 +246,7 @@ void QWaylandDrmWindowSurface::flush(QWidget *widget, const QRegion ®ion, con Q_UNUSED(offset); QWaylandWindow *ww = (QWaylandWindow *) widget->platformWindow(); + glFlush(); ww->attach(mPaintDevice->currentDrmBufferAndSwap()); QVector rects = region.rects(); -- cgit v0.12 From 0b1b6859e7127cd68c262e240e305df03a9e0ef5 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Fri, 28 Jan 2011 15:19:33 +0100 Subject: Disable subtractOpaqueSiblings when in the unified toolbar. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the items in the unified toolbar have non-relevant positions and can't be overshadowed by another widget, we always paint them. Reviewed-by: Samuel Rødal --- src/gui/kernel/qwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 88348cd..04bc2fb 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -2075,7 +2075,7 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt { Q_Q(const QWidget); static int disableSubtractOpaqueSiblings = qgetenv("QT_NO_SUBTRACTOPAQUESIBLINGS").toInt(); - if (disableSubtractOpaqueSiblings || q->isWindow()) + if (disableSubtractOpaqueSiblings || q->isWindow() || q->d_func()->isInUnifiedToolbar) return; QRect clipBoundingRect; -- cgit v0.12 From 5aa2ea5ef204caee97de1b9ea6533a5382075147 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Mon, 31 Jan 2011 13:42:38 +0100 Subject: Remove useless variables. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qwidget_p.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 4e91358..921cf03 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -854,9 +854,6 @@ public: bool hasOwnContext; // Unified toolbar variables - CGContextRef cgContext; - QRegion ut_rg; - QPoint ut_pt; bool isInUnifiedToolbar; QWindowSurface *unifiedSurface; QPoint toolbar_offset; -- cgit v0.12 From b3a8877f54bbd60a4f54439f5d551e1dfec7a9a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 27 Jan 2011 13:52:40 -0500 Subject: wayland: Handle keyboard focus correctly Activate the window widget and update modifiers. --- src/plugins/platforms/wayland/qwaylandinputdevice.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp index 03edc07..102a213 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp +++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp @@ -282,19 +282,28 @@ void QWaylandInputDevice::inputHandleKeyboardFocus(void *data, { Q_UNUSED(input_device); Q_UNUSED(time); - Q_UNUSED(keys); QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data; QWaylandWindow *window; - - if (inputDevice->mKeyboardFocus) { - window = inputDevice->mKeyboardFocus; - inputDevice->mKeyboardFocus = NULL; + uint32_t *k, *end; + uint32_t code; + + end = (uint32_t *) ((char *) keys->data + keys->size); + inputDevice->mModifiers = 0; + for (k = (uint32_t *) keys->data; k < end; k++) { + code = *k + inputDevice->mXkb->min_key_code; + inputDevice->mModifiers |= + translateModifiers(inputDevice->mXkb->map->modmap[code]); } if (surface) { window = (QWaylandWindow *) wl_surface_get_user_data(surface); inputDevice->mKeyboardFocus = window; + QWindowSystemInterface::handleWindowActivated(window->widget()); + } else { + inputDevice->mKeyboardFocus = NULL; + QWindowSystemInterface::handleWindowActivated(0); } + } const struct wl_input_device_listener QWaylandInputDevice::inputDeviceListener = { -- cgit v0.12 From 7386d37ae301092a3eecc9a3bf94dfd42509f666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 28 Jan 2011 08:38:10 +0100 Subject: Lighthouse: Wayland, if we don't have cursors installed or the configuration is faulty, then don't change cursors --- src/plugins/platforms/wayland/qwaylandcursor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/platforms/wayland/qwaylandcursor.cpp b/src/plugins/platforms/wayland/qwaylandcursor.cpp index f51281d..0ad0702 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.cpp +++ b/src/plugins/platforms/wayland/qwaylandcursor.cpp @@ -164,6 +164,9 @@ void QWaylandCursor::changeCursor(QCursor *cursor, QWidget *widget) QImageReader reader(p->filename); + if (!reader.canRead()) + return; + if (mBuffer == NULL || mBuffer->size() != reader.size()) { if (mBuffer) delete mBuffer; -- cgit v0.12 From 6d3b5e1cdb3858ab8fe650493bf36a2b5260da1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Sat, 5 Feb 2011 09:20:19 -0500 Subject: wayland: Use wayland-egl instead of drm specific code --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 116 +++------------------ src/plugins/platforms/wayland/qwaylanddisplay.h | 11 +- .../platforms/wayland/qwaylanddrmsurface.cpp | 40 +++---- src/plugins/platforms/wayland/qwaylanddrmsurface.h | 1 + src/plugins/platforms/wayland/wayland.pro | 2 +- 5 files changed, 38 insertions(+), 132 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 70713ec..2e30c2f 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -50,9 +50,7 @@ #include #include -extern "C" { -#include -} +#include struct wl_surface *QWaylandDisplay::createSurface() { @@ -67,14 +65,6 @@ struct wl_buffer *QWaylandDisplay::createShmBuffer(int fd, return wl_shm_create_buffer(mShm, fd, width, height, stride, visual); } -struct wl_buffer *QWaylandDisplay::createDrmBuffer(int name, - int width, int height, - uint32_t stride, - struct wl_visual *visual) -{ - return wl_drm_create_buffer(mDrm, name, width, height, stride, visual); -} - struct wl_visual *QWaylandDisplay::rgbVisual() { return wl_display_get_rgb_visual(mDisplay); @@ -90,62 +80,11 @@ struct wl_visual *QWaylandDisplay::argbPremultipliedVisual() return wl_display_get_premultiplied_argb_visual(mDisplay); } -void QWaylandDisplay::drmHandleDevice(void *data, - struct wl_drm *drm, const char *device) +struct wl_egl_display *QWaylandDisplay::nativeDisplay() { - Q_UNUSED(drm); - QWaylandDisplay *qwd = (QWaylandDisplay *) data; - drm_magic_t magic; - - qwd->mDeviceName = strdup(device); - - qwd->mFd = open(qwd->mDeviceName, O_RDWR); - if (qwd->mFd < 0) { - qWarning("drm open failed: %m"); - return; - } - - if (drmGetMagic(qwd->mFd, &magic)) { - qWarning("DRI2: failed to get drm magic"); - return; - } - - wl_drm_authenticate(qwd->mDrm, magic); + return mNativeEglDisplay; } -void QWaylandDisplay::drmHandleAuthenticated(void *data, struct wl_drm *drm) -{ - Q_UNUSED(drm); - QWaylandDisplay *qwd = (QWaylandDisplay *) data; - EGLint major, minor; - const char *extensions; - - qwd->mEglDisplay = eglGetDRMDisplayMESA(qwd->mFd); - if (qwd->mEglDisplay == NULL) { - qWarning("failed to create display"); - return; - } - - if (!eglInitialize(qwd->mEglDisplay, &major, &minor)) { - qWarning("failed to initialize display"); - qwd->mEglDisplay = NULL; - return; - } - - extensions = eglQueryString(qwd->mEglDisplay, EGL_EXTENSIONS); - if (!strstr(extensions, "EGL_KHR_surfaceless_gles2")) { - qWarning("EGL_KHR_surfaceless_opengles2 not available"); - eglTerminate(qwd->mEglDisplay); - qwd->mEglDisplay = NULL; - return; - } -} - -const struct wl_drm_listener QWaylandDisplay::drmListener = { - QWaylandDisplay::drmHandleDevice, - QWaylandDisplay::drmHandleAuthenticated -}; - void QWaylandDisplay::shellHandleConfigure(void *data, struct wl_shell *shell, uint32_t time, uint32_t edges, struct wl_surface *surface, @@ -189,9 +128,6 @@ void QWaylandDisplay::displayHandleGlobal(struct wl_display *display, if (strcmp(interface, "compositor") == 0) { qwd->mCompositor = wl_compositor_create(display, id); - } else if (strcmp(interface, "drm") == 0) { - qwd->mDrm = wl_drm_create(display, id); - wl_drm_add_listener(qwd->mDrm, &drmListener, qwd); } else if (strcmp(interface, "shm") == 0) { qwd->mShm = wl_shm_create(display, id); } else if (strcmp(interface, "shell") == 0) { @@ -207,26 +143,6 @@ void QWaylandDisplay::displayHandleGlobal(struct wl_display *display, } } -static void roundtripCallback(void *data) -{ - bool *done = (bool *) data; - - *done = true; -} - -static void forceRoundtrip(struct wl_display *display) -{ - bool done; - - wl_display_sync_callback(display, roundtripCallback, &done); - wl_display_iterate(display, WL_DISPLAY_WRITABLE); - done = false; - while (!done) - wl_display_iterate(display, WL_DISPLAY_READABLE); -} - -static const char *socket_name = NULL; - void QWaylandDisplay::eventDispatcher(void) { wl_display_iterate(mDisplay, WL_DISPLAY_READABLE); @@ -257,7 +173,9 @@ void QWaylandDisplay::flushRequests(void) QWaylandDisplay::QWaylandDisplay(void) : mWriteNotifier(0) { - mDisplay = wl_display_connect(socket_name); + EGLint major, minor; + + mDisplay = wl_display_connect(NULL); if (mDisplay == NULL) { fprintf(stderr, "failed to create display: %m\n"); return; @@ -266,18 +184,17 @@ QWaylandDisplay::QWaylandDisplay(void) wl_display_add_global_listener(mDisplay, QWaylandDisplay::displayHandleGlobal, this); - /* Process connection events. */ - wl_display_iterate(mDisplay, WL_DISPLAY_READABLE); - if (!mShm || !mDeviceName) - forceRoundtrip(mDisplay); + mNativeEglDisplay = wl_egl_native_display_create(mDisplay); - /* Force a roundtrip to finish the drm authentication so we - * initialize EGL before proceeding */ - forceRoundtrip(mDisplay); - if (mEglDisplay == NULL) - qDebug("EGL not available"); - else - qDebug("EGL initialized"); + mEglDisplay = eglGetDisplay(mNativeEglDisplay); + if (mEglDisplay == NULL) { + qWarning("EGL not available"); + } else { + if (!eglInitialize(mEglDisplay, &major, &minor)) { + qWarning("failed to initialize EGL display"); + return; + } + } int fd = wl_display_get_fd(mDisplay, sourceUpdate, this); mReadNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); @@ -293,6 +210,7 @@ QWaylandDisplay::QWaylandDisplay(void) QWaylandDisplay::~QWaylandDisplay(void) { close(mFd); + eglTerminate(mEglDisplay); wl_display_destroy(mDisplay); } diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h index f179713..375a9c1 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay.h @@ -71,12 +71,10 @@ public: struct wl_buffer *createShmBuffer(int fd, int width, int height, uint32_t stride, struct wl_visual *visual); - struct wl_buffer *createDrmBuffer(int name, int width, int height, - uint32_t stride, - struct wl_visual *visual); struct wl_visual *rgbVisual(); struct wl_visual *argbVisual(); struct wl_visual *argbPremultipliedVisual(); + struct wl_egl_display *nativeDisplay(); EGLDisplay eglDisplay() { return mEglDisplay; } void setCursor(QWaylandBuffer *buffer, int32_t x, int32_t y); @@ -91,7 +89,6 @@ public slots: private: struct wl_display *mDisplay; struct wl_compositor *mCompositor; - struct wl_drm *mDrm; struct wl_shm *mShm; struct wl_shell *mShell; char *mDeviceName; @@ -101,16 +98,13 @@ private: QSocketNotifier *mReadNotifier; QSocketNotifier *mWriteNotifier; EGLDisplay mEglDisplay; + struct wl_egl_display *mNativeEglDisplay; static void displayHandleGlobal(struct wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data); - static void drmHandleDevice(void *data, - struct wl_drm *drm, const char *device); - static void drmHandleAuthenticated(void *data, struct wl_drm *drm); - static void outputHandleGeometry(void *data, struct wl_output *output, int32_t x, int32_t y, @@ -123,7 +117,6 @@ private: static int sourceUpdate(uint32_t mask, void *data); - static const struct wl_drm_listener drmListener; static const struct wl_output_listener outputListener; static const struct wl_shell_listener shellListener; }; diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp index 603c018..a9a8046 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp @@ -50,10 +50,7 @@ #include #include -#include -#include -#include -#include +#include QT_BEGIN_NAMESPACE @@ -66,23 +63,6 @@ QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, , mSize(size) { struct wl_visual *visual; - EGLint name, stride; - EGLint imageAttribs[] = { - EGL_WIDTH, size.width(), - EGL_HEIGHT, size.height(), - EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, - EGL_DRM_BUFFER_USE_MESA, EGL_DRM_BUFFER_USE_SCANOUT_MESA, - EGL_NONE - }; - - mImage = eglCreateDRMImageMESA(mDisplay->eglDisplay(), imageAttribs); - - glGenTextures(1, &mTexture); - glBindTexture(GL_TEXTURE_2D, mTexture); - glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); - - eglExportDRMImageMESA(mDisplay->eglDisplay(), - mImage, &name, NULL, &stride); switch (format) { case QImage::Format_ARGB32: @@ -97,14 +77,28 @@ QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, break; } - mBuffer = display->createDrmBuffer(name, size.width(), size.height(), - stride, visual); + mPixmap = wl_egl_native_pixmap_create(display->nativeDisplay(), + size.width(), size.height(), + visual, 0); + + mImage = eglCreateImageKHR(display->eglDisplay(), + NULL, EGL_NATIVE_PIXMAP_KHR, + (EGLClientBuffer) mPixmap, NULL); + + glGenTextures(1, &mTexture); + qDebug() << "generating mTexture" << mTexture; + glBindTexture(GL_TEXTURE_2D, mTexture); + glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); + + mBuffer = wl_egl_native_pixmap_create_buffer(display->nativeDisplay(), + mPixmap); } QWaylandDrmBuffer::~QWaylandDrmBuffer(void) { glDeleteTextures(1, &mTexture); eglDestroyImageKHR(mDisplay->eglDisplay(), mImage); + wl_egl_native_pixmap_destroy(mPixmap); wl_buffer_destroy(mBuffer); } diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.h b/src/plugins/platforms/wayland/qwaylanddrmsurface.h index eafea13..f49263b 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.h +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.h @@ -76,6 +76,7 @@ public: QSize size() const { return mSize; } private: + struct wl_egl_pixmap *mPixmap; EGLImageKHR mImage; QWaylandDisplay *mDisplay; QSize mSize; diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 8ba1408..803a8e9 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -27,7 +27,7 @@ HEADERS = qwaylandintegration.h \ contains(QT_CONFIG, opengl) { QT += opengl } -LIBS += -lwayland-client -lxkbcommon -lEGL +LIBS += -lwayland-client -lwayland-egl -lxkbcommon -lEGL unix { CONFIG += link_pkgconfig PKGCONFIG += libdrm -- cgit v0.12 From a39b6c89efe78ab74767f70d60a2a9238a31c34a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 1 Feb 2011 16:01:57 +0100 Subject: Lighthouse: Fix if context isSharing setup for QGLContext --- src/opengl/qgl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 0ec3a15..9f31c62 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -3310,8 +3310,10 @@ bool QGLContext::create(const QGLContext* shareContext) QWidgetPrivate *wd = qt_widget_private(static_cast(d->paintDevice)); wd->usesDoubleBufferedGLContext = d->glFormat.doubleBuffer(); } +#ifndef Q_WS_QPA //We do this in choose context->setupSharing() if (d->sharing) // ok, we managed to share QGLContextGroup::addShare(this, shareContext); +#endif return d->valid; } -- cgit v0.12 From d7043ed404982efc67fd252c04a055e4ed783d6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 1 Feb 2011 16:02:32 +0100 Subject: Lighthouse: QGLWidgetPropogate the resizeEvent down to the Widget before doing the QGLWidget event handling --- src/opengl/qgl_qpa.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 0f4b305..b865086 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -331,13 +331,14 @@ bool QGLWidget::event(QEvent *e) void QGLWidget::resizeEvent(QResizeEvent *e) { Q_D(QGLWidget); + + QWidget::resizeEvent(e); if (!isValid()) return; makeCurrent(); if (!d->glcx->initialized()) glInit(); resizeGL(width(), height()); - return QWidget::resizeEvent(e); } -- cgit v0.12 From 7ea1dd46966ae7cfa07fa18c001704e3c981b669 Mon Sep 17 00:00:00 2001 From: con Date: Mon, 7 Feb 2011 09:59:33 +0100 Subject: Move Mac specific include into Q_WS_MAC scope for QScroller abstraction Reviewed-by: jorgen --- src/gui/util/qscroller_mac.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/util/qscroller_mac.mm b/src/gui/util/qscroller_mac.mm index 3203036..d85a51b 100644 --- a/src/gui/util/qscroller_mac.mm +++ b/src/gui/util/qscroller_mac.mm @@ -39,12 +39,13 @@ ** ****************************************************************************/ -#import #include "qscroller_p.h" #ifdef Q_WS_MAC +#import + QPointF QScrollerPrivate::realDpi(int screen) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -- cgit v0.12 From ed4dddfb3f2a357875fb9e471e7d5db98633f34c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 7 Feb 2011 10:21:47 +0100 Subject: Moving mac specific functionality into correct place in pri file --- src/gui/painting/painting.pri | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 51f2538..65e7af4 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -234,8 +234,10 @@ x11 { } !embedded:!qpa:mac { - HEADERS += painting/qwindowsurface_mac_p.h - SOURCES += painting/qwindowsurface_mac.cpp + HEADERS += painting/qwindowsurface_mac_p.h \ + painting/qunifiedtoolbarsurface_mac_p.h + SOURCES += painting/qwindowsurface_mac.cpp \ + painting/qunifiedtoolbarsurface_mac.cpp } embedded { @@ -260,12 +262,6 @@ symbian { QMAKE_CXXFLAGS.ARMCC *= -O3 } -mac { - HEADERS += painting/qunifiedtoolbarsurface_mac_p.h - SOURCES += painting/qunifiedtoolbarsurface_mac.cpp -} - - NEON_SOURCES += painting/qdrawhelper_neon.cpp NEON_HEADERS += painting/qdrawhelper_neon_p.h NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S -- cgit v0.12 From 8298a9d4190de1d2055da8be446c8ae4b22b6618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 7 Feb 2011 16:29:19 +0100 Subject: Initial (incomplete) XCB platform port. --- src/plugins/platforms/xcb/main.cpp | 72 +++++++++ src/plugins/platforms/xcb/qxcbconnection.cpp | 110 ++++++++++++++ src/plugins/platforms/xcb/qxcbconnection.h | 75 ++++++++++ src/plugins/platforms/xcb/qxcbintegration.cpp | 116 +++++++++++++++ src/plugins/platforms/xcb/qxcbintegration.h | 78 ++++++++++ src/plugins/platforms/xcb/qxcbscreen.cpp | 77 ++++++++++ src/plugins/platforms/xcb/qxcbscreen.h | 72 +++++++++ src/plugins/platforms/xcb/qxcbwindow.cpp | 189 ++++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbwindow.h | 90 +++++++++++ src/plugins/platforms/xcb/qxcbwindowsurface.cpp | 106 +++++++++++++ src/plugins/platforms/xcb/qxcbwindowsurface.h | 66 +++++++++ src/plugins/platforms/xcb/xcb.pro | 26 ++++ 12 files changed, 1077 insertions(+) create mode 100644 src/plugins/platforms/xcb/main.cpp create mode 100644 src/plugins/platforms/xcb/qxcbconnection.cpp create mode 100644 src/plugins/platforms/xcb/qxcbconnection.h create mode 100644 src/plugins/platforms/xcb/qxcbintegration.cpp create mode 100644 src/plugins/platforms/xcb/qxcbintegration.h create mode 100644 src/plugins/platforms/xcb/qxcbscreen.cpp create mode 100644 src/plugins/platforms/xcb/qxcbscreen.h create mode 100644 src/plugins/platforms/xcb/qxcbwindow.cpp create mode 100644 src/plugins/platforms/xcb/qxcbwindow.h create mode 100644 src/plugins/platforms/xcb/qxcbwindowsurface.cpp create mode 100644 src/plugins/platforms/xcb/qxcbwindowsurface.h create mode 100644 src/plugins/platforms/xcb/xcb.pro diff --git a/src/plugins/platforms/xcb/main.cpp b/src/plugins/platforms/xcb/main.cpp new file mode 100644 index 0000000..1966003 --- /dev/null +++ b/src/plugins/platforms/xcb/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qxcbintegration.h" + +QT_BEGIN_NAMESPACE + +class QXcbIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&, const QStringList&); +}; + +QStringList QXcbIntegrationPlugin::keys() const +{ + QStringList list; + list << "xcb"; + return list; +} + +QPlatformIntegration* QXcbIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.toLower() == "xcb") + return new QXcbIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(xcb, QXcbIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp new file mode 100644 index 0000000..d5e44ad --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbconnection.h" +#include "qxcbscreen.h" +#include "qxcbwindow.h" + +#include +#include + +#include + +QXcbConnection::QXcbConnection(const char *displayName) +{ + int primaryScreen; + + m_connection = xcb_connect(displayName, &primaryScreen); + + m_setup = xcb_get_setup(m_connection); + + xcb_screen_iterator_t it = xcb_setup_roots_iterator(m_setup); + + while (it.rem) { + m_screens << new QXcbScreen(this, it.data); + xcb_screen_next(&it); + } + + QSocketNotifier *socket = new QSocketNotifier(xcb_get_file_descriptor(m_connection), QSocketNotifier::Read, this); + connect(socket, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); +} + +QXcbConnection::~QXcbConnection() +{ + qDeleteAll(m_screens); + + xcb_disconnect(m_connection); +} + +QXcbWindow *platformWindowFromId(xcb_window_t id) +{ + QWidget *widget = QWidget::find(id); + if (widget) + return static_cast(widget->platformWindow()); + return 0; +} + +#define HANDLE_PLATFORM_WINDOW_EVENT(event_t, window, handler) \ +{ \ + event_t *e = (event_t *)event; \ + if (QXcbWindow *platformWindow = platformWindowFromId(e->window)) \ + platformWindow->handler(e); \ +} \ +break; + +void QXcbConnection::eventDispatcher() +{ + while (xcb_generic_event_t *event = xcb_poll_for_event(m_connection)) { + switch (event->response_type & ~0x80) { + case XCB_EXPOSE: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_expose_event_t, window, handleExposeEvent); + case XCB_BUTTON_PRESS: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_button_press_event_t, event, handleButtonPressEvent); + case XCB_BUTTON_RELEASE: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_button_release_event_t, event, handleButtonReleaseEvent); + case XCB_MOTION_NOTIFY: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_motion_notify_event_t, event, handleMotionNotifyEvent); + default: + break; + + } + } +} diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h new file mode 100644 index 0000000..509e798 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBCONNECTION_H +#define QXCBCONNECTION_H + +#include + +#include +#include + +class QXcbScreen; + +class QXcbConnection : public QObject +{ + Q_OBJECT +public: + QXcbConnection(const char *displayName = 0); + ~QXcbConnection(); + + QList screens() const { return m_screens; } + int primaryScreen() const { return m_primaryScreen; } + + xcb_connection_t *connection() const { return m_connection; } + +private slots: + void eventDispatcher(); + +private: + xcb_connection_t *m_connection; + const xcb_setup_t *m_setup; + + QList m_screens; + int m_primaryScreen; +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp new file mode 100644 index 0000000..5da86010 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbintegration.h" +#include "qxcbconnection.h" +#include "qxcbscreen.h" +#include "qxcbwindow.h" +#include "qxcbwindowsurface.h" + +#include + +#include + +#include "qgenericunixfontdatabase.h" + +#include + +QXcbIntegration::QXcbIntegration() + : m_connection(new QXcbConnection) +{ + foreach (QXcbScreen *screen, m_connection->screens()) + m_screens << screen; + + m_fontDatabase = new QGenericUnixFontDatabase(); +} + +QXcbIntegration::~QXcbIntegration() +{ + delete m_connection; +} + +QPixmapData *QXcbIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QPlatformWindow *QXcbIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QXcbWindow(widget); +} + +QWindowSurface *QXcbIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QXcbWindowSurface(widget); +} + +QList QXcbIntegration::screens() const +{ + return m_screens; +} + +void QXcbIntegration::moveToScreen(QWidget *window, int screen) +{ + Q_UNUSED(window); + Q_UNUSED(screen); +} + +bool QXcbIntegration::isVirtualDesktop() +{ + return false; +} + +QPlatformFontDatabase *QXcbIntegration::fontDatabase() const +{ + return m_fontDatabase; +} + +QPixmap QXcbIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + Q_UNUSED(window); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(width); + Q_UNUSED(height); + return QPixmap(); +} diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h new file mode 100644 index 0000000..8b599b3 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBINTEGRATION_H +#define QXCBINTEGRATION_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QXcbConnection; + +class QXcbIntegration : public QPlatformIntegration +{ +public: + QXcbIntegration(); + ~QXcbIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const; + void moveToScreen(QWidget *window, int screen); + bool isVirtualDesktop(); + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QPlatformFontDatabase *fontDatabase() const; + +private: + QList m_screens; + QXcbConnection *m_connection; + + QPlatformFontDatabase *m_fontDatabase; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp new file mode 100644 index 0000000..bbd3fd4 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbscreen.h" + +#include + +QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen) + : m_connection(connection) + , m_screen(screen) +{ + printf ("\n"); + printf ("Informations of screen %d:\n", screen->root); + printf (" width.........: %d\n", screen->width_in_pixels); + printf (" height........: %d\n", screen->height_in_pixels); + printf (" depth.........: %d\n", screen->root_depth); + printf (" white pixel...: %x\n", screen->white_pixel); + printf (" black pixel...: %x\n", screen->black_pixel); + printf ("\n"); +} + +QXcbScreen::~QXcbScreen() +{ +} + +QRect QXcbScreen::geometry() const +{ + return QRect(0, 0, m_screen->width_in_pixels, m_screen->height_in_pixels); +} + +int QXcbScreen::depth() const +{ + return m_screen->root_depth; +} + +QImage::Format QXcbScreen::format() const +{ + return QImage::Format_RGB32; +} diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h new file mode 100644 index 0000000..22b182b --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBSCREEN_H +#define QXCBSCREEN_H + +#include + +#include + +class QXcbConnection; + +class QXcbScreen : public QPlatformScreen +{ +public: + QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen); + ~QXcbScreen(); + + QRect geometry() const; + int depth() const; + QImage::Format format() const; + + QXcbConnection *connection() const { return m_connection; } + + xcb_screen_t *screen() const { return m_screen; } + xcb_window_t root() const { return m_screen->root; } + +private: + QXcbConnection *m_connection; + + xcb_screen_t *m_screen; +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp new file mode 100644 index 0000000..71bef2f --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbwindow.h" + +#include "qxcbconnection.h" +#include "qxcbscreen.h" + +#include + +#include + +#include + +QXcbWindow::QXcbWindow(QWidget *tlw) + : QPlatformWindow(tlw) +{ + m_screen = static_cast(QPlatformScreen::platformScreenForWidget(tlw)); + + const quint32 mask = XCB_CW_BACK_PIXMAP | XCB_CW_EVENT_MASK; + const quint32 values[] = { + // XCB_CW_BACK_PIXMAP + XCB_NONE, + // XCB_CW_EVENT_MASK + XCB_EVENT_MASK_EXPOSURE + | XCB_EVENT_MASK_BUTTON_PRESS + | XCB_EVENT_MASK_BUTTON_RELEASE + | XCB_EVENT_MASK_BUTTON_MOTION + }; + + m_window = xcb_generate_id(connection()); + xcb_create_window(connection(), + XCB_COPY_FROM_PARENT, // depth -- same as root + m_window, // window id + m_screen->root(), // parent window id + tlw->x(), + tlw->y(), + tlw->width(), + tlw->height(), + 0, // border width + XCB_WINDOW_CLASS_INPUT_OUTPUT, // window class + m_screen->screen()->root_visual, // visual + mask, // value mask + values); // value list + + printf("m_window: %d\n", m_window); +} + +QXcbWindow::~QXcbWindow() +{ + xcb_destroy_window(connection(), m_window); +} + +void QXcbWindow::setGeometry(const QRect &rect) +{ + QPlatformWindow::setGeometry(rect); +} + +void QXcbWindow::setVisible(bool visible) +{ + if (visible) + xcb_map_window(connection(), m_window); + else + xcb_unmap_window(connection(), m_window); +} + +Qt::WindowFlags QXcbWindow::setWindowFlags(Qt::WindowFlags flags) +{ + return flags; +} + +Qt::WindowFlags QXcbWindow::windowFlags() const +{ + return 0; +} + +WId QXcbWindow::winId() const +{ + return m_window; +} + +void QXcbWindow::setParent(const QPlatformWindow *) +{ +} + +void QXcbWindow::setWindowTitle(const QString &) +{ +} + +void QXcbWindow::raise() +{ +} + +void QXcbWindow::lower() +{ +} + +void QXcbWindow::requestActivateWindow() +{ +} + +xcb_connection_t *QXcbWindow::connection() const +{ + return m_screen->connection()->connection(); +} + +void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) +{ + if (event->count != 0) + return; + + QWindowSurface *surface = widget()->windowSurface(); + if (surface) + surface->flush(widget(), widget()->geometry(), QPoint()); +} + +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & XCB_BUTTON_MASK_1) + ret |= Qt::LeftButton; + if (s & XCB_BUTTON_MASK_2) + ret |= Qt::MidButton; + if (s & XCB_BUTTON_MASK_3) + ret |= Qt::RightButton; + return ret; +} + +void QXcbWindow::handleButtonPressEvent(xcb_button_press_event_t *event) +{ + handleMouseEvent(event->detail, event->state, event->time, QPoint(event->event_x, event->event_y), QPoint(event->root_x, event->root_y)); +} + +void QXcbWindow::handleButtonReleaseEvent(xcb_button_release_event_t *event) +{ + handleMouseEvent(event->detail, event->state, event->time, QPoint(event->event_x, event->event_y), QPoint(event->root_x, event->root_y)); +} + +void QXcbWindow::handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_timestamp_t time, const QPoint &local, const QPoint &global) +{ + Qt::MouseButtons buttons = translateMouseButtons(state); + Qt::MouseButtons button = translateMouseButtons(detail); + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QWindowSystemInterface::handleMouseEvent(widget(), time, local, global, buttons); +} + +void QXcbWindow::handleMotionNotifyEvent(xcb_motion_notify_event_t *event) +{ +} + diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h new file mode 100644 index 0000000..51c1856 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBWINDOW_H +#define QXCBWINDOW_H + +#include + +#include + +class QXcbScreen; + +class QXcbWindow : public QPlatformWindow +{ +public: + QXcbWindow(QWidget *tlw); + ~QXcbWindow(); + + void setGeometry(const QRect &rect); + + void setVisible(bool visible); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + Qt::WindowFlags windowFlags() const; + WId winId() const; + void setParent(const QPlatformWindow *window); + + void setWindowTitle(const QString &title); + void raise(); + void lower(); + + void requestActivateWindow(); + + QPlatformGLContext *glContext() const { return 0; } + + xcb_window_t window() const { return m_window; } + + void handleExposeEvent(xcb_expose_event_t *event); + void handleButtonPressEvent(xcb_button_press_event_t *event); + void handleButtonReleaseEvent(xcb_button_release_event_t *event); + void handleMotionNotifyEvent(xcb_motion_notify_event_t *event); + + void handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_timestamp_t time, const QPoint &local, const QPoint &global); + +private: + xcb_connection_t *connection() const; + + QXcbScreen *m_screen; + + xcb_window_t m_window; +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp new file mode 100644 index 0000000..27912cc --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbwindowsurface.h" + +#include "qxcbconnection.h" +#include "qxcbscreen.h" +#include "qxcbwindow.h" + +#include + +QXcbWindowSurface::QXcbWindowSurface(QWidget *widget, bool setDefaultSurface) + : QWindowSurface(widget, setDefaultSurface) +{ + setStaticContentsSupport(false); + setPartialUpdateSupport(false); +} + +QXcbWindowSurface::~QXcbWindowSurface() +{ +} + +QPaintDevice *QXcbWindowSurface::paintDevice() +{ + return &m_image; +} + +void QXcbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(region); + Q_UNUSED(offset); + + QXcbScreen *screen = static_cast(QPlatformScreen::platformScreenForWidget(widget)); + QXcbWindow *window = static_cast(widget->window()->platformWindow()); + + xcb_connection_t *xcb_con = screen->connection()->connection(); + + m_gc = xcb_generate_id(xcb_con); + xcb_create_gc(xcb_con, m_gc, window->window(), 0, 0); + + xcb_put_image(xcb_con, + XCB_IMAGE_FORMAT_Z_PIXMAP, + window->window(), + m_gc, + m_image.width(), + m_image.height(), + 0, + 0, + 0, + 24, + m_image.numBytes(), + m_image.bits()); + + xcb_free_gc(xcb_con, m_gc); + xcb_flush(xcb_con); +} + +void QXcbWindowSurface::resize(const QSize &size) +{ + QWindowSurface::resize(size); + m_image = QImage(size, QImage::Format_RGB32); +} + +bool QXcbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return false; +} + diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.h b/src/plugins/platforms/xcb/qxcbwindowsurface.h new file mode 100644 index 0000000..74be9a2 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBWINDOWSURFACE_H +#define QXCBWINDOWSURFACE_H + +#include + +#include + +class QXcbWindowSurface : public QWindowSurface +{ +public: + QXcbWindowSurface(QWidget *widget, bool setDefaultSurface = true); + ~QXcbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size); + bool scroll(const QRegion &area, int dx, int dy); + +private: + QImage m_image; + + xcb_gcontext_t m_gc; +}; + +#endif diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro new file mode 100644 index 0000000..cbbda0d --- /dev/null +++ b/src/plugins/platforms/xcb/xcb.pro @@ -0,0 +1,26 @@ +TARGET = xcb + +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +SOURCES = \ + main.cpp \ + qxcbintegration.cpp \ + qxcbconnection.cpp \ + qxcbscreen.cpp \ + qxcbwindow.cpp \ + qxcbwindowsurface.cpp + +HEADERS = \ + qxcbintegration.h \ + qxcbconnection.h \ + qxcbscreen.h \ + qxcbwindow.h \ + qxcbwindowsurface.h + +LIBS += -lxcb + +include (../fontdatabases/genericunix/genericunix.pri) + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target -- cgit v0.12 From eef89ebc2abe0f095a4ad186a449ff78f1e57dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 7 Feb 2011 16:19:01 +0100 Subject: Make sure its possible to use qpa scope in use applications In user applications it should be possible to write something like qpa { HEADERS += Lighthousespecificheader.h } Reviewed-by: paul --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index 9730e25..bacd2e4 100755 --- a/configure +++ b/configure @@ -6996,6 +6996,7 @@ fi if [ "$PLATFORM_QPA" = "yes" ]; then QMAKE_CONFIG="$QMAKE_CONFIG qpa" QT_CONFIG="$QT_CONFIG qpa" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG qpa" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi -- cgit v0.12 From 5708dba6b3661d69446802c9a83d348520d5cd60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 7 Feb 2011 17:45:49 +0100 Subject: Improve mouse input handling in XCB lighthouse backend. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 53 +++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 71bef2f..7d18d52 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -164,26 +164,65 @@ static Qt::MouseButtons translateMouseButtons(int s) return ret; } +static Qt::MouseButton translateMouseButton(xcb_button_t s) +{ + switch (s) { + case 1: + return Qt::LeftButton; + case 2: + return Qt::MidButton; + case 3: + return Qt::RightButton; + default: + return Qt::NoButton; + } +} + void QXcbWindow::handleButtonPressEvent(xcb_button_press_event_t *event) { - handleMouseEvent(event->detail, event->state, event->time, QPoint(event->event_x, event->event_y), QPoint(event->root_x, event->root_y)); + QPoint local(event->event_x, event->event_y); + QPoint global(event->root_x, event->root_y); + + Qt::KeyboardModifiers modifiers = Qt::NoModifier; + + if (event->detail >= 4 && event->detail <= 7) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((event->detail == 4 || event->detail == 6) ? 1 : -1); + bool hor = (((event->detail == 4 || event->detail == 5) + && (modifiers & Qt::AltModifier)) + || (event->detail == 6 || event->detail == 7)); + + QWindowSystemInterface::handleWheelEvent(widget(), event->time, + local, global, delta, hor ? Qt::Horizontal : Qt::Vertical); + return; + } + + handleMouseEvent(event->detail, event->state, event->time, local, global); } void QXcbWindow::handleButtonReleaseEvent(xcb_button_release_event_t *event) { - handleMouseEvent(event->detail, event->state, event->time, QPoint(event->event_x, event->event_y), QPoint(event->root_x, event->root_y)); + QPoint local(event->event_x, event->event_y); + QPoint global(event->root_x, event->root_y); + + handleMouseEvent(event->detail, event->state, event->time, local, global); +} + +void QXcbWindow::handleMotionNotifyEvent(xcb_motion_notify_event_t *event) +{ + QPoint local(event->event_x, event->event_y); + QPoint global(event->root_x, event->root_y); + + handleMouseEvent(event->detail, event->state, event->time, local, global); } void QXcbWindow::handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_timestamp_t time, const QPoint &local, const QPoint &global) { Qt::MouseButtons buttons = translateMouseButtons(state); - Qt::MouseButtons button = translateMouseButtons(detail); + Qt::MouseButton button = translateMouseButton(detail); + buttons ^= button; // X event uses state *before*, Qt uses state *after* QWindowSystemInterface::handleMouseEvent(widget(), time, local, global, buttons); } -void QXcbWindow::handleMotionNotifyEvent(xcb_motion_notify_event_t *event) -{ -} - -- cgit v0.12 From 3c603d35d46257ceee50bfe315d4cd5abd97b24f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 7 Feb 2011 18:14:32 +0100 Subject: Lighthouse Wayland: wayland-egl entry points where renamed Conflicts: src/plugins/platforms/wayland/qwaylanddisplay.cpp src/plugins/platforms/wayland/qwaylanddrmsurface.cpp --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 2 +- src/plugins/platforms/wayland/qwaylanddrmsurface.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 2e30c2f..0747afd 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -184,7 +184,7 @@ QWaylandDisplay::QWaylandDisplay(void) wl_display_add_global_listener(mDisplay, QWaylandDisplay::displayHandleGlobal, this); - mNativeEglDisplay = wl_egl_native_display_create(mDisplay); + mNativeEglDisplay = wl_egl_display_create(mDisplay); mEglDisplay = eglGetDisplay(mNativeEglDisplay); if (mEglDisplay == NULL) { diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp index a9a8046..aaf4a5c 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp @@ -77,9 +77,9 @@ QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, break; } - mPixmap = wl_egl_native_pixmap_create(display->nativeDisplay(), - size.width(), size.height(), - visual, 0); + mPixmap = wl_egl_pixmap_create(display->nativeDisplay(), + size.width(), size.height(), + visual, 0); mImage = eglCreateImageKHR(display->eglDisplay(), NULL, EGL_NATIVE_PIXMAP_KHR, @@ -90,15 +90,14 @@ QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, glBindTexture(GL_TEXTURE_2D, mTexture); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); - mBuffer = wl_egl_native_pixmap_create_buffer(display->nativeDisplay(), - mPixmap); + mBuffer = wl_egl_pixmap_create_buffer(display->nativeDisplay(), mPixmap); } QWaylandDrmBuffer::~QWaylandDrmBuffer(void) { glDeleteTextures(1, &mTexture); eglDestroyImageKHR(mDisplay->eglDisplay(), mImage); - wl_egl_native_pixmap_destroy(mPixmap); + wl_egl_pixmap_destroy(mPixmap); wl_buffer_destroy(mBuffer); } -- cgit v0.12 From 573901d760414ad7c1fd74bad75b2c21532d0ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 7 Feb 2011 17:50:31 +0100 Subject: Added support for scrolling in XCB window surface. --- src/plugins/platforms/xcb/qxcbwindowsurface.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp index 27912cc..ad91c34 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp @@ -99,8 +99,17 @@ void QXcbWindowSurface::resize(const QSize &size) m_image = QImage(size, QImage::Format_RGB32); } +extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); + bool QXcbWindowSurface::scroll(const QRegion &area, int dx, int dy) { - return false; + if (m_image.isNull()) + return false; + + const QVector rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + qt_scrollRectInImage(m_image, rects.at(i), QPoint(dx, dy)); + + return true; } -- cgit v0.12 From 864e16ad2858ba752070528b1ba03edeafa54579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 7 Feb 2011 18:30:47 +0100 Subject: Added atom resolving, resizing, and window title support to XCB backend. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 198 ++++++++++++++++++++++++++- src/plugins/platforms/xcb/qxcbconnection.h | 173 +++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbwindow.cpp | 25 +++- src/plugins/platforms/xcb/qxcbwindow.h | 1 + 4 files changed, 395 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index d5e44ad..df655a3 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -49,10 +49,11 @@ #include QXcbConnection::QXcbConnection(const char *displayName) + : m_displayName(displayName ? QByteArray(displayName) : qgetenv("DISPLAY")) { int primaryScreen; - m_connection = xcb_connect(displayName, &primaryScreen); + m_connection = xcb_connect(m_displayName.constData(), &primaryScreen); m_setup = xcb_get_setup(m_connection); @@ -65,6 +66,8 @@ QXcbConnection::QXcbConnection(const char *displayName) QSocketNotifier *socket = new QSocketNotifier(xcb_get_file_descriptor(m_connection), QSocketNotifier::Read, this); connect(socket, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + initializeAllAtoms(); } QXcbConnection::~QXcbConnection() @@ -102,9 +105,202 @@ void QXcbConnection::eventDispatcher() HANDLE_PLATFORM_WINDOW_EVENT(xcb_button_release_event_t, event, handleButtonReleaseEvent); case XCB_MOTION_NOTIFY: HANDLE_PLATFORM_WINDOW_EVENT(xcb_motion_notify_event_t, event, handleMotionNotifyEvent); + case XCB_CONFIGURE_NOTIFY: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_configure_notify_event_t, event, handleConfigureNotifyEvent); default: break; } } } + +static const char * xcb_atomnames = { + // window-manager <-> client protocols + "WM_PROTOCOLS\0" + "WM_DELETE_WINDOW\0" + "WM_TAKE_FOCUS\0" + "_NET_WM_PING\0" + "_NET_WM_CONTEXT_HELP\0" + "_NET_WM_SYNC_REQUEST\0" + "_NET_WM_SYNC_REQUEST_COUNTER\0" + + // ICCCM window state + "WM_STATE\0" + "WM_CHANGE_STATE\0" + + // Session management + "WM_CLIENT_LEADER\0" + "WM_WINDOW_ROLE\0" + "SM_CLIENT_ID\0" + + // Clipboard + "CLIPBOARD\0" + "INCR\0" + "TARGETS\0" + "MULTIPLE\0" + "TIMESTAMP\0" + "SAVE_TARGETS\0" + "CLIP_TEMPORARY\0" + "_QT_SELECTION\0" + "_QT_CLIPBOARD_SENTINEL\0" + "_QT_SELECTION_SENTINEL\0" + "CLIPBOARD_MANAGER\0" + + "RESOURCE_MANAGER\0" + + "_XSETROOT_ID\0" + + "_QT_SCROLL_DONE\0" + "_QT_INPUT_ENCODING\0" + + "_MOTIF_WM_HINTS\0" + + "DTWM_IS_RUNNING\0" + "ENLIGHTENMENT_DESKTOP\0" + "_DT_SAVE_MODE\0" + "_SGI_DESKS_MANAGER\0" + + // EWMH (aka NETWM) + "_NET_SUPPORTED\0" + "_NET_VIRTUAL_ROOTS\0" + "_NET_WORKAREA\0" + + "_NET_MOVERESIZE_WINDOW\0" + "_NET_WM_MOVERESIZE\0" + + "_NET_WM_NAME\0" + "_NET_WM_ICON_NAME\0" + "_NET_WM_ICON\0" + + "_NET_WM_PID\0" + + "_NET_WM_WINDOW_OPACITY\0" + + "_NET_WM_STATE\0" + "_NET_WM_STATE_ABOVE\0" + "_NET_WM_STATE_BELOW\0" + "_NET_WM_STATE_FULLSCREEN\0" + "_NET_WM_STATE_MAXIMIZED_HORZ\0" + "_NET_WM_STATE_MAXIMIZED_VERT\0" + "_NET_WM_STATE_MODAL\0" + "_NET_WM_STATE_STAYS_ON_TOP\0" + "_NET_WM_STATE_DEMANDS_ATTENTION\0" + + "_NET_WM_USER_TIME\0" + "_NET_WM_USER_TIME_WINDOW\0" + "_NET_WM_FULL_PLACEMENT\0" + + "_NET_WM_WINDOW_TYPE\0" + "_NET_WM_WINDOW_TYPE_DESKTOP\0" + "_NET_WM_WINDOW_TYPE_DOCK\0" + "_NET_WM_WINDOW_TYPE_TOOLBAR\0" + "_NET_WM_WINDOW_TYPE_MENU\0" + "_NET_WM_WINDOW_TYPE_UTILITY\0" + "_NET_WM_WINDOW_TYPE_SPLASH\0" + "_NET_WM_WINDOW_TYPE_DIALOG\0" + "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0" + "_NET_WM_WINDOW_TYPE_POPUP_MENU\0" + "_NET_WM_WINDOW_TYPE_TOOLTIP\0" + "_NET_WM_WINDOW_TYPE_NOTIFICATION\0" + "_NET_WM_WINDOW_TYPE_COMBO\0" + "_NET_WM_WINDOW_TYPE_DND\0" + "_NET_WM_WINDOW_TYPE_NORMAL\0" + "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0" + + "_KDE_NET_WM_FRAME_STRUT\0" + + "_NET_STARTUP_INFO\0" + "_NET_STARTUP_INFO_BEGIN\0" + + "_NET_SUPPORTING_WM_CHECK\0" + + "_NET_WM_CM_S0\0" + + "_NET_SYSTEM_TRAY_VISUAL\0" + + "_NET_ACTIVE_WINDOW\0" + + // Property formats + "COMPOUND_TEXT\0" + "TEXT\0" + "UTF8_STRING\0" + + // xdnd + "XdndEnter\0" + "XdndPosition\0" + "XdndStatus\0" + "XdndLeave\0" + "XdndDrop\0" + "XdndFinished\0" + "XdndTypeList\0" + "XdndActionList\0" + + "XdndSelection\0" + + "XdndAware\0" + "XdndProxy\0" + + "XdndActionCopy\0" + "XdndActionLink\0" + "XdndActionMove\0" + "XdndActionPrivate\0" + + // Motif DND + "_MOTIF_DRAG_AND_DROP_MESSAGE\0" + "_MOTIF_DRAG_INITIATOR_INFO\0" + "_MOTIF_DRAG_RECEIVER_INFO\0" + "_MOTIF_DRAG_WINDOW\0" + "_MOTIF_DRAG_TARGETS\0" + + "XmTRANSFER_SUCCESS\0" + "XmTRANSFER_FAILURE\0" + + // Xkb + "_XKB_RULES_NAMES\0" + + // XEMBED + "_XEMBED\0" + "_XEMBED_INFO\0" + + // Wacom old. (before version 0.10) + "Wacom Stylus\0" + "Wacom Cursor\0" + "Wacom Eraser\0" + + // Tablet + "STYLUS\0" + "ERASER\0" +}; + +xcb_atom_t QXcbConnection::atom(QXcbAtom::Atom atom) +{ + return m_allAtoms[atom]; +} + +void QXcbConnection::initializeAllAtoms() { + const char *names[QXcbAtom::NAtoms]; + const char *ptr = xcb_atomnames; + + int i = 0; + while (*ptr) { + names[i++] = ptr; + while (*ptr) + ++ptr; + ++ptr; + } + + Q_ASSERT(i == QXcbAtom::NPredefinedAtoms); + + QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); + settings_atom_name += m_displayName; + names[i++] = settings_atom_name; + + xcb_intern_atom_cookie_t cookies[QXcbAtom::NAtoms]; + + Q_ASSERT(i == QXcbAtom::NAtoms); + for (i = 0; i < QXcbAtom::NAtoms; ++i) + cookies[i] = xcb_intern_atom(m_connection, false, strlen(names[i]), names[i]); + + for (i = 0; i < QXcbAtom::NAtoms; ++i) + m_allAtoms[i] = xcb_intern_atom_reply(m_connection, cookies[i], 0)->atom; +} diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 509e798..e0b506f 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -49,6 +49,169 @@ class QXcbScreen; +namespace QXcbAtom { + enum Atom { + // window-manager <-> client protocols + WM_PROTOCOLS, + WM_DELETE_WINDOW, + WM_TAKE_FOCUS, + _NET_WM_PING, + _NET_WM_CONTEXT_HELP, + _NET_WM_SYNC_REQUEST, + _NET_WM_SYNC_REQUEST_COUNTER, + + // ICCCM window state + WM_STATE, + WM_CHANGE_STATE, + + // Session management + WM_CLIENT_LEADER, + WM_WINDOW_ROLE, + SM_CLIENT_ID, + + // Clipboard + CLIPBOARD, + INCR, + TARGETS, + MULTIPLE, + TIMESTAMP, + SAVE_TARGETS, + CLIP_TEMPORARY, + _QT_SELECTION, + _QT_CLIPBOARD_SENTINEL, + _QT_SELECTION_SENTINEL, + CLIPBOARD_MANAGER, + + RESOURCE_MANAGER, + + _XSETROOT_ID, + + _QT_SCROLL_DONE, + _QT_INPUT_ENCODING, + + _MOTIF_WM_HINTS, + + DTWM_IS_RUNNING, + ENLIGHTENMENT_DESKTOP, + _DT_SAVE_MODE, + _SGI_DESKS_MANAGER, + + // EWMH (aka NETWM) + _NET_SUPPORTED, + _NET_VIRTUAL_ROOTS, + _NET_WORKAREA, + + _NET_MOVERESIZE_WINDOW, + _NET_WM_MOVERESIZE, + + _NET_WM_NAME, + _NET_WM_ICON_NAME, + _NET_WM_ICON, + + _NET_WM_PID, + + _NET_WM_WINDOW_OPACITY, + + _NET_WM_STATE, + _NET_WM_STATE_ABOVE, + _NET_WM_STATE_BELOW, + _NET_WM_STATE_FULLSCREEN, + _NET_WM_STATE_MAXIMIZED_HORZ, + _NET_WM_STATE_MAXIMIZED_VERT, + _NET_WM_STATE_MODAL, + _NET_WM_STATE_STAYS_ON_TOP, + _NET_WM_STATE_DEMANDS_ATTENTION, + + _NET_WM_USER_TIME, + _NET_WM_USER_TIME_WINDOW, + _NET_WM_FULL_PLACEMENT, + + _NET_WM_WINDOW_TYPE, + _NET_WM_WINDOW_TYPE_DESKTOP, + _NET_WM_WINDOW_TYPE_DOCK, + _NET_WM_WINDOW_TYPE_TOOLBAR, + _NET_WM_WINDOW_TYPE_MENU, + _NET_WM_WINDOW_TYPE_UTILITY, + _NET_WM_WINDOW_TYPE_SPLASH, + _NET_WM_WINDOW_TYPE_DIALOG, + _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, + _NET_WM_WINDOW_TYPE_POPUP_MENU, + _NET_WM_WINDOW_TYPE_TOOLTIP, + _NET_WM_WINDOW_TYPE_NOTIFICATION, + _NET_WM_WINDOW_TYPE_COMBO, + _NET_WM_WINDOW_TYPE_DND, + _NET_WM_WINDOW_TYPE_NORMAL, + _KDE_NET_WM_WINDOW_TYPE_OVERRIDE, + + _KDE_NET_WM_FRAME_STRUT, + + _NET_STARTUP_INFO, + _NET_STARTUP_INFO_BEGIN, + + _NET_SUPPORTING_WM_CHECK, + + _NET_WM_CM_S0, + + _NET_SYSTEM_TRAY_VISUAL, + + _NET_ACTIVE_WINDOW, + + // Property formats + COMPOUND_TEXT, + TEXT, + UTF8_STRING, + + // Xdnd + XdndEnter, + XdndPosition, + XdndStatus, + XdndLeave, + XdndDrop, + XdndFinished, + XdndTypelist, + XdndActionList, + + XdndSelection, + + XdndAware, + XdndProxy, + + XdndActionCopy, + XdndActionLink, + XdndActionMove, + XdndActionPrivate, + + // Motif DND + _MOTIF_DRAG_AND_DROP_MESSAGE, + _MOTIF_DRAG_INITIATOR_INFO, + _MOTIF_DRAG_RECEIVER_INFO, + _MOTIF_DRAG_WINDOW, + _MOTIF_DRAG_TARGETS, + + XmTRANSFER_SUCCESS, + XmTRANSFER_FAILURE, + + // Xkb + _XKB_RULES_NAMES, + + // XEMBED + _XEMBED, + _XEMBED_INFO, + + XWacomStylus, + XWacomCursor, + XWacomEraser, + + XTabletStylus, + XTabletEraser, + + NPredefinedAtoms, + + _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, + NAtoms + }; +} + class QXcbConnection : public QObject { Q_OBJECT @@ -61,15 +224,25 @@ public: xcb_connection_t *connection() const { return m_connection; } + xcb_atom_t atom(QXcbAtom::Atom atom); + + const char *displayName() const { return m_displayName.constData(); } + private slots: void eventDispatcher(); private: + void initializeAllAtoms(); + xcb_connection_t *m_connection; const xcb_setup_t *m_setup; QList m_screens; int m_primaryScreen; + + xcb_atom_t m_allAtoms[QXcbAtom::NAtoms]; + + QByteArray m_displayName; }; #endif diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 7d18d52..c6bb6d7 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -61,6 +61,7 @@ QXcbWindow::QXcbWindow(QWidget *tlw) XCB_NONE, // XCB_CW_EVENT_MASK XCB_EVENT_MASK_EXPOSURE + | XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_MOTION @@ -121,8 +122,17 @@ void QXcbWindow::setParent(const QPlatformWindow *) { } -void QXcbWindow::setWindowTitle(const QString &) +void QXcbWindow::setWindowTitle(const QString &title) { + QByteArray ba = title.toUtf8(); + xcb_change_property (connection(), + XCB_PROP_MODE_REPLACE, + m_window, + m_screen->connection()->atom(QXcbAtom::_NET_WM_NAME), + m_screen->connection()->atom(QXcbAtom::UTF8_STRING), + 8, + ba.length(), + ba.constData()); } void QXcbWindow::raise() @@ -152,6 +162,19 @@ void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) surface->flush(widget(), widget()->geometry(), QPoint()); } +void QXcbWindow::handleConfigureNotifyEvent(xcb_configure_notify_event_t *event) +{ + int xpos = geometry().x(); + int ypos = geometry().y(); + + if ((event->width == geometry().width() && event->height == geometry().height()) || event->x != 0 || event->y != 0) { + xpos = event->x; + ypos = event->y; + } + + QWindowSystemInterface::handleGeometryChange(widget(), QRect(xpos, ypos, event->width, event->height)); +} + static Qt::MouseButtons translateMouseButtons(int s) { Qt::MouseButtons ret = 0; diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 51c1856..d74786b 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -73,6 +73,7 @@ public: xcb_window_t window() const { return m_window; } void handleExposeEvent(xcb_expose_event_t *event); + void handleConfigureNotifyEvent(xcb_configure_notify_event_t *event); void handleButtonPressEvent(xcb_button_press_event_t *event); void handleButtonReleaseEvent(xcb_button_release_event_t *event); void handleMotionNotifyEvent(xcb_motion_notify_event_t *event); -- cgit v0.12 From 4d6150a045a37fe82ec4abad2721eba4374a8c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 8 Feb 2011 10:11:32 +0100 Subject: Add WM_DELETE_WINDOW support and clean up atom / connection handling. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 14 +++--- src/plugins/platforms/xcb/qxcbconnection.h | 4 +- src/plugins/platforms/xcb/qxcbobject.h | 62 +++++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbscreen.cpp | 2 +- src/plugins/platforms/xcb/qxcbscreen.h | 8 ++-- src/plugins/platforms/xcb/qxcbwindow.cpp | 45 ++++++++++++------ src/plugins/platforms/xcb/qxcbwindow.h | 7 +-- src/plugins/platforms/xcb/qxcbwindowsurface.cpp | 16 +++---- src/plugins/platforms/xcb/qxcbwindowsurface.h | 4 +- src/plugins/platforms/xcb/xcb.pro | 1 + 10 files changed, 124 insertions(+), 39 deletions(-) create mode 100644 src/plugins/platforms/xcb/qxcbobject.h diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index df655a3..023f673 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -55,7 +55,7 @@ QXcbConnection::QXcbConnection(const char *displayName) m_connection = xcb_connect(m_displayName.constData(), &primaryScreen); - m_setup = xcb_get_setup(m_connection); + m_setup = xcb_get_setup(xcb_connection()); xcb_screen_iterator_t it = xcb_setup_roots_iterator(m_setup); @@ -64,7 +64,7 @@ QXcbConnection::QXcbConnection(const char *displayName) xcb_screen_next(&it); } - QSocketNotifier *socket = new QSocketNotifier(xcb_get_file_descriptor(m_connection), QSocketNotifier::Read, this); + QSocketNotifier *socket = new QSocketNotifier(xcb_get_file_descriptor(xcb_connection()), QSocketNotifier::Read, this); connect(socket, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); initializeAllAtoms(); @@ -74,7 +74,7 @@ QXcbConnection::~QXcbConnection() { qDeleteAll(m_screens); - xcb_disconnect(m_connection); + xcb_disconnect(xcb_connection()); } QXcbWindow *platformWindowFromId(xcb_window_t id) @@ -95,7 +95,7 @@ break; void QXcbConnection::eventDispatcher() { - while (xcb_generic_event_t *event = xcb_poll_for_event(m_connection)) { + while (xcb_generic_event_t *event = xcb_poll_for_event(xcb_connection())) { switch (event->response_type & ~0x80) { case XCB_EXPOSE: HANDLE_PLATFORM_WINDOW_EVENT(xcb_expose_event_t, window, handleExposeEvent); @@ -107,6 +107,8 @@ void QXcbConnection::eventDispatcher() HANDLE_PLATFORM_WINDOW_EVENT(xcb_motion_notify_event_t, event, handleMotionNotifyEvent); case XCB_CONFIGURE_NOTIFY: HANDLE_PLATFORM_WINDOW_EVENT(xcb_configure_notify_event_t, event, handleConfigureNotifyEvent); + case XCB_CLIENT_MESSAGE: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_client_message_event_t, window, handleClientMessageEvent); default: break; @@ -299,8 +301,8 @@ void QXcbConnection::initializeAllAtoms() { Q_ASSERT(i == QXcbAtom::NAtoms); for (i = 0; i < QXcbAtom::NAtoms; ++i) - cookies[i] = xcb_intern_atom(m_connection, false, strlen(names[i]), names[i]); + cookies[i] = xcb_intern_atom(xcb_connection(), false, strlen(names[i]), names[i]); for (i = 0; i < QXcbAtom::NAtoms; ++i) - m_allAtoms[i] = xcb_intern_atom_reply(m_connection, cookies[i], 0)->atom; + m_allAtoms[i] = xcb_intern_atom_reply(xcb_connection(), cookies[i], 0)->atom; } diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index e0b506f..9fb641e 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -222,12 +222,12 @@ public: QList screens() const { return m_screens; } int primaryScreen() const { return m_primaryScreen; } - xcb_connection_t *connection() const { return m_connection; } - xcb_atom_t atom(QXcbAtom::Atom atom); const char *displayName() const { return m_displayName.constData(); } + xcb_connection_t *xcb_connection() const { return m_connection; } + private slots: void eventDispatcher(); diff --git a/src/plugins/platforms/xcb/qxcbobject.h b/src/plugins/platforms/xcb/qxcbobject.h new file mode 100644 index 0000000..cabfd7c --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbobject.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBOBJECT_H +#define QXCBOBJECT_H + +#include "qxcbconnection.h" + +class QXcbObject +{ +public: + QXcbObject(QXcbConnection *connection = 0) : m_connection(connection) {} + + void setConnection(QXcbConnection *connection) { m_connection = connection; } + QXcbConnection *connection() const { return m_connection; } + + xcb_atom_t atom(QXcbAtom::Atom atom) const { return m_connection->atom(atom); } + xcb_connection_t *xcb_connection() const { return m_connection->xcb_connection(); } + +private: + QXcbConnection *m_connection; +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index bbd3fd4..1adde6b 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -44,7 +44,7 @@ #include QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen) - : m_connection(connection) + : QXcbObject(connection) , m_screen(screen) { printf ("\n"); diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index 22b182b..88de1a8 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -46,9 +46,11 @@ #include +#include "qxcbobject.h" + class QXcbConnection; -class QXcbScreen : public QPlatformScreen +class QXcbScreen : public QXcbObject, public QPlatformScreen { public: QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen); @@ -58,14 +60,10 @@ public: int depth() const; QImage::Format format() const; - QXcbConnection *connection() const { return m_connection; } - xcb_screen_t *screen() const { return m_screen; } xcb_window_t root() const { return m_screen->root; } private: - QXcbConnection *m_connection; - xcb_screen_t *m_screen; }; diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index c6bb6d7..c7bcd38 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -55,6 +55,8 @@ QXcbWindow::QXcbWindow(QWidget *tlw) { m_screen = static_cast(QPlatformScreen::platformScreenForWidget(tlw)); + setConnection(m_screen->connection()); + const quint32 mask = XCB_CW_BACK_PIXMAP | XCB_CW_EVENT_MASK; const quint32 values[] = { // XCB_CW_BACK_PIXMAP @@ -67,8 +69,8 @@ QXcbWindow::QXcbWindow(QWidget *tlw) | XCB_EVENT_MASK_BUTTON_MOTION }; - m_window = xcb_generate_id(connection()); - xcb_create_window(connection(), + m_window = xcb_generate_id(xcb_connection()); + xcb_create_window(xcb_connection(), XCB_COPY_FROM_PARENT, // depth -- same as root m_window, // window id m_screen->root(), // parent window id @@ -82,12 +84,25 @@ QXcbWindow::QXcbWindow(QWidget *tlw) mask, // value mask values); // value list + xcb_atom_t properties[] = { + atom(QXcbAtom::WM_DELETE_WINDOW) + }; + + xcb_change_property(xcb_connection(), + XCB_PROP_MODE_REPLACE, + m_window, + atom(QXcbAtom::WM_PROTOCOLS), + 4, + 32, + sizeof(properties) / sizeof(xcb_atom_t), + properties); + printf("m_window: %d\n", m_window); } QXcbWindow::~QXcbWindow() { - xcb_destroy_window(connection(), m_window); + xcb_destroy_window(xcb_connection(), m_window); } void QXcbWindow::setGeometry(const QRect &rect) @@ -98,9 +113,9 @@ void QXcbWindow::setGeometry(const QRect &rect) void QXcbWindow::setVisible(bool visible) { if (visible) - xcb_map_window(connection(), m_window); + xcb_map_window(xcb_connection(), m_window); else - xcb_unmap_window(connection(), m_window); + xcb_unmap_window(xcb_connection(), m_window); } Qt::WindowFlags QXcbWindow::setWindowFlags(Qt::WindowFlags flags) @@ -125,11 +140,11 @@ void QXcbWindow::setParent(const QPlatformWindow *) void QXcbWindow::setWindowTitle(const QString &title) { QByteArray ba = title.toUtf8(); - xcb_change_property (connection(), + xcb_change_property (xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, - m_screen->connection()->atom(QXcbAtom::_NET_WM_NAME), - m_screen->connection()->atom(QXcbAtom::UTF8_STRING), + atom(QXcbAtom::_NET_WM_NAME), + atom(QXcbAtom::UTF8_STRING), 8, ba.length(), ba.constData()); @@ -147,11 +162,6 @@ void QXcbWindow::requestActivateWindow() { } -xcb_connection_t *QXcbWindow::connection() const -{ - return m_screen->connection()->connection(); -} - void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) { if (event->count != 0) @@ -162,6 +172,15 @@ void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) surface->flush(widget(), widget()->geometry(), QPoint()); } +void QXcbWindow::handleClientMessageEvent(xcb_client_message_event_t *event) +{ + if (event->format == 32 && event->type == atom(QXcbAtom::WM_PROTOCOLS)) { + if (event->data.data32[0] == atom(QXcbAtom::WM_DELETE_WINDOW)) { + QWindowSystemInterface::handleCloseEvent(widget()); + } + } +} + void QXcbWindow::handleConfigureNotifyEvent(xcb_configure_notify_event_t *event) { int xpos = geometry().x(); diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index d74786b..a772d30 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -46,9 +46,11 @@ #include +#include "qxcbobject.h" + class QXcbScreen; -class QXcbWindow : public QPlatformWindow +class QXcbWindow : public QXcbObject, public QPlatformWindow { public: QXcbWindow(QWidget *tlw); @@ -73,6 +75,7 @@ public: xcb_window_t window() const { return m_window; } void handleExposeEvent(xcb_expose_event_t *event); + void handleClientMessageEvent(xcb_client_message_event_t *event); void handleConfigureNotifyEvent(xcb_configure_notify_event_t *event); void handleButtonPressEvent(xcb_button_press_event_t *event); void handleButtonReleaseEvent(xcb_button_release_event_t *event); @@ -81,8 +84,6 @@ public: void handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_timestamp_t time, const QPoint &local, const QPoint &global); private: - xcb_connection_t *connection() const; - QXcbScreen *m_screen; xcb_window_t m_window; diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp index ad91c34..e3b2c6c 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp @@ -52,6 +52,9 @@ QXcbWindowSurface::QXcbWindowSurface(QWidget *widget, bool setDefaultSurface) { setStaticContentsSupport(false); setPartialUpdateSupport(false); + + QXcbScreen *screen = static_cast(QPlatformScreen::platformScreenForWidget(widget)); + setConnection(screen->connection()); } QXcbWindowSurface::~QXcbWindowSurface() @@ -68,15 +71,12 @@ void QXcbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoi Q_UNUSED(region); Q_UNUSED(offset); - QXcbScreen *screen = static_cast(QPlatformScreen::platformScreenForWidget(widget)); QXcbWindow *window = static_cast(widget->window()->platformWindow()); - xcb_connection_t *xcb_con = screen->connection()->connection(); - - m_gc = xcb_generate_id(xcb_con); - xcb_create_gc(xcb_con, m_gc, window->window(), 0, 0); + m_gc = xcb_generate_id(xcb_connection()); + xcb_create_gc(xcb_connection(), m_gc, window->window(), 0, 0); - xcb_put_image(xcb_con, + xcb_put_image(xcb_connection(), XCB_IMAGE_FORMAT_Z_PIXMAP, window->window(), m_gc, @@ -89,8 +89,8 @@ void QXcbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoi m_image.numBytes(), m_image.bits()); - xcb_free_gc(xcb_con, m_gc); - xcb_flush(xcb_con); + xcb_free_gc(xcb_connection(), m_gc); + xcb_flush(xcb_connection()); } void QXcbWindowSurface::resize(const QSize &size) diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.h b/src/plugins/platforms/xcb/qxcbwindowsurface.h index 74be9a2..66b9c29 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.h +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.h @@ -46,7 +46,9 @@ #include -class QXcbWindowSurface : public QWindowSurface +#include "qxcbobject.h" + +class QXcbWindowSurface : public QXcbObject, public QWindowSurface { public: QXcbWindowSurface(QWidget *widget, bool setDefaultSurface = true); diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index cbbda0d..f63495c 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -12,6 +12,7 @@ SOURCES = \ qxcbwindowsurface.cpp HEADERS = \ + qxcbobject.h \ qxcbintegration.h \ qxcbconnection.h \ qxcbscreen.h \ -- cgit v0.12 From 988d67957fdb7f5b50c8bff6c70e2ae299f7744c Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 8 Feb 2011 10:35:08 +0100 Subject: Remove useless function. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Rødal --- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 5 ----- src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 1 - 2 files changed, 6 deletions(-) diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 5f52679..36b3e6a 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -92,11 +92,6 @@ void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &of } } -void QUnifiedToolbarSurface::updateRedirection(QWidget *widget) -{ - recursiveRedirect(widget, widget->d_func()->toolbar_offset); -} - void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offset) { setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 6e40a17..54f0f8e 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -82,7 +82,6 @@ public: void setGeometry(const QRect &rect); void beginPaint(const QRegion &rgn); void insertToolbar(QWidget *toolbar, const QPoint &offset); - void updateRedirection(QWidget *widget); void updateToolbarOffset(QWidget *widget); QPaintDevice *paintDevice(); -- cgit v0.12 From e7c3a905637a157d4989682c49b7c5691071eb81 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Tue, 8 Feb 2011 10:43:10 +0100 Subject: Force the repaint during live resize. During live resize on Mac, it is important to keep up with the resizing of the window, or the application looks sluggish. Calling update() is not enough, since we then are lagging behind the system by going through the event loop. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qcocoawindowdelegate_mac.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/kernel/qcocoawindowdelegate_mac.mm b/src/gui/kernel/qcocoawindowdelegate_mac.mm index 6ce7b35..55f2db6 100644 --- a/src/gui/kernel/qcocoawindowdelegate_mac.mm +++ b/src/gui/kernel/qcocoawindowdelegate_mac.mm @@ -215,6 +215,11 @@ static void cleanupCocoaWindowDelegate() QWidgetPrivate::qt_mac_update_sizer(qwidget); [self syncSizeForWidget:qwidget toSize:newSize fromSize:oldSize]; } + + // We force the repaint to be synchronized with the resize of the window. + // Otherwise, the resize looks sluggish because we paint one event loop later. + if ([[window contentView] inLiveResize]) + qwidget->repaint(); } - (void)windowDidMove:(NSNotification *)notification -- cgit v0.12 From 6a4ef30a8f585a3dc20b337eb336ab028c97ddb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 8 Feb 2011 14:34:52 +0100 Subject: Optimized XCB window surface using partial updates and shared images. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 1 - src/plugins/platforms/xcb/qxcbwindow.cpp | 12 +- src/plugins/platforms/xcb/qxcbwindowsurface.cpp | 149 ++++++++++++++++++++---- src/plugins/platforms/xcb/qxcbwindowsurface.h | 8 +- src/plugins/platforms/xcb/xcb.pro | 2 +- 5 files changed, 138 insertions(+), 34 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 023f673..70c6a63 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -111,7 +111,6 @@ void QXcbConnection::eventDispatcher() HANDLE_PLATFORM_WINDOW_EVENT(xcb_client_message_event_t, window, handleClientMessageEvent); default: break; - } } } diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index c7bcd38..6dfccba 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -96,8 +96,6 @@ QXcbWindow::QXcbWindow(QWidget *tlw) 32, sizeof(properties) / sizeof(xcb_atom_t), properties); - - printf("m_window: %d\n", m_window); } QXcbWindow::~QXcbWindow() @@ -164,12 +162,12 @@ void QXcbWindow::requestActivateWindow() void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) { - if (event->count != 0) - return; - QWindowSurface *surface = widget()->windowSurface(); - if (surface) - surface->flush(widget(), widget()->geometry(), QPoint()); + if (surface) { + QRect rect(event->x, event->y, event->width, event->height); + + surface->flush(widget(), rect, QPoint()); + } } void QXcbWindow::handleClientMessageEvent(xcb_client_message_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp index e3b2c6c..513de08 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp @@ -45,13 +45,119 @@ #include "qxcbscreen.h" #include "qxcbwindow.h" +#include +#include + +#include +#include + #include +class QXcbShmImage : public QXcbObject +{ +public: + QXcbShmImage(QXcbScreen *connection, const QSize &size); + ~QXcbShmImage() { destroy(); } + + QImage *image() { return &m_qimage; } + + void put(xcb_window_t window, const QPoint &dst, const QRect &source); + void preparePaint(const QRegion ®ion); + +private: + void destroy(); + + xcb_shm_segment_info_t m_shm_info; + + xcb_image_t *m_xcb_image; + + QImage m_qimage; + + xcb_gcontext_t m_gc; + xcb_window_t m_gc_window; + + QRegion m_dirty; +}; + +QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size) + : QXcbObject(screen->connection()) + , m_gc(0) + , m_gc_window(0) +{ + m_xcb_image = xcb_image_create_native(xcb_connection(), + size.width(), + size.height(), + XCB_IMAGE_FORMAT_Z_PIXMAP, + screen->depth(), + 0, + ~0, + 0); + m_shm_info.shmid = shmget (IPC_PRIVATE, + m_xcb_image->stride * m_xcb_image->height, IPC_CREAT|0777); + + m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat (m_shm_info.shmid, 0, 0); + m_shm_info.shmseg = xcb_generate_id(xcb_connection()); + + xcb_shm_attach(xcb_connection(), m_shm_info.shmseg, m_shm_info.shmid, false); + + m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, screen->format()); +} + +void QXcbShmImage::destroy() +{ + xcb_shm_detach(xcb_connection(), m_shm_info.shmseg); + xcb_image_destroy(m_xcb_image); + shmdt(m_shm_info.shmaddr); + shmctl(m_shm_info.shmid, IPC_RMID, 0); + + xcb_free_gc(xcb_connection(), m_gc); +} + +void QXcbShmImage::put(xcb_window_t window, const QPoint &target, const QRect &source) +{ + if (m_gc_window != window) { + xcb_free_gc(xcb_connection(), m_gc); + + m_gc = xcb_generate_id(xcb_connection()); + xcb_create_gc(xcb_connection(), m_gc, window, 0, 0); + + m_gc_window = window; + } + + xcb_image_shm_put(xcb_connection(), + window, + m_gc, + m_xcb_image, + m_shm_info, + source.x(), + source.y(), + target.x(), + target.y(), + source.width(), + source.height(), + false); + + m_dirty = m_dirty | source; + + xcb_flush(xcb_connection()); +} + +void QXcbShmImage::preparePaint(const QRegion ®ion) +{ + // to prevent X from reading from the image region while we're writing to it + if (m_dirty.intersects(region)) { + // from xcb_aux_sync + free(xcb_get_input_focus_reply(xcb_connection(), xcb_get_input_focus(xcb_connection()), 0)); + m_dirty = QRegion(); + } +} + QXcbWindowSurface::QXcbWindowSurface(QWidget *widget, bool setDefaultSurface) : QWindowSurface(widget, setDefaultSurface) + , m_image(0) { setStaticContentsSupport(false); - setPartialUpdateSupport(false); + setPartialUpdateSupport(true); QXcbScreen *screen = static_cast(QPlatformScreen::platformScreenForWidget(widget)); setConnection(screen->connection()); @@ -63,7 +169,12 @@ QXcbWindowSurface::~QXcbWindowSurface() QPaintDevice *QXcbWindowSurface::paintDevice() { - return &m_image; + return m_image->image(); +} + +void QXcbWindowSurface::beginPaint(const QRegion ®ion) +{ + m_image->preparePaint(region); } void QXcbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) @@ -73,42 +184,36 @@ void QXcbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoi QXcbWindow *window = static_cast(widget->window()->platformWindow()); - m_gc = xcb_generate_id(xcb_connection()); - xcb_create_gc(xcb_connection(), m_gc, window->window(), 0, 0); - - xcb_put_image(xcb_connection(), - XCB_IMAGE_FORMAT_Z_PIXMAP, - window->window(), - m_gc, - m_image.width(), - m_image.height(), - 0, - 0, - 0, - 24, - m_image.numBytes(), - m_image.bits()); + extern QWidgetData* qt_widget_data(QWidget *); + QPoint widgetOffset = qt_qwidget_data(widget)->wrect.topLeft(); - xcb_free_gc(xcb_connection(), m_gc); - xcb_flush(xcb_connection()); + QVector rects = region.rects(); + for (int i = 0; i < rects.size(); ++i) + m_image->put(window->window(), rects.at(i).topLeft() - widgetOffset, rects.at(i).translated(offset)); } void QXcbWindowSurface::resize(const QSize &size) { QWindowSurface::resize(size); - m_image = QImage(size, QImage::Format_RGB32); + + QXcbScreen *screen = static_cast(QPlatformScreen::platformScreenForWidget(window())); + + delete m_image; + m_image = new QXcbShmImage(screen, size); } extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); bool QXcbWindowSurface::scroll(const QRegion &area, int dx, int dy) { - if (m_image.isNull()) + if (m_image->image()->isNull()) return false; + m_image->preparePaint(area); + const QVector rects = area.rects(); for (int i = 0; i < rects.size(); ++i) - qt_scrollRectInImage(m_image, rects.at(i), QPoint(dx, dy)); + qt_scrollRectInImage(*m_image->image(), rects.at(i), QPoint(dx, dy)); return true; } diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.h b/src/plugins/platforms/xcb/qxcbwindowsurface.h index 66b9c29..ee63190 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.h +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.h @@ -48,6 +48,8 @@ #include "qxcbobject.h" +class QXcbShmImage; + class QXcbWindowSurface : public QXcbObject, public QWindowSurface { public: @@ -59,10 +61,10 @@ public: void resize(const QSize &size); bool scroll(const QRegion &area, int dx, int dy); -private: - QImage m_image; + void beginPaint(const QRegion &); - xcb_gcontext_t m_gc; +private: + QXcbShmImage *m_image; }; #endif diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index f63495c..a4f9246 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -19,7 +19,7 @@ HEADERS = \ qxcbwindow.h \ qxcbwindowsurface.h -LIBS += -lxcb +LIBS += -lxcb -lxcb-image include (../fontdatabases/genericunix/genericunix.pri) -- cgit v0.12 From 9d808132dbf2de191e3d1ab2a1222e584d7ff1bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 8 Feb 2011 14:45:09 +0100 Subject: Made XCB report correct physical size. --- src/plugins/platforms/xcb/qxcbscreen.cpp | 5 +++++ src/plugins/platforms/xcb/qxcbscreen.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 1adde6b..a9a24dd 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -75,3 +75,8 @@ QImage::Format QXcbScreen::format() const { return QImage::Format_RGB32; } + +QSize QXcbScreen::physicalSize() const +{ + return QSize(m_screen->width_in_millimeters, m_screen->height_in_millimeters); +} diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index 88de1a8..abebcd9 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -59,6 +59,7 @@ public: QRect geometry() const; int depth() const; QImage::Format format() const; + QSize physicalSize() const; xcb_screen_t *screen() const { return m_screen; } xcb_window_t root() const { return m_screen->root; } -- cgit v0.12 From 6c19992488d1aa820e860575533f2e2c1d3351d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 8 Feb 2011 16:07:19 +0100 Subject: Initial key event handling for XCB backend. As there is no XLookupString equivalent in XCB, the key handling is still incomplete. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 28 + src/plugins/platforms/xcb/qxcbconnection.h | 6 + src/plugins/platforms/xcb/qxcbkeyboard.cpp | 949 +++++++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbkeyboard.h | 79 +++ src/plugins/platforms/xcb/qxcbscreen.cpp | 11 + src/plugins/platforms/xcb/qxcbwindow.cpp | 38 +- src/plugins/platforms/xcb/qxcbwindow.h | 17 +- src/plugins/platforms/xcb/xcb.pro | 14 +- 8 files changed, 1124 insertions(+), 18 deletions(-) create mode 100644 src/plugins/platforms/xcb/qxcbkeyboard.cpp create mode 100644 src/plugins/platforms/xcb/qxcbkeyboard.h diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 70c6a63..2977d76 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qxcbconnection.h" +#include "qxcbkeyboard.h" #include "qxcbscreen.h" #include "qxcbwindow.h" @@ -67,6 +68,8 @@ QXcbConnection::QXcbConnection(const char *displayName) QSocketNotifier *socket = new QSocketNotifier(xcb_get_file_descriptor(xcb_connection()), QSocketNotifier::Read, this); connect(socket, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + m_keyboard = new QXcbKeyboard(this); + initializeAllAtoms(); } @@ -75,6 +78,8 @@ QXcbConnection::~QXcbConnection() qDeleteAll(m_screens); xcb_disconnect(xcb_connection()); + + delete m_keyboard; } QXcbWindow *platformWindowFromId(xcb_window_t id) @@ -93,6 +98,14 @@ QXcbWindow *platformWindowFromId(xcb_window_t id) } \ break; +#define HANDLE_KEYBOARD_EVENT(event_t, handler) \ +{ \ + event_t *e = (event_t *)event; \ + if (QXcbWindow *platformWindow = platformWindowFromId(e->event)) \ + m_keyboard->handler(platformWindow->widget(), e); \ +} \ +break; + void QXcbConnection::eventDispatcher() { while (xcb_generic_event_t *event = xcb_poll_for_event(xcb_connection())) { @@ -109,6 +122,21 @@ void QXcbConnection::eventDispatcher() HANDLE_PLATFORM_WINDOW_EVENT(xcb_configure_notify_event_t, event, handleConfigureNotifyEvent); case XCB_CLIENT_MESSAGE: HANDLE_PLATFORM_WINDOW_EVENT(xcb_client_message_event_t, window, handleClientMessageEvent); + case XCB_ENTER_NOTIFY: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_enter_notify_event_t, event, handleEnterNotifyEvent); + case XCB_LEAVE_NOTIFY: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_leave_notify_event_t, event, handleLeaveNotifyEvent); + case XCB_FOCUS_IN: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_focus_in_event_t, event, handleFocusInEvent); + case XCB_FOCUS_OUT: + HANDLE_PLATFORM_WINDOW_EVENT(xcb_focus_out_event_t, event, handleFocusOutEvent); + case XCB_KEY_PRESS: + HANDLE_KEYBOARD_EVENT(xcb_key_press_event_t, handleKeyPressEvent); + case XCB_KEY_RELEASE: + HANDLE_KEYBOARD_EVENT(xcb_key_release_event_t, handleKeyReleaseEvent); + case XCB_MAPPING_NOTIFY: + m_keyboard->handleMappingNotifyEvent((xcb_mapping_notify_event_t *)event); + break; default: break; } diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 9fb641e..97f9ba5 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -212,6 +212,8 @@ namespace QXcbAtom { }; } +class QXcbKeyboard; + class QXcbConnection : public QObject { Q_OBJECT @@ -228,6 +230,8 @@ public: xcb_connection_t *xcb_connection() const { return m_connection; } + QXcbKeyboard *keyboard() const { return m_keyboard; } + private slots: void eventDispatcher(); @@ -243,6 +247,8 @@ private: xcb_atom_t m_allAtoms[QXcbAtom::NAtoms]; QByteArray m_displayName; + + QXcbKeyboard *m_keyboard; }; #endif diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp new file mode 100644 index 0000000..b226e3e --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -0,0 +1,949 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxcbkeyboard.h" + +#include + +#include + +#include +#include + +#include + +#ifndef XK_ISO_Left_Tab +#define XK_ISO_Left_Tab 0xFE20 +#endif + +#ifndef XK_dead_hook +#define XK_dead_hook 0xFE61 +#endif + +#ifndef XK_dead_horn +#define XK_dead_horn 0xFE62 +#endif + +#ifndef XK_Codeinput +#define XK_Codeinput 0xFF37 +#endif + +#ifndef XK_Kanji_Bangou +#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */ +#endif + +// Fix old X libraries +#ifndef XK_KP_Home +#define XK_KP_Home 0xFF95 +#endif +#ifndef XK_KP_Left +#define XK_KP_Left 0xFF96 +#endif +#ifndef XK_KP_Up +#define XK_KP_Up 0xFF97 +#endif +#ifndef XK_KP_Right +#define XK_KP_Right 0xFF98 +#endif +#ifndef XK_KP_Down +#define XK_KP_Down 0xFF99 +#endif +#ifndef XK_KP_Prior +#define XK_KP_Prior 0xFF9A +#endif +#ifndef XK_KP_Next +#define XK_KP_Next 0xFF9B +#endif +#ifndef XK_KP_End +#define XK_KP_End 0xFF9C +#endif +#ifndef XK_KP_Insert +#define XK_KP_Insert 0xFF9E +#endif +#ifndef XK_KP_Delete +#define XK_KP_Delete 0xFF9F +#endif + +// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special +// multimedia keys. They are included here as not every system has them. +#define XF86XK_MonBrightnessUp 0x1008FF02 +#define XF86XK_MonBrightnessDown 0x1008FF03 +#define XF86XK_KbdLightOnOff 0x1008FF04 +#define XF86XK_KbdBrightnessUp 0x1008FF05 +#define XF86XK_KbdBrightnessDown 0x1008FF06 +#define XF86XK_Standby 0x1008FF10 +#define XF86XK_AudioLowerVolume 0x1008FF11 +#define XF86XK_AudioMute 0x1008FF12 +#define XF86XK_AudioRaiseVolume 0x1008FF13 +#define XF86XK_AudioPlay 0x1008FF14 +#define XF86XK_AudioStop 0x1008FF15 +#define XF86XK_AudioPrev 0x1008FF16 +#define XF86XK_AudioNext 0x1008FF17 +#define XF86XK_HomePage 0x1008FF18 +#define XF86XK_Mail 0x1008FF19 +#define XF86XK_Start 0x1008FF1A +#define XF86XK_Search 0x1008FF1B +#define XF86XK_AudioRecord 0x1008FF1C +#define XF86XK_Calculator 0x1008FF1D +#define XF86XK_Memo 0x1008FF1E +#define XF86XK_ToDoList 0x1008FF1F +#define XF86XK_Calendar 0x1008FF20 +#define XF86XK_PowerDown 0x1008FF21 +#define XF86XK_ContrastAdjust 0x1008FF22 +#define XF86XK_Back 0x1008FF26 +#define XF86XK_Forward 0x1008FF27 +#define XF86XK_Stop 0x1008FF28 +#define XF86XK_Refresh 0x1008FF29 +#define XF86XK_PowerOff 0x1008FF2A +#define XF86XK_WakeUp 0x1008FF2B +#define XF86XK_Eject 0x1008FF2C +#define XF86XK_ScreenSaver 0x1008FF2D +#define XF86XK_WWW 0x1008FF2E +#define XF86XK_Sleep 0x1008FF2F +#define XF86XK_Favorites 0x1008FF30 +#define XF86XK_AudioPause 0x1008FF31 +#define XF86XK_AudioMedia 0x1008FF32 +#define XF86XK_MyComputer 0x1008FF33 +#define XF86XK_LightBulb 0x1008FF35 +#define XF86XK_Shop 0x1008FF36 +#define XF86XK_History 0x1008FF37 +#define XF86XK_OpenURL 0x1008FF38 +#define XF86XK_AddFavorite 0x1008FF39 +#define XF86XK_HotLinks 0x1008FF3A +#define XF86XK_BrightnessAdjust 0x1008FF3B +#define XF86XK_Finance 0x1008FF3C +#define XF86XK_Community 0x1008FF3D +#define XF86XK_AudioRewind 0x1008FF3E +#define XF86XK_BackForward 0x1008FF3F +#define XF86XK_Launch0 0x1008FF40 +#define XF86XK_Launch1 0x1008FF41 +#define XF86XK_Launch2 0x1008FF42 +#define XF86XK_Launch3 0x1008FF43 +#define XF86XK_Launch4 0x1008FF44 +#define XF86XK_Launch5 0x1008FF45 +#define XF86XK_Launch6 0x1008FF46 +#define XF86XK_Launch7 0x1008FF47 +#define XF86XK_Launch8 0x1008FF48 +#define XF86XK_Launch9 0x1008FF49 +#define XF86XK_LaunchA 0x1008FF4A +#define XF86XK_LaunchB 0x1008FF4B +#define XF86XK_LaunchC 0x1008FF4C +#define XF86XK_LaunchD 0x1008FF4D +#define XF86XK_LaunchE 0x1008FF4E +#define XF86XK_LaunchF 0x1008FF4F +#define XF86XK_ApplicationLeft 0x1008FF50 +#define XF86XK_ApplicationRight 0x1008FF51 +#define XF86XK_Book 0x1008FF52 +#define XF86XK_CD 0x1008FF53 +#define XF86XK_Calculater 0x1008FF54 +#define XF86XK_Clear 0x1008FF55 +#define XF86XK_ClearGrab 0x1008FE21 +#define XF86XK_Close 0x1008FF56 +#define XF86XK_Copy 0x1008FF57 +#define XF86XK_Cut 0x1008FF58 +#define XF86XK_Display 0x1008FF59 +#define XF86XK_DOS 0x1008FF5A +#define XF86XK_Documents 0x1008FF5B +#define XF86XK_Excel 0x1008FF5C +#define XF86XK_Explorer 0x1008FF5D +#define XF86XK_Game 0x1008FF5E +#define XF86XK_Go 0x1008FF5F +#define XF86XK_iTouch 0x1008FF60 +#define XF86XK_LogOff 0x1008FF61 +#define XF86XK_Market 0x1008FF62 +#define XF86XK_Meeting 0x1008FF63 +#define XF86XK_MenuKB 0x1008FF65 +#define XF86XK_MenuPB 0x1008FF66 +#define XF86XK_MySites 0x1008FF67 +#define XF86XK_News 0x1008FF69 +#define XF86XK_OfficeHome 0x1008FF6A +#define XF86XK_Option 0x1008FF6C +#define XF86XK_Paste 0x1008FF6D +#define XF86XK_Phone 0x1008FF6E +#define XF86XK_Reply 0x1008FF72 +#define XF86XK_Reload 0x1008FF73 +#define XF86XK_RotateWindows 0x1008FF74 +#define XF86XK_RotationPB 0x1008FF75 +#define XF86XK_RotationKB 0x1008FF76 +#define XF86XK_Save 0x1008FF77 +#define XF86XK_Send 0x1008FF7B +#define XF86XK_Spell 0x1008FF7C +#define XF86XK_SplitScreen 0x1008FF7D +#define XF86XK_Support 0x1008FF7E +#define XF86XK_TaskPane 0x1008FF7F +#define XF86XK_Terminal 0x1008FF80 +#define XF86XK_Tools 0x1008FF81 +#define XF86XK_Travel 0x1008FF82 +#define XF86XK_Video 0x1008FF87 +#define XF86XK_Word 0x1008FF89 +#define XF86XK_Xfer 0x1008FF8A +#define XF86XK_ZoomIn 0x1008FF8B +#define XF86XK_ZoomOut 0x1008FF8C +#define XF86XK_Away 0x1008FF8D +#define XF86XK_Messenger 0x1008FF8E +#define XF86XK_WebCam 0x1008FF8F +#define XF86XK_MailForward 0x1008FF90 +#define XF86XK_Pictures 0x1008FF91 +#define XF86XK_Music 0x1008FF92 +#define XF86XK_Battery 0x1008FF93 +#define XF86XK_Bluetooth 0x1008FF94 +#define XF86XK_WLAN 0x1008FF95 +#define XF86XK_UWB 0x1008FF96 +#define XF86XK_AudioForward 0x1008FF97 +#define XF86XK_AudioRepeat 0x1008FF98 +#define XF86XK_AudioRandomPlay 0x1008FF99 +#define XF86XK_Subtitle 0x1008FF9A +#define XF86XK_AudioCycleTrack 0x1008FF9B +#define XF86XK_Time 0x1008FF9F +#define XF86XK_Select 0x1008FFA0 +#define XF86XK_View 0x1008FFA1 +#define XF86XK_TopMenu 0x1008FFA2 +#define XF86XK_Suspend 0x1008FFA7 +#define XF86XK_Hibernate 0x1008FFA8 + + +// end of XF86keysyms.h + +// Special keys used by Qtopia, mapped into the X11 private keypad range. +#define QTOPIAXK_Select 0x11000601 +#define QTOPIAXK_Yes 0x11000602 +#define QTOPIAXK_No 0x11000603 +#define QTOPIAXK_Cancel 0x11000604 +#define QTOPIAXK_Printer 0x11000605 +#define QTOPIAXK_Execute 0x11000606 +#define QTOPIAXK_Sleep 0x11000607 +#define QTOPIAXK_Play 0x11000608 +#define QTOPIAXK_Zoom 0x11000609 +#define QTOPIAXK_Context1 0x1100060A +#define QTOPIAXK_Context2 0x1100060B +#define QTOPIAXK_Context3 0x1100060C +#define QTOPIAXK_Context4 0x1100060D +#define QTOPIAXK_Call 0x1100060E +#define QTOPIAXK_Hangup 0x1100060F +#define QTOPIAXK_Flip 0x11000610 + +// keyboard mapping table +static const unsigned int KeyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + 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_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 keys from X.org - This include multimedia keys, + // wireless/bluetooth/uwb keys, special launcher keys, etc. + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Memo, Qt::Key_Memo, + XF86XK_ToDoList, Qt::Key_ToDoList, + XF86XK_Calendar, Qt::Key_Calendar, + XF86XK_PowerDown, Qt::Key_PowerDown, + XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, + XF86XK_Standby, Qt::Key_Standby, + XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, + XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, + XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, + XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, + XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, + XF86XK_PowerOff, Qt::Key_PowerOff, + XF86XK_WakeUp, Qt::Key_WakeUp, + XF86XK_Eject, Qt::Key_Eject, + XF86XK_ScreenSaver, Qt::Key_ScreenSaver, + XF86XK_WWW, Qt::Key_WWW, + XF86XK_Sleep, Qt::Key_Sleep, + XF86XK_LightBulb, Qt::Key_LightBulb, + XF86XK_Shop, Qt::Key_Shop, + XF86XK_History, Qt::Key_History, + XF86XK_AddFavorite, Qt::Key_AddFavorite, + XF86XK_HotLinks, Qt::Key_HotLinks, + XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, + XF86XK_Finance, Qt::Key_Finance, + XF86XK_Community, Qt::Key_Community, + XF86XK_AudioRewind, Qt::Key_AudioRewind, + XF86XK_BackForward, Qt::Key_BackForward, + XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, + XF86XK_ApplicationRight, Qt::Key_ApplicationRight, + XF86XK_Book, Qt::Key_Book, + XF86XK_CD, Qt::Key_CD, + XF86XK_Calculater, Qt::Key_Calculator, + XF86XK_Clear, Qt::Key_Clear, + XF86XK_ClearGrab, Qt::Key_ClearGrab, + XF86XK_Close, Qt::Key_Close, + XF86XK_Copy, Qt::Key_Copy, + XF86XK_Cut, Qt::Key_Cut, + XF86XK_Display, Qt::Key_Display, + XF86XK_DOS, Qt::Key_DOS, + XF86XK_Documents, Qt::Key_Documents, + XF86XK_Excel, Qt::Key_Excel, + XF86XK_Explorer, Qt::Key_Explorer, + XF86XK_Game, Qt::Key_Game, + XF86XK_Go, Qt::Key_Go, + XF86XK_iTouch, Qt::Key_iTouch, + XF86XK_LogOff, Qt::Key_LogOff, + XF86XK_Market, Qt::Key_Market, + XF86XK_Meeting, Qt::Key_Meeting, + XF86XK_MenuKB, Qt::Key_MenuKB, + XF86XK_MenuPB, Qt::Key_MenuPB, + XF86XK_MySites, Qt::Key_MySites, + XF86XK_News, Qt::Key_News, + XF86XK_OfficeHome, Qt::Key_OfficeHome, + XF86XK_Option, Qt::Key_Option, + XF86XK_Paste, Qt::Key_Paste, + XF86XK_Phone, Qt::Key_Phone, + XF86XK_Reply, Qt::Key_Reply, + XF86XK_Reload, Qt::Key_Reload, + XF86XK_RotateWindows, Qt::Key_RotateWindows, + XF86XK_RotationPB, Qt::Key_RotationPB, + XF86XK_RotationKB, Qt::Key_RotationKB, + XF86XK_Save, Qt::Key_Save, + XF86XK_Send, Qt::Key_Send, + XF86XK_Spell, Qt::Key_Spell, + XF86XK_SplitScreen, Qt::Key_SplitScreen, + XF86XK_Support, Qt::Key_Support, + XF86XK_TaskPane, Qt::Key_TaskPane, + XF86XK_Terminal, Qt::Key_Terminal, + XF86XK_Tools, Qt::Key_Tools, + XF86XK_Travel, Qt::Key_Travel, + XF86XK_Video, Qt::Key_Video, + XF86XK_Word, Qt::Key_Word, + XF86XK_Xfer, Qt::Key_Xfer, + XF86XK_ZoomIn, Qt::Key_ZoomIn, + XF86XK_ZoomOut, Qt::Key_ZoomOut, + XF86XK_Away, Qt::Key_Away, + XF86XK_Messenger, Qt::Key_Messenger, + XF86XK_WebCam, Qt::Key_WebCam, + XF86XK_MailForward, Qt::Key_MailForward, + XF86XK_Pictures, Qt::Key_Pictures, + XF86XK_Music, Qt::Key_Music, + XF86XK_Battery, Qt::Key_Battery, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_WLAN, Qt::Key_WLAN, + XF86XK_UWB, Qt::Key_UWB, + XF86XK_AudioForward, Qt::Key_AudioForward, + XF86XK_AudioRepeat, Qt::Key_AudioRepeat, + XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, + XF86XK_Subtitle, Qt::Key_Subtitle, + XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, + XF86XK_Time, Qt::Key_Time, + XF86XK_Select, Qt::Key_Select, + XF86XK_View, Qt::Key_View, + XF86XK_TopMenu, Qt::Key_TopMenu, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_Suspend, Qt::Key_Suspend, + XF86XK_Hibernate, Qt::Key_Hibernate, + XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, + XF86XK_LaunchE, Qt::Key_LaunchG, + XF86XK_LaunchF, Qt::Key_LaunchH, + + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, + + 0, 0 +}; + +static const unsigned short katakanaKeysymsToUnicode[] = { + 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, + 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, + 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, + 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, + 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, + 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, + 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, + 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C +}; + +static const unsigned short cyrillicKeysymsToUnicode[] = { + 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, + 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a +}; + +static const unsigned short greekKeysymsToUnicode[] = { + 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, + 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, + 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, + 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short technicalKeysymsToUnicode[] = { + 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1, + 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8, + 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B, + 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, + 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000, + 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000 +}; + +static const unsigned short specialKeysymsToUnicode[] = { + 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000, + 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA, + 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C, + 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short publishingKeysymsToUnicode[] = { + 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, + 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, + 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, + 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, + 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, + 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, + 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, + 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, + 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, + 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, + 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000 +}; + +static const unsigned short aplKeysymsToUnicode[] = { + 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, + 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, + 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, + 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, + 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short koreanKeysymsToUnicode[] = { + 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, + 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, + 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, + 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, + 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, + 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, + 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, + 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, + 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, + 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, + 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, + 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 +}; + +static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) +{ + switch (byte3) { + case 0x04: + // katakana + if (byte4 > 0xa0 && byte4 < 0xe0) + return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]); + else if (byte4 == 0x7e) + return QChar(0x203e); // Overline + break; + case 0x06: + // russian, use lookup table + if (byte4 > 0xa0) + return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x07: + // greek + if (byte4 > 0xa0) + return QChar(greekKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x08: + // technical + if (byte4 > 0xa0) + return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x09: + // special + if (byte4 >= 0xe0) + return QChar(specialKeysymsToUnicode[byte4 - 0xe0]); + break; + case 0x0a: + // publishing + if (byte4 > 0xa0) + return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0b: + // APL + if (byte4 > 0xa0) + return QChar(aplKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0e: + // Korean + if (byte4 > 0xa0) + return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]); + break; + default: + break; + } + return QChar(0x0); +} + +Qt::KeyboardModifiers QXcbKeyboard::translateModifiers(int s) +{ + Qt::KeyboardModifiers ret = 0; + if (s & XCB_MOD_MASK_SHIFT) + ret |= Qt::ShiftModifier; + if (s & XCB_MOD_MASK_CONTROL) + ret |= Qt::ControlModifier; + if (s & m_alt_mask) + ret |= Qt::AltModifier; + if (s & m_meta_mask) + ret |= Qt::MetaModifier; + return ret; +} + +int QXcbKeyboard::translateKeySym(uint key) const +{ + int code = -1; + int i = 0; // any other keys + while (KeyTbl[i]) { + if (key == KeyTbl[i]) { + code = (int)KeyTbl[i+1]; + break; + } + i += 2; + } + if (m_meta_mask) { + // translate Super/Hyper keys to Meta if we're using them as the MetaModifier + if (m_meta_mask == m_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) { + code = Qt::Key_Meta; + } else if (m_meta_mask == m_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) { + code = Qt::Key_Meta; + } + } + return code; +} + +QString QXcbKeyboard::translateKeySym(xcb_keysym_t keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count) +{ + // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars + + QTextCodec *mapper = QTextCodec::codecForLocale(); + QChar converted; + + if (/*count == 0 &&*/ keysym < 0xff00) { + unsigned char byte3 = (unsigned char)(keysym >> 8); + int mib = -1; + switch(byte3) { + case 0: // Latin 1 + case 1: // Latin 2 + case 2: //latin 3 + case 3: // latin4 + mib = byte3 + 4; break; + case 5: // arabic + mib = 82; break; + case 12: // Hebrew + mib = 85; break; + case 13: // Thai + mib = 2259; break; + case 4: // kana + case 6: // cyrillic + case 7: // greek + case 8: // technical, no mapping here at the moment + case 9: // Special + case 10: // Publishing + case 11: // APL + case 14: // Korean, no mapping + mib = -1; // manual conversion + mapper= 0; +#if !defined(QT_NO_XIM) + converted = keysymToUnicode(byte3, keysym & 0xff); +#endif + case 0x20: + // currency symbols + if (keysym >= 0x20a0 && keysym <= 0x20ac) { + mib = -1; // manual conversion + mapper = 0; + converted = (uint)keysym; + } + break; + default: + break; + } + if (mib != -1) { + mapper = QTextCodec::codecForMib(mib); + if (chars.isEmpty()) + chars.resize(1); + chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later + count = 1; + } + } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) { + converted = (ushort) (keysym - 0x1000000); + mapper = 0; + } + if (count < (int)chars.size()-1) + chars[count] = '\0'; + + QString text; + if (!mapper && converted.unicode() != 0x0) { + text = converted; + } else if (!chars.isEmpty()) { + // convert chars (8bit) to text (unicode). + if (mapper) + text = mapper->toUnicode(chars.data(), count, 0); + if (text.isEmpty()) { + // no mapper, or codec couldn't convert to unicode (this + // can happen when running in the C locale or with no LANG + // set). try converting from latin-1 + text = QString::fromLatin1(chars); + } + } + + modifiers = translateModifiers(xmodifiers); + + // Commentary in X11/keysymdef says that X codes match ASCII, so it + // is safe to use the locale functions to process X codes in ISO8859-1. + // + // This is mainly for compatibility - applications should not use the + // Qt keycodes between 128 and 255, but should rather use the + // QKeyEvent::text(). + // + if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) { + // upper-case key, if known + code = isprint((int)keysym) ? toupper((int)keysym) : 0; + } else if (keysym >= XK_F1 && keysym <= XK_F35) { + // function keys + code = Qt::Key_F1 + ((int)keysym - XK_F1); + } else if (keysym >= XK_KP_Space && keysym <= XK_KP_9) { + if (keysym >= XK_KP_0) { + // numeric keypad keys + code = Qt::Key_0 + ((int)keysym - XK_KP_0); + } else { + code = translateKeySym(keysym); + } + modifiers |= Qt::KeypadModifier; + } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) { + code = text.unicode()->toUpper().unicode(); + } else { + // any other keys + code = translateKeySym(keysym); + + if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) { + // map shift+tab to shift+backtab, QShortcutMap knows about it + // and will handle it. + code = Qt::Key_Backtab; + text = QString(); + } + } + + return text; +} + +QXcbKeyboard::QXcbKeyboard(QXcbConnection *connection) + : QXcbObject(connection) + , m_alt_mask(0) + , m_super_mask(0) + , m_hyper_mask(0) + , m_meta_mask(0) +{ + m_key_symbols = xcb_key_symbols_alloc(xcb_connection()); +} + +QXcbKeyboard::~QXcbKeyboard() +{ + xcb_key_symbols_free(m_key_symbols); +} + +void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) +{ + xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); + + QByteArray chars; + chars.resize(513); + + Qt::KeyboardModifiers modifiers; + int qtcode = 0; + int count = 0; + + QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); + + QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyPress, qtcode, modifiers, string.left(count)); +} + +void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) +{ + xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); + + QByteArray chars; + chars.resize(513); + + Qt::KeyboardModifiers modifiers; + int qtcode = 0; + int count = 0; + + QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); + + QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyRelease, qtcode, modifiers, string.left(count)); +} + +void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event) +{ + xcb_refresh_keyboard_mapping(m_key_symbols, const_cast(event)); +} diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h new file mode 100644 index 0000000..dc4175a --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXCBKEYBOARD_H +#define QXCBKEYBOARD_H + +#include "qxcbobject.h" + +#include "xcb/xcb_keysyms.h" + +class QXcbKeyboard : public QXcbObject +{ +public: + QXcbKeyboard(QXcbConnection *connection); + ~QXcbKeyboard(); + + void handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event); + void handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event); + + void handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event); + + Qt::KeyboardModifiers translateModifiers(int s); + +private: + + int translateKeySym(uint key) const; + QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count); + + uint m_alt_mask; + uint m_super_mask; + uint m_hyper_mask; + uint m_meta_mask; + uint m_mode_switch_mask; + uint m_num_lock_mask; + + xcb_key_symbols_t *m_key_symbols; +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index a9a24dd..4faa617 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -55,6 +55,17 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen) printf (" white pixel...: %x\n", screen->white_pixel); printf (" black pixel...: %x\n", screen->black_pixel); printf ("\n"); + + const quint32 mask = XCB_CW_EVENT_MASK; + const quint32 values[] = { + // XCB_CW_EVENT_MASK + XCB_EVENT_MASK_KEYMAP_STATE + | XCB_EVENT_MASK_ENTER_WINDOW + | XCB_EVENT_MASK_LEAVE_WINDOW + | XCB_EVENT_MASK_PROPERTY_CHANGE + }; + + xcb_configure_window(xcb_connection(), screen->root, mask, values); } QXcbScreen::~QXcbScreen() diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 6dfccba..bdb5fc1 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -64,9 +64,15 @@ QXcbWindow::QXcbWindow(QWidget *tlw) // XCB_CW_EVENT_MASK XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_STRUCTURE_NOTIFY + | XCB_EVENT_MASK_KEY_PRESS + | XCB_EVENT_MASK_KEY_RELEASE | XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_MOTION + | XCB_EVENT_MASK_ENTER_WINDOW + | XCB_EVENT_MASK_LEAVE_WINDOW + | XCB_EVENT_MASK_PROPERTY_CHANGE + | XCB_EVENT_MASK_FOCUS_CHANGE }; m_window = xcb_generate_id(xcb_connection()); @@ -160,7 +166,7 @@ void QXcbWindow::requestActivateWindow() { } -void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) +void QXcbWindow::handleExposeEvent(const xcb_expose_event_t *event) { QWindowSurface *surface = widget()->windowSurface(); if (surface) { @@ -170,7 +176,7 @@ void QXcbWindow::handleExposeEvent(xcb_expose_event_t *event) } } -void QXcbWindow::handleClientMessageEvent(xcb_client_message_event_t *event) +void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *event) { if (event->format == 32 && event->type == atom(QXcbAtom::WM_PROTOCOLS)) { if (event->data.data32[0] == atom(QXcbAtom::WM_DELETE_WINDOW)) { @@ -179,7 +185,7 @@ void QXcbWindow::handleClientMessageEvent(xcb_client_message_event_t *event) } } -void QXcbWindow::handleConfigureNotifyEvent(xcb_configure_notify_event_t *event) +void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *event) { int xpos = geometry().x(); int ypos = geometry().y(); @@ -218,7 +224,7 @@ static Qt::MouseButton translateMouseButton(xcb_button_t s) } } -void QXcbWindow::handleButtonPressEvent(xcb_button_press_event_t *event) +void QXcbWindow::handleButtonPressEvent(const xcb_button_press_event_t *event) { QPoint local(event->event_x, event->event_y); QPoint global(event->root_x, event->root_y); @@ -240,7 +246,7 @@ void QXcbWindow::handleButtonPressEvent(xcb_button_press_event_t *event) handleMouseEvent(event->detail, event->state, event->time, local, global); } -void QXcbWindow::handleButtonReleaseEvent(xcb_button_release_event_t *event) +void QXcbWindow::handleButtonReleaseEvent(const xcb_button_release_event_t *event) { QPoint local(event->event_x, event->event_y); QPoint global(event->root_x, event->root_y); @@ -248,7 +254,7 @@ void QXcbWindow::handleButtonReleaseEvent(xcb_button_release_event_t *event) handleMouseEvent(event->detail, event->state, event->time, local, global); } -void QXcbWindow::handleMotionNotifyEvent(xcb_motion_notify_event_t *event) +void QXcbWindow::handleMotionNotifyEvent(const xcb_motion_notify_event_t *event) { QPoint local(event->event_x, event->event_y); QPoint global(event->root_x, event->root_y); @@ -266,3 +272,23 @@ void QXcbWindow::handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_times QWindowSystemInterface::handleMouseEvent(widget(), time, local, global, buttons); } +void QXcbWindow::handleEnterNotifyEvent(const xcb_enter_notify_event_t *) +{ + QWindowSystemInterface::handleEnterEvent(widget()); +} + +void QXcbWindow::handleLeaveNotifyEvent(const xcb_leave_notify_event_t *) +{ + QWindowSystemInterface::handleLeaveEvent(widget()); +} + +void QXcbWindow::handleFocusInEvent(const xcb_focus_in_event_t *) +{ + QWindowSystemInterface::handleWindowActivated(widget()); +} + +void QXcbWindow::handleFocusOutEvent(const xcb_focus_out_event_t *) +{ + QWindowSystemInterface::handleWindowActivated(0); +} + diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index a772d30..d9ca86c 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -74,12 +74,17 @@ public: xcb_window_t window() const { return m_window; } - void handleExposeEvent(xcb_expose_event_t *event); - void handleClientMessageEvent(xcb_client_message_event_t *event); - void handleConfigureNotifyEvent(xcb_configure_notify_event_t *event); - void handleButtonPressEvent(xcb_button_press_event_t *event); - void handleButtonReleaseEvent(xcb_button_release_event_t *event); - void handleMotionNotifyEvent(xcb_motion_notify_event_t *event); + void handleExposeEvent(const xcb_expose_event_t *event); + void handleClientMessageEvent(const xcb_client_message_event_t *event); + void handleConfigureNotifyEvent(const xcb_configure_notify_event_t *event); + void handleButtonPressEvent(const xcb_button_press_event_t *event); + void handleButtonReleaseEvent(const xcb_button_release_event_t *event); + void handleMotionNotifyEvent(const xcb_motion_notify_event_t *event); + + void handleEnterNotifyEvent(const xcb_enter_notify_event_t *event); + void handleLeaveNotifyEvent(const xcb_leave_notify_event_t *event); + void handleFocusInEvent(const xcb_focus_in_event_t *event); + void handleFocusOutEvent(const xcb_focus_out_event_t *event); void handleMouseEvent(xcb_button_t detail, uint16_t state, xcb_timestamp_t time, const QPoint &local, const QPoint &global); diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index a4f9246..3aee0a2 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -4,22 +4,24 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = \ - main.cpp \ - qxcbintegration.cpp \ qxcbconnection.cpp \ + qxcbintegration.cpp \ + qxcbkeyboard.cpp \ qxcbscreen.cpp \ qxcbwindow.cpp \ - qxcbwindowsurface.cpp + qxcbwindowsurface.cpp \ + main.cpp HEADERS = \ - qxcbobject.h \ - qxcbintegration.h \ qxcbconnection.h \ + qxcbintegration.h \ + qxcbkeyboard.h \ + qxcbobject.h \ qxcbscreen.h \ qxcbwindow.h \ qxcbwindowsurface.h -LIBS += -lxcb -lxcb-image +LIBS += -lxcb -lxcb-image -lxcb-keysyms include (../fontdatabases/genericunix/genericunix.pri) -- cgit v0.12 From 6aa7b8ff77a968a2ad11181d21812e3fe675ba23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 8 Feb 2011 16:22:18 +0100 Subject: Added setGeometry(), raise(), lower() and setParent() in XCB backend. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index bdb5fc1..caeb3fa 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -112,6 +112,11 @@ QXcbWindow::~QXcbWindow() void QXcbWindow::setGeometry(const QRect &rect) { QPlatformWindow::setGeometry(rect); + + const quint32 mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; + const quint32 values[] = { rect.x(), rect.y(), rect.width(), rect.height() }; + + xcb_configure_window(xcb_connection(), m_window, mask, values); } void QXcbWindow::setVisible(bool visible) @@ -137,8 +142,10 @@ WId QXcbWindow::winId() const return m_window; } -void QXcbWindow::setParent(const QPlatformWindow *) +void QXcbWindow::setParent(const QPlatformWindow *parent) { + QPoint topLeft = geometry().topLeft(); + xcb_reparent_window(xcb_connection(), window(), static_cast(parent)->window(), topLeft.x(), topLeft.y()); } void QXcbWindow::setWindowTitle(const QString &title) @@ -156,10 +163,16 @@ void QXcbWindow::setWindowTitle(const QString &title) void QXcbWindow::raise() { + const quint32 mask = XCB_CONFIG_WINDOW_STACK_MODE; + const quint32 values[] = { XCB_STACK_MODE_ABOVE }; + xcb_configure_window(xcb_connection(), m_window, mask, values); } void QXcbWindow::lower() { + const quint32 mask = XCB_CONFIG_WINDOW_STACK_MODE; + const quint32 values[] = { XCB_STACK_MODE_BELOW }; + xcb_configure_window(xcb_connection(), m_window, mask, values); } void QXcbWindow::requestActivateWindow() -- cgit v0.12 From a0cc1e923e1d43bbb86d59b829c2d8a23a03bcf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 9 Feb 2011 11:38:36 +0100 Subject: Added window attribute setting to XCB backend. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 154 +++++++++++++++++++++++++++++-- src/plugins/platforms/xcb/qxcbwindow.h | 1 - 2 files changed, 145 insertions(+), 10 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index caeb3fa..b54a233 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -90,9 +90,14 @@ QXcbWindow::QXcbWindow(QWidget *tlw) mask, // value mask values); // value list - xcb_atom_t properties[] = { - atom(QXcbAtom::WM_DELETE_WINDOW) - }; + xcb_atom_t properties[4]; + int propertyCount = 0; + properties[propertyCount++] = atom(QXcbAtom::WM_DELETE_WINDOW); + properties[propertyCount++] = atom(QXcbAtom::WM_TAKE_FOCUS); + properties[propertyCount++] = atom(QXcbAtom::_NET_WM_PING); + + if (tlw->windowFlags() & Qt::WindowContextHelpButtonHint) + properties[propertyCount++] = atom(QXcbAtom::_NET_WM_CONTEXT_HELP); xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, @@ -100,7 +105,7 @@ QXcbWindow::QXcbWindow(QWidget *tlw) atom(QXcbAtom::WM_PROTOCOLS), 4, 32, - sizeof(properties) / sizeof(xcb_atom_t), + propertyCount, properties); } @@ -127,14 +132,144 @@ void QXcbWindow::setVisible(bool visible) xcb_unmap_window(xcb_connection(), m_window); } +struct QtMWMHints { + quint32 flags, functions, decorations; + qint32 input_mode; + quint32 status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + Qt::WindowFlags QXcbWindow::setWindowFlags(Qt::WindowFlags flags) { - return flags; -} + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + Q_UNUSED(topLevel); + Q_UNUSED(dialog); + Q_UNUSED(desktop); + Q_UNUSED(tool); + + bool tooltip = (type == Qt::ToolTip); + + QtMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + if (type != Qt::SplashScreen) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } -Qt::WindowFlags QXcbWindow::windowFlags() const -{ - return 0; + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) + { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + if (mwmhints.flags != 0l) { + xcb_change_property(xcb_connection(), + XCB_PROP_MODE_REPLACE, + m_window, + atom(QXcbAtom::_MOTIF_WM_HINTS), + atom(QXcbAtom::_MOTIF_WM_HINTS), + 32, + 5, + &mwmhints); + } else { + xcb_delete_property(xcb_connection(), m_window, atom(QXcbAtom::_MOTIF_WM_HINTS)); + } + + if (popup || tooltip) { + const quint32 mask = XCB_CW_OVERRIDE_REDIRECT | XCB_CW_SAVE_UNDER; + const quint32 values[] = { true, true }; + + xcb_change_window_attributes(xcb_connection(), m_window, mask, values); + } + + return QPlatformWindow::setWindowFlags(flags); } WId QXcbWindow::winId() const @@ -177,6 +312,7 @@ void QXcbWindow::lower() void QXcbWindow::requestActivateWindow() { + xcb_set_input_focus(xcb_connection(), m_window, XCB_INPUT_FOCUS_PARENT, XCB_TIME_CURRENT_TIME); } void QXcbWindow::handleExposeEvent(const xcb_expose_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index d9ca86c..17e1742 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -60,7 +60,6 @@ public: void setVisible(bool visible); Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); - Qt::WindowFlags windowFlags() const; WId winId() const; void setParent(const QPlatformWindow *window); -- cgit v0.12 From bb0480a03bba6b23dd1e35ea1a8cc62e4f4a0219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 9 Feb 2011 12:05:54 +0100 Subject: Added workaround to make XCB key event handling detect upper case. --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 29 ++++++++++++++--------------- src/plugins/platforms/xcb/qxcbkeyboard.h | 3 +++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index b226e3e..83f053a 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -911,10 +911,8 @@ QXcbKeyboard::~QXcbKeyboard() xcb_key_symbols_free(m_key_symbols); } -void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) +void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time) { - xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); - QByteArray chars; chars.resize(513); @@ -922,25 +920,26 @@ void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_even int qtcode = 0; int count = 0; - QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); + if (state & XCB_MOD_MASK_SHIFT && sym <= 0x7f && isalpha(sym)) + sym = toupper(sym); - QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyPress, qtcode, modifiers, string.left(count)); + QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count); + + QWindowSystemInterface::handleKeyEvent(widget, time, type, qtcode, modifiers, string.left(count)); } -void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) +void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) { - xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); - - QByteArray chars; - chars.resize(513); + xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); - Qt::KeyboardModifiers modifiers; - int qtcode = 0; - int count = 0; + handleKeyEvent(widget, QEvent::KeyPress, sym, event->state, event->time); +} - QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); +void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) +{ + xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); - QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyRelease, qtcode, modifiers, string.left(count)); + handleKeyEvent(widget, QEvent::KeyRelease, sym, event->state, event->time); } void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h index dc4175a..89c7418 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.h +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -46,6 +46,8 @@ #include "xcb/xcb_keysyms.h" +#include + class QXcbKeyboard : public QXcbObject { public: @@ -60,6 +62,7 @@ public: Qt::KeyboardModifiers translateModifiers(int s); private: + void handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time); int translateKeySym(uint key) const; QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers, -- cgit v0.12 From 69a0d3bdbfecdbf559aa6d0132281ad64b88fac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 9 Feb 2011 12:36:16 +0100 Subject: Better handling of key codes in XCB backend. Using xcb_key_symbols_get_keysym seems to give better results compared to xcb_key_press_lookup_keysym xcb_key_release_lookup_keysym. --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 29 ++++++++++++++++++----------- src/plugins/platforms/xcb/qxcbkeyboard.h | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index 83f053a..67039a7 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -911,18 +911,29 @@ QXcbKeyboard::~QXcbKeyboard() xcb_key_symbols_free(m_key_symbols); } -void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time) +void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time) { + int col = state & XCB_MOD_MASK_SHIFT ? 1 : 0; + + const int altGrOffset = 4; + if (state & 128) + col += altGrOffset; + + xcb_keysym_t sym = xcb_key_symbols_get_keysym(m_key_symbols, code, col); + + if (state & XCB_MOD_MASK_LOCK && sym <= 0x7f && isprint(sym)) { + if (isupper(sym)) + sym = tolower(sym); + else + sym = toupper(sym); + } + QByteArray chars; - chars.resize(513); Qt::KeyboardModifiers modifiers; int qtcode = 0; int count = 0; - if (state & XCB_MOD_MASK_SHIFT && sym <= 0x7f && isalpha(sym)) - sym = toupper(sym); - QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count); QWindowSystemInterface::handleKeyEvent(widget, time, type, qtcode, modifiers, string.left(count)); @@ -930,16 +941,12 @@ void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) { - xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); - - handleKeyEvent(widget, QEvent::KeyPress, sym, event->state, event->time); + handleKeyEvent(widget, QEvent::KeyPress, event->detail, event->state, event->time); } void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) { - xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); - - handleKeyEvent(widget, QEvent::KeyRelease, sym, event->state, event->time); + handleKeyEvent(widget, QEvent::KeyRelease, event->detail, event->state, event->time); } void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h index 89c7418..2a17e48 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.h +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -62,7 +62,7 @@ public: Qt::KeyboardModifiers translateModifiers(int s); private: - void handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time); + void handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time); int translateKeySym(uint key) const; QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers, -- cgit v0.12 From cb742e70f0d2fb992d27045f6d3d9624bd10ced5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Feb 2011 14:55:24 +0100 Subject: Dont include EGL header when compiling with QT_NO_EGL --- src/opengl/qgl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 9f31c62..ffde515 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -97,7 +97,7 @@ #include "qlibrary.h" #include -#ifdef QT_OPENGL_ES +#if defined(QT_OPENGL_ES) && !defined(QT_NO_EGL) #include #endif -- cgit v0.12 From 5112afc9eeb546f27e2fa5d655418ee7c544b109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Feb 2011 15:00:16 +0100 Subject: Add highest pixel format option to q_configFromQPlatformWindowFormat The default is still the old behavior --- .../platforms/eglconvenience/qeglconvenience.cpp | 18 +++++++++--------- src/plugins/platforms/eglconvenience/qeglconvenience.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index 1612f79..acdbf24 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -206,7 +206,7 @@ bool q_reduceConfigAttributes(QVector *configAttributes) return false; } -EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format) +EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format, bool highestPixelFormat) { EGLConfig cfg = 0; QVector configureAttributes = q_createConfigAttributesFromFormat(format); @@ -227,14 +227,14 @@ EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformW if (!eglChooseConfig(display, configureAttributes.constData(), 0, 0, &matching) || !matching) continue; -// // If we want the best pixel format, then return the first -// // matching configuration. -// if (match == QEgl::BestPixelFormat) { -// eglChooseConfig(display, props.properties(), &cfg, 1, &matching); -// if (matching < 1) -// continue; -// return cfg; -// } + // If we want the best pixel format, then return the first + // matching configuration. + if (highestPixelFormat) { + eglChooseConfig(display, configureAttributes.constData(), &cfg, 1, &matching); + if (matching < 1) + continue; + return cfg; + } // Fetch all of the matching configurations and find the // first that matches the pixel format we wanted. diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index 98c30b8..a1df3cc 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); bool q_reduceConfigAttributes(QVector *configAttributes); -EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format); +EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format, bool highestPixelFormat = false); QPlatformWindowFormat qt_qPlatformWindowFormatFromConfig(EGLDisplay display, const EGLConfig config); bool q_hasEglExtension(EGLDisplay display,const char* extensionName); -- cgit v0.12 From f45102d9e53dc1ac8bde83fc27d83834c79cae93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Feb 2011 15:03:36 +0100 Subject: Export QGLEngineSharedShaders --- src/opengl/gl2paintengineex/qglengineshadermanager_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h index 16a7d66..7cc9dc3 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h @@ -259,7 +259,7 @@ static const GLuint QT_PMV_MATRIX_3_ATTR = 5; class QGLEngineShaderProg; -class QGLEngineSharedShaders +class Q_OPENGL_EXPORT QGLEngineSharedShaders { Q_GADGET public: -- cgit v0.12 From c902dcc8943a2bfcb6432d46303ace46def6fe86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Feb 2011 15:16:14 +0100 Subject: Lighthouse: Wayland: Use EGLSurface --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 4 +- src/plugins/platforms/wayland/qwaylanddisplay.h | 11 +- .../platforms/wayland/qwaylanddrmsurface.cpp | 245 +++++++-------------- src/plugins/platforms/wayland/qwaylanddrmsurface.h | 71 +----- .../platforms/wayland/qwaylandeglwindow.cpp | 115 ++++++++++ src/plugins/platforms/wayland/qwaylandeglwindow.h | 68 ++++++ .../platforms/wayland/qwaylandglcontext.cpp | 64 +++--- src/plugins/platforms/wayland/qwaylandglcontext.h | 17 +- src/plugins/platforms/wayland/qwaylandinclude.h | 72 ++++++ .../platforms/wayland/qwaylandintegration.cpp | 14 +- src/plugins/platforms/wayland/qwaylandscreen.cpp | 19 ++ src/plugins/platforms/wayland/qwaylandscreen.h | 3 + .../platforms/wayland/qwaylandshmsurface.cpp | 23 +- .../platforms/wayland/qwaylandshmwindow.cpp | 89 ++++++++ src/plugins/platforms/wayland/qwaylandshmwindow.h | 63 ++++++ src/plugins/platforms/wayland/qwaylandwindow.cpp | 35 +-- src/plugins/platforms/wayland/qwaylandwindow.h | 25 ++- src/plugins/platforms/wayland/wayland.pro | 31 ++- 18 files changed, 628 insertions(+), 341 deletions(-) create mode 100644 src/plugins/platforms/wayland/qwaylandeglwindow.cpp create mode 100644 src/plugins/platforms/wayland/qwaylandeglwindow.h create mode 100644 src/plugins/platforms/wayland/qwaylandinclude.h create mode 100644 src/plugins/platforms/wayland/qwaylandshmwindow.cpp create mode 100644 src/plugins/platforms/wayland/qwaylandshmwindow.h diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 0747afd..ca23165 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -50,8 +50,6 @@ #include #include -#include - struct wl_surface *QWaylandDisplay::createSurface() { return wl_compositor_create_surface(mCompositor); @@ -186,7 +184,7 @@ QWaylandDisplay::QWaylandDisplay(void) mNativeEglDisplay = wl_egl_display_create(mDisplay); - mEglDisplay = eglGetDisplay(mNativeEglDisplay); + mEglDisplay = eglGetDisplay((EGLNativeDisplayType)mNativeEglDisplay); if (mEglDisplay == NULL) { qWarning("EGL not available"); } else { diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h index 375a9c1..ca31756 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay.h @@ -44,13 +44,12 @@ #include #include +#include +#include +#include +#include -#include - -#define MESA_EGL_NO_X11_HEADERS -#define EGL_EGLEXT_PROTOTYPES -#include -#include +#include "qwaylandinclude.h" class QWaylandInputDevice; class QSocketNotifier; diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp index aaf4a5c..38bbc59 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp @@ -38,183 +38,104 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qwaylanddrmsurface.h" #include "qwaylanddisplay.h" #include "qwaylandwindow.h" #include "qwaylandscreen.h" -#include -#include -#include -#include +#include +#include -#include -#include +#include QT_BEGIN_NAMESPACE -/* - * Shared DRM surface for GL based drawing - */ -QWaylandDrmBuffer::QWaylandDrmBuffer(QWaylandDisplay *display, - const QSize &size, QImage::Format format) - : mDisplay(display) - , mSize(size) -{ - struct wl_visual *visual; - - switch (format) { - case QImage::Format_ARGB32: - visual = display->argbVisual(); - break; - case QImage::Format_ARGB32_Premultiplied: - visual = display->argbPremultipliedVisual(); - break; - default: - qDebug("unsupported buffer format %d requested\n", format); - visual = display->argbVisual(); - break; - } - - mPixmap = wl_egl_pixmap_create(display->nativeDisplay(), - size.width(), size.height(), - visual, 0); - - mImage = eglCreateImageKHR(display->eglDisplay(), - NULL, EGL_NATIVE_PIXMAP_KHR, - (EGLClientBuffer) mPixmap, NULL); - glGenTextures(1, &mTexture); - qDebug() << "generating mTexture" << mTexture; - glBindTexture(GL_TEXTURE_2D, mTexture); - glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, mImage); - mBuffer = wl_egl_pixmap_create_buffer(display->nativeDisplay(), mPixmap); -} - -QWaylandDrmBuffer::~QWaylandDrmBuffer(void) +static void drawTexture(const QRectF &rect, GLuint tex_id, const QSize &texSize, const QRectF &br) { - glDeleteTextures(1, &mTexture); - eglDestroyImageKHR(mDisplay->eglDisplay(), mImage); - wl_egl_pixmap_destroy(mPixmap); - wl_buffer_destroy(mBuffer); -} + const GLenum target = GL_TEXTURE_2D; + QRectF src = br.isEmpty() + ? QRectF(QPointF(), texSize) + : QRectF(QPointF(br.x(), texSize.height() - br.bottom()), br.size()); -void QWaylandDrmBuffer::bindToCurrentFbo() -{ - Q_ASSERT(QPlatformGLContext::currentContext()); - glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, - GL_TEXTURE_2D, mTexture, 0); - QT_CHECK_GLERROR(); -} + if (target == GL_TEXTURE_2D) { + qreal width = texSize.width(); + qreal height = texSize.height(); -QWaylandPaintDevice::QWaylandPaintDevice(QWaylandDisplay *display, QWindowSurface *windowSurface, QPlatformGLContext *context) - : QGLPaintDevice() - , mDisplay(display) - , mPlatformGLContext(context) - , mWindowSurface(windowSurface) - , mBufferList(1) - , mCurrentPaintBuffer(0) - , mDepthStencil(0) -{ - for (int i = 0; i < mBufferList.size(); i++) { - mBufferList[i] = 0; + src.setLeft(src.left() / width); + src.setRight(src.right() / width); + src.setTop(src.top() / height); + src.setBottom(src.bottom() / height); } - mPlatformGLContext->makeCurrent(); - glGenFramebuffers(1, &m_thisFBO); - glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO); + const GLfloat tx1 = src.left(); + const GLfloat tx2 = src.right(); + const GLfloat ty1 = src.top(); + const GLfloat ty2 = src.bottom(); - glGenRenderbuffers(1, &mDepthStencil); - glBindRenderbuffer(GL_RENDERBUFFER_EXT, mDepthStencil); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, mDepthStencil); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, mDepthStencil); + GLfloat texCoordArray[4*2] = { + tx1, ty2, tx2, ty2, tx2, ty1, tx1, ty1 + }; - if (windowSurface->size().isValid()) - resize(windowSurface->size()); -} + GLfloat vertexArray[4*2]; + vertexArray[0] = rect.left(); vertexArray[1] = rect.top(); + vertexArray[2] = rect.right(); vertexArray[3] = rect.top(); + vertexArray[4] = rect.right(); vertexArray[5] = rect.bottom(); + vertexArray[6] = rect.left(); vertexArray[7] = rect.bottom(); -QWaylandPaintDevice::~QWaylandPaintDevice() -{ - for(int i = 0; i < mBufferList.size(); i++) { - delete mBufferList[i]; - } - glDeleteRenderbuffers(1,&mDepthStencil); - glDeleteFramebuffers(1,&m_thisFBO); -} + glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, vertexArray); + glVertexAttribPointer(QT_TEXTURE_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, texCoordArray); -QSize QWaylandPaintDevice::size() const -{ - return mSize; -} -QGLContext *QWaylandPaintDevice::context() const -{ - return QGLContext::fromPlatformGLContext(mPlatformGLContext); -} -QPaintEngine *QWaylandPaintDevice::paintEngine() const -{ - return qt_qgl_paint_engine(); -} + glBindTexture(target, tex_id); -void QWaylandPaintDevice::beginPaint() -{ - QGLPaintDevice::beginPaint(); - currentDrmBuffer()->bindToCurrentFbo(); -} + glEnableVertexAttribArray(QT_VERTEX_COORDS_ATTR); + glEnableVertexAttribArray(QT_TEXTURE_COORDS_ATTR); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + glDisableVertexAttribArray(QT_VERTEX_COORDS_ATTR); + glDisableVertexAttribArray(QT_TEXTURE_COORDS_ATTR); -bool QWaylandPaintDevice::isFlipped()const -{ - return true; + glBindTexture(target, 0); } -void QWaylandPaintDevice::resize(const QSize &size) +static void blitTexture(QGLContext *ctx, GLuint texture, const QSize &viewport, const QSize &texSize, const QRect &targetRect, const QRect &sourceRect) { - QImage::Format format = QPlatformScreen::platformScreenForWidget(mWindowSurface->window())->format(); - mPlatformGLContext->makeCurrent(); - mSize = size; - for (int i = 0; i < mBufferList.size(); i++) { - if (!mBufferList.at(i) || mBufferList.at(i)->size() != size) { - delete mBufferList[i]; - mBufferList[i] = new QWaylandDrmBuffer(mDisplay, size, format); - } - } + glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); + glDisable(GL_BLEND); + glViewport(0, 0, viewport.width(), viewport.height()); - glBindRenderbuffer(GL_RENDERBUFFER_EXT,mDepthStencil); - glRenderbufferStorage(GL_RENDERBUFFER_EXT, - GL_DEPTH24_STENCIL8_EXT, size.width(), size.height()); + QGLShaderProgram *blitProgram = + QGLEngineSharedShaders::shadersForContext(ctx)->blitProgram(); + blitProgram->bind(); + blitProgram->setUniformValue("imageTexture", 0 /*QT_IMAGE_TEXTURE_UNIT*/); - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); + // The shader manager's blit program does not multiply the + // vertices by the pmv matrix, so we need to do the effect + // of the orthographic projection here ourselves. + QRectF r; + qreal w = viewport.width(); + qreal h = viewport.height(); + r.setLeft((targetRect.left() / w) * 2.0f - 1.0f); + if (targetRect.right() == (viewport.width() - 1)) + r.setRight(1.0f); + else + r.setRight((targetRect.right() / w) * 2.0f - 1.0f); + r.setBottom((targetRect.top() / h) * 2.0f - 1.0f); + if (targetRect.bottom() == (viewport.height() - 1)) + r.setTop(1.0f); + else + r.setTop((targetRect.bottom() / w) * 2.0f - 1.0f); - switch(status) { - case GL_NO_ERROR: - case GL_FRAMEBUFFER_COMPLETE_EXT: - qDebug() << "fbo ok"; - break; - default: - qDebug() <<"QWaylandDrmBuffer error: "<< status; - break; - } - QT_CHECK_GLERROR(); -} - -QWaylandDrmBuffer *QWaylandPaintDevice::currentDrmBuffer() const -{ - return mBufferList[mCurrentPaintBuffer]; -} -QWaylandDrmBuffer *QWaylandPaintDevice::currentDrmBufferAndSwap() -{ - QWaylandDrmBuffer *currentDrmBuffer = mBufferList[mCurrentPaintBuffer]; - mCurrentPaintBuffer = (mCurrentPaintBuffer +1) % mBufferList.size(); - return currentDrmBuffer; + drawTexture(r, texture, texSize, sourceRect); } QWaylandDrmWindowSurface::QWaylandDrmWindowSurface(QWidget *window) : QWindowSurface(window) , mDisplay(QWaylandScreen::waylandScreenFromWidget(window)->display()) - , mPaintDevice(new QWaylandPaintDevice(mDisplay, this,window->platformWindow()->glContext())) + , mPaintDevice(0) { } @@ -224,41 +145,39 @@ QWaylandDrmWindowSurface::~QWaylandDrmWindowSurface() delete mPaintDevice; } -void QWaylandDrmWindowSurface::beginPaint(const QRegion &) +QPaintDevice *QWaylandDrmWindowSurface::paintDevice() { - window()->platformWindow()->glContext()->makeCurrent(); + return mPaintDevice; } -QPaintDevice *QWaylandDrmWindowSurface::paintDevice() +void QWaylandDrmWindowSurface::beginPaint(const QRegion &) { - return mPaintDevice; + window()->platformWindow()->glContext()->makeCurrent(); + glClearColor(0,0,0,0xff); + glClear(GL_COLOR_BUFFER_BIT); } void QWaylandDrmWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(offset); + Q_UNUSED(region); QWaylandWindow *ww = (QWaylandWindow *) widget->platformWindow(); - glFlush(); - ww->attach(mPaintDevice->currentDrmBufferAndSwap()); + if (mPaintDevice->isBound()) + mPaintDevice->release(); - QVector rects = region.rects(); - for (int i = 0; i < rects.size(); i++) { - QRect r = rects.at(i); - wl_surface_damage(ww->surface(), - r.x(), r.y(), r.width(), r.height()); - } + QRect rect(0,0,size().width(),size().height()); + QGLContext *ctx = QGLContext::fromPlatformGLContext(ww->glContext()); + blitTexture(ctx,mPaintDevice->texture(),size(),mPaintDevice->size(),rect,rect); + ww->glContext()->swapBuffers(); } -void QWaylandDrmWindowSurface::resize(const QSize &requestedSize) +void QWaylandDrmWindowSurface::resize(const QSize &size) { - QWindowSurface::resize(requestedSize); - QWaylandWindow *ww = (QWaylandWindow *) window()->platformWindow(); - - ww->glContext()->makeCurrent(); - - mPaintDevice->resize(requestedSize); - ww->attach(mPaintDevice->currentDrmBuffer()); + QWindowSurface::resize(size); + window()->platformWindow()->glContext()->makeCurrent(); + delete mPaintDevice; + mPaintDevice = new QGLFramebufferObject(size,QGLFramebufferObject::CombinedDepthStencil,GL_TEXTURE_2D,GL_RGBA); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.h b/src/plugins/platforms/wayland/qwaylanddrmsurface.h index f49263b..78418ee 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.h +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.h @@ -43,76 +43,10 @@ #define QWAYLANDDRMSURFACE_H #include "qwaylanddisplay.h" -#include "qwaylandbuffer.h" #include -#include -#include -#define GL_GLEXT_PROTOTYPES -#include -#include - -#define QT_RESET_GLERROR() \ -{ \ - while (glGetError() != GL_NO_ERROR) {} \ -} -#define QT_CHECK_GLERROR() \ -{ \ - GLenum err = glGetError(); \ - if (err != GL_NO_ERROR) { \ - qDebug("[%s line %d] GL Error: 0x%x", \ - __FILE__, __LINE__, (int)err); \ - } \ -} - -class QWaylandDrmBuffer : public QWaylandBuffer { -public: - QWaylandDrmBuffer(QWaylandDisplay *display, - const QSize &size, QImage::Format format); - ~QWaylandDrmBuffer(); - - void bindToCurrentFbo(); - QSize size() const { return mSize; } - -private: - struct wl_egl_pixmap *mPixmap; - EGLImageKHR mImage; - QWaylandDisplay *mDisplay; - QSize mSize; - GLuint mTexture; - -}; - -class QWaylandPaintDevice : public QGLPaintDevice -{ -public: - QWaylandPaintDevice(QWaylandDisplay *display, QWindowSurface *windowSurface, QPlatformGLContext *context); - ~QWaylandPaintDevice(); - - QSize size() const; - QGLContext *context() const; - QPaintEngine *paintEngine() const; - - void beginPaint(); - - bool isFlipped()const; - - void resize(const QSize &size); - - QWaylandDrmBuffer *currentDrmBuffer() const; - QWaylandDrmBuffer *currentDrmBufferAndSwap(); - -private: - QWaylandDisplay *mDisplay; - QPlatformGLContext *mPlatformGLContext; - QWindowSurface *mWindowSurface; - QVarLengthArray mBufferList; - int mCurrentPaintBuffer; - GLuint mDepthStencil; - QSize mSize; - -}; +class QGLFramebufferObject; class QWaylandDrmWindowSurface : public QWindowSurface { @@ -124,12 +58,13 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size); private: QWaylandDisplay *mDisplay; - QWaylandPaintDevice *mPaintDevice; + QGLFramebufferObject *mPaintDevice; }; #endif // QWAYLANDDRMSURFACE_H diff --git a/src/plugins/platforms/wayland/qwaylandeglwindow.cpp b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp new file mode 100644 index 0000000..6e5e5bb --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandeglwindow.h" + +#include "qwaylandscreen.h" +#include "qwaylandglcontext.h" + +#include + + +QWaylandEglWindow::QWaylandEglWindow(QWidget *window) + : QWaylandWindow(window) + , mGLContext(0) + , mWaylandEglWindow(0) +{ + //super creates a new surface + newSurfaceCreated(); +} + +QWaylandEglWindow::~QWaylandEglWindow() +{ + if (mGLContext) + delete mGLContext; +} + +QWaylandWindow::WindowType QWaylandEglWindow::windowType() const +{ + return QWaylandWindow::Egl; +} + +void QWaylandEglWindow::setGeometry(const QRect &rect) +{ + QWaylandWindow::setGeometry(rect); + if (mWaylandEglWindow) { + wl_egl_window_resize(mWaylandEglWindow,rect.width(),rect.height(),0,0); + } +} + +void QWaylandEglWindow::setParent(const QPlatformWindow *parent) +{ + const QWaylandWindow *wParent = static_cast(parent); + + mParentWindow = wParent; +} + +QPlatformGLContext * QWaylandEglWindow::glContext() const +{ + if (!mGLContext) { + QWaylandEglWindow *that = const_cast(this); + that->mGLContext = new QWaylandGLContext(that->mDisplay,widget()->platformWindowFormat()); + + EGLNativeWindowType window(reinterpret_cast(mWaylandEglWindow)); + EGLSurface surface = eglCreateWindowSurface(mDisplay->eglDisplay(),mGLContext->eglConfig(),window,NULL); + that->mGLContext->setEglSurface(surface); + } + + return mGLContext; +} + +void QWaylandEglWindow::newSurfaceCreated() +{ + if (mWaylandEglWindow) { + wl_egl_window_destroy(mWaylandEglWindow); + } + wl_visual *visual = QWaylandScreen::waylandScreenFromWidget(widget())->visual(); + QSize size = geometry().size(); + if (!size.isValid()) + size = QSize(0,0); + + mWaylandEglWindow = wl_egl_window_create(mSurface,size.width(),size.height(),visual); + if (mGLContext) { + EGLNativeWindowType window(reinterpret_cast(mWaylandEglWindow)); + EGLSurface surface = eglCreateWindowSurface(mDisplay->eglDisplay(),mGLContext->eglConfig(),window,NULL); + mGLContext->setEglSurface(surface); + } +} diff --git a/src/plugins/platforms/wayland/qwaylandeglwindow.h b/src/plugins/platforms/wayland/qwaylandeglwindow.h new file mode 100644 index 0000000..4b3bb5b --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandeglwindow.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDEGLWINDOW_H +#define QWAYLANDEGLWINDOW_H + +#include "qwaylandwindow.h" + +class QWaylandGLContext; + +class QWaylandEglWindow : public QWaylandWindow +{ +public: + QWaylandEglWindow(QWidget *window); + ~QWaylandEglWindow(); + WindowType windowType() const; + void setGeometry(const QRect &rect); + void setParent(const QPlatformWindow *parent); + QPlatformGLContext *glContext() const; +protected: + void newSurfaceCreated(); +private: + QWaylandGLContext *mGLContext; + struct wl_egl_window *mWaylandEglWindow; + EGLConfig mConfig; + + const QWaylandWindow *mParentWindow; +}; + +#endif // QWAYLANDEGLWINDOW_H diff --git a/src/plugins/platforms/wayland/qwaylandglcontext.cpp b/src/plugins/platforms/wayland/qwaylandglcontext.cpp index 23631d9..3720567 100644 --- a/src/plugins/platforms/wayland/qwaylandglcontext.cpp +++ b/src/plugins/platforms/wayland/qwaylandglcontext.cpp @@ -45,25 +45,21 @@ #include "qwaylandwindow.h" #include "qwaylanddrmsurface.h" +#include "../eglconvenience/qeglconvenience.h" + #include #include -#include -#include - Q_GLOBAL_STATIC(QMutex,qt_defaultSharedContextMutex) -EGLint QWaylandGLContext::contextAttibutes[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, - EGL_NONE -}; - QWaylandGLContext::QWaylandGLContext(QWaylandDisplay *wd, const QPlatformWindowFormat &format) : QPlatformGLContext() - , mFormat(format) , mDisplay(wd) + , mSurface(EGL_NO_SURFACE) + , mConfig(q_configFromQPlatformWindowFormat(mDisplay->eglDisplay(),format,true)) + , mFormat(qt_qPlatformWindowFormatFromConfig(mDisplay->eglDisplay(),mConfig)) { - QPlatformGLContext *sharePlatformContext; + QPlatformGLContext *sharePlatformContext = 0; if (format.useDefaultSharedContext()) { if (!QPlatformGLContext::defaultSharedContext()) { if (qt_defaultSharedContextMutex()->tryLock()){ @@ -84,26 +80,22 @@ QWaylandGLContext::QWaylandGLContext(QWaylandDisplay *wd, const QPlatformWindowF shareEGLContext = static_cast(sharePlatformContext)->mContext; eglBindAPI(EGL_OPENGL_ES_API); - mContext = eglCreateContext(mDisplay->eglDisplay(), NULL, - shareEGLContext, contextAttibutes); - - mFormat.setAccum(false); - mFormat.setAlphaBufferSize(8); - mFormat.setRedBufferSize(8); - mFormat.setGreenBufferSize(8); - mFormat.setBlueBufferSize(8); - mFormat.setDepth(false); -// mFormat.setDepthBufferSize(8); - mFormat.setStencil(false); -// mFormat.setStencilBufferSize(24); -// mFormat.setSampleBuffers(false); + QVector eglContextAttrs; + eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + eglContextAttrs.append(2); + eglContextAttrs.append(EGL_NONE); + + mContext = eglCreateContext(mDisplay->eglDisplay(), mConfig, + shareEGLContext, eglContextAttrs.constData()); } QWaylandGLContext::QWaylandGLContext() : QPlatformGLContext() , mDisplay(0) , mContext(EGL_NO_CONTEXT) + , mSurface(EGL_NO_SURFACE) + , mConfig(0) { } QWaylandGLContext::~QWaylandGLContext() @@ -114,7 +106,10 @@ QWaylandGLContext::~QWaylandGLContext() void QWaylandGLContext::makeCurrent() { QPlatformGLContext::makeCurrent(); - eglMakeCurrent(mDisplay->eglDisplay(), EGL_NO_SURFACE, EGL_NO_SURFACE, mContext); + if (mSurface == EGL_NO_SURFACE) { + qWarning("makeCurrent with EGL_NO_SURFACE"); + } + eglMakeCurrent(mDisplay->eglDisplay(), mSurface, mSurface, mContext); } void QWaylandGLContext::doneCurrent() @@ -125,6 +120,7 @@ void QWaylandGLContext::doneCurrent() void QWaylandGLContext::swapBuffers() { + eglSwapBuffers(mDisplay->eglDisplay(),mSurface); } void *QWaylandGLContext::getProcAddress(const QString &string) @@ -134,10 +130,26 @@ void *QWaylandGLContext::getProcAddress(const QString &string) void QWaylandGLContext::createDefaultSharedContex(QWaylandDisplay *display) { + QVector eglContextAttrs; + eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + eglContextAttrs.append(2); + eglContextAttrs.append(EGL_NONE); + QWaylandGLContext *defaultSharedContext = new QWaylandGLContext; defaultSharedContext->mDisplay = display; - defaultSharedContext->mContext = eglCreateContext(mDisplay->eglDisplay(), NULL, - EGL_NO_CONTEXT, contextAttibutes); + defaultSharedContext->mContext = eglCreateContext(mDisplay->eglDisplay(),mConfig, + EGL_NO_CONTEXT, eglContextAttrs.constData()); QPlatformGLContext::setDefaultSharedContext(defaultSharedContext); } +void QWaylandGLContext::setEglSurface(EGLSurface surface) +{ + doneCurrent(); + mSurface = surface; +} + +EGLConfig QWaylandGLContext::eglConfig() const +{ + return mConfig; +} + diff --git a/src/plugins/platforms/wayland/qwaylandglcontext.h b/src/plugins/platforms/wayland/qwaylandglcontext.h index d9ba323..dd319fd 100644 --- a/src/plugins/platforms/wayland/qwaylandglcontext.h +++ b/src/plugins/platforms/wayland/qwaylandglcontext.h @@ -42,17 +42,14 @@ #ifndef QWAYLANDGLCONTEXT_H #define QWAYLANDGLCONTEXT_H +#include "qwaylanddisplay.h" + #include -#include -class QWaylandDisplay; class QWaylandWindow; class QWaylandDrmWindowSurface; -#define MESA_EGL_NO_X11_HEADERS -#define EGL_EGLEXT_PROTOTYPES -#include -#include +#include "qwaylandinclude.h" class QWaylandGLContext : public QPlatformGLContext { public: @@ -62,14 +59,18 @@ public: void doneCurrent(); void swapBuffers(); void* getProcAddress(const QString&); + QPlatformWindowFormat platformWindowFormat() const { return mFormat; } + void setEglSurface(EGLSurface surface); + EGLConfig eglConfig() const; private: - QPlatformWindowFormat mFormat; QWaylandDisplay *mDisplay; - static EGLint contextAttibutes[]; EGLContext mContext; + EGLSurface mSurface; + EGLConfig mConfig; + QPlatformWindowFormat mFormat; void createDefaultSharedContex(QWaylandDisplay *display); QWaylandGLContext(); diff --git a/src/plugins/platforms/wayland/qwaylandinclude.h b/src/plugins/platforms/wayland/qwaylandinclude.h new file mode 100644 index 0000000..d1f7e39 --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandinclude.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDINCLUDE_H +#define QWAYLANDINCLUDE_H + +#include + +#include + +#define GL_GLEXT_PROTOTYPES +#include +#include + +//#define MESA_EGL_NO_X11_HEADERS +#define EGL_EGLEXT_PROTOTYPES + #include + #include + +#undef FocusOut +#undef FocusIn +#undef KeyPress +#undef KeyRelease +#undef None +#undef RevertToParent +#undef GrayScale +#undef CursorShape + +#ifdef FontChange +#undef FontChange +#endif + + +#endif // QWAYLANDINCLUDE_H diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 02bc680..9483a47 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -44,7 +44,8 @@ #include "qwaylanddisplay.h" #include "qwaylandshmsurface.h" #include "qwaylanddrmsurface.h" -#include "qwaylandwindow.h" +#include "qwaylandshmwindow.h" +#include "qwaylandeglwindow.h" #include "qfontconfigdatabase.h" @@ -80,16 +81,21 @@ QPixmapData *QWaylandIntegration::createPixmapData(QPixmapData::PixelType type) QPlatformWindow *QWaylandIntegration::createPlatformWindow(QWidget *widget, WId winId) const { Q_UNUSED(winId); - return new QWaylandWindow(widget); + bool useOpenGL = mUseOpenGL || (widget->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL); + if (useOpenGL) + return new QWaylandEglWindow(widget); + + return new QWaylandShmWindow(widget); } QWindowSurface *QWaylandIntegration::createWindowSurface(QWidget *widget, WId winId) const { Q_UNUSED(winId); Q_UNUSED(winId); - - if (mUseOpenGL) + bool useOpenGL = mUseOpenGL || (widget->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL); + if (useOpenGL) return new QWaylandDrmWindowSurface(widget); + return new QWaylandShmWindowSurface(widget); } diff --git a/src/plugins/platforms/wayland/qwaylandscreen.cpp b/src/plugins/platforms/wayland/qwaylandscreen.cpp index aa1083f..35e2532 100644 --- a/src/plugins/platforms/wayland/qwaylandscreen.cpp +++ b/src/plugins/platforms/wayland/qwaylandscreen.cpp @@ -85,3 +85,22 @@ QWaylandScreen * QWaylandScreen::waylandScreenFromWidget(QWidget *widget) QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWidget(widget); return static_cast(platformScreen); } + +wl_visual * QWaylandScreen::visual() const +{ + struct wl_visual *visual; + + switch (format()) { + case QImage::Format_ARGB32: + visual = mWaylandDisplay->argbVisual(); + break; + case QImage::Format_ARGB32_Premultiplied: + visual = mWaylandDisplay->argbPremultipliedVisual(); + break; + default: + qDebug("unsupported buffer format %d requested\n", format()); + visual = mWaylandDisplay->argbVisual(); + break; + } + return visual; +} diff --git a/src/plugins/platforms/wayland/qwaylandscreen.h b/src/plugins/platforms/wayland/qwaylandscreen.h index 368859f..7784646 100644 --- a/src/plugins/platforms/wayland/qwaylandscreen.h +++ b/src/plugins/platforms/wayland/qwaylandscreen.h @@ -46,6 +46,7 @@ class QWaylandDisplay; class QWaylandCursor; +struct wl_visual; class QWaylandScreen : public QPlatformScreen { @@ -59,6 +60,8 @@ public: int depth() const; QImage::Format format() const; + wl_visual *visual() const; + static QWaylandScreen *waylandScreenFromWidget(QWidget *widget); private: diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp index 83bb993..9bcae26 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp @@ -44,7 +44,7 @@ #include #include "qwaylanddisplay.h" -#include "qwaylandwindow.h" +#include "qwaylandshmwindow.h" #include "qwaylandscreen.h" #include @@ -111,23 +111,22 @@ void QWaylandShmWindowSurface::flush(QWidget *widget, const QRegion ®ion, con { Q_UNUSED(widget); Q_UNUSED(offset); - QWaylandWindow *ww = (QWaylandWindow *) window()->platformWindow(); - QVector rects = region.rects(); - const QRect *r; - int i; + QWaylandShmWindow *waylandWindow = static_cast(window()->platformWindow()); + Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm); - for (i = 0; i < rects.size(); i++) { - r = &rects.at(i); - wl_surface_damage(ww->surface(), - r->x(), r->y(), r->width(), r->height()); + QVector rects = region.rects(); + for (int i = 0; i < rects.size(); i++) { + waylandWindow->damage(rects.at(i)); } } void QWaylandShmWindowSurface::resize(const QSize &size) { - QWaylandWindow *ww = (QWaylandWindow *) window()->platformWindow(); + QWaylandShmWindow *waylandWindow = static_cast(window()->platformWindow()); + Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm); + QWindowSurface::resize(size); - QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format(); + QImage::Format format = QPlatformScreen::platformScreenForWidget(window())->format(); if (mBuffer != NULL && mBuffer->size() == size) return; @@ -137,7 +136,7 @@ void QWaylandShmWindowSurface::resize(const QSize &size) mBuffer = new QWaylandShmBuffer(mDisplay, size, format); - ww->attach(mBuffer); + waylandWindow->attach(mBuffer); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.cpp b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp new file mode 100644 index 0000000..cafd2d0 --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwaylandshmwindow.h" + +#include "qwaylandbuffer.h" + +QWaylandShmWindow::QWaylandShmWindow(QWidget *widget) + : QWaylandWindow(widget) + , mBuffer(0) +{ + newSurfaceCreated(); +} + +QWaylandShmWindow::~QWaylandShmWindow() +{ + +} + +QWaylandWindow::WindowType QWaylandShmWindow::windowType() const +{ + return QWaylandWindow::Shm; +} + +QPlatformGLContext * QWaylandShmWindow::glContext() const +{ + qWarning("Trying to retrieve a glContext from a Raster window surface!"); + return 0; +} + +void QWaylandShmWindow::attach(QWaylandBuffer *buffer) +{ + mBuffer = buffer; + if (mSurface) { + wl_surface_attach(mSurface, buffer->buffer(),0,0); + } +} + + +void QWaylandShmWindow::damage(const QRect &rect) +{ + wl_surface_damage(mSurface, + rect.x(), rect.y(), rect.width(), rect.height()); +} + +void QWaylandShmWindow::newSurfaceCreated() +{ + if (mBuffer) { + wl_surface_attach(mSurface,mBuffer->buffer(),0,0); + } +} diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.h b/src/plugins/platforms/wayland/qwaylandshmwindow.h new file mode 100644 index 0000000..14a29d2 --- /dev/null +++ b/src/plugins/platforms/wayland/qwaylandshmwindow.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWAYLANDSHMWINDOW_H +#define QWAYLANDSHMWINDOW_H + +#include "qwaylandwindow.h" + +class QWaylandShmWindow : public QWaylandWindow +{ +public: + QWaylandShmWindow(QWidget *widget); + ~QWaylandShmWindow(); + + WindowType windowType() const; + QPlatformGLContext *glContext() const; + void attach(QWaylandBuffer *buffer); + void damage(const QRect &rect); +protected: + void newSurfaceCreated(); +private: + QWaylandBuffer *mBuffer; +}; + +#endif // QWAYLANDSHMWINDOW_H diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index a28bdfe..934bbff 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -43,10 +43,6 @@ #include "qwaylanddisplay.h" #include "qwaylandscreen.h" -#include "qwaylandglcontext.h" -#include "qwaylandbuffer.h" - -#include "qwaylanddrmsurface.h" #include #include @@ -56,8 +52,6 @@ QWaylandWindow::QWaylandWindow(QWidget *window) : QPlatformWindow(window) , mDisplay(QWaylandScreen::waylandScreenFromWidget(window)->display()) - , mGLContext(0) - , mBuffer(0) { static WId id = 1; mWindowId = id++; @@ -67,8 +61,6 @@ QWaylandWindow::QWaylandWindow(QWidget *window) QWaylandWindow::~QWaylandWindow() { - if (mGLContext) - delete mGLContext; } WId QWaylandWindow::winId() const @@ -78,13 +70,17 @@ WId QWaylandWindow::winId() const void QWaylandWindow::setParent(const QPlatformWindow *parent) { - QWaylandWindow *wParent = (QWaylandWindow *)parent; - - mParentWindow = wParent; + Q_UNUSED(parent); + qWarning("Trying to add a raster window as a sub-window"); } void QWaylandWindow::setVisible(bool visible) { + if (!mSurface) { + mSurface = mDisplay->createSurface(); + newSurfaceCreated(); + } + if (visible) { wl_surface_set_user_data(mSurface, this); wl_surface_map_toplevel(mSurface); @@ -94,13 +90,6 @@ void QWaylandWindow::setVisible(bool visible) } } -void QWaylandWindow::attach(QWaylandBuffer *buffer) -{ - if (mSurface) { - wl_surface_attach(mSurface, buffer->buffer(),0,0); - } -} - void QWaylandWindow::configure(uint32_t time, uint32_t edges, int32_t x, int32_t y, int32_t width, int32_t height) @@ -111,13 +100,3 @@ void QWaylandWindow::configure(uint32_t time, uint32_t edges, QWindowSystemInterface::handleGeometryChange(widget(), geometry); } - -QPlatformGLContext *QWaylandWindow::glContext() const -{ - if (!mGLContext) { - QWaylandWindow *that = const_cast(this); - that->mGLContext = new QWaylandGLContext(mDisplay, widget()->platformWindowFormat()); - } - - return mGLContext; -} diff --git a/src/plugins/platforms/wayland/qwaylandwindow.h b/src/plugins/platforms/wayland/qwaylandwindow.h index 8b047d7..3b51ee7 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.h +++ b/src/plugins/platforms/wayland/qwaylandwindow.h @@ -45,35 +45,38 @@ #include #include +#include "qwaylanddisplay.h" class QWaylandDisplay; class QWaylandBuffer; +struct wl_egl_window; class QWaylandWindow : public QPlatformWindow { public: + enum WindowType { + Shm, + Egl + }; + QWaylandWindow(QWidget *window); ~QWaylandWindow(); - struct wl_surface *surface() { return mSurface; } + virtual WindowType windowType() const = 0; + WId winId() const; void setVisible(bool visible); + void setParent(const QPlatformWindow *parent); + void configure(uint32_t time, uint32_t edges, int32_t x, int32_t y, int32_t width, int32_t height); - WId winId() const; - void setParent(const QPlatformWindow *parent); - QPlatformGLContext *glContext() const; - void attach(QWaylandBuffer *buffer); - QWaylandBuffer *getBuffer(void) { return mBuffer; } - QWaylandWindow *getParentWindow(void) { return mParentWindow; } -private: +protected: struct wl_surface *mSurface; + virtual void newSurfaceCreated() = 0; QWaylandDisplay *mDisplay; - QPlatformGLContext *mGLContext; WId mWindowId; - QWaylandBuffer *mBuffer; - QWaylandWindow *mParentWindow; + }; diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 803a8e9..7e8a1fa 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -9,20 +9,27 @@ SOURCES = main.cpp \ qwaylanddrmsurface.cpp \ qwaylandinputdevice.cpp \ qwaylandglcontext.cpp \ - qwaylandcursor.cpp \ - qwaylanddisplay.cpp \ - qwaylandwindow.cpp \ - qwaylandscreen.cpp + qwaylandcursor.cpp \ + qwaylanddisplay.cpp \ + qwaylandwindow.cpp \ + qwaylandscreen.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + qwaylandeglwindow.cpp \ + qwaylandshmwindow.cpp HEADERS = qwaylandintegration.h \ - qwaylandcursor.h \ - qwaylanddisplay.h \ - qwaylandwindow.h \ - qwaylandscreen.h \ - qwaylandglcontext.h \ - qwaylandshmsurface.h \ - qwaylanddrmsurface.h \ - qwaylandbuffer.h + qwaylandcursor.h \ + qwaylanddisplay.h \ + qwaylandwindow.h \ + qwaylandscreen.h \ + qwaylandglcontext.h \ + qwaylandshmsurface.h \ + qwaylanddrmsurface.h \ + qwaylandbuffer.h \ + ../eglconvenience/qeglconvenience.h \ + qwaylandinclude.h \ + qwaylandeglwindow.h \ + qwaylandshmwindow.h contains(QT_CONFIG, opengl) { QT += opengl -- cgit v0.12 From ea20564a32336c40adb7e3f8e7c5ae13497883c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Feb 2011 15:40:06 +0100 Subject: Remove warning msg in Lighthouse QGLWidget code --- src/opengl/qgl_qpa.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index b865086..d2c0166 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -324,7 +324,6 @@ void QGLWidget::setMouseTracking(bool enable) bool QGLWidget::event(QEvent *e) { - Q_D(QGLWidget); return QWidget::event(e); } -- cgit v0.12 From 909674fce854cd7f761891b918cdf3342e81a0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 10 Feb 2011 10:08:56 +0100 Subject: Lighthouse: Wayland: Fix include --- src/plugins/platforms/wayland/qwaylandeglwindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylandeglwindow.cpp b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp index 6e5e5bb..0bdf44d 100644 --- a/src/plugins/platforms/wayland/qwaylandeglwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp @@ -43,9 +43,7 @@ #include "qwaylandscreen.h" #include "qwaylandglcontext.h" - -#include - +#include "qwaylandinclude.h" QWaylandEglWindow::QWaylandEglWindow(QWidget *window) : QWaylandWindow(window) -- cgit v0.12 From ae873c93125df1c6afe03fe30f70878a8d47414a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 10 Feb 2011 10:09:18 +0100 Subject: Lighthouse: Wayland compile-fix for egl interface change --- src/plugins/platforms/wayland/qwaylandeglwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/wayland/qwaylandeglwindow.cpp b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp index 0bdf44d..ed54bb9 100644 --- a/src/plugins/platforms/wayland/qwaylandeglwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandeglwindow.cpp @@ -104,7 +104,7 @@ void QWaylandEglWindow::newSurfaceCreated() if (!size.isValid()) size = QSize(0,0); - mWaylandEglWindow = wl_egl_window_create(mSurface,size.width(),size.height(),visual); + mWaylandEglWindow = wl_egl_window_create(mDisplay->nativeDisplay(),mSurface,size.width(),size.height(),visual); if (mGLContext) { EGLNativeWindowType window(reinterpret_cast(mWaylandEglWindow)); EGLSurface surface = eglCreateWindowSurface(mDisplay->eglDisplay(),mGLContext->eglConfig(),window,NULL); -- cgit v0.12 From b6e74de57f6f7504148987394c311c215ec7b375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 10:11:55 +0100 Subject: Small improvement to XCB key input handling. If xcb_key_symbols_get_keysym returns XCB_NO_SYMBOL, try the other column. --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index 67039a7..dcb35fd 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -911,6 +911,8 @@ QXcbKeyboard::~QXcbKeyboard() xcb_key_symbols_free(m_key_symbols); } +// #define XCB_KEYBOARD_DEBUG + void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycode_t code, quint16 state, xcb_timestamp_t time) { int col = state & XCB_MOD_MASK_SHIFT ? 1 : 0; @@ -919,7 +921,17 @@ void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycod if (state & 128) col += altGrOffset; +#ifdef XCB_KEYBOARD_DEBUG + printf("key code: %d, state: %d, syms: ", code, state); + for (int i = 0; i <= 5; ++i) { + printf("%d ", xcb_key_symbols_get_keysym(m_key_symbols, code, i)); + } + printf("\n"); +#endif + xcb_keysym_t sym = xcb_key_symbols_get_keysym(m_key_symbols, code, col); + if (sym == XCB_NO_SYMBOL) + sym = xcb_key_symbols_get_keysym(m_key_symbols, code, col ^ 0x1); if (state & XCB_MOD_MASK_LOCK && sym <= 0x7f && isprint(sym)) { if (isupper(sym)) -- cgit v0.12 From e279d2ae598c7b05dff843e021fc8a08199c36de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 10:15:49 +0100 Subject: Fixed 'lingering' dialog bug in XCB backend. We need to flush the XCB command stream after unmapping a window, to ensure it doesn't get delayed. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index b54a233..95110e6 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -130,6 +130,8 @@ void QXcbWindow::setVisible(bool visible) xcb_map_window(xcb_connection(), m_window); else xcb_unmap_window(xcb_connection(), m_window); + + xcb_flush(xcb_connection()); } struct QtMWMHints { -- cgit v0.12 From 51b657a032cb0b9b3c4c7dbfab52c148cf9253af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 15:28:35 +0100 Subject: Added GL support to XCB backend. We need to use a Xlib / XCB hybrid approach, as GLX depends on Xlib, and there's no replacement for XCB. --- src/plugins/platforms/xcb/README | 2 + src/plugins/platforms/xcb/qglxintegration.cpp | 360 ++++++++++++++++++++++++++ src/plugins/platforms/xcb/qglxintegration.h | 87 +++++++ src/plugins/platforms/xcb/qxcbconnection.cpp | 24 +- src/plugins/platforms/xcb/qxcbconnection.h | 10 + src/plugins/platforms/xcb/qxcbintegration.cpp | 10 + src/plugins/platforms/xcb/qxcbintegration.h | 1 + src/plugins/platforms/xcb/qxcbscreen.cpp | 8 +- src/plugins/platforms/xcb/qxcbscreen.h | 5 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 89 +++++-- src/plugins/platforms/xcb/qxcbwindow.h | 6 +- src/plugins/platforms/xcb/xcb.pro | 10 + 12 files changed, 588 insertions(+), 24 deletions(-) create mode 100644 src/plugins/platforms/xcb/README create mode 100644 src/plugins/platforms/xcb/qglxintegration.cpp create mode 100644 src/plugins/platforms/xcb/qglxintegration.h diff --git a/src/plugins/platforms/xcb/README b/src/plugins/platforms/xcb/README new file mode 100644 index 0000000..d250ad0 --- /dev/null +++ b/src/plugins/platforms/xcb/README @@ -0,0 +1,2 @@ +Required packages: +libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev diff --git a/src/plugins/platforms/xcb/qglxintegration.cpp b/src/plugins/platforms/xcb/qglxintegration.cpp new file mode 100644 index 0000000..0cb6b1d --- /dev/null +++ b/src/plugins/platforms/xcb/qglxintegration.cpp @@ -0,0 +1,360 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#include "qxcbwindow.h" +#include "qxcbscreen.h" + +#include +#include +#include + +#include "qglxintegration.h" + +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#include +#endif + +QMutex QGLXContext::m_defaultSharedContextMutex(QMutex::Recursive); + +QVector QGLXContext::buildSpec(const QPlatformWindowFormat &format) +{ + QVector spec(48); + int i = 0; + + spec[i++] = GLX_LEVEL; + spec[i++] = 0; + spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; + + if (format.rgba()) { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); + spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); + spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); + if (format.alpha()) { + spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize(); + } + + spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + + if (format.alpha()) { + spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + } + + } else { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works.... + spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8; + } + + spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; + spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; + + if (format.depth()) { + spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); + } + + if (format.stencil()) { + spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); + } + if (format.sampleBuffers()) { + spec[i++] = GLX_SAMPLE_BUFFERS_ARB; + spec[i++] = 1; + spec[i++] = GLX_SAMPLES_ARB; + spec[i++] = format.samples() == -1 ? 4 : format.samples(); + } + + spec[i++] = None; + return spec; +} + +GLXFBConfig QGLXContext::findConfig(const QXcbScreen *screen, const QPlatformWindowFormat &format) +{ + bool reduced = true; + GLXFBConfig chosenConfig = 0; + QPlatformWindowFormat reducedFormat = format; + while (!chosenConfig && reduced) { + QVector spec = buildSpec(reducedFormat); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(DISPLAY_FROM_XCB(screen), screen->screenNumber(), spec.constData(), &confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (reducedFormat.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(DISPLAY_FROM_XCB(screen), configs[i], GLX_ALPHA_SIZE, &alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } + } + + XFree(configs); + } + reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced); + } + + if (!chosenConfig) + qWarning("Warning no context created"); + + return chosenConfig; +} + +XVisualInfo *QGLXContext::findVisualInfo(const QXcbScreen *screen, const QPlatformWindowFormat &format) +{ + GLXFBConfig config = QGLXContext::findConfig(screen,format); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(DISPLAY_FROM_XCB(screen), config); + return visualInfo; +} + +QPlatformWindowFormat QGLXContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx) +{ + QPlatformWindowFormat format; + int redSize = 0; + int greenSize = 0; + int blueSize = 0; + int alphaSize = 0; + int depthSize = 0; + int stencilSize = 0; + int sampleBuffers = 0; + int sampleCount = 0; + int level = 0; + int rgba = 0; + int stereo = 0; + int accumSizeA = 0; + int accumSizeR = 0; + int accumSizeG = 0; + int accumSizeB = 0; + + XVisualInfo *vi = glXGetVisualFromFBConfig(display,config); + glXGetConfig(display,vi,GLX_RGBA,&rgba); + XFree(vi); + glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); + glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); + glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); + glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); + glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); + glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); + glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers); + glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); + glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_GREEN_SIZE, &accumSizeG); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_BLUE_SIZE, &accumSizeB); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSampleBuffers(sampleBuffers); + if (format.sampleBuffers()) { + glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); + format.setSamples(sampleCount); + } + + format.setDirectRendering(glXIsDirect(display, ctx)); + format.setRgba(rgba); + format.setStereo(stereo); + format.setAccumBufferSize(accumSizeB); + + return format; +} + +QPlatformWindowFormat QGLXContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced) +{ + QPlatformWindowFormat retFormat = format; + *reduced = true; + + if (retFormat.sampleBuffers()) { + retFormat.setSampleBuffers(false); + } else if (retFormat.stereo()) { + retFormat.setStereo(false); + } else if (retFormat.accum()) { + retFormat.setAccum(false); + }else if (retFormat.stencil()) { + retFormat.setStencil(false); + }else if (retFormat.alpha()) { + retFormat.setAlpha(false); + }else if (retFormat.depth()) { + retFormat.setDepth(false); + }else if (retFormat.doubleBuffer()) { + retFormat.setDoubleBuffer(false); + }else{ + *reduced = false; + } + return retFormat; +} + +QGLXContext::QGLXContext(Window window, QXcbScreen *screen, const QPlatformWindowFormat &format) + : QPlatformGLContext() + , m_screen(screen) + , m_drawable((Drawable)window) + , m_context(0) +{ + + const QPlatformGLContext *sharePlatformContext; + if (format.useDefaultSharedContext()) { + if (!QPlatformGLContext::defaultSharedContext()) { + if (m_defaultSharedContextMutex.tryLock()){ + createDefaultSharedContex(screen); + m_defaultSharedContextMutex.unlock(); + } else { + m_defaultSharedContextMutex.lock(); //wait to the the shared context is created + m_defaultSharedContextMutex.unlock(); + } + } + sharePlatformContext = QPlatformGLContext::defaultSharedContext(); + } else { + sharePlatformContext = format.sharedGLContext(); + } + GLXContext shareGlxContext = 0; + if (sharePlatformContext) + shareGlxContext = static_cast(sharePlatformContext)->glxContext(); + + GLXFBConfig config = findConfig(screen,format); + m_context = glXCreateNewContext(DISPLAY_FROM_XCB(screen), config, GLX_RGBA_TYPE, shareGlxContext, TRUE); + m_windowFormat = QGLXContext::platformWindowFromGLXFBConfig(DISPLAY_FROM_XCB(screen), config, m_context); +} + +QGLXContext::QGLXContext(QXcbScreen *screen, Drawable drawable, GLXContext context) + : QPlatformGLContext(), m_screen(screen), m_drawable(drawable), m_context(context) +{ + +} + +QGLXContext::~QGLXContext() +{ + if (m_context) + glXDestroyContext(DISPLAY_FROM_XCB(m_screen), m_context); +} + +void QGLXContext::createDefaultSharedContex(QXcbScreen *screen) +{ + int x = 0; + int y = 0; + int w = 3; + int h = 3; + + QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXContext context; + GLXFBConfig config = findConfig(screen,format); + if (config) { + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(DISPLAY_FROM_XCB(screen), config); + Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(screen), screen->root(), visualInfo->visual, AllocNone); + XSetWindowAttributes a; + a.colormap = cmap; + Window sharedWindow = XCreateWindow(DISPLAY_FROM_XCB(screen), screen->root(), x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + + context = glXCreateNewContext(DISPLAY_FROM_XCB(screen), config, GLX_RGBA_TYPE, 0, TRUE); + QPlatformGLContext *sharedContext = new QGLXContext(screen, sharedWindow, context); + QPlatformGLContext::setDefaultSharedContext(sharedContext); + } else { + qWarning("Warning no shared context created"); + } +} + +void QGLXContext::makeCurrent() +{ + QPlatformGLContext::makeCurrent(); + glXMakeCurrent(DISPLAY_FROM_XCB(m_screen), m_drawable, m_context); +} + +void QGLXContext::doneCurrent() +{ + QPlatformGLContext::doneCurrent(); + glXMakeCurrent(DISPLAY_FROM_XCB(m_screen), 0, 0); +} + +void QGLXContext::swapBuffers() +{ + glXSwapBuffers(DISPLAY_FROM_XCB(m_screen), m_drawable); +} + +void* QGLXContext::getProcAddress(const QString& procName) +{ + typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); + static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; + static bool resolved = false; + + if (resolved && !glXGetProcAddressARB) + return 0; + if (!glXGetProcAddressARB) { + QList glxExt = QByteArray(glXGetClientString(DISPLAY_FROM_XCB(m_screen), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) + void *handle = dlopen(NULL, RTLD_LAZY); + if (handle) { + glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); + dlclose(handle); + } + if (!glXGetProcAddressARB) +#endif + { + extern const QString qt_gl_library_name(); +// QLibrary lib(qt_gl_library_name()); + QLibrary lib(QLatin1String("GL")); + glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); + } + } + resolved = true; + } + if (!glXGetProcAddressARB) + return 0; + return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); +} + +QPlatformWindowFormat QGLXContext::platformWindowFormat() const +{ + return m_windowFormat; +} diff --git a/src/plugins/platforms/xcb/qglxintegration.h b/src/plugins/platforms/xcb/qglxintegration.h new file mode 100644 index 0000000..0006363 --- /dev/null +++ b/src/plugins/platforms/xcb/qglxintegration.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGLXINTEGRATION_H +#define QGLXINTEGRATION_H + +#include "qxcbwindow.h" + +#include +#include + +#include + +#include + +class QGLXContext : public QPlatformGLContext +{ +public: + QGLXContext(Window window, QXcbScreen *xd, const QPlatformWindowFormat &format); + ~QGLXContext(); + + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers(); + virtual void* getProcAddress(const QString& procName); + + GLXContext glxContext() const { return m_context; } + + QPlatformWindowFormat platformWindowFormat() const; + + static XVisualInfo *findVisualInfo(const QXcbScreen *xd, const QPlatformWindowFormat &format); + +private: + static GLXFBConfig findConfig(const QXcbScreen *xd,const QPlatformWindowFormat &format); + static QVector buildSpec(const QPlatformWindowFormat &format); + static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); + + QXcbScreen *m_screen; + Drawable m_drawable; + GLXContext m_context; + QPlatformWindowFormat m_windowFormat; + + QGLXContext (QXcbScreen *screen, Drawable drawable, GLXContext context); + static QMutex m_defaultSharedContextMutex; + static void createDefaultSharedContex(QXcbScreen *xd); +}; + +#endif diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 2977d76..eafd83a 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -49,19 +49,33 @@ #include +#ifdef XCB_USE_XLIB_FOR_GLX +#include +#include +#endif + QXcbConnection::QXcbConnection(const char *displayName) : m_displayName(displayName ? QByteArray(displayName) : qgetenv("DISPLAY")) { - int primaryScreen; - + int primaryScreen = 0; + +#ifdef XCB_USE_XLIB_FOR_GLX + Display *dpy = XOpenDisplay(m_displayName.constData()); + primaryScreen = DefaultScreen(dpy); + m_connection = XGetXCBConnection(dpy); + XSetEventQueueOwner(dpy, XCBOwnsEventQueue); + m_xlib_display = dpy; +#else m_connection = xcb_connect(m_displayName.constData(), &primaryScreen); +#endif m_setup = xcb_get_setup(xcb_connection()); xcb_screen_iterator_t it = xcb_setup_roots_iterator(m_setup); + int screenNumber = 0; while (it.rem) { - m_screens << new QXcbScreen(this, it.data); + m_screens << new QXcbScreen(this, it.data, screenNumber++); xcb_screen_next(&it); } @@ -77,7 +91,11 @@ QXcbConnection::~QXcbConnection() { qDeleteAll(m_screens); +#ifdef XCB_USE_XLIB_FOR_GLX + XCloseDisplay((Display *)m_xlib_display); +#else xcb_disconnect(xcb_connection()); +#endif delete m_keyboard; } diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 97f9ba5..8a225c2 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -232,6 +232,10 @@ public: QXcbKeyboard *keyboard() const { return m_keyboard; } +#ifdef XCB_USE_XLIB_FOR_GLX + void *xlib_display() const { return m_xlib_display; } +#endif + private slots: void eventDispatcher(); @@ -249,6 +253,12 @@ private: QByteArray m_displayName; QXcbKeyboard *m_keyboard; + +#ifdef XCB_USE_XLIB_FOR_GLX + void *m_xlib_display; +#endif }; +#define DISPLAY_FROM_XCB(object) ((Display *)(object->connection()->xlib_display())) + #endif diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 5da86010..89a6154 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -114,3 +114,13 @@ QPixmap QXcbIntegration::grabWindow(WId window, int x, int y, int width, int hei Q_UNUSED(height); return QPixmap(); } + + +bool QXcbIntegration::hasOpenGL() const +{ +#ifdef XCB_USE_XLIB_FOR_GLX + return true; +#else + return false; +#endif +} diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index 8b599b3..80f70fb 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -65,6 +65,7 @@ public: QPixmap grabWindow(WId window, int x, int y, int width, int height) const; QPlatformFontDatabase *fontDatabase() const; + bool hasOpenGL() const; private: QList m_screens; diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 4faa617..519db63 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -43,9 +43,10 @@ #include -QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen) +QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen, int number) : QXcbObject(connection) , m_screen(screen) + , m_number(number) { printf ("\n"); printf ("Informations of screen %d:\n", screen->root); @@ -91,3 +92,8 @@ QSize QXcbScreen::physicalSize() const { return QSize(m_screen->width_in_millimeters, m_screen->height_in_millimeters); } + +int QXcbScreen::screenNumber() const +{ + return m_number; +} diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index abebcd9..77ee46f 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -53,7 +53,7 @@ class QXcbConnection; class QXcbScreen : public QXcbObject, public QPlatformScreen { public: - QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen); + QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen, int number); ~QXcbScreen(); QRect geometry() const; @@ -61,11 +61,14 @@ public: QImage::Format format() const; QSize physicalSize() const; + int screenNumber() const; + xcb_screen_t *screen() const { return m_screen; } xcb_window_t root() const { return m_screen->root; } private: xcb_screen_t *m_screen; + int m_number; }; #endif diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 95110e6..e9ff5df 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -44,14 +44,24 @@ #include "qxcbconnection.h" #include "qxcbscreen.h" +#include #include #include #include +#ifdef XCB_USE_XLIB_FOR_GLX +#include +#include +#include "qglxintegration.h" +#endif + QXcbWindow::QXcbWindow(QWidget *tlw) : QPlatformWindow(tlw) +#ifdef XCB_USE_XLIB_FOR_GLX + , m_glx_context(0) +#endif { m_screen = static_cast(QPlatformScreen::platformScreenForWidget(tlw)); @@ -75,20 +85,44 @@ QXcbWindow::QXcbWindow(QWidget *tlw) | XCB_EVENT_MASK_FOCUS_CHANGE }; - m_window = xcb_generate_id(xcb_connection()); - xcb_create_window(xcb_connection(), - XCB_COPY_FROM_PARENT, // depth -- same as root - m_window, // window id - m_screen->root(), // parent window id - tlw->x(), - tlw->y(), - tlw->width(), - tlw->height(), - 0, // border width - XCB_WINDOW_CLASS_INPUT_OUTPUT, // window class - m_screen->screen()->root_visual, // visual - mask, // value mask - values); // value list +#ifdef XCB_USE_XLIB_FOR_GLX + if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { + XVisualInfo *visualInfo = QGLXContext::findVisualInfo(m_screen, tlw->platformWindowFormat()); + if (visualInfo) { + Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(this), m_screen->root(), visualInfo->visual, AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + m_window = XCreateWindow(DISPLAY_FROM_XCB(this), m_screen->root(), tlw->x(), tlw->y(), tlw->width(), tlw->height(), + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + + printf("created GL window: %d\n", m_window); + } else { + qFatal("no window!"); + } + } else +#endif + { + m_window = xcb_generate_id(xcb_connection()); + + xcb_create_window(xcb_connection(), + XCB_COPY_FROM_PARENT, // depth -- same as root + m_window, // window id + m_screen->root(), // parent window id + tlw->x(), + tlw->y(), + tlw->width(), + tlw->height(), + 0, // border width + XCB_WINDOW_CLASS_INPUT_OUTPUT, // window class + m_screen->screen()->root_visual, // visual + mask, // value mask + values); // value list + + printf("created regular window: %d\n", m_window); + } xcb_atom_t properties[4]; int propertyCount = 0; @@ -126,12 +160,12 @@ void QXcbWindow::setGeometry(const QRect &rect) void QXcbWindow::setVisible(bool visible) { - if (visible) + if (visible) { xcb_map_window(xcb_connection(), m_window); - else + } else { xcb_unmap_window(xcb_connection(), m_window); - - xcb_flush(xcb_connection()); + xcb_flush(xcb_connection()); + } } struct QtMWMHints { @@ -317,6 +351,25 @@ void QXcbWindow::requestActivateWindow() xcb_set_input_focus(xcb_connection(), m_window, XCB_INPUT_FOCUS_PARENT, XCB_TIME_CURRENT_TIME); } +QPlatformGLContext *QXcbWindow::glContext() const +{ +#ifdef XCB_USE_XLIB_FOR_GLX + if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) { + printf("no opengl\n"); + return 0; + } + + if (!m_glx_context) { + QXcbWindow *that = const_cast(this); + that->m_glx_context = new QGLXContext(m_window, m_screen, widget()->platformWindowFormat()); + } + + return m_glx_context; +#else + return 0; +#endif +} + void QXcbWindow::handleExposeEvent(const xcb_expose_event_t *event) { QWindowSurface *surface = widget()->windowSurface(); diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 17e1742..8db1a1e 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -48,6 +48,7 @@ #include "qxcbobject.h" +class QGLXContext; class QXcbScreen; class QXcbWindow : public QXcbObject, public QPlatformWindow @@ -69,7 +70,7 @@ public: void requestActivateWindow(); - QPlatformGLContext *glContext() const { return 0; } + QPlatformGLContext *glContext() const; xcb_window_t window() const { return m_window; } @@ -91,6 +92,9 @@ private: QXcbScreen *m_screen; xcb_window_t m_window; +#ifdef XCB_USE_XLIB_FOR_GLX + QGLXContext *m_glx_context; +#endif }; #endif diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 3aee0a2..58382c0 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -21,6 +21,16 @@ HEADERS = \ qxcbwindow.h \ qxcbwindowsurface.h +contains(QT_CONFIG, opengl):DEFINES += XCB_USE_XLIB_FOR_GLX + +contains(DEFINES, XCB_USE_XLIB_FOR_GLX) { + QT += opengl + + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp + LIBS += -lX11 -lX11-xcb +} + LIBS += -lxcb -lxcb-image -lxcb-keysyms include (../fontdatabases/genericunix/genericunix.pri) -- cgit v0.12 From 03b79ca3fda15df214c68ee945ac56000a404d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 18:30:51 +0100 Subject: Added warnings for unhandled XCB events. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index eafd83a..3018f56 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -124,6 +124,51 @@ break; } \ break; +void unhandledXcbEventError(xcb_generic_event_t *event) +{ +#define UNHANDLED_XCB_EVENT(event) \ + case event: \ + printf("Unhandled XCB event: %d - %s\n", event, #event); \ + break; + + switch (event->response_type & ~0x80) { + UNHANDLED_XCB_EVENT(XCB_KEY_PRESS); + UNHANDLED_XCB_EVENT(XCB_KEY_RELEASE); + UNHANDLED_XCB_EVENT(XCB_BUTTON_PRESS); + UNHANDLED_XCB_EVENT(XCB_BUTTON_RELEASE); + UNHANDLED_XCB_EVENT(XCB_MOTION_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_ENTER_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_LEAVE_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_FOCUS_IN); + UNHANDLED_XCB_EVENT(XCB_FOCUS_OUT); + UNHANDLED_XCB_EVENT(XCB_KEYMAP_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_EXPOSE); + UNHANDLED_XCB_EVENT(XCB_GRAPHICS_EXPOSURE); + UNHANDLED_XCB_EVENT(XCB_VISIBILITY_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_CREATE_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_DESTROY_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_UNMAP_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_MAP_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_MAP_REQUEST); + UNHANDLED_XCB_EVENT(XCB_REPARENT_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_CONFIGURE_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_CONFIGURE_REQUEST); + UNHANDLED_XCB_EVENT(XCB_GRAVITY_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_RESIZE_REQUEST); + UNHANDLED_XCB_EVENT(XCB_CIRCULATE_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_CIRCULATE_REQUEST); + UNHANDLED_XCB_EVENT(XCB_PROPERTY_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_SELECTION_CLEAR); + UNHANDLED_XCB_EVENT(XCB_SELECTION_REQUEST); + UNHANDLED_XCB_EVENT(XCB_SELECTION_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_COLORMAP_NOTIFY); + UNHANDLED_XCB_EVENT(XCB_CLIENT_MESSAGE); + UNHANDLED_XCB_EVENT(XCB_MAPPING_NOTIFY); + default: + printf("Unhandled XCB event: %d - %s\n", event->response_type, "unknown"); + } +} + void QXcbConnection::eventDispatcher() { while (xcb_generic_event_t *event = xcb_poll_for_event(xcb_connection())) { @@ -156,6 +201,7 @@ void QXcbConnection::eventDispatcher() m_keyboard->handleMappingNotifyEvent((xcb_mapping_notify_event_t *)event); break; default: + unhandledXcbEventError(event); break; } } -- cgit v0.12 From 6257adcdd693ac5c4c258fd81b0e6b2dcfbf8750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 18:42:51 +0100 Subject: Added WM_TRANSIENT_FOR property to XCB backend. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index e9ff5df..824a967 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -57,6 +57,19 @@ #include "qglxintegration.h" #endif +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + QXcbWindow::QXcbWindow(QWidget *tlw) : QPlatformWindow(tlw) #ifdef XCB_USE_XLIB_FOR_GLX @@ -141,6 +154,16 @@ QXcbWindow::QXcbWindow(QWidget *tlw) 32, propertyCount, properties); + + if (isTransient(tlw) && tlw->parentWidget()) { + // ICCCM 4.1.2.6 + QWidget *p = tlw->parentWidget()->window(); + xcb_window_t parentWindow = p->winId(); + xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, + XCB_ATOM_WM_TRANSIENT_FOR, XCB_ATOM_WINDOW, 32, + 1, &parentWindow); + + } } QXcbWindow::~QXcbWindow() -- cgit v0.12 From 80b387b77863230e6edbc03695a971bcd0bcb5d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Feb 2011 19:22:35 +0100 Subject: Conform to ICCCM when mapping / unmapping windows in XCB backend. --- src/plugins/platforms/xcb/README | 2 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 19 +++++++++++++++++++ src/plugins/platforms/xcb/xcb.pro | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/xcb/README b/src/plugins/platforms/xcb/README index d250ad0..e88596b 100644 --- a/src/plugins/platforms/xcb/README +++ b/src/plugins/platforms/xcb/README @@ -1,2 +1,2 @@ Required packages: -libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev +libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm1 libxcb-icccm1-dev diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 824a967..7fb4cc4 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -44,6 +44,8 @@ #include "qxcbconnection.h" #include "qxcbscreen.h" +#include + #include #include @@ -183,10 +185,27 @@ void QXcbWindow::setGeometry(const QRect &rect) void QXcbWindow::setVisible(bool visible) { + xcb_wm_hints_t hints; if (visible) { + if (widget()->isMinimized()) + xcb_wm_hints_set_iconic(&hints); + else + xcb_wm_hints_set_normal(&hints); + xcb_set_wm_hints(xcb_connection(), m_window, &hints); xcb_map_window(xcb_connection(), m_window); } else { xcb_unmap_window(xcb_connection(), m_window); + + // send synthetic UnmapNotify event according to icccm 4.1.4 + xcb_unmap_notify_event_t event; + event.response_type = XCB_UNMAP_NOTIFY; + event.sequence = 0; // does this matter? + event.event = m_screen->root(); + event.window = m_window; + event.from_configure = false; + xcb_send_event(xcb_connection(), false, m_screen->root(), + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *)&event); + xcb_flush(xcb_connection()); } } diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 58382c0..a6e92ef 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -31,7 +31,7 @@ contains(DEFINES, XCB_USE_XLIB_FOR_GLX) { LIBS += -lX11 -lX11-xcb } -LIBS += -lxcb -lxcb-image -lxcb-keysyms +LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm include (../fontdatabases/genericunix/genericunix.pri) -- cgit v0.12 From 27ba43fe5302158cdb54bc0e3fd055b3008ec7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Feb 2011 07:55:12 +0100 Subject: Lighthouse: Wayland: Sort out egl includes in plugin We used to include the X part of the eglplatform.h, but now the mesa version of the header file has a WL_EGL_PLATFORM part. This define is defined in wayland-egl.h which thus needs to be included before any egl header file. --- src/plugins/platforms/eglconvenience/qeglconvenience.h | 4 ++++ src/plugins/platforms/wayland/qwaylandinclude.h | 15 --------------- src/plugins/platforms/wayland/wayland.pro | 2 ++ 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index a1df3cc..681e9db 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -46,7 +46,11 @@ #include #include +#ifdef Q_PLATFORM_WAYLAND +#include "qwaylandinclude.h" +#else #include +#endif QT_BEGIN_NAMESPACE QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); diff --git a/src/plugins/platforms/wayland/qwaylandinclude.h b/src/plugins/platforms/wayland/qwaylandinclude.h index d1f7e39..afaa885 100644 --- a/src/plugins/platforms/wayland/qwaylandinclude.h +++ b/src/plugins/platforms/wayland/qwaylandinclude.h @@ -50,23 +50,8 @@ #include #include -//#define MESA_EGL_NO_X11_HEADERS #define EGL_EGLEXT_PROTOTYPES #include #include -#undef FocusOut -#undef FocusIn -#undef KeyPress -#undef KeyRelease -#undef None -#undef RevertToParent -#undef GrayScale -#undef CursorShape - -#ifdef FontChange -#undef FontChange -#endif - - #endif // QWAYLANDINCLUDE_H diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 7e8a1fa..e40e423 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -3,6 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms +DEFINES += Q_PLATFORM_WAYLAND + SOURCES = main.cpp \ qwaylandintegration.cpp \ qwaylandshmsurface.cpp \ -- cgit v0.12 From 0ade22781b4f8d291e0b096160f2db5a3caec9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Feb 2011 15:12:59 +0100 Subject: Lighthouse:Propogate the configure event to the QWaylandWindow --- src/plugins/platforms/wayland/qwaylandwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 934bbff..a912a83 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -98,5 +98,7 @@ void QWaylandWindow::configure(uint32_t time, uint32_t edges, Q_UNUSED(edges); QRect geometry = QRect(x, y, width, height); + setGeometry(geometry); + QWindowSystemInterface::handleGeometryChange(widget(), geometry); } -- cgit v0.12 From 6027b734714aadf22d34f4e99663b4117cdb4a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 14 Feb 2011 10:44:44 +0100 Subject: Properly update the geometry variable of QPlatformWindow when resized. --- src/plugins/platforms/xcb/qxcbwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 7fb4cc4..78cba1c 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -441,7 +441,10 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t * ypos = event->y; } - QWindowSystemInterface::handleGeometryChange(widget(), QRect(xpos, ypos, event->width, event->height)); + QRect rect(xpos, ypos, event->width, event->height); + QPlatformWindow::setGeometry(rect); + + QWindowSystemInterface::handleGeometryChange(widget(), rect); } static Qt::MouseButtons translateMouseButtons(int s) -- cgit v0.12 From b46f72e62a5cb781ec94d7cd0317f5cf58c26693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 14 Feb 2011 10:54:35 +0100 Subject: More debugging of XCB events. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 84 +++++++++++++++------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 3018f56..0696ed3 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -124,49 +124,56 @@ break; } \ break; -void unhandledXcbEventError(xcb_generic_event_t *event) +#define XCB_EVENT_DEBUG + +void printXcbEvent(const char *message, xcb_generic_event_t *event) { -#define UNHANDLED_XCB_EVENT(event) \ +#ifdef XCB_EVENT_DEBUG +#define PRINT_XCB_EVENT(event) \ case event: \ - printf("Unhandled XCB event: %d - %s\n", event, #event); \ + printf("%s: %d - %s\n", message, event, #event); \ break; switch (event->response_type & ~0x80) { - UNHANDLED_XCB_EVENT(XCB_KEY_PRESS); - UNHANDLED_XCB_EVENT(XCB_KEY_RELEASE); - UNHANDLED_XCB_EVENT(XCB_BUTTON_PRESS); - UNHANDLED_XCB_EVENT(XCB_BUTTON_RELEASE); - UNHANDLED_XCB_EVENT(XCB_MOTION_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_ENTER_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_LEAVE_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_FOCUS_IN); - UNHANDLED_XCB_EVENT(XCB_FOCUS_OUT); - UNHANDLED_XCB_EVENT(XCB_KEYMAP_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_EXPOSE); - UNHANDLED_XCB_EVENT(XCB_GRAPHICS_EXPOSURE); - UNHANDLED_XCB_EVENT(XCB_VISIBILITY_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_CREATE_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_DESTROY_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_UNMAP_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_MAP_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_MAP_REQUEST); - UNHANDLED_XCB_EVENT(XCB_REPARENT_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_CONFIGURE_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_CONFIGURE_REQUEST); - UNHANDLED_XCB_EVENT(XCB_GRAVITY_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_RESIZE_REQUEST); - UNHANDLED_XCB_EVENT(XCB_CIRCULATE_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_CIRCULATE_REQUEST); - UNHANDLED_XCB_EVENT(XCB_PROPERTY_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_SELECTION_CLEAR); - UNHANDLED_XCB_EVENT(XCB_SELECTION_REQUEST); - UNHANDLED_XCB_EVENT(XCB_SELECTION_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_COLORMAP_NOTIFY); - UNHANDLED_XCB_EVENT(XCB_CLIENT_MESSAGE); - UNHANDLED_XCB_EVENT(XCB_MAPPING_NOTIFY); + PRINT_XCB_EVENT(XCB_KEY_PRESS); + PRINT_XCB_EVENT(XCB_KEY_RELEASE); + PRINT_XCB_EVENT(XCB_BUTTON_PRESS); + PRINT_XCB_EVENT(XCB_BUTTON_RELEASE); + PRINT_XCB_EVENT(XCB_MOTION_NOTIFY); + PRINT_XCB_EVENT(XCB_ENTER_NOTIFY); + PRINT_XCB_EVENT(XCB_LEAVE_NOTIFY); + PRINT_XCB_EVENT(XCB_FOCUS_IN); + PRINT_XCB_EVENT(XCB_FOCUS_OUT); + PRINT_XCB_EVENT(XCB_KEYMAP_NOTIFY); + PRINT_XCB_EVENT(XCB_EXPOSE); + PRINT_XCB_EVENT(XCB_GRAPHICS_EXPOSURE); + PRINT_XCB_EVENT(XCB_VISIBILITY_NOTIFY); + PRINT_XCB_EVENT(XCB_CREATE_NOTIFY); + PRINT_XCB_EVENT(XCB_DESTROY_NOTIFY); + PRINT_XCB_EVENT(XCB_UNMAP_NOTIFY); + PRINT_XCB_EVENT(XCB_MAP_NOTIFY); + PRINT_XCB_EVENT(XCB_MAP_REQUEST); + PRINT_XCB_EVENT(XCB_REPARENT_NOTIFY); + PRINT_XCB_EVENT(XCB_CONFIGURE_NOTIFY); + PRINT_XCB_EVENT(XCB_CONFIGURE_REQUEST); + PRINT_XCB_EVENT(XCB_GRAVITY_NOTIFY); + PRINT_XCB_EVENT(XCB_RESIZE_REQUEST); + PRINT_XCB_EVENT(XCB_CIRCULATE_NOTIFY); + PRINT_XCB_EVENT(XCB_CIRCULATE_REQUEST); + PRINT_XCB_EVENT(XCB_PROPERTY_NOTIFY); + PRINT_XCB_EVENT(XCB_SELECTION_CLEAR); + PRINT_XCB_EVENT(XCB_SELECTION_REQUEST); + PRINT_XCB_EVENT(XCB_SELECTION_NOTIFY); + PRINT_XCB_EVENT(XCB_COLORMAP_NOTIFY); + PRINT_XCB_EVENT(XCB_CLIENT_MESSAGE); + PRINT_XCB_EVENT(XCB_MAPPING_NOTIFY); default: - printf("Unhandled XCB event: %d - %s\n", event->response_type, "unknown"); + printf("%s: %d - %s\n", message, event->response_type, "unknown"); } +#else + Q_UNUSED(message); + Q_UNUSED(event); +#endif } void QXcbConnection::eventDispatcher() @@ -201,9 +208,10 @@ void QXcbConnection::eventDispatcher() m_keyboard->handleMappingNotifyEvent((xcb_mapping_notify_event_t *)event); break; default: - unhandledXcbEventError(event); - break; + printXcbEvent("Unhandled XCB event", event); + return; } + printXcbEvent("Handled XCB event", event); } } -- cgit v0.12 From 5582311143115dc16281d8ee258bde92e00d55b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 14 Feb 2011 13:12:16 +0100 Subject: Lighthouse: Testlite: Added modallity for dialogs Also fixed some identing in qtestlitewindow --- src/plugins/platforms/testlite/qtestlitewindow.cpp | 154 ++++++++++++++++----- src/plugins/platforms/testlite/qtestlitewindow.h | 3 +- 2 files changed, 124 insertions(+), 33 deletions(-) diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index d9c69e3..b7c5e99 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -78,46 +78,46 @@ QTestLiteWindow::QTestLiteWindow(QWidget *window) int w = window->width(); int h = window->height(); - if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL - && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { - #if !defined(QT_NO_OPENGL) + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) - XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); + XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); #else - QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); + QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); - EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); - EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); - VisualID id = QTestLiteEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); + EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); + EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); + VisualID id = QTestLiteEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = id; + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = id; - XVisualInfo *visualInfo; - int matchingCount = 0; - visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); #endif //!defined(QT_OPENGL_ES_2) - if (visualInfo) { - Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); - - XSetWindowAttributes a; - a.colormap = cmap; - x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, - 0, visualInfo->depth, InputOutput, visualInfo->visual, - CWColormap, &a); - } else { - qFatal("no window!"); - } -#endif //!defined(QT_NO_OPENGL) + if (visualInfo) { + Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); } else { - x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - mScreen->blackPixel(), mScreen->whitePixel()); + qFatal("no window!"); } +#endif //!defined(QT_NO_OPENGL) + } else { + x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + mScreen->blackPixel(), mScreen->whitePixel()); + } #ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; + qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; #endif XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); @@ -252,7 +252,7 @@ void QTestLiteWindow::setGeometry(const QRect &rect) Qt::WindowFlags QTestLiteWindow::windowFlags() const { - return window_flags; + return mWindowFlags; } WId QTestLiteWindow::winId() const @@ -411,10 +411,46 @@ static inline bool isTransient(const QWidget *w) && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); } +QVector QTestLiteWindow::getNetWmState() const +{ + QVector returnValue; + + // Don't read anything, just get the size of the property data + Atom actualType; + int actualFormat; + ulong propertyLength; + ulong bytesLeft; + uchar *propertyData = 0; + if (XGetWindowProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), 0, 0, + False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) == Success + && actualType == XA_ATOM && actualFormat == 32) { + returnValue.resize(bytesLeft / 4); + XFree((char*) propertyData); + + // fetch all data + if (XGetWindowProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), 0, + returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) != Success) { + returnValue.clear(); + } else if (propertyLength != (ulong)returnValue.size()) { + returnValue.resize(propertyLength); + } + + // put it into netWmState + if (!returnValue.isEmpty()) { + memcpy(returnValue.data(), propertyData, returnValue.size() * sizeof(Atom)); + } + XFree((char*) propertyData); + } + + return returnValue; +} + Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) { // Q_ASSERT(flags & Qt::Window); - window_flags = flags; + mWindowFlags = flags; #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; @@ -518,8 +554,50 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) mwmhints.decorations = 0; } + if (widget()->windowModality() == Qt::WindowModal) { + mwmhints.input_mode = MWM_INPUT_PRIMARY_APPLICATION_MODAL; + } else if (widget()->windowModality() == Qt::ApplicationModal) { + mwmhints.input_mode = MWM_INPUT_FULL_APPLICATION_MODAL; + } + setMWMHints(mwmhints); + QVector netWmState = getNetWmState(); + + if (flags & Qt::WindowStaysOnTopHint) { + if (flags & Qt::WindowStaysOnBottomHint) + qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_ABOVE))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_ABOVE)); + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_STAYS_ON_TOP))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_STAYS_ON_TOP)); + } else if (flags & Qt::WindowStaysOnBottomHint) { + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_BELOW))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_BELOW)); + } + if (widget()->isFullScreen()) { + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_FULLSCREEN))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_FULLSCREEN)); + } + if (widget()->isMaximized()) { + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_VERT))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_VERT)); + } + if (widget()->windowModality() != Qt::NonModal) { + if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MODAL))) + netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MODAL)); + } + + if (!netWmState.isEmpty()) { + XChangeProperty(mScreen->display(), x_window, + QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, + (unsigned char *) netWmState.data(), netWmState.size()); + } else { + XDeleteProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE)); + } + //##### only if initializeWindow??? if (popup || tooltip) { // popup widget @@ -547,6 +625,18 @@ void QTestLiteWindow::setVisible(bool visible) #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; #endif + if (isTransient(widget())) { + Window parentXWindow = x_window; + if (widget()->parentWidget()) { + QWidget *widgetParent = widget()->parentWidget()->window(); + if (widgetParent && widgetParent->platformWindow()) { + QTestLiteWindow *parentWidnow = static_cast(widgetParent->platformWindow()); + parentXWindow = parentWidnow->x_window; + } + } + XSetTransientForHint(mScreen->display(),x_window,parentXWindow); + } + if (visible) { //ensure that the window is viewed in correct position. doSizeHints(); diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index e45c3fd..2ca7e10 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -123,6 +123,7 @@ public: GC graphicsContext() const; protected: + QVector getNetWmState() const; void setMWMHints(const QtMWMHints &mwmhints); QtMWMHints getMWMHints() const; @@ -138,7 +139,7 @@ private: QPlatformGLContext *mGLContext; QTestLiteScreen *mScreen; - Qt::WindowFlags window_flags; + Qt::WindowFlags mWindowFlags; }; #endif -- cgit v0.12 From 7be3f2585676cb18821b51427527275fb441fa46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 14 Feb 2011 13:36:13 +0100 Subject: Lighthouse: renaming testlite to xlib --- src/plugins/platforms/testlite/main.cpp | 20 ++-- src/plugins/platforms/testlite/qglxintegration.cpp | 10 +- src/plugins/platforms/testlite/qglxintegration.h | 12 +- .../platforms/testlite/qtestliteclipboard.cpp | 100 ++++++++-------- .../platforms/testlite/qtestliteclipboard.h | 10 +- src/plugins/platforms/testlite/qtestlitecursor.cpp | 16 +-- src/plugins/platforms/testlite/qtestlitecursor.h | 6 +- .../platforms/testlite/qtestliteeglintegration.cpp | 2 +- .../platforms/testlite/qtestliteeglintegration.h | 2 +- .../platforms/testlite/qtestliteintegration.cpp | 34 +++--- .../platforms/testlite/qtestliteintegration.h | 8 +- .../platforms/testlite/qtestlitekeyboard.cpp | 14 +-- src/plugins/platforms/testlite/qtestlitekeyboard.h | 6 +- src/plugins/platforms/testlite/qtestlitemime.cpp | 66 +++++------ src/plugins/platforms/testlite/qtestlitemime.h | 6 +- src/plugins/platforms/testlite/qtestlitescreen.cpp | 40 +++---- src/plugins/platforms/testlite/qtestlitescreen.h | 18 +-- .../platforms/testlite/qtestlitestaticinfo.cpp | 36 +++--- .../platforms/testlite/qtestlitestaticinfo.h | 2 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 126 ++++++++++----------- src/plugins/platforms/testlite/qtestlitewindow.h | 14 +-- .../platforms/testlite/qtestlitewindowsurface.cpp | 36 +++--- .../platforms/testlite/qtestlitewindowsurface.h | 20 ++-- 23 files changed, 301 insertions(+), 303 deletions(-) diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp index 2f6aa8b..131d399 100644 --- a/src/plugins/platforms/testlite/main.cpp +++ b/src/plugins/platforms/testlite/main.cpp @@ -44,36 +44,36 @@ QT_BEGIN_NAMESPACE -class QTestLiteIntegrationPlugin : public QPlatformIntegrationPlugin +class QXlibIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; QPlatformIntegration *create(const QString&, const QStringList&); }; -QStringList QTestLiteIntegrationPlugin::keys() const +QStringList QXlibIntegrationPlugin::keys() const { QStringList list; - list << "TestLite"; + list << "Xlib"; #ifndef QT_NO_OPENGL - list << "TestLiteGL"; + list << "XlibGL"; #endif return list; } -QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system, const QStringList& paramList) +QPlatformIntegration* QXlibIntegrationPlugin::create(const QString& system, const QStringList& paramList) { Q_UNUSED(paramList); - if (system.toLower() == "testlite") - return new QTestLiteIntegration; + if (system.toLower() == "xlib") + return new QXlibIntegration; #ifndef QT_NO_OPENGL - if (system.toLower() == "testlitegl") - return new QTestLiteIntegration(true); + if (system.toLower() == "xlibgl") + return new QXlibIntegration(true); #endif return 0; } -Q_EXPORT_PLUGIN2(testlite, QTestLiteIntegrationPlugin) +Q_EXPORT_PLUGIN2(xlib, QXlibIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 8023014..46dfef9 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -113,7 +113,7 @@ QVector QGLXContext::buildSpec(const QPlatformWindowFormat &format) return spec; } -GLXFBConfig QGLXContext::findConfig(const QTestLiteScreen *screen, const QPlatformWindowFormat &format) +GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWindowFormat &format) { bool reduced = true; GLXFBConfig chosenConfig = 0; @@ -149,7 +149,7 @@ GLXFBConfig QGLXContext::findConfig(const QTestLiteScreen *screen, const QPlatfo return chosenConfig; } -XVisualInfo *QGLXContext::findVisualInfo(const QTestLiteScreen *screen, const QPlatformWindowFormat &format) +XVisualInfo *QGLXContext::findVisualInfo(const QXlibScreen *screen, const QPlatformWindowFormat &format) { GLXFBConfig config = QGLXContext::findConfig(screen,format); XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); @@ -237,7 +237,7 @@ QPlatformWindowFormat QGLXContext::reducePlatformWindowFormat(const QPlatformWin return retFormat; } -QGLXContext::QGLXContext(Window window, QTestLiteScreen *screen, const QPlatformWindowFormat &format) +QGLXContext::QGLXContext(Window window, QXlibScreen *screen, const QPlatformWindowFormat &format) : QPlatformGLContext() , m_screen(screen) , m_drawable((Drawable)window) @@ -272,7 +272,7 @@ QGLXContext::QGLXContext(Window window, QTestLiteScreen *screen, const QPlatform #endif } -QGLXContext::QGLXContext(QTestLiteScreen *screen, Drawable drawable, GLXContext context) +QGLXContext::QGLXContext(QXlibScreen *screen, Drawable drawable, GLXContext context) : QPlatformGLContext(), m_screen(screen), m_drawable(drawable), m_context(context) { @@ -286,7 +286,7 @@ QGLXContext::~QGLXContext() } } -void QGLXContext::createDefaultSharedContex(QTestLiteScreen *screen) +void QGLXContext::createDefaultSharedContex(QXlibScreen *screen) { int x = 0; int y = 0; diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index abece45..f982708 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE class QGLXContext : public QPlatformGLContext { public: - QGLXContext(Window window, QTestLiteScreen *xd, const QPlatformWindowFormat &format); + QGLXContext(Window window, QXlibScreen *xd, const QPlatformWindowFormat &format); ~QGLXContext(); virtual void makeCurrent(); @@ -69,22 +69,22 @@ public: QPlatformWindowFormat platformWindowFormat() const; - static XVisualInfo *findVisualInfo(const QTestLiteScreen *xd, const QPlatformWindowFormat &format); + static XVisualInfo *findVisualInfo(const QXlibScreen *xd, const QPlatformWindowFormat &format); private: - static GLXFBConfig findConfig(const QTestLiteScreen *xd,const QPlatformWindowFormat &format); + static GLXFBConfig findConfig(const QXlibScreen *xd,const QPlatformWindowFormat &format); static QVector buildSpec(const QPlatformWindowFormat &format); static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); - QTestLiteScreen *m_screen; + QXlibScreen *m_screen; Drawable m_drawable; GLXContext m_context; QPlatformWindowFormat m_windowFormat; - QGLXContext (QTestLiteScreen *screen, Drawable drawable, GLXContext context); + QGLXContext (QXlibScreen *screen, Drawable drawable, GLXContext context); static QMutex m_defaultSharedContextMutex; - static void createDefaultSharedContex(QTestLiteScreen *xd); + static void createDefaultSharedContex(QXlibScreen *xd); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestliteclipboard.cpp b/src/plugins/platforms/testlite/qtestliteclipboard.cpp index 9bab7f9..1264b5a 100644 --- a/src/plugins/platforms/testlite/qtestliteclipboard.cpp +++ b/src/plugins/platforms/testlite/qtestliteclipboard.cpp @@ -48,12 +48,12 @@ #include -class QTestLiteClipboardMime : public QTestLiteMime +class QXlibClipboardMime : public QXlibMime { Q_OBJECT public: - QTestLiteClipboardMime(QClipboard::Mode mode, QTestLiteClipboard *clipboard) - : QTestLiteMime() + QXlibClipboardMime(QClipboard::Mode mode, QXlibClipboard *clipboard) + : QXlibMime() , m_clipboard(clipboard) { switch (mode) { @@ -62,7 +62,7 @@ public: break; case QClipboard::Clipboard: - modeAtom = QTestLiteStatic::atom(QTestLiteStatic::CLIPBOARD); + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); break; default: @@ -78,11 +78,11 @@ protected: return QStringList(); if (!formatList.count()) { - QTestLiteClipboardMime *that = const_cast(this); + QXlibClipboardMime *that = const_cast(this); // get the list of targets from the current clipboard owner - we do this // once so that multiple calls to this function don't require multiple // server round trips... - that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QTestLiteStatic::atom(QTestLiteStatic::TARGETS)); + that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QXlibStatic::atom(QXlibStatic::TARGETS)); if (format_atoms.size() > 0) { Atom *targets = (Atom *) format_atoms.data(); @@ -141,14 +141,14 @@ private: Atom modeAtom; - QTestLiteClipboard *m_clipboard; + QXlibClipboard *m_clipboard; QStringList formatList; QByteArray format_atoms; }; -const int QTestLiteClipboard::clipboard_timeout = 5000; +const int QXlibClipboard::clipboard_timeout = 5000; -QTestLiteClipboard::QTestLiteClipboard(QTestLiteScreen *screen) +QXlibClipboard::QXlibClipboard(QXlibScreen *screen) : QPlatformClipboard() , m_screen(screen) , m_xClipboard(0) @@ -160,14 +160,14 @@ QTestLiteClipboard::QTestLiteClipboard(QTestLiteScreen *screen) { } -const QMimeData * QTestLiteClipboard::mimeData(QClipboard::Mode mode) const +const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const { if (mode == QClipboard::Clipboard) { if (!m_xClipboard) { - QTestLiteClipboard *that = const_cast(this); - that->m_xClipboard = new QTestLiteClipboardMime(mode,that); + QXlibClipboard *that = const_cast(this); + that->m_xClipboard = new QXlibClipboardMime(mode,that); } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),QTestLiteStatic::atom(QTestLiteStatic::CLIPBOARD)); + Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); if (clipboardOwner == owner()) { return m_clientClipboard; } else { @@ -175,8 +175,8 @@ const QMimeData * QTestLiteClipboard::mimeData(QClipboard::Mode mode) const } } else if (mode == QClipboard::Selection) { if (!m_xSelection) { - QTestLiteClipboard *that = const_cast(this); - that->m_xSelection = new QTestLiteClipboardMime(mode,that); + QXlibClipboard *that = const_cast(this); + that->m_xSelection = new QXlibClipboardMime(mode,that); } Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); if (clipboardOwner == owner()) { @@ -188,7 +188,7 @@ const QMimeData * QTestLiteClipboard::mimeData(QClipboard::Mode mode) const return 0; } -void QTestLiteClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) +void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) { Atom modeAtom; QMimeData **d; @@ -199,7 +199,7 @@ void QTestLiteClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) break; case QClipboard::Clipboard: - modeAtom = QTestLiteStatic::atom(QTestLiteStatic::CLIPBOARD); + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); d = &m_clientClipboard; break; @@ -226,7 +226,7 @@ void QTestLiteClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) } -bool QTestLiteClipboard::supportsMode(QClipboard::Mode mode) const +bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const { if (mode == QClipboard::Clipboard || mode == QClipboard::Selection) return true; @@ -234,16 +234,16 @@ bool QTestLiteClipboard::supportsMode(QClipboard::Mode mode) const } -QTestLiteScreen * QTestLiteClipboard::screen() const +QXlibScreen * QXlibClipboard::screen() const { return m_screen; } -Window QTestLiteClipboard::requestor() const +Window QXlibClipboard::requestor() const { if (!m_requestor) { int x = 0, y = 0, w = 3, h = 3; - QTestLiteClipboard *that = const_cast(this); + QXlibClipboard *that = const_cast(this); Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), x, y, w, h, 0 /*border_width*/, m_screen->blackPixel(), m_screen->whitePixel()); @@ -252,7 +252,7 @@ Window QTestLiteClipboard::requestor() const return m_requestor; } -void QTestLiteClipboard::setRequestor(Window window) +void QXlibClipboard::setRequestor(Window window) { if (m_requestor != XNone) { XDestroyWindow(m_screen->display(),m_requestor); @@ -260,11 +260,11 @@ void QTestLiteClipboard::setRequestor(Window window) m_requestor = window; } -Window QTestLiteClipboard::owner() const +Window QXlibClipboard::owner() const { if (!m_owner) { int x = 0, y = 0, w = 3, h = 3; - QTestLiteClipboard *that = const_cast(this); + QXlibClipboard *that = const_cast(this); Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), x, y, w, h, 0 /*border_width*/, m_screen->blackPixel(), m_screen->whitePixel()); @@ -273,7 +273,7 @@ Window QTestLiteClipboard::owner() const return m_owner; } -void QTestLiteClipboard::setOwner(Window window) +void QXlibClipboard::setOwner(Window window) { if (m_owner != XNone){ XDestroyWindow(m_screen->display(),m_owner); @@ -281,45 +281,45 @@ void QTestLiteClipboard::setOwner(Window window) m_owner = window; } -Atom QTestLiteClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) +Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) { QVector types; QStringList formats = QInternalMimeData::formatsHelper(d); for (int i = 0; i < formats.size(); ++i) { - QList atoms = QTestLiteMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); + QList atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); for (int j = 0; j < atoms.size(); ++j) { if (!types.contains(atoms.at(j))) types.append(atoms.at(j)); } } - types.append(QTestLiteStatic::atom(QTestLiteStatic::TARGETS)); - types.append(QTestLiteStatic::atom(QTestLiteStatic::MULTIPLE)); - types.append(QTestLiteStatic::atom(QTestLiteStatic::TIMESTAMP)); - types.append(QTestLiteStatic::atom(QTestLiteStatic::SAVE_TARGETS)); + types.append(QXlibStatic::atom(QXlibStatic::TARGETS)); + types.append(QXlibStatic::atom(QXlibStatic::MULTIPLE)); + types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); + types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, PropModeReplace, (uchar *) types.data(), types.size()); return property; } -Atom QTestLiteClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) +Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) { Atom atomFormat = target; int dataFormat = 0; QByteArray data; - QString fmt = QTestLiteMime::mimeAtomToString(screen()->display(), target); + QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); if (fmt.isEmpty()) { // Not a MIME type we have qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); return XNone; } qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); - if (QTestLiteMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { + if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { // don't allow INCR transfers when using MULTIPLE or to // Motif clients (since Motif doesn't support INCR) - static Atom motif_clip_temporary = QTestLiteStatic::atom(QTestLiteStatic::CLIP_TEMPORARY); + static Atom motif_clip_temporary = QXlibStatic::atom(QXlibStatic::CLIP_TEMPORARY); bool allow_incr = property != motif_clip_temporary; // X_ChangeProperty protocol request is 24 bytes @@ -327,7 +327,7 @@ Atom QTestLiteClipboard::sendSelection(QMimeData *d, Atom target, Window window, if (data.size() > increment && allow_incr) { long bytes = data.size(); XChangeProperty(screen()->display(), window, property, - QTestLiteStatic::atom(QTestLiteStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); + QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); // (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); qDebug() << "not implemented INCRT just YET!"; @@ -346,7 +346,7 @@ Atom QTestLiteClipboard::sendSelection(QMimeData *d, Atom target, Window window, return property; } -void QTestLiteClipboard::handleSelectionRequest(XEvent *xevent) +void QXlibClipboard::handleSelectionRequest(XEvent *xevent) { XSelectionRequestEvent *req = &xevent->xselectionrequest; @@ -367,7 +367,7 @@ void QTestLiteClipboard::handleSelectionRequest(XEvent *xevent) QMimeData *d; if (req->selection == XA_PRIMARY) { d = m_clientSelection; - } else if (req->selection == QTestLiteStatic::atom(QTestLiteStatic::CLIPBOARD)) { + } else if (req->selection == QXlibStatic::atom(QXlibStatic::CLIPBOARD)) { d = m_clientClipboard; } else { qWarning("QClipboard: Unknown selection '%lx'", req->selection); @@ -381,9 +381,9 @@ void QTestLiteClipboard::handleSelectionRequest(XEvent *xevent) return; } - Atom xa_targets = QTestLiteStatic::atom(QTestLiteStatic::TARGETS); - Atom xa_multiple = QTestLiteStatic::atom(QTestLiteStatic::MULTIPLE); - Atom xa_timestamp = QTestLiteStatic::atom(QTestLiteStatic::TIMESTAMP); + Atom xa_targets = QXlibStatic::atom(QXlibStatic::TARGETS); + Atom xa_multiple = QXlibStatic::atom(QXlibStatic::MULTIPLE); + Atom xa_timestamp = QXlibStatic::atom(QXlibStatic::TIMESTAMP); struct AtomPair { Atom target; Atom property; } *multi = 0; Atom multi_type = XNone; @@ -469,7 +469,7 @@ void QTestLiteClipboard::handleSelectionRequest(XEvent *xevent) static inline int maxSelectionIncr(Display *dpy) { return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; } -bool QTestLiteClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const +bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const { int maxsize = maxSelectionIncr(screen()->display()); ulong bytes_left; // bytes_after @@ -549,7 +549,7 @@ bool QTestLiteClipboard::clipboardReadProperty(Window win, Atom property, bool d XFree((char*)data); } - if (*format == 8 && *type == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) { + if (*format == 8 && *type == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { // convert COMPOUND_TEXT to a multibyte string XTextProperty textprop; textprop.encoding = *type; @@ -581,7 +581,7 @@ bool QTestLiteClipboard::clipboardReadProperty(Window win, Atom property, bool d return ok; } -QByteArray QTestLiteClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) +QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) { XEvent event; @@ -639,7 +639,7 @@ QByteArray QTestLiteClipboard::clipboardReadIncrementalProperty(Window win, Atom return QByteArray(); } -QByteArray QTestLiteClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) +QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) { QByteArray buf; @@ -647,8 +647,8 @@ QByteArray QTestLiteClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events - XDeleteProperty(screen()->display(), win, QTestLiteStatic::atom(QTestLiteStatic::_QT_SELECTION)); - XConvertSelection(screen()->display(), modeAtom, fmtatom, QTestLiteStatic::atom(QTestLiteStatic::_QT_SELECTION), win, CurrentTime); + XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); + XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); XSync(screen()->display(), false); XEvent xevent; @@ -660,10 +660,10 @@ QByteArray QTestLiteClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) Atom type; XSelectInput(screen()->display(), win, PropertyChangeMask); - if (clipboardReadProperty(win, QTestLiteStatic::atom(QTestLiteStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { - if (type == QTestLiteStatic::atom(QTestLiteStatic::INCR)) { + if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { + if (type == QXlibStatic::atom(QXlibStatic::INCR)) { int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0; - buf = clipboardReadIncrementalProperty(win, QTestLiteStatic::atom(QTestLiteStatic::_QT_SELECTION), nbytes, false); + buf = clipboardReadIncrementalProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), nbytes, false); } } diff --git a/src/plugins/platforms/testlite/qtestliteclipboard.h b/src/plugins/platforms/testlite/qtestliteclipboard.h index 76065a2..109714c 100644 --- a/src/plugins/platforms/testlite/qtestliteclipboard.h +++ b/src/plugins/platforms/testlite/qtestliteclipboard.h @@ -45,18 +45,18 @@ #include #include "qtestlitestaticinfo.h" -class QTestLiteScreen; -class QTestLiteClipboard : public QPlatformClipboard +class QXlibScreen; +class QXlibClipboard : public QPlatformClipboard { public: - QTestLiteClipboard(QTestLiteScreen *screen); + QXlibClipboard(QXlibScreen *screen); const QMimeData *mimeData(QClipboard::Mode mode) const; void setMimeData(QMimeData *data, QClipboard::Mode mode); bool supportsMode(QClipboard::Mode mode) const; - QTestLiteScreen *screen() const; + QXlibScreen *screen() const; Window requestor() const; void setRequestor(Window window); @@ -76,7 +76,7 @@ private: Atom sendTargetsSelection(QMimeData *d, Window window, Atom property); Atom sendSelection(QMimeData *d, Atom target, Window window, Atom property); - QTestLiteScreen *m_screen; + QXlibScreen *m_screen; QMimeData *m_xClipboard; QMimeData *m_clientClipboard; diff --git a/src/plugins/platforms/testlite/qtestlitecursor.cpp b/src/plugins/platforms/testlite/qtestlitecursor.cpp index e7ef673..2f7cfbf 100644 --- a/src/plugins/platforms/testlite/qtestlitecursor.cpp +++ b/src/plugins/platforms/testlite/qtestlitecursor.cpp @@ -51,17 +51,17 @@ QT_BEGIN_NAMESPACE -QTestLiteCursor::QTestLiteCursor(QTestLiteScreen *screen) +QXlibCursor::QXlibCursor(QXlibScreen *screen) : QPlatformCursor(screen) { } -void QTestLiteCursor::changeCursor(QCursor *cursor, QWidget *widget) +void QXlibCursor::changeCursor(QCursor *cursor, QWidget *widget) { - QTestLiteWindow *w = 0; + QXlibWindow *w = 0; if (widget) { QWidget *window = widget->window(); - w = static_cast(window->platformWindow()); + w = static_cast(window->platformWindow()); } else { // No X11 cursor control when there is no widget under the cursor return; @@ -89,7 +89,7 @@ void QTestLiteCursor::changeCursor(QCursor *cursor, QWidget *widget) w->setCursor(c); } -Cursor QTestLiteCursor::createCursorBitmap(QCursor * cursor) +Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) { XColor bg, fg; bg.red = 255 << 8; @@ -132,7 +132,7 @@ Cursor QTestLiteCursor::createCursorBitmap(QCursor * cursor) return c; } -Cursor QTestLiteCursor::createCursorShape(int cshape) +Cursor QXlibCursor::createCursorShape(int cshape) { Cursor cursor = 0; @@ -191,9 +191,9 @@ Cursor QTestLiteCursor::createCursorShape(int cshape) return cursor; } -QTestLiteScreen * QTestLiteCursor::testLiteScreen() const +QXlibScreen * QXlibCursor::testLiteScreen() const { - return static_cast(screen); + return static_cast(screen); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitecursor.h b/src/plugins/platforms/testlite/qtestlitecursor.h index bb3549e..db9f9e2 100644 --- a/src/plugins/platforms/testlite/qtestlitecursor.h +++ b/src/plugins/platforms/testlite/qtestlitecursor.h @@ -48,10 +48,10 @@ QT_BEGIN_NAMESPACE -class QTestLiteCursor : QPlatformCursor +class QXlibCursor : QPlatformCursor { public: - QTestLiteCursor(QTestLiteScreen *screen); + QXlibCursor(QXlibScreen *screen); void changeCursor(QCursor * cursor, QWidget * widget); private: @@ -59,7 +59,7 @@ private: Cursor createCursorBitmap(QCursor * cursor); Cursor createCursorShape(int cshape); - QTestLiteScreen *testLiteScreen() const; + QXlibScreen *testLiteScreen() const; QMap cursorMap; }; diff --git a/src/plugins/platforms/testlite/qtestliteeglintegration.cpp b/src/plugins/platforms/testlite/qtestliteeglintegration.cpp index 532c63d..9bbe0ca 100644 --- a/src/plugins/platforms/testlite/qtestliteeglintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteeglintegration.cpp @@ -52,7 +52,7 @@ static int countBits(unsigned long mask) return count; } -VisualID QTestLiteEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) +VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) { VisualID visualId = 0; EGLint eglValue = 0; diff --git a/src/plugins/platforms/testlite/qtestliteeglintegration.h b/src/plugins/platforms/testlite/qtestliteeglintegration.h index 99e9018..4c2e50d 100644 --- a/src/plugins/platforms/testlite/qtestliteeglintegration.h +++ b/src/plugins/platforms/testlite/qtestliteeglintegration.h @@ -45,7 +45,7 @@ #include "qtestlitestaticinfo.h" #include "../eglconvenience/qeglconvenience.h" -class QTestLiteEglIntegration +class QXlibEglIntegration { public: static VisualID getCompatibleVisualId(Display *display, EGLConfig config); diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index dc8a6d7..cdc5c29 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -61,16 +61,16 @@ QT_BEGIN_NAMESPACE -QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) +QXlibIntegration::QXlibIntegration(bool useOpenGL) : mUseOpenGL(useOpenGL) , mFontDb(new QGenericUnixFontDatabase()) , mClipboard(0) { - mPrimaryScreen = new QTestLiteScreen(); + mPrimaryScreen = new QXlibScreen(); mScreens.append(mPrimaryScreen); } -QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QXlibIntegration::createPixmapData(QPixmapData::PixelType type) const { #ifndef QT_NO_OPENGL if (mUseOpenGL) @@ -79,33 +79,33 @@ QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) return new QRasterPixmapData(type); } -QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const +QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const { #ifndef QT_NO_OPENGL if (mUseOpenGL) return new QGLWindowSurface(widget); #endif - return new QTestLiteWindowSurface(widget); + return new QXlibWindowSurface(widget); } -QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { - return new QTestLiteWindow(widget); + return new QXlibWindow(widget); } -QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const +QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const { QImage image; QWidget *widget = QWidget::find(window); if (widget) { - QTestLiteScreen *screen = QTestLiteScreen::testLiteScreenForWidget(widget); + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); image = screen->grabWindow(window,x,y,width,height); } else { for (int i = 0; i < mScreens.size(); i++) { - QTestLiteScreen *screen = static_cast(mScreens[i]); + QXlibScreen *screen = static_cast(mScreens[i]); if (screen->rootWindow() == window) { image = screen->grabWindow(window,x,y,width,height); } @@ -114,33 +114,33 @@ QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap::fromImage(image); } -QPlatformFontDatabase *QTestLiteIntegration::fontDatabase() const +QPlatformFontDatabase *QXlibIntegration::fontDatabase() const { return mFontDb; } -QPlatformClipboard * QTestLiteIntegration::clipboard() const +QPlatformClipboard * QXlibIntegration::clipboard() const { //Use lazy init since clipboard needs QTestliteScreen if (!mClipboard) { - QTestLiteIntegration *that = const_cast(this); - that->mClipboard = new QTestLiteClipboard(mPrimaryScreen); + QXlibIntegration *that = const_cast(this); + that->mClipboard = new QXlibClipboard(mPrimaryScreen); } return mClipboard; } -bool QTestLiteIntegration::hasOpenGL() const +bool QXlibIntegration::hasOpenGL() const { #if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) - QTestLiteScreen *screen = static_cast(mScreens.at(0)); + QXlibScreen *screen = static_cast(mScreens.at(0)); return glXQueryExtension(screen->display(), 0, 0) != 0; #else static bool eglHasbeenInitialized = false; static bool wasEglInitialized = false; if (!eglHasbeenInitialized) { eglHasbeenInitialized = true; - const QTestLiteScreen *screen = static_cast(mScreens.at(0)); + const QXlibScreen *screen = static_cast(mScreens.at(0)); EGLint major, minor; eglBindAPI(EGL_OPENGL_ES_API); EGLDisplay disp = eglGetDisplay(screen->display()); diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index 320cf00..c3125b8 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -52,12 +52,12 @@ QT_BEGIN_NAMESPACE -class QTestLiteScreen; +class QXlibScreen; -class QTestLiteIntegration : public QPlatformIntegration +class QXlibIntegration : public QPlatformIntegration { public: - QTestLiteIntegration(bool useOpenGL = false); + QXlibIntegration(bool useOpenGL = false); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; @@ -74,7 +74,7 @@ public: private: bool mUseOpenGL; - QTestLiteScreen *mPrimaryScreen; + QXlibScreen *mPrimaryScreen; QList mScreens; QPlatformFontDatabase *mFontDb; QPlatformClipboard *mClipboard; diff --git a/src/plugins/platforms/testlite/qtestlitekeyboard.cpp b/src/plugins/platforms/testlite/qtestlitekeyboard.cpp index 5b4ebd7..fb0cf2e 100644 --- a/src/plugins/platforms/testlite/qtestlitekeyboard.cpp +++ b/src/plugins/platforms/testlite/qtestlitekeyboard.cpp @@ -740,7 +740,7 @@ static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) return QChar(0x0); } -Qt::KeyboardModifiers QTestLiteKeyboard::translateModifiers(int s) +Qt::KeyboardModifiers QXlibKeyboard::translateModifiers(int s) { Qt::KeyboardModifiers ret = 0; if (s & ShiftMask) @@ -756,7 +756,7 @@ Qt::KeyboardModifiers QTestLiteKeyboard::translateModifiers(int s) return ret; } -void QTestLiteKeyboard::setMask(KeySym sym, uint mask) +void QXlibKeyboard::setMask(KeySym sym, uint mask) { if (m_alt_mask == 0 && m_meta_mask != mask @@ -800,7 +800,7 @@ void QTestLiteKeyboard::setMask(KeySym sym, uint mask) } } -int QTestLiteKeyboard::translateKeySym(uint key) const +int QXlibKeyboard::translateKeySym(uint key) const { int code = -1; int i = 0; // any other keys @@ -822,7 +822,7 @@ int QTestLiteKeyboard::translateKeySym(uint key) const return code; } -QString QTestLiteKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, +QString QXlibKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, int &code, Qt::KeyboardModifiers &modifiers, QByteArray &chars, int &count) { @@ -939,7 +939,7 @@ QString QTestLiteKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, return text; } -QTestLiteKeyboard::QTestLiteKeyboard(QTestLiteScreen *screen) +QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) : m_screen(screen) , m_alt_mask(0) , m_super_mask(0) @@ -949,7 +949,7 @@ QTestLiteKeyboard::QTestLiteKeyboard(QTestLiteScreen *screen) changeLayout(); } -void QTestLiteKeyboard::changeLayout() +void QXlibKeyboard::changeLayout() { XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { @@ -986,7 +986,7 @@ static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) } } -void QTestLiteKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) +void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) { int qtcode = 0; Qt::KeyboardModifiers modifiers = translateModifiers(ev->state); diff --git a/src/plugins/platforms/testlite/qtestlitekeyboard.h b/src/plugins/platforms/testlite/qtestlitekeyboard.h index 6873a09..98df4e1 100644 --- a/src/plugins/platforms/testlite/qtestlitekeyboard.h +++ b/src/plugins/platforms/testlite/qtestlitekeyboard.h @@ -44,10 +44,10 @@ #include "qtestliteintegration.h" -class QTestLiteKeyboard +class QXlibKeyboard { public: - QTestLiteKeyboard(QTestLiteScreen *screen); + QXlibKeyboard(QXlibScreen *screen); void changeLayout(); @@ -63,7 +63,7 @@ private: int &code, Qt::KeyboardModifiers &modifiers, QByteArray &chars, int &count); - QTestLiteScreen *m_screen; + QXlibScreen *m_screen; uint m_alt_mask; uint m_super_mask; diff --git a/src/plugins/platforms/testlite/qtestlitemime.cpp b/src/plugins/platforms/testlite/qtestlitemime.cpp index c509991..5335ae9 100644 --- a/src/plugins/platforms/testlite/qtestlitemime.cpp +++ b/src/plugins/platforms/testlite/qtestlitemime.cpp @@ -48,22 +48,22 @@ #include #include -QTestLiteMime::QTestLiteMime() +QXlibMime::QXlibMime() : QInternalMimeData() { } -QTestLiteMime::~QTestLiteMime() +QXlibMime::~QXlibMime() {} -QString QTestLiteMime::mimeAtomToString(Display *display, Atom a) +QString QXlibMime::mimeAtomToString(Display *display, Atom a) { if (!a) return 0; - if (a == XA_STRING || a == QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING)) { + if (a == XA_STRING || a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) { return "text/plain"; // some Xdnd clients are dumb } char *atom = XGetAtomName(display, a); @@ -72,14 +72,14 @@ QString QTestLiteMime::mimeAtomToString(Display *display, Atom a) return result; } -Atom QTestLiteMime::mimeStringToAtom(Display *display, const QString &mimeType) +Atom QXlibMime::mimeStringToAtom(Display *display, const QString &mimeType) { if (mimeType.isEmpty()) return 0; return XInternAtom(display, mimeType.toLatin1().constData(), False); } -QStringList QTestLiteMime::mimeFormatsForAtom(Display *display, Atom a) +QStringList QXlibMime::mimeFormatsForAtom(Display *display, Atom a) { QStringList formats; if (a) { @@ -87,10 +87,10 @@ QStringList QTestLiteMime::mimeFormatsForAtom(Display *display, Atom a) formats.append(atomName); // special cases for string type - if (a == QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING) + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) || a == XA_STRING - || a == QTestLiteStatic::atom(QTestLiteStatic::TEXT) - || a == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) formats.append(QLatin1String("text/plain")); // special cases for uris @@ -104,7 +104,7 @@ QStringList QTestLiteMime::mimeFormatsForAtom(Display *display, Atom a) return formats; } -bool QTestLiteMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) +bool QXlibMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) { bool ret = false; *atomFormat = a; @@ -116,27 +116,27 @@ bool QTestLiteMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeDat *dataFormat = 16; ret = true; } else { - if ((a == QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING) + if ((a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) || a == XA_STRING - || a == QTestLiteStatic::atom(QTestLiteStatic::TEXT) - || a == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) && QInternalMimeData::hasFormatHelper(QLatin1String("text/plain"), mimeData)) { - if (a == QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING)){ + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)){ *data = QInternalMimeData::renderDataHelper(QLatin1String("text/plain"), mimeData); ret = true; } else if (a == XA_STRING) { *data = QString::fromUtf8(QInternalMimeData::renderDataHelper( QLatin1String("text/plain"), mimeData)).toLocal8Bit(); ret = true; - } else if (a == QTestLiteStatic::atom(QTestLiteStatic::TEXT) - || a == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) { + } else if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { // the ICCCM states that TEXT and COMPOUND_TEXT are in the // encoding of choice, so we choose the encoding of the locale QByteArray strData = QString::fromUtf8(QInternalMimeData::renderDataHelper( QLatin1String("text/plain"), mimeData)).toLocal8Bit(); char *list[] = { strData.data(), NULL }; - XICCEncodingStyle style = (a == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) + XICCEncodingStyle style = (a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) ? XCompoundTextStyle : XStdICCTextStyle; XTextProperty textprop; if (list[0] != NULL @@ -165,17 +165,17 @@ bool QTestLiteMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeDat return ret && data != 0; } -QList QTestLiteMime::mimeAtomsForFormat(Display *display, const QString &format) +QList QXlibMime::mimeAtomsForFormat(Display *display, const QString &format) { QList atoms; atoms.append(mimeStringToAtom(display, format)); // special cases for strings if (format == QLatin1String("text/plain")) { - atoms.append(QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING)); + atoms.append(QXlibStatic::atom(QXlibStatic::UTF8_STRING)); atoms.append(XA_STRING); - atoms.append(QTestLiteStatic::atom(QTestLiteStatic::TEXT)); - atoms.append(QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)); + atoms.append(QXlibStatic::atom(QXlibStatic::TEXT)); + atoms.append(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)); } // special cases for uris @@ -192,7 +192,7 @@ QList QTestLiteMime::mimeAtomsForFormat(Display *display, const QString &f return atoms; } -QVariant QTestLiteMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) +QVariant QXlibMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) { QString atomName = mimeAtomToString(display,a); if (atomName == format) @@ -212,12 +212,12 @@ QVariant QTestLiteMime::mimeConvertToFormat(Display *display, Atom a, const QByt // special cases for string types if (format == QLatin1String("text/plain")) { - if (a == QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING)) + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) return QString::fromUtf8(data); if (a == XA_STRING) return QString::fromLatin1(data); - if (a == QTestLiteStatic::atom(QTestLiteStatic::TEXT) - || a == QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT)) + if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) // #### might be wrong for COMPUND_TEXT return QString::fromLocal8Bit(data, data.size()); } @@ -251,7 +251,7 @@ QVariant QTestLiteMime::mimeConvertToFormat(Display *display, Atom a, const QByt XGetGeometry(display, xpm, &root, &x, &y, &width, &height, &border_width, &depth); XImage *ximg = XGetImage(display,xpm,x,y,width,height,AllPlanes,depth==1 ? XYPixmap : ZPixmap); - QImage qimg = QTestLiteStatic::qimageFromXImage(ximg); + QImage qimg = QXlibStatic::qimageFromXImage(ximg); XDestroyImage(ximg); QImageWriter imageWriter; @@ -266,18 +266,18 @@ QVariant QTestLiteMime::mimeConvertToFormat(Display *display, Atom a, const QByt return QVariant(); } -Atom QTestLiteMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList &atoms, QByteArray *requestedEncoding) +Atom QXlibMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList &atoms, QByteArray *requestedEncoding) { requestedEncoding->clear(); // find matches for string types if (format == QLatin1String("text/plain")) { - if (atoms.contains(QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING))) - return QTestLiteStatic::atom(QTestLiteStatic::UTF8_STRING); - if (atoms.contains(QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT))) - return QTestLiteStatic::atom(QTestLiteStatic::COMPOUND_TEXT); - if (atoms.contains(QTestLiteStatic::atom(QTestLiteStatic::TEXT))) - return QTestLiteStatic::atom(QTestLiteStatic::TEXT); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::UTF8_STRING))) + return QXlibStatic::atom(QXlibStatic::UTF8_STRING); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT))) + return QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::TEXT))) + return QXlibStatic::atom(QXlibStatic::TEXT); if (atoms.contains(XA_STRING)) return XA_STRING; } diff --git a/src/plugins/platforms/testlite/qtestlitemime.h b/src/plugins/platforms/testlite/qtestlitemime.h index f11070f..6a70ea4 100644 --- a/src/plugins/platforms/testlite/qtestlitemime.h +++ b/src/plugins/platforms/testlite/qtestlitemime.h @@ -49,11 +49,11 @@ #include "qtestliteintegration.h" #include "qtestliteclipboard.h" -class QTestLiteMime : public QInternalMimeData { +class QXlibMime : public QInternalMimeData { Q_OBJECT public: - QTestLiteMime(); - ~QTestLiteMime(); + QXlibMime(); + ~QXlibMime(); static QList mimeAtomsForFormat(Display *display, const QString &format); static QString mimeAtomToString(Display *display, Atom a); diff --git a/src/plugins/platforms/testlite/qtestlitescreen.cpp b/src/plugins/platforms/testlite/qtestlitescreen.cpp index c211ee6..714c17b 100644 --- a/src/plugins/platforms/testlite/qtestlitescreen.cpp +++ b/src/plugins/platforms/testlite/qtestlitescreen.cpp @@ -188,7 +188,7 @@ qDebug() << "qt_x_errhandler" << err->error_code; return 0; } -QTestLiteScreen::QTestLiteScreen() +QXlibScreen::QXlibScreen() : mFormat(QImage::Format_RGB32) { char *display_name = getenv("DISPLAY"); @@ -228,11 +228,11 @@ QTestLiteScreen::QTestLiteScreen() QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); - mCursor = new QTestLiteCursor(this); - mKeyboard = new QTestLiteKeyboard(this); + mCursor = new QXlibCursor(this); + mKeyboard = new QXlibKeyboard(this); } -QTestLiteScreen::~QTestLiteScreen() +QXlibScreen::~QXlibScreen() { delete mCursor; XCloseDisplay(mDisplay); @@ -245,17 +245,17 @@ QTestLiteScreen::~QTestLiteScreen() #undef KeyRelease #endif -bool QTestLiteScreen::handleEvent(XEvent *xe) +bool QXlibScreen::handleEvent(XEvent *xe) { int quit = false; - QTestLiteWindow *platformWindow = 0; + QXlibWindow *platformWindow = 0; QWidget *widget = QWidget::find(xe->xany.window); if (widget) { - platformWindow = static_cast(widget->platformWindow()); + platformWindow = static_cast(widget->platformWindow()); } - Atom wmProtocolsAtom = QTestLiteStatic::atom(QTestLiteStatic::WM_PROTOCOLS); - Atom wmDeleteWindowAtom = QTestLiteStatic::atom(QTestLiteStatic::WM_DELETE_WINDOW); + Atom wmProtocolsAtom = QXlibStatic::atom(QXlibStatic::WM_PROTOCOLS); + Atom wmDeleteWindowAtom = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); switch (xe->type) { case ClientMessage: @@ -346,14 +346,14 @@ bool QTestLiteScreen::handleEvent(XEvent *xe) static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer) { - Atom clipboard = QTestLiteStatic::atom(QTestLiteStatic::CLIPBOARD); + Atom clipboard = QXlibStatic::atom(QXlibStatic::CLIPBOARD); return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY || e->xselectionrequest.selection == clipboard)) || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY || e->xselectionclear.selection == clipboard))); } -bool QTestLiteScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) +bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) { QElapsedTimer timer; timer.start(); @@ -377,7 +377,7 @@ bool QTestLiteScreen::waitForClipboardEvent(Window win, int type, XEvent *event, return false; } -void QTestLiteScreen::eventDispatcher() +void QXlibScreen::eventDispatcher() { ulong marker = XNextRequest(mDisplay); // int i = 0; @@ -402,7 +402,7 @@ void QTestLiteScreen::eventDispatcher() } } -QImage QTestLiteScreen::grabWindow(Window window, int x, int y, int w, int h) +QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) { if (w == 0 || h ==0) return QImage(); @@ -437,31 +437,31 @@ QImage QTestLiteScreen::grabWindow(Window window, int x, int y, int w, int h) return result; } -QTestLiteScreen * QTestLiteScreen::testLiteScreenForWidget(QWidget *widget) +QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) { QPlatformScreen *platformScreen = platformScreenForWidget(widget); - return static_cast(platformScreen); + return static_cast(platformScreen); } -Display * QTestLiteScreen::display() const +Display * QXlibScreen::display() const { return mDisplay; } -int QTestLiteScreen::xScreenNumber() const +int QXlibScreen::xScreenNumber() const { return mScreen; } -QTestLiteKeyboard * QTestLiteScreen::keyboard() const +QXlibKeyboard * QXlibScreen::keyboard() const { return mKeyboard; } -void QTestLiteScreen::handleSelectionRequest(XEvent *event) +void QXlibScreen::handleSelectionRequest(XEvent *event) { QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); - QTestLiteClipboard *clipboard = static_cast(integration->clipboard()); + QXlibClipboard *clipboard = static_cast(integration->clipboard()); clipboard->handleSelectionRequest(event); } diff --git a/src/plugins/platforms/testlite/qtestlitescreen.h b/src/plugins/platforms/testlite/qtestlitescreen.h index 860a67c..7e59a59 100644 --- a/src/plugins/platforms/testlite/qtestlitescreen.h +++ b/src/plugins/platforms/testlite/qtestlitescreen.h @@ -47,16 +47,16 @@ QT_BEGIN_NAMESPACE -class QTestLiteCursor; -class QTestLiteKeyboard; +class QXlibCursor; +class QXlibKeyboard; -class QTestLiteScreen : public QPlatformScreen +class QXlibScreen : public QPlatformScreen { Q_OBJECT public: - QTestLiteScreen(); + QXlibScreen(); - ~QTestLiteScreen(); + ~QXlibScreen(); QString displayName() const { return mDisplayName; } @@ -74,12 +74,12 @@ public: QImage grabWindow(Window window, int x, int y, int w, int h); - static QTestLiteScreen *testLiteScreenForWidget(QWidget *widget); + static QXlibScreen *testLiteScreenForWidget(QWidget *widget); Display *display() const; int xScreenNumber() const; - QTestLiteKeyboard *keyboard() const; + QXlibKeyboard *keyboard() const; public slots: void eventDispatcher(); @@ -92,8 +92,8 @@ private: QSize mPhysicalSize; int mDepth; QImage::Format mFormat; - QTestLiteCursor *mCursor; - QTestLiteKeyboard *mKeyboard; + QXlibCursor *mCursor; + QXlibKeyboard *mKeyboard; Display * mDisplay; int mScreen; diff --git a/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp b/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp index 2c6404d..837636c 100644 --- a/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp +++ b/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp @@ -261,7 +261,7 @@ public: , xfixes_eventbase(0) , xfixes_errorbase(0) { - QTestLiteScreen *screen = qobject_cast (QApplicationPrivate::platformIntegration()->screens().at(0)); + QXlibScreen *screen = qobject_cast (QApplicationPrivate::platformIntegration()->screens().at(0)); Q_ASSERT(screen); initializeAllAtoms(screen); @@ -287,7 +287,7 @@ public: return supported; } - Atom atom(QTestLiteStatic::X11Atom atom) + Atom atom(QXlibStatic::X11Atom atom) { return m_allAtoms[atom]; } @@ -351,8 +351,8 @@ public: private: - void initializeAllAtoms(QTestLiteScreen *screen) { - const char *names[QTestLiteStatic::NAtoms]; + void initializeAllAtoms(QXlibScreen *screen) { + const char *names[QXlibStatic::NAtoms]; const char *ptr = x11_atomnames; int i = 0; @@ -363,22 +363,22 @@ private: ++ptr; } - Q_ASSERT(i == QTestLiteStatic::NPredefinedAtoms); + Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); settings_atom_name += XDisplayName(qPrintable(screen->displayName())); names[i++] = settings_atom_name; - Q_ASSERT(i == QTestLiteStatic::NAtoms); + Q_ASSERT(i == QXlibStatic::NAtoms); #if 0//defined(XlibSpecificationRelease) && (XlibSpecificationRelease >= 6) XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); #else - for (i = 0; i < QTestLiteStatic::NAtoms; ++i) + for (i = 0; i < QXlibStatic::NAtoms; ++i) m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); #endif } - void initializeSupportedAtoms(QTestLiteScreen *screen) + void initializeSupportedAtoms(QXlibScreen *screen) { Atom type; int format; @@ -387,7 +387,7 @@ private: unsigned char *data = 0; int e = XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QTestLiteStatic::_NET_SUPPORTED), 0, 0, + this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, False, XA_ATOM, &type, &format, &nitems, &after, &data); if (data) XFree(data); @@ -398,7 +398,7 @@ private: while (after > 0) { XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QTestLiteStatic::_NET_SUPPORTED), offset, 1024, + this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, False, XA_ATOM, &type, &format, &nitems, &after, &data); if (type == XA_ATOM && format == 32) { @@ -423,7 +423,7 @@ private: } } - void resolveXFixes(QTestLiteScreen *screen) + void resolveXFixes(QXlibScreen *screen) { #ifndef QT_NO_XFIXES // See if Xfixes is supported on the connected display @@ -456,7 +456,7 @@ private: } Atom *m_supportedAtoms; - Atom m_allAtoms[QTestLiteStatic::NAtoms]; + Atom m_allAtoms[QXlibStatic::NAtoms]; #ifndef QT_NO_XFIXES PtrXFixesQueryExtension ptrXFixesQueryExtension; @@ -474,28 +474,28 @@ private: Q_GLOBAL_STATIC(QTestLiteStaticInfoPrivate, qTestLiteStaticInfoPrivate); -Atom QTestLiteStatic::atom(QTestLiteStatic::X11Atom atom) +Atom QXlibStatic::atom(QXlibStatic::X11Atom atom) { return qTestLiteStaticInfoPrivate()->atom(atom); } -bool QTestLiteStatic::isSupportedByWM(Atom atom) +bool QXlibStatic::isSupportedByWM(Atom atom) { return qTestLiteStaticInfoPrivate()->isSupportedByWM(atom); } -bool QTestLiteStatic::useXFixes() +bool QXlibStatic::useXFixes() { return qTestLiteStaticInfoPrivate()->useXFixes(); } -int QTestLiteStatic::xFixesEventBase() +int QXlibStatic::xFixesEventBase() { return qTestLiteStaticInfoPrivate()->xFixesEventBase(); } #ifndef QT_NO_XFIXES -PtrXFixesSelectSelectionInput QTestLiteStatic::xFixesSelectSelectionInput() +PtrXFixesSelectSelectionInput QXlibStatic::xFixesSelectSelectionInput() { qDebug() << qTestLiteStaticInfoPrivate()->useXFixes(); if (!qTestLiteStaticInfoPrivate()->useXFixes()) @@ -504,7 +504,7 @@ PtrXFixesSelectSelectionInput QTestLiteStatic::xFixesSelectSelectionInput() return qTestLiteStaticInfoPrivate()->xFixesSelectSelectionInput(); } -QImage QTestLiteStatic::qimageFromXImage(XImage *xi) +QImage QXlibStatic::qimageFromXImage(XImage *xi) { return qTestLiteStaticInfoPrivate()->qimageFromXImage(xi); } diff --git a/src/plugins/platforms/testlite/qtestlitestaticinfo.h b/src/plugins/platforms/testlite/qtestlitestaticinfo.h index 0876768..8473ee9 100644 --- a/src/plugins/platforms/testlite/qtestlitestaticinfo.h +++ b/src/plugins/platforms/testlite/qtestlitestaticinfo.h @@ -231,7 +231,7 @@ enum { #endif -class QTestLiteStatic +class QXlibStatic { public: enum X11Atom { diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index b7c5e99..0f11a81 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -68,10 +68,10 @@ QT_BEGIN_NAMESPACE -QTestLiteWindow::QTestLiteWindow(QWidget *window) +QXlibWindow::QXlibWindow(QWidget *window) : QPlatformWindow(window) , mGLContext(0) - , mScreen(QTestLiteScreen::testLiteScreenForWidget(window)) + , mScreen(QXlibScreen::testLiteScreenForWidget(window)) { int x = window->x(); int y = window->y(); @@ -88,7 +88,7 @@ QTestLiteWindow::QTestLiteWindow(QWidget *window) EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); - VisualID id = QTestLiteEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); + VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); XVisualInfo visualInfoTemplate; memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); @@ -133,20 +133,20 @@ QTestLiteWindow::QTestLiteWindow(QWidget *window) Atom protocols[5]; int n = 0; - protocols[n++] = QTestLiteStatic::atom(QTestLiteStatic::WM_DELETE_WINDOW); // support del window protocol - protocols[n++] = QTestLiteStatic::atom(QTestLiteStatic::WM_TAKE_FOCUS); // support take focus window protocol - protocols[n++] = QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_PING); // support _NET_WM_PING protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); // support del window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_TAKE_FOCUS); // support take focus window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_PING); // support _NET_WM_PING protocol #ifndef QT_NO_XSYNC - protocols[n++] = QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol #endif // QT_NO_XSYNC if (window->windowFlags() & Qt::WindowContextHelpButtonHint) - protocols[n++] = QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_CONTEXT_HELP); + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); XSetWMProtocols(mScreen->display(), x_window, protocols, n); } -QTestLiteWindow::~QTestLiteWindow() +QXlibWindow::~QXlibWindow() { #ifdef MYX11_DEBUG qDebug() << "~QTestLiteWindow" << hex << x_window; @@ -172,7 +172,7 @@ static Qt::MouseButtons translateMouseButtons(int s) -void QTestLiteWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) +void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) { static QPoint mousePoint; @@ -215,68 +215,68 @@ void QTestLiteWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) mousePoint = QPoint(e->x_root, e->y_root); } -void QTestLiteWindow::handleCloseEvent() +void QXlibWindow::handleCloseEvent() { QWindowSystemInterface::handleCloseEvent(widget()); } -void QTestLiteWindow::handleEnterEvent() +void QXlibWindow::handleEnterEvent() { QWindowSystemInterface::handleEnterEvent(widget()); } -void QTestLiteWindow::handleLeaveEvent() +void QXlibWindow::handleLeaveEvent() { QWindowSystemInterface::handleLeaveEvent(widget()); } -void QTestLiteWindow::handleFocusInEvent() +void QXlibWindow::handleFocusInEvent() { QWindowSystemInterface::handleWindowActivated(widget()); } -void QTestLiteWindow::handleFocusOutEvent() +void QXlibWindow::handleFocusOutEvent() { QWindowSystemInterface::handleWindowActivated(0); } -void QTestLiteWindow::setGeometry(const QRect &rect) +void QXlibWindow::setGeometry(const QRect &rect) { XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); QPlatformWindow::setGeometry(rect); } -Qt::WindowFlags QTestLiteWindow::windowFlags() const +Qt::WindowFlags QXlibWindow::windowFlags() const { return mWindowFlags; } -WId QTestLiteWindow::winId() const +WId QXlibWindow::winId() const { return x_window; } -void QTestLiteWindow::setParent(const QPlatformWindow *window) +void QXlibWindow::setParent(const QPlatformWindow *window) { QPoint topLeft = geometry().topLeft(); XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); } -void QTestLiteWindow::raise() +void QXlibWindow::raise() { XRaiseWindow(mScreen->display(), x_window); } -void QTestLiteWindow::lower() +void QXlibWindow::lower() { XLowerWindow(mScreen->display(), x_window); } -void QTestLiteWindow::setWindowTitle(const QString &title) +void QXlibWindow::setWindowTitle(const QString &title) { QByteArray ba = title.toLatin1(); //We're not making a general solution here... XTextProperty windowName; @@ -288,7 +288,7 @@ void QTestLiteWindow::setWindowTitle(const QString &title) XSetWMName(mScreen->display(), x_window, &windowName); } -GC QTestLiteWindow::createGC() +GC QXlibWindow::createGC() { GC gc; @@ -299,7 +299,7 @@ GC QTestLiteWindow::createGC() return gc; } -void QTestLiteWindow::paintEvent() +void QXlibWindow::paintEvent() { #ifdef MYX11_DEBUG // qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; @@ -309,12 +309,12 @@ void QTestLiteWindow::paintEvent() surface->flush(widget(), widget()->geometry(), QPoint()); } -void QTestLiteWindow::requestActivateWindow() +void QXlibWindow::requestActivateWindow() { XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); } -void QTestLiteWindow::resizeEvent(XConfigureEvent *e) +void QXlibWindow::resizeEvent(XConfigureEvent *e) { int xpos = geometry().x(); int ypos = geometry().y(); @@ -333,7 +333,7 @@ void QTestLiteWindow::resizeEvent(XConfigureEvent *e) QWindowSystemInterface::handleGeometryChange(widget(), newRect); } -void QTestLiteWindow::mousePressEvent(XButtonEvent *e) +void QXlibWindow::mousePressEvent(XButtonEvent *e) { static long prevTime = 0; static Window prevWindow; @@ -356,22 +356,22 @@ void QTestLiteWindow::mousePressEvent(XButtonEvent *e) handleMouseEvent(type, e); } -QtMWMHints QTestLiteWindow::getMWMHints() const +QXlibMWMHints QXlibWindow::getMWMHints() const { - QtMWMHints mwmhints; + QXlibMWMHints mwmhints; Atom type; int format; ulong nitems, bytesLeft; uchar *data = 0; - Atom atomForMotifWmHints = QTestLiteStatic::atom(QTestLiteStatic::_MOTIF_WM_HINTS); + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, &data) == Success) && (type == atomForMotifWmHints && format == 32 && nitems >= 5)) { - mwmhints = *(reinterpret_cast(data)); + mwmhints = *(reinterpret_cast(data)); } else { mwmhints.flags = 0L; mwmhints.functions = MWM_FUNC_ALL; @@ -386,9 +386,9 @@ QtMWMHints QTestLiteWindow::getMWMHints() const return mwmhints; } -void QTestLiteWindow::setMWMHints(const QtMWMHints &mwmhints) +void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) { - Atom atomForMotifWmHints = QTestLiteStatic::atom(QTestLiteStatic::_MOTIF_WM_HINTS); + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); if (mwmhints.flags != 0l) { XChangeProperty(mScreen->display(), x_window, atomForMotifWmHints, atomForMotifWmHints, 32, @@ -411,7 +411,7 @@ static inline bool isTransient(const QWidget *w) && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); } -QVector QTestLiteWindow::getNetWmState() const +QVector QXlibWindow::getNetWmState() const { QVector returnValue; @@ -421,7 +421,7 @@ QVector QTestLiteWindow::getNetWmState() const ulong propertyLength; ulong bytesLeft; uchar *propertyData = 0; - if (XGetWindowProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), 0, 0, + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, False, XA_ATOM, &actualType, &actualFormat, &propertyLength, &bytesLeft, &propertyData) == Success && actualType == XA_ATOM && actualFormat == 32) { @@ -429,7 +429,7 @@ QVector QTestLiteWindow::getNetWmState() const XFree((char*) propertyData); // fetch all data - if (XGetWindowProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), 0, + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, &propertyLength, &bytesLeft, &propertyData) != Success) { returnValue.clear(); @@ -447,7 +447,7 @@ QVector QTestLiteWindow::getNetWmState() const return returnValue; } -Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) +Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) { // Q_ASSERT(flags & Qt::Window); mWindowFlags = flags; @@ -478,7 +478,7 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) XSetWindowAttributes wsa; - QtMWMHints mwmhints; + QXlibMWMHints mwmhints; mwmhints.flags = 0L; mwmhints.functions = 0L; mwmhints.decorations = 0; @@ -567,35 +567,35 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) if (flags & Qt::WindowStaysOnTopHint) { if (flags & Qt::WindowStaysOnBottomHint) qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_ABOVE))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_ABOVE)); - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_STAYS_ON_TOP))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_STAYS_ON_TOP)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP)); } else if (flags & Qt::WindowStaysOnBottomHint) { - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_BELOW))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_BELOW)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW)); } if (widget()->isFullScreen()) { - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_FULLSCREEN))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_FULLSCREEN)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN)); } if (widget()->isMaximized()) { - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_VERT))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MAXIMIZED_VERT)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT)); } if (widget()->windowModality() != Qt::NonModal) { - if (!netWmState.contains(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MODAL))) - netWmState.append(QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE_MODAL)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL)); } if (!netWmState.isEmpty()) { XChangeProperty(mScreen->display(), x_window, - QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, + QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, (unsigned char *) netWmState.data(), netWmState.size()); } else { - XDeleteProperty(mScreen->display(), x_window, QTestLiteStatic::atom(QTestLiteStatic::_NET_WM_STATE)); + XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); } //##### only if initializeWindow??? @@ -620,7 +620,7 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) return flags; } -void QTestLiteWindow::setVisible(bool visible) +void QXlibWindow::setVisible(bool visible) { #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; @@ -630,7 +630,7 @@ void QTestLiteWindow::setVisible(bool visible) if (widget()->parentWidget()) { QWidget *widgetParent = widget()->parentWidget()->window(); if (widgetParent && widgetParent->platformWindow()) { - QTestLiteWindow *parentWidnow = static_cast(widgetParent->platformWindow()); + QXlibWindow *parentWidnow = static_cast(widgetParent->platformWindow()); parentXWindow = parentWidnow->x_window; } } @@ -646,18 +646,18 @@ void QTestLiteWindow::setVisible(bool visible) } } -void QTestLiteWindow::setCursor(const Cursor &cursor) +void QXlibWindow::setCursor(const Cursor &cursor) { XDefineCursor(mScreen->display(), x_window, cursor); XFlush(mScreen->display()); } -QPlatformGLContext *QTestLiteWindow::glContext() const +QPlatformGLContext *QXlibWindow::glContext() const { if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) return 0; if (!mGLContext) { - QTestLiteWindow *that = const_cast(this); + QXlibWindow *that = const_cast(this); #if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); @@ -680,17 +680,17 @@ QPlatformGLContext *QTestLiteWindow::glContext() const return mGLContext; } -Window QTestLiteWindow::xWindow() const +Window QXlibWindow::xWindow() const { return x_window; } -GC QTestLiteWindow::graphicsContext() const +GC QXlibWindow::graphicsContext() const { return gc; } -void QTestLiteWindow::doSizeHints() +void QXlibWindow::doSizeHints() { Q_ASSERT(widget()->testAttribute(Qt::WA_WState_Created)); XSizeHints s; @@ -709,7 +709,7 @@ void QTestLiteWindow::doSizeHints() XSetWMNormalHints(mScreen->display(), x_window, &s); } -QPlatformWindowFormat QTestLiteWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const +QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const { // I have only tested this setup on a dodgy intel setup, where I didn't use standard libs, // so this might be not what we want to do :) diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index 2ca7e10..ccf6867 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -50,7 +50,7 @@ #include #include -struct QtMWMHints { +struct QXlibMWMHints { ulong flags, functions, decorations; long input_mode; ulong status; @@ -83,11 +83,11 @@ enum { MWM_INPUT_FULL_APPLICATION_MODAL = 3L }; -class QTestLiteWindow : public QPlatformWindow +class QXlibWindow : public QPlatformWindow { public: - QTestLiteWindow(QWidget *window); - ~QTestLiteWindow(); + QXlibWindow(QWidget *window); + ~QXlibWindow(); void mousePressEvent(XButtonEvent*); @@ -124,8 +124,8 @@ public: protected: QVector getNetWmState() const; - void setMWMHints(const QtMWMHints &mwmhints); - QtMWMHints getMWMHints() const; + void setMWMHints(const QXlibMWMHints &mwmhints); + QXlibMWMHints getMWMHints() const; void doSizeHints(); @@ -138,7 +138,7 @@ private: GC createGC(); QPlatformGLContext *mGLContext; - QTestLiteScreen *mScreen; + QXlibScreen *mScreen; Qt::WindowFlags mWindowFlags; }; diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp index ced964a..088730d 100644 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp @@ -55,9 +55,9 @@ QT_BEGIN_NAMESPACE -struct MyShmImageInfo { - MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~MyShmImageInfo() { destroy(); } +struct QXlibShmImageInfo { + QXlibShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~QXlibShmImageInfo() { destroy(); } void destroy(); @@ -68,7 +68,7 @@ struct MyShmImageInfo { #ifndef DONT_USE_MIT_SHM -void MyShmImageInfo::destroy() +void QXlibShmImageInfo::destroy() { XShmDetach (display, &shminfo); XDestroyImage (image); @@ -77,18 +77,18 @@ void MyShmImageInfo::destroy() } #endif -void QTestLiteWindowSurface::resizeShmImage(int width, int height) +void QXlibWindowSurface::resizeShmImage(int width, int height) { #ifdef DONT_USE_MIT_SHM shm_img = QImage(width, height, QImage::Format_RGB32); #else - QTestLiteScreen *screen = QTestLiteScreen::testLiteScreenForWidget(window()); + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window()); if (image_info) image_info->destroy(); else - image_info = new MyShmImageInfo(screen->display()); + image_info = new QXlibShmImageInfo(screen->display()); Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); @@ -115,37 +115,37 @@ void QTestLiteWindowSurface::resizeShmImage(int width, int height) } -void QTestLiteWindowSurface::resizeBuffer(QSize s) +void QXlibWindowSurface::resizeBuffer(QSize s) { if (shm_img.size() != s) resizeShmImage(s.width(), s.height()); } -QSize QTestLiteWindowSurface::bufferSize() const +QSize QXlibWindowSurface::bufferSize() const { return shm_img.size(); } -QTestLiteWindowSurface::QTestLiteWindowSurface (QWidget *window) +QXlibWindowSurface::QXlibWindowSurface (QWidget *window) : QWindowSurface(window), painted(false), image_info(0) { - xw = static_cast(window->platformWindow()); + xw = static_cast(window->platformWindow()); // qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; } -QTestLiteWindowSurface::~QTestLiteWindowSurface() +QXlibWindowSurface::~QXlibWindowSurface() { delete image_info; } -QPaintDevice *QTestLiteWindowSurface::paintDevice() +QPaintDevice *QXlibWindowSurface::paintDevice() { return &shm_img; } -void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(region); @@ -154,7 +154,7 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const if (!painted) return; - QTestLiteScreen *screen = QTestLiteScreen::testLiteScreenForWidget(widget); + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); GC gc = xw->graphicsContext(); Window window = xw->xWindow(); #ifdef DONT_USE_MIT_SHM @@ -197,7 +197,7 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const // from qwindowsurface.cpp extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); -bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +bool QXlibWindowSurface::scroll(const QRegion &area, int dx, int dy) { if (shm_img.isNull()) return false; @@ -210,13 +210,13 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) } -void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) +void QXlibWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); resizeBuffer(size()); } -void QTestLiteWindowSurface::endPaint(const QRegion ®ion) +void QXlibWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); painted = true; //there is content in the buffer diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.h b/src/plugins/platforms/testlite/qtestlitewindowsurface.h index ca900e5..12b4c60 100644 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.h +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.h @@ -47,21 +47,19 @@ QT_BEGIN_NAMESPACE -class QTestLiteWindow; -class QTestLiteIntegration; -class QTestLiteScreen; -class MyShmImageInfo; +class QXlibWindow; +class QXlibIntegration; +class QXlibScreen; +class QXlibShmImageInfo; -class QTestLiteWindowSurface : public QWindowSurface +class QXlibWindowSurface : public QWindowSurface { public: - QTestLiteWindowSurface (QWidget *window); - ~QTestLiteWindowSurface(); + QXlibWindowSurface (QWidget *window); + ~QXlibWindowSurface(); QPaintDevice *paintDevice(); -// void flush(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); -// void resize(const QSize &size); bool scroll(const QRegion &area, int dx, int dy); void beginPaint(const QRegion ®ion); @@ -76,9 +74,9 @@ private: void resizeShmImage(int width, int height); QImage shm_img; - MyShmImageInfo *image_info; + QXlibShmImageInfo *image_info; - QTestLiteWindow *xw; + QXlibWindow *xw; }; -- cgit v0.12 From 98f2392e7278aea52f46b7e20f93dea1831e5704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 14 Feb 2011 13:37:24 +0100 Subject: Lighthouse Moving testlite plugin into xlib --- src/plugins/platforms/testlite/main.cpp | 79 -- src/plugins/platforms/testlite/qglxintegration.cpp | 376 -------- src/plugins/platforms/testlite/qglxintegration.h | 94 -- .../platforms/testlite/qtestliteclipboard.cpp | 676 ------------- .../platforms/testlite/qtestliteclipboard.h | 94 -- src/plugins/platforms/testlite/qtestlitecursor.cpp | 199 ---- src/plugins/platforms/testlite/qtestlitecursor.h | 68 -- .../platforms/testlite/qtestliteeglintegration.cpp | 186 ---- .../platforms/testlite/qtestliteeglintegration.h | 54 -- .../platforms/testlite/qtestliteintegration.cpp | 156 --- .../platforms/testlite/qtestliteintegration.h | 85 -- .../platforms/testlite/qtestlitekeyboard.cpp | 1000 -------------------- src/plugins/platforms/testlite/qtestlitekeyboard.h | 76 -- src/plugins/platforms/testlite/qtestlitemime.cpp | 322 ------- src/plugins/platforms/testlite/qtestlitemime.h | 67 -- src/plugins/platforms/testlite/qtestlitescreen.cpp | 468 --------- src/plugins/platforms/testlite/qtestlitescreen.h | 104 -- .../platforms/testlite/qtestlitestaticinfo.cpp | 511 ---------- .../platforms/testlite/qtestlitestaticinfo.h | 413 -------- src/plugins/platforms/testlite/qtestlitewindow.cpp | 735 -------------- src/plugins/platforms/testlite/qtestlitewindow.h | 145 --- .../platforms/testlite/qtestlitewindowsurface.cpp | 224 ----- .../platforms/testlite/qtestlitewindowsurface.h | 86 -- src/plugins/platforms/testlite/testlite.pro | 57 -- src/plugins/platforms/xlib/main.cpp | 79 ++ src/plugins/platforms/xlib/qglxintegration.cpp | 376 ++++++++ src/plugins/platforms/xlib/qglxintegration.h | 94 ++ src/plugins/platforms/xlib/qtestliteclipboard.cpp | 676 +++++++++++++ src/plugins/platforms/xlib/qtestliteclipboard.h | 94 ++ src/plugins/platforms/xlib/qtestlitecursor.cpp | 199 ++++ src/plugins/platforms/xlib/qtestlitecursor.h | 68 ++ .../platforms/xlib/qtestliteeglintegration.cpp | 186 ++++ .../platforms/xlib/qtestliteeglintegration.h | 54 ++ .../platforms/xlib/qtestliteintegration.cpp | 156 +++ src/plugins/platforms/xlib/qtestliteintegration.h | 85 ++ src/plugins/platforms/xlib/qtestlitekeyboard.cpp | 1000 ++++++++++++++++++++ src/plugins/platforms/xlib/qtestlitekeyboard.h | 76 ++ src/plugins/platforms/xlib/qtestlitemime.cpp | 322 +++++++ src/plugins/platforms/xlib/qtestlitemime.h | 67 ++ src/plugins/platforms/xlib/qtestlitescreen.cpp | 468 +++++++++ src/plugins/platforms/xlib/qtestlitescreen.h | 104 ++ src/plugins/platforms/xlib/qtestlitestaticinfo.cpp | 511 ++++++++++ src/plugins/platforms/xlib/qtestlitestaticinfo.h | 413 ++++++++ src/plugins/platforms/xlib/qtestlitewindow.cpp | 735 ++++++++++++++ src/plugins/platforms/xlib/qtestlitewindow.h | 145 +++ .../platforms/xlib/qtestlitewindowsurface.cpp | 224 +++++ .../platforms/xlib/qtestlitewindowsurface.h | 86 ++ src/plugins/platforms/xlib/testlite.pro | 57 ++ 48 files changed, 6275 insertions(+), 6275 deletions(-) delete mode 100644 src/plugins/platforms/testlite/main.cpp delete mode 100644 src/plugins/platforms/testlite/qglxintegration.cpp delete mode 100644 src/plugins/platforms/testlite/qglxintegration.h delete mode 100644 src/plugins/platforms/testlite/qtestliteclipboard.cpp delete mode 100644 src/plugins/platforms/testlite/qtestliteclipboard.h delete mode 100644 src/plugins/platforms/testlite/qtestlitecursor.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitecursor.h delete mode 100644 src/plugins/platforms/testlite/qtestliteeglintegration.cpp delete mode 100644 src/plugins/platforms/testlite/qtestliteeglintegration.h delete mode 100644 src/plugins/platforms/testlite/qtestliteintegration.cpp delete mode 100644 src/plugins/platforms/testlite/qtestliteintegration.h delete mode 100644 src/plugins/platforms/testlite/qtestlitekeyboard.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitekeyboard.h delete mode 100644 src/plugins/platforms/testlite/qtestlitemime.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitemime.h delete mode 100644 src/plugins/platforms/testlite/qtestlitescreen.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitescreen.h delete mode 100644 src/plugins/platforms/testlite/qtestlitestaticinfo.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitestaticinfo.h delete mode 100644 src/plugins/platforms/testlite/qtestlitewindow.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitewindow.h delete mode 100644 src/plugins/platforms/testlite/qtestlitewindowsurface.cpp delete mode 100644 src/plugins/platforms/testlite/qtestlitewindowsurface.h delete mode 100644 src/plugins/platforms/testlite/testlite.pro create mode 100644 src/plugins/platforms/xlib/main.cpp create mode 100644 src/plugins/platforms/xlib/qglxintegration.cpp create mode 100644 src/plugins/platforms/xlib/qglxintegration.h create mode 100644 src/plugins/platforms/xlib/qtestliteclipboard.cpp create mode 100644 src/plugins/platforms/xlib/qtestliteclipboard.h create mode 100644 src/plugins/platforms/xlib/qtestlitecursor.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitecursor.h create mode 100644 src/plugins/platforms/xlib/qtestliteeglintegration.cpp create mode 100644 src/plugins/platforms/xlib/qtestliteeglintegration.h create mode 100644 src/plugins/platforms/xlib/qtestliteintegration.cpp create mode 100644 src/plugins/platforms/xlib/qtestliteintegration.h create mode 100644 src/plugins/platforms/xlib/qtestlitekeyboard.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitekeyboard.h create mode 100644 src/plugins/platforms/xlib/qtestlitemime.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitemime.h create mode 100644 src/plugins/platforms/xlib/qtestlitescreen.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitescreen.h create mode 100644 src/plugins/platforms/xlib/qtestlitestaticinfo.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitestaticinfo.h create mode 100644 src/plugins/platforms/xlib/qtestlitewindow.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitewindow.h create mode 100644 src/plugins/platforms/xlib/qtestlitewindowsurface.cpp create mode 100644 src/plugins/platforms/xlib/qtestlitewindowsurface.h create mode 100644 src/plugins/platforms/xlib/testlite.pro diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp deleted file mode 100644 index 131d399..0000000 --- a/src/plugins/platforms/testlite/main.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qtestliteintegration.h" - -QT_BEGIN_NAMESPACE - -class QXlibIntegrationPlugin : public QPlatformIntegrationPlugin -{ -public: - QStringList keys() const; - QPlatformIntegration *create(const QString&, const QStringList&); -}; - -QStringList QXlibIntegrationPlugin::keys() const -{ - QStringList list; - list << "Xlib"; -#ifndef QT_NO_OPENGL - list << "XlibGL"; -#endif - return list; -} - -QPlatformIntegration* QXlibIntegrationPlugin::create(const QString& system, const QStringList& paramList) -{ - Q_UNUSED(paramList); - if (system.toLower() == "xlib") - return new QXlibIntegration; -#ifndef QT_NO_OPENGL - if (system.toLower() == "xlibgl") - return new QXlibIntegration(true); -#endif - - return 0; -} - -Q_EXPORT_PLUGIN2(xlib, QXlibIntegrationPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp deleted file mode 100644 index 46dfef9..0000000 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -#include "qtestlitewindow.h" -#include "qtestlitescreen.h" - -#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) -#include -#include -#include - -#include "qglxintegration.h" - -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) -#include -#endif - -QT_BEGIN_NAMESPACE - -QMutex QGLXContext::m_defaultSharedContextMutex(QMutex::Recursive); - -QVector QGLXContext::buildSpec(const QPlatformWindowFormat &format) -{ - QVector spec(48); - int i = 0; - - spec[i++] = GLX_LEVEL; - spec[i++] = 0; - spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; - - if (format.rgba()) { - spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; - spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); - spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); - spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); - if (format.alpha()) { - spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize(); - } - - spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); - - if (format.alpha()) { - spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); - } - - } else { - spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works.... - spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8; - } - - spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; - spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; - - if (format.depth()) { - spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); - } - - if (format.stencil()) { - spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); - } - if (format.sampleBuffers()) { - spec[i++] = GLX_SAMPLE_BUFFERS_ARB; - spec[i++] = 1; - spec[i++] = GLX_SAMPLES_ARB; - spec[i++] = format.samples() == -1 ? 4 : format.samples(); - } - - spec[i++] = XNone; - return spec; -} - -GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWindowFormat &format) -{ - bool reduced = true; - GLXFBConfig chosenConfig = 0; - QPlatformWindowFormat reducedFormat = format; - while (!chosenConfig && reduced) { - QVector spec = buildSpec(reducedFormat); - int confcount = 0; - GLXFBConfig *configs; - configs = glXChooseFBConfig(screen->display(),screen->xScreenNumber(),spec.constData(),&confcount); - if (confcount) - { - for (int i = 0; i < confcount; i++) { - chosenConfig = configs[i]; - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (reducedFormat.alpha()) { - int alphaSize; - glXGetFBConfigAttrib(screen->display(),configs[i],GLX_ALPHA_SIZE,&alphaSize); - if (alphaSize > 0) - break; - } else { - break; // Just choose the first in the list if there's no alpha requested - } - } - - XFree(configs); - } - reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced); - } - - if (!chosenConfig) - qWarning("Warning no context created"); - - return chosenConfig; -} - -XVisualInfo *QGLXContext::findVisualInfo(const QXlibScreen *screen, const QPlatformWindowFormat &format) -{ - GLXFBConfig config = QGLXContext::findConfig(screen,format); - XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); - return visualInfo; -} - -QPlatformWindowFormat QGLXContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx) -{ - QPlatformWindowFormat format; - int redSize = 0; - int greenSize = 0; - int blueSize = 0; - int alphaSize = 0; - int depthSize = 0; - int stencilSize = 0; - int sampleBuffers = 0; - int sampleCount = 0; - int level = 0; - int rgba = 0; - int stereo = 0; - int accumSizeA = 0; - int accumSizeR = 0; - int accumSizeG = 0; - int accumSizeB = 0; - - XVisualInfo *vi = glXGetVisualFromFBConfig(display,config); - glXGetConfig(display,vi,GLX_RGBA,&rgba); - XFree(vi); - glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); - glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); - glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); - glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); - glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); - glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); - glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers); - glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); - glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); - glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); - glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); - glXGetFBConfigAttrib(display, config, GLX_ACCUM_GREEN_SIZE, &accumSizeG); - glXGetFBConfigAttrib(display, config, GLX_ACCUM_BLUE_SIZE, &accumSizeB); - - format.setRedBufferSize(redSize); - format.setGreenBufferSize(greenSize); - format.setBlueBufferSize(blueSize); - format.setAlphaBufferSize(alphaSize); - format.setDepthBufferSize(depthSize); - format.setStencilBufferSize(stencilSize); - format.setSampleBuffers(sampleBuffers); - if (format.sampleBuffers()) { - glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); - format.setSamples(sampleCount); - } - - format.setDirectRendering(glXIsDirect(display, ctx)); - format.setRgba(rgba); - format.setStereo(stereo); - format.setAccumBufferSize(accumSizeB); - - return format; -} - -QPlatformWindowFormat QGLXContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced) -{ - QPlatformWindowFormat retFormat = format; - *reduced = true; - - if (retFormat.sampleBuffers()) { - retFormat.setSampleBuffers(false); - } else if (retFormat.stereo()) { - retFormat.setStereo(false); - } else if (retFormat.accum()) { - retFormat.setAccum(false); - }else if (retFormat.stencil()) { - retFormat.setStencil(false); - }else if (retFormat.alpha()) { - retFormat.setAlpha(false); - }else if (retFormat.depth()) { - retFormat.setDepth(false); - }else if (retFormat.doubleBuffer()) { - retFormat.setDoubleBuffer(false); - }else{ - *reduced = false; - } - return retFormat; -} - -QGLXContext::QGLXContext(Window window, QXlibScreen *screen, const QPlatformWindowFormat &format) - : QPlatformGLContext() - , m_screen(screen) - , m_drawable((Drawable)window) - , m_context(0) -{ - - const QPlatformGLContext *sharePlatformContext; - if (format.useDefaultSharedContext()) { - if (!QPlatformGLContext::defaultSharedContext()) { - if (m_defaultSharedContextMutex.tryLock()){ - createDefaultSharedContex(screen); - m_defaultSharedContextMutex.unlock(); - } else { - m_defaultSharedContextMutex.lock(); //wait to the the shared context is created - m_defaultSharedContextMutex.unlock(); - } - } - sharePlatformContext = QPlatformGLContext::defaultSharedContext(); - } else { - sharePlatformContext = format.sharedGLContext(); - } - GLXContext shareGlxContext = 0; - if (sharePlatformContext) - shareGlxContext = static_cast(sharePlatformContext)->glxContext(); - - GLXFBConfig config = findConfig(screen,format); - m_context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,shareGlxContext,TRUE); - m_windowFormat = QGLXContext::platformWindowFromGLXFBConfig(screen->display(),config,m_context); - -#ifdef MYX11_DEBUG - qDebug() << "QGLXGLContext::create context" << m_context; -#endif -} - -QGLXContext::QGLXContext(QXlibScreen *screen, Drawable drawable, GLXContext context) - : QPlatformGLContext(), m_screen(screen), m_drawable(drawable), m_context(context) -{ - -} - -QGLXContext::~QGLXContext() -{ - if (m_context) { - qDebug("Destroying GLX context 0x%p", m_context); - glXDestroyContext(m_screen->display(), m_context); - } -} - -void QGLXContext::createDefaultSharedContex(QXlibScreen *screen) -{ - int x = 0; - int y = 0; - int w = 3; - int h = 3; - - QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); - GLXContext context; - GLXFBConfig config = findConfig(screen,format); - if (config) { - XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); - Colormap cmap = XCreateColormap(screen->display(),screen->rootWindow(),visualInfo->visual,AllocNone); - XSetWindowAttributes a; - a.colormap = cmap; - Window sharedWindow = XCreateWindow(screen->display(), screen->rootWindow(),x, y, w, h, - 0, visualInfo->depth, InputOutput, visualInfo->visual, - CWColormap, &a); - - context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,0,TRUE); - QPlatformGLContext *sharedContext = new QGLXContext(screen,sharedWindow,context); - QPlatformGLContext::setDefaultSharedContext(sharedContext); - } else { - qWarning("Warning no shared context created"); - } -} - -void QGLXContext::makeCurrent() -{ - QPlatformGLContext::makeCurrent(); -#ifdef MYX11_DEBUG - qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context); -#endif - glXMakeCurrent(m_screen->display(), m_drawable, m_context); -} - -void QGLXContext::doneCurrent() -{ - QPlatformGLContext::doneCurrent(); - glXMakeCurrent(m_screen->display(), 0, 0); -} - -void QGLXContext::swapBuffers() -{ - glXSwapBuffers(m_screen->display(), m_drawable); -} - -void* QGLXContext::getProcAddress(const QString& procName) -{ - typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); - static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; - static bool resolved = false; - - if (resolved && !glXGetProcAddressARB) - return 0; - if (!glXGetProcAddressARB) { - QList glxExt = QByteArray(glXGetClientString(m_screen->display(), GLX_EXTENSIONS)).split(' '); - if (glxExt.contains("GLX_ARB_get_proc_address")) { -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) - void *handle = dlopen(NULL, RTLD_LAZY); - if (handle) { - glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); - dlclose(handle); - } - if (!glXGetProcAddressARB) -#endif - { - extern const QString qt_gl_library_name(); -// QLibrary lib(qt_gl_library_name()); - QLibrary lib(QLatin1String("GL")); - glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); - } - } - resolved = true; - } - if (!glXGetProcAddressARB) - return 0; - return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); -} - -QPlatformWindowFormat QGLXContext::platformWindowFormat() const -{ - return m_windowFormat; -} - -QT_END_NAMESPACE - -#endif //!defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h deleted file mode 100644 index f982708..0000000 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef Q_GLX_CONTEXT_H -#define Q_GLX_CONTEXT_H - -#include "qtestlitewindow.h" - -#include -#include - -#include - -#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) -#include - -QT_BEGIN_NAMESPACE - -class QGLXContext : public QPlatformGLContext -{ -public: - QGLXContext(Window window, QXlibScreen *xd, const QPlatformWindowFormat &format); - ~QGLXContext(); - - virtual void makeCurrent(); - virtual void doneCurrent(); - virtual void swapBuffers(); - virtual void* getProcAddress(const QString& procName); - - GLXContext glxContext() const {return m_context;} - - QPlatformWindowFormat platformWindowFormat() const; - - static XVisualInfo *findVisualInfo(const QXlibScreen *xd, const QPlatformWindowFormat &format); -private: - static GLXFBConfig findConfig(const QXlibScreen *xd,const QPlatformWindowFormat &format); - static QVector buildSpec(const QPlatformWindowFormat &format); - static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); - static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); - - - QXlibScreen *m_screen; - Drawable m_drawable; - GLXContext m_context; - QPlatformWindowFormat m_windowFormat; - - QGLXContext (QXlibScreen *screen, Drawable drawable, GLXContext context); - static QMutex m_defaultSharedContextMutex; - static void createDefaultSharedContex(QXlibScreen *xd); -}; - -QT_END_NAMESPACE - -#endif //!defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) - -#endif diff --git a/src/plugins/platforms/testlite/qtestliteclipboard.cpp b/src/plugins/platforms/testlite/qtestliteclipboard.cpp deleted file mode 100644 index 1264b5a..0000000 --- a/src/plugins/platforms/testlite/qtestliteclipboard.cpp +++ /dev/null @@ -1,676 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteclipboard.h" - -#include "qtestlitescreen.h" -#include "qtestlitemime.h" - -#include - -#include - -class QXlibClipboardMime : public QXlibMime -{ - Q_OBJECT -public: - QXlibClipboardMime(QClipboard::Mode mode, QXlibClipboard *clipboard) - : QXlibMime() - , m_clipboard(clipboard) - { - switch (mode) { - case QClipboard::Selection: - modeAtom = XA_PRIMARY; - break; - - case QClipboard::Clipboard: - modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - break; - - default: - qWarning("QTestLiteMime: Internal error: Unsupported clipboard mode"); - break; - } - } - -protected: - QStringList formats_sys() const - { - if (empty()) - return QStringList(); - - if (!formatList.count()) { - QXlibClipboardMime *that = const_cast(this); - // get the list of targets from the current clipboard owner - we do this - // once so that multiple calls to this function don't require multiple - // server round trips... - that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QXlibStatic::atom(QXlibStatic::TARGETS)); - - if (format_atoms.size() > 0) { - Atom *targets = (Atom *) format_atoms.data(); - int size = format_atoms.size() / sizeof(Atom); - - for (int i = 0; i < size; ++i) { - if (targets[i] == 0) - continue; - - QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display(),targets[i]); - for (int j = 0; j < formatsForAtom.size(); ++j) { - if (!formatList.contains(formatsForAtom.at(j))) - that->formatList.append(formatsForAtom.at(j)); - } - } - } - } - - return formatList; - } - - bool hasFormat_sys(const QString &format) const - { - QStringList list = formats(); - return list.contains(format); - } - - QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const - { - if (fmt.isEmpty() || empty()) - return QByteArray(); - - (void)formats(); // trigger update of format list - - QList atoms; - Atom *targets = (Atom *) format_atoms.data(); - int size = format_atoms.size() / sizeof(Atom); - for (int i = 0; i < size; ++i) - atoms.append(targets[i]); - - QByteArray encoding; - Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display(),fmt, requestedType, atoms, &encoding); - - if (fmtatom == 0) - return QVariant(); - - return mimeConvertToFormat(m_clipboard->screen()->display(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); - } -private: - bool empty() const - { - Window win = XGetSelectionOwner(m_clipboard->screen()->display(), modeAtom); - - return win == XNone; - } - - - Atom modeAtom; - QXlibClipboard *m_clipboard; - QStringList formatList; - QByteArray format_atoms; -}; - -const int QXlibClipboard::clipboard_timeout = 5000; - -QXlibClipboard::QXlibClipboard(QXlibScreen *screen) - : QPlatformClipboard() - , m_screen(screen) - , m_xClipboard(0) - , m_clientClipboard(0) - , m_xSelection(0) - , m_clientSelection(0) - , m_requestor(XNone) - , m_owner(XNone) -{ -} - -const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const -{ - if (mode == QClipboard::Clipboard) { - if (!m_xClipboard) { - QXlibClipboard *that = const_cast(this); - that->m_xClipboard = new QXlibClipboardMime(mode,that); - } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); - if (clipboardOwner == owner()) { - return m_clientClipboard; - } else { - return m_xClipboard; - } - } else if (mode == QClipboard::Selection) { - if (!m_xSelection) { - QXlibClipboard *that = const_cast(this); - that->m_xSelection = new QXlibClipboardMime(mode,that); - } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); - if (clipboardOwner == owner()) { - return m_clientSelection; - } else { - return m_xSelection; - } - } - return 0; -} - -void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) -{ - Atom modeAtom; - QMimeData **d; - switch (mode) { - case QClipboard::Selection: - modeAtom = XA_PRIMARY; - d = &m_clientSelection; - break; - - case QClipboard::Clipboard: - modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - d = &m_clientClipboard; - break; - - default: - qWarning("QClipboard::setMimeData: unsupported mode '%d'", mode); - return; - } - - Window newOwner; - - if (! data) { // no data, clear clipboard contents - newOwner = XNone; - } else { - newOwner = owner(); - - *d = data; - } - - XSetSelectionOwner(m_screen->display(), modeAtom, newOwner, CurrentTime); - - if (XGetSelectionOwner(m_screen->display(), modeAtom) != newOwner) { - qWarning("QClipboard::setData: Cannot set X11 selection owner"); - } - -} - -bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const -{ - if (mode == QClipboard::Clipboard || mode == QClipboard::Selection) - return true; - return false; -} - - -QXlibScreen * QXlibClipboard::screen() const -{ - return m_screen; -} - -Window QXlibClipboard::requestor() const -{ - if (!m_requestor) { - int x = 0, y = 0, w = 3, h = 3; - QXlibClipboard *that = const_cast(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - m_screen->blackPixel(), m_screen->whitePixel()); - that->setRequestor(window); - } - return m_requestor; -} - -void QXlibClipboard::setRequestor(Window window) -{ - if (m_requestor != XNone) { - XDestroyWindow(m_screen->display(),m_requestor); - } - m_requestor = window; -} - -Window QXlibClipboard::owner() const -{ - if (!m_owner) { - int x = 0, y = 0, w = 3, h = 3; - QXlibClipboard *that = const_cast(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - m_screen->blackPixel(), m_screen->whitePixel()); - that->setOwner(window); - } - return m_owner; -} - -void QXlibClipboard::setOwner(Window window) -{ - if (m_owner != XNone){ - XDestroyWindow(m_screen->display(),m_owner); - } - m_owner = window; -} - -Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) -{ - QVector types; - QStringList formats = QInternalMimeData::formatsHelper(d); - for (int i = 0; i < formats.size(); ++i) { - QList atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); - for (int j = 0; j < atoms.size(); ++j) { - if (!types.contains(atoms.at(j))) - types.append(atoms.at(j)); - } - } - types.append(QXlibStatic::atom(QXlibStatic::TARGETS)); - types.append(QXlibStatic::atom(QXlibStatic::MULTIPLE)); - types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); - types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); - - XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, - PropModeReplace, (uchar *) types.data(), types.size()); - return property; -} - -Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) -{ - Atom atomFormat = target; - int dataFormat = 0; - QByteArray data; - - QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); - if (fmt.isEmpty()) { // Not a MIME type we have - qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); - return XNone; - } - qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); - - if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { - - // don't allow INCR transfers when using MULTIPLE or to - // Motif clients (since Motif doesn't support INCR) - static Atom motif_clip_temporary = QXlibStatic::atom(QXlibStatic::CLIP_TEMPORARY); - bool allow_incr = property != motif_clip_temporary; - - // X_ChangeProperty protocol request is 24 bytes - const int increment = (XMaxRequestSize(screen()->display()) * 4) - 24; - if (data.size() > increment && allow_incr) { - long bytes = data.size(); - XChangeProperty(screen()->display(), window, property, - QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); - -// (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); - qDebug() << "not implemented INCRT just YET!"; - return property; - } - - // make sure we can perform the XChangeProperty in a single request - if (data.size() > increment) - return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend? - int dataSize = data.size() / (dataFormat / 8); - // use a single request to transfer data - XChangeProperty(screen()->display(), window, property, atomFormat, - dataFormat, PropModeReplace, (uchar *) data.data(), - dataSize); - } - return property; -} - -void QXlibClipboard::handleSelectionRequest(XEvent *xevent) -{ - XSelectionRequestEvent *req = &xevent->xselectionrequest; - - if (requestor() && req->requestor == requestor()) { - qDebug() << "This should be caught before"; - return; - } - - XEvent event; - event.xselection.type = SelectionNotify; - event.xselection.display = req->display; - event.xselection.requestor = req->requestor; - event.xselection.selection = req->selection; - event.xselection.target = req->target; - event.xselection.property = XNone; - event.xselection.time = req->time; - - QMimeData *d; - if (req->selection == XA_PRIMARY) { - d = m_clientSelection; - } else if (req->selection == QXlibStatic::atom(QXlibStatic::CLIPBOARD)) { - d = m_clientClipboard; - } else { - qWarning("QClipboard: Unknown selection '%lx'", req->selection); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - - if (!d) { - qWarning("QClipboard: Cannot transfer data, no data available"); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - - Atom xa_targets = QXlibStatic::atom(QXlibStatic::TARGETS); - Atom xa_multiple = QXlibStatic::atom(QXlibStatic::MULTIPLE); - Atom xa_timestamp = QXlibStatic::atom(QXlibStatic::TIMESTAMP); - - struct AtomPair { Atom target; Atom property; } *multi = 0; - Atom multi_type = XNone; - int multi_format = 0; - int nmulti = 0; - int imulti = -1; - bool multi_writeback = false; - - if (req->target == xa_multiple) { - QByteArray multi_data; - if (req->property == XNone - || !clipboardReadProperty(req->requestor, req->property, false, &multi_data, - 0, &multi_type, &multi_format) - || multi_format != 32) { - // MULTIPLE property not formatted correctly - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - nmulti = multi_data.size()/sizeof(*multi); - multi = new AtomPair[nmulti]; - memcpy(multi,multi_data.data(),multi_data.size()); - imulti = 0; - } - - for (; imulti < nmulti; ++imulti) { - Atom target; - Atom property; - - if (multi) { - target = multi[imulti].target; - property = multi[imulti].property; - } else { - target = req->target; - property = req->property; - if (property == XNone) // obsolete client - property = target; - } - - Atom ret = XNone; - if (target == XNone || property == XNone) { - ; - } else if (target == xa_timestamp) { -// if (d->timestamp != CurrentTime) { -// XChangeProperty(screen()->display(), req->requestor, property, XA_INTEGER, 32, -// PropModeReplace, CurrentTime, 1); -// ret = property; -// } else { -// qWarning("QClipboard: Invalid data timestamp"); -// } - } else if (target == xa_targets) { - ret = sendTargetsSelection(d, req->requestor, property); - } else { - ret = sendSelection(d, target, req->requestor, property); - } - - if (nmulti > 0) { - if (ret == XNone) { - multi[imulti].property = XNone; - multi_writeback = true; - } - } else { - event.xselection.property = ret; - break; - } - } - - if (nmulti > 0) { - if (multi_writeback) { - // according to ICCCM 2.6.2 says to put None back - // into the original property on the requestor window - XChangeProperty(screen()->display(), req->requestor, req->property, multi_type, 32, - PropModeReplace, (uchar *) multi, nmulti * 2); - } - - delete [] multi; - event.xselection.property = req->property; - } - - // send selection notify to requestor - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); -} - -static inline int maxSelectionIncr(Display *dpy) -{ return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; } - -bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const -{ - int maxsize = maxSelectionIncr(screen()->display()); - ulong bytes_left; // bytes_after - ulong length; // nitems - uchar *data; - Atom dummy_type; - int dummy_format; - int r; - - if (!type) // allow null args - type = &dummy_type; - if (!format) - format = &dummy_format; - - // Don't read anything, just get the size of the property data - r = XGetWindowProperty(screen()->display(), win, property, 0, 0, False, - AnyPropertyType, type, format, - &length, &bytes_left, &data); - if (r != Success || (type && *type == XNone)) { - buffer->resize(0); - return false; - } - XFree((char*)data); - - int offset = 0, buffer_offset = 0, format_inc = 1, proplen = bytes_left; - - switch (*format) { - case 8: - default: - format_inc = sizeof(char) / 1; - break; - - case 16: - format_inc = sizeof(short) / 2; - proplen *= sizeof(short) / 2; - break; - - case 32: - format_inc = sizeof(long) / 4; - proplen *= sizeof(long) / 4; - break; - } - - int newSize = proplen; - buffer->resize(newSize); - - bool ok = (buffer->size() == newSize); - - if (ok && newSize) { - // could allocate buffer - - while (bytes_left) { - // more to read... - - r = XGetWindowProperty(screen()->display(), win, property, offset, maxsize/4, - False, AnyPropertyType, type, format, - &length, &bytes_left, &data); - if (r != Success || (type && *type == XNone)) - break; - - offset += length / (32 / *format); - length *= format_inc * (*format) / 8; - - // Here we check if we get a buffer overflow and tries to - // recover -- this shouldn't normally happen, but it doesn't - // hurt to be defensive - if ((int)(buffer_offset + length) > buffer->size()) { - length = buffer->size() - buffer_offset; - - // escape loop - bytes_left = 0; - } - - memcpy(buffer->data() + buffer_offset, data, length); - buffer_offset += length; - - XFree((char*)data); - } - - if (*format == 8 && *type == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { - // convert COMPOUND_TEXT to a multibyte string - XTextProperty textprop; - textprop.encoding = *type; - textprop.format = *format; - textprop.nitems = buffer_offset; - textprop.value = (unsigned char *) buffer->data(); - - char **list_ret = 0; - int count; - if (XmbTextPropertyToTextList(screen()->display(), &textprop, &list_ret, - &count) == Success && count && list_ret) { - offset = buffer_offset = strlen(list_ret[0]); - buffer->resize(offset); - memcpy(buffer->data(), list_ret[0], offset); - } - if (list_ret) XFreeStringList(list_ret); - } - } - - // correct size, not 0-term. - if (size) - *size = buffer_offset; - - if (deleteProperty) - XDeleteProperty(screen()->display(), win, property); - - XFlush(screen()->display()); - - return ok; -} - -QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) -{ - XEvent event; - - QByteArray buf; - QByteArray tmp_buf; - bool alloc_error = false; - int length; - int offset = 0; - - if (nbytes > 0) { - // Reserve buffer + zero-terminator (for text data) - // We want to complete the INCR transfer even if we cannot - // allocate more memory - buf.resize(nbytes+1); - alloc_error = buf.size() != nbytes+1; - } - - for (;;) { - XFlush(screen()->display()); - if (!screen()->waitForClipboardEvent(win,PropertyNotify,&event,clipboard_timeout)) - break; - if (event.xproperty.atom != property || - event.xproperty.state != PropertyNewValue) - continue; - if (clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0)) { - if (length == 0) { // no more data, we're done - if (nullterm) { - buf.resize(offset+1); - buf[offset] = '\0'; - } else { - buf.resize(offset); - } - return buf; - } else if (!alloc_error) { - if (offset+length > (int)buf.size()) { - buf.resize(offset+length+65535); - if (buf.size() != offset+length+65535) { - alloc_error = true; - length = buf.size() - offset; - } - } - memcpy(buf.data()+offset, tmp_buf.constData(), length); - tmp_buf.resize(0); - offset += length; - } - } else { - break; - } - } - - // timed out ... create a new requestor window, otherwise the requestor - // could consider next request to be still part of this timed out request - setRequestor(0); - - return QByteArray(); -} - -QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) -{ - QByteArray buf; - - Window win = requestor(); - - XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events - - XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); - XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); - XSync(screen()->display(), false); - - XEvent xevent; - if (!screen()->waitForClipboardEvent(win,SelectionNotify,&xevent,clipboard_timeout) || - xevent.xselection.property == XNone) { - return buf; - } - - Atom type; - XSelectInput(screen()->display(), win, PropertyChangeMask); - - if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { - if (type == QXlibStatic::atom(QXlibStatic::INCR)) { - int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0; - buf = clipboardReadIncrementalProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), nbytes, false); - } - } - - XSelectInput(screen()->display(), win, NoEventMask); - - - return buf; -} - -#include "qtestliteclipboard.moc" diff --git a/src/plugins/platforms/testlite/qtestliteclipboard.h b/src/plugins/platforms/testlite/qtestliteclipboard.h deleted file mode 100644 index 109714c..0000000 --- a/src/plugins/platforms/testlite/qtestliteclipboard.h +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITECLIPBOARD_H -#define QTESTLITECLIPBOARD_H - -#include -#include "qtestlitestaticinfo.h" - -class QXlibScreen; -class QXlibClipboard : public QPlatformClipboard -{ -public: - QXlibClipboard(QXlibScreen *screen); - - const QMimeData *mimeData(QClipboard::Mode mode) const; - void setMimeData(QMimeData *data, QClipboard::Mode mode); - - bool supportsMode(QClipboard::Mode mode) const; - - QXlibScreen *screen() const; - - Window requestor() const; - void setRequestor(Window window); - - Window owner() const; - - void handleSelectionRequest(XEvent *event); - - bool clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const; - QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm); - - QByteArray getDataInFormat(Atom modeAtom, Atom fmtatom); - -private: - void setOwner(Window window); - - Atom sendTargetsSelection(QMimeData *d, Window window, Atom property); - Atom sendSelection(QMimeData *d, Atom target, Window window, Atom property); - - QXlibScreen *m_screen; - - QMimeData *m_xClipboard; - QMimeData *m_clientClipboard; - - QMimeData *m_xSelection; - QMimeData *m_clientSelection; - - Window m_requestor; - Window m_owner; - - static const int clipboard_timeout; - -}; - -#endif // QTESTLITECLIPBOARD_H diff --git a/src/plugins/platforms/testlite/qtestlitecursor.cpp b/src/plugins/platforms/testlite/qtestlitecursor.cpp deleted file mode 100644 index 2f7cfbf..0000000 --- a/src/plugins/platforms/testlite/qtestlitecursor.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitecursor.h" - -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitewindow.h" - -#include - -#include - -QT_BEGIN_NAMESPACE - -QXlibCursor::QXlibCursor(QXlibScreen *screen) - : QPlatformCursor(screen) -{ -} - -void QXlibCursor::changeCursor(QCursor *cursor, QWidget *widget) -{ - QXlibWindow *w = 0; - if (widget) { - QWidget *window = widget->window(); - w = static_cast(window->platformWindow()); - } else { - // No X11 cursor control when there is no widget under the cursor - return; - } - - if (!w) - return; - - int id = cursor->handle(); - - Cursor c; - if (!cursorMap.contains(id)) { - if (cursor->shape() == Qt::BitmapCursor) - c = createCursorBitmap(cursor); - else - c = createCursorShape(cursor->shape()); - if (!c) { - return; - } - cursorMap.insert(id, c); - } else { - c = cursorMap.value(id); - } - - w->setCursor(c); -} - -Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) -{ - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - QPoint spot = cursor->hotSpot(); - Window rootwin = testLiteScreen()->rootWindow(); - - QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); - QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); - - int width = cursor->bitmap()->width(); - int height = cursor->bitmap()->height(); - int bytesPerLine = mapImage.bytesPerLine(); - int destLineSize = width / 8; - if (width % 8) - destLineSize++; - - const uchar * map = mapImage.bits(); - const uchar * mask = maskImage.bits(); - - char * mapBits = new char[height * destLineSize]; - char * maskBits = new char[height * destLineSize]; - for (int i = 0; i < height; i++) { - memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); - memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); - } - - Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, mapBits, width, height); - Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, maskBits, width, height); - Cursor c = XCreatePixmapCursor(testLiteScreen()->display(), cp, mp, &fg, &bg, spot.x(), spot.y()); - XFreePixmap(testLiteScreen()->display(), cp); - XFreePixmap(testLiteScreen()->display(), mp); - delete[] mapBits; - delete[] maskBits; - - return c; -} - -Cursor QXlibCursor::createCursorShape(int cshape) -{ - Cursor cursor = 0; - - if (cshape < 0 || cshape > Qt::LastCursor) - return 0; - - switch (cshape) { - case Qt::ArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_left_ptr); - break; - case Qt::UpArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_center_ptr); - break; - case Qt::CrossCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_crosshair); - break; - case Qt::WaitCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); - break; - case Qt::IBeamCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_xterm); - break; - case Qt::SizeAllCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_fleur); - break; - case Qt::PointingHandCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_hand2); - break; - case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_top_right_corner); - break; - case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_bottom_right_corner); - break; - case Qt::SizeVerCursor: - case Qt::SplitVCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_v_double_arrow); - break; - case Qt::SizeHorCursor: - case Qt::SplitHCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_h_double_arrow); - break; - case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_question_arrow); - break; - case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_circle); - break; - case Qt::BusyCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); - break; - - default: //default cursor for all the rest - break; - } - return cursor; -} - -QXlibScreen * QXlibCursor::testLiteScreen() const -{ - return static_cast(screen); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitecursor.h b/src/plugins/platforms/testlite/qtestlitecursor.h deleted file mode 100644 index db9f9e2..0000000 --- a/src/plugins/platforms/testlite/qtestlitecursor.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITECURSOR_H -#define QTESTLITECURSOR_H - -#include - -#include "qtestliteintegration.h" - -QT_BEGIN_NAMESPACE - -class QXlibCursor : QPlatformCursor -{ -public: - QXlibCursor(QXlibScreen *screen); - - void changeCursor(QCursor * cursor, QWidget * widget); -private: - - Cursor createCursorBitmap(QCursor * cursor); - Cursor createCursorShape(int cshape); - - QXlibScreen *testLiteScreen() const; - QMap cursorMap; -}; - -QT_END_NAMESPACE - -#endif // QTESTLITECURSOR_H diff --git a/src/plugins/platforms/testlite/qtestliteeglintegration.cpp b/src/plugins/platforms/testlite/qtestliteeglintegration.cpp deleted file mode 100644 index 9bbe0ca..0000000 --- a/src/plugins/platforms/testlite/qtestliteeglintegration.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteeglintegration.h" - -static int countBits(unsigned long mask) -{ - int count = 0; - while (mask != 0) { - if (mask & 1) - ++count; - mask >>= 1; - } - return count; -} - -VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) -{ - VisualID visualId = 0; - EGLint eglValue = 0; - - EGLDisplay eglDisplay = eglGetDisplay(display); - - EGLint configRedSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); - - EGLint configGreenSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); - - EGLint configBlueSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); - - EGLint configAlphaSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); - - eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); - int configId = eglValue; - - // See if EGL provided a valid VisualID: - eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); - visualId = (VisualID)eglValue; - if (visualId) { - // EGL has suggested a visual id, so get the rest of the visual info for that id: - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = visualId; - - XVisualInfo *chosenVisualInfo; - int matchingCount = 0; - chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); - if (chosenVisualInfo) { - // Skip size checks if implementation supports non-matching visual - // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). - if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { - XFree(chosenVisualInfo); - return visualId; - } - - int visualRedSize = countBits(chosenVisualInfo->red_mask); - int visualGreenSize = countBits(chosenVisualInfo->green_mask); - int visualBlueSize = countBits(chosenVisualInfo->blue_mask); - int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size - - bool visualMatchesConfig = false; - if ( visualRedSize == configRedSize && - visualGreenSize == configGreenSize && - visualBlueSize == configBlueSize ) - { - // We need XRender to check the alpha channel size of the visual. If we don't have - // the alpha size, we don't check it against the EGL config's alpha size. - if (visualAlphaSize >= 0) - visualMatchesConfig = visualAlphaSize == configAlphaSize; - else - visualMatchesConfig = true; - } - - if (!visualMatchesConfig) { - if (visualAlphaSize >= 0) { - qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", - (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, - configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); - } else { - qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", - (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, - configId, configRedSize, configGreenSize, configBlueSize); - } - visualId = 0; - } - } else { - qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", - (int)visualId, configId); - visualId = 0; - } - XFree(chosenVisualInfo); - } -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - else - qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); -#endif - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - if (configAlphaSize > 0) - qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); - else - qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); -#endif - return visualId; - } - - // Finally, try to - // use XGetVisualInfo and only use the bit depths to match on: - if (!visualId) { - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - XVisualInfo *matchingVisuals; - int matchingCount = 0; - - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - if (!matchingVisuals) { - // Try again without taking the alpha channel into account: - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - } - - if (matchingVisuals) { - visualId = matchingVisuals[0].visualid; - XFree(matchingVisuals); - } - } - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); -#endif - return visualId; - } - - qWarning("Unable to find an X11 visual which matches EGL config %d", configId); - return (VisualID)0; -} diff --git a/src/plugins/platforms/testlite/qtestliteeglintegration.h b/src/plugins/platforms/testlite/qtestliteeglintegration.h deleted file mode 100644 index 4c2e50d..0000000 --- a/src/plugins/platforms/testlite/qtestliteeglintegration.h +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEEGLINTEGRATION_H -#define QTESTLITEEGLINTEGRATION_H - -#include "qtestlitestaticinfo.h" -#include "../eglconvenience/qeglconvenience.h" - -class QXlibEglIntegration -{ -public: - static VisualID getCompatibleVisualId(Display *display, EGLConfig config); -}; - -#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp deleted file mode 100644 index cdc5c29..0000000 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteintegration.h" -#include "qtestlitewindowsurface.h" -#include -#include - -#include "qtestlitewindow.h" -#include "qgenericunixfontdatabase.h" -#include "qtestlitescreen.h" -#include "qtestliteclipboard.h" - -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) -#include -#else -#include -#endif //!defined(QT_OPENGL_ES_2) -#include -#include -#endif //QT_NO_OPENGL - -QT_BEGIN_NAMESPACE - -QXlibIntegration::QXlibIntegration(bool useOpenGL) - : mUseOpenGL(useOpenGL) - , mFontDb(new QGenericUnixFontDatabase()) - , mClipboard(0) -{ - mPrimaryScreen = new QXlibScreen(); - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QXlibIntegration::createPixmapData(QPixmapData::PixelType type) const -{ -#ifndef QT_NO_OPENGL - if (mUseOpenGL) - return new QGLPixmapData(type); -#endif - return new QRasterPixmapData(type); -} - -QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const -{ -#ifndef QT_NO_OPENGL - if (mUseOpenGL) - return new QGLWindowSurface(widget); -#endif - return new QXlibWindowSurface(widget); -} - - -QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const -{ - return new QXlibWindow(widget); -} - - - -QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const -{ - QImage image; - QWidget *widget = QWidget::find(window); - if (widget) { - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); - image = screen->grabWindow(window,x,y,width,height); - } else { - for (int i = 0; i < mScreens.size(); i++) { - QXlibScreen *screen = static_cast(mScreens[i]); - if (screen->rootWindow() == window) { - image = screen->grabWindow(window,x,y,width,height); - } - } - } - return QPixmap::fromImage(image); -} - -QPlatformFontDatabase *QXlibIntegration::fontDatabase() const -{ - return mFontDb; -} - -QPlatformClipboard * QXlibIntegration::clipboard() const -{ - //Use lazy init since clipboard needs QTestliteScreen - if (!mClipboard) { - QXlibIntegration *that = const_cast(this); - that->mClipboard = new QXlibClipboard(mPrimaryScreen); - } - return mClipboard; -} - -bool QXlibIntegration::hasOpenGL() const -{ -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - QXlibScreen *screen = static_cast(mScreens.at(0)); - return glXQueryExtension(screen->display(), 0, 0) != 0; -#else - static bool eglHasbeenInitialized = false; - static bool wasEglInitialized = false; - if (!eglHasbeenInitialized) { - eglHasbeenInitialized = true; - const QXlibScreen *screen = static_cast(mScreens.at(0)); - EGLint major, minor; - eglBindAPI(EGL_OPENGL_ES_API); - EGLDisplay disp = eglGetDisplay(screen->display()); - wasEglInitialized = eglInitialize(disp,&major,&minor); - } - return wasEglInitialized; -#endif -#endif - return false; -} - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h deleted file mode 100644 index c3125b8..0000000 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_TESTLITE_H -#define QGRAPHICSSYSTEM_TESTLITE_H - -//make sure textstream is included before any X11 headers -#include - -#include -#include - -#include "qtestlitestaticinfo.h" - -QT_BEGIN_NAMESPACE - -class QXlibScreen; - -class QXlibIntegration : public QPlatformIntegration -{ -public: - QXlibIntegration(bool useOpenGL = false); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - QList screens() const { return mScreens; } - - QPlatformFontDatabase *fontDatabase() const; - QPlatformClipboard *clipboard() const; - - bool hasOpenGL() const; - -private: - bool mUseOpenGL; - QXlibScreen *mPrimaryScreen; - QList mScreens; - QPlatformFontDatabase *mFontDb; - QPlatformClipboard *mClipboard; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/qtestlitekeyboard.cpp b/src/plugins/platforms/testlite/qtestlitekeyboard.cpp deleted file mode 100644 index fb0cf2e..0000000 --- a/src/plugins/platforms/testlite/qtestlitekeyboard.cpp +++ /dev/null @@ -1,1000 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitekeyboard.h" - -#include "qtestlitescreen.h" - -#include - -#include - -#ifndef XK_ISO_Left_Tab -#define XK_ISO_Left_Tab 0xFE20 -#endif - -#ifndef XK_dead_hook -#define XK_dead_hook 0xFE61 -#endif - -#ifndef XK_dead_horn -#define XK_dead_horn 0xFE62 -#endif - -#ifndef XK_Codeinput -#define XK_Codeinput 0xFF37 -#endif - -#ifndef XK_Kanji_Bangou -#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */ -#endif - -// Fix old X libraries -#ifndef XK_KP_Home -#define XK_KP_Home 0xFF95 -#endif -#ifndef XK_KP_Left -#define XK_KP_Left 0xFF96 -#endif -#ifndef XK_KP_Up -#define XK_KP_Up 0xFF97 -#endif -#ifndef XK_KP_Right -#define XK_KP_Right 0xFF98 -#endif -#ifndef XK_KP_Down -#define XK_KP_Down 0xFF99 -#endif -#ifndef XK_KP_Prior -#define XK_KP_Prior 0xFF9A -#endif -#ifndef XK_KP_Next -#define XK_KP_Next 0xFF9B -#endif -#ifndef XK_KP_End -#define XK_KP_End 0xFF9C -#endif -#ifndef XK_KP_Insert -#define XK_KP_Insert 0xFF9E -#endif -#ifndef XK_KP_Delete -#define XK_KP_Delete 0xFF9F -#endif - -// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special -// multimedia keys. They are included here as not every system has them. -#define XF86XK_MonBrightnessUp 0x1008FF02 -#define XF86XK_MonBrightnessDown 0x1008FF03 -#define XF86XK_KbdLightOnOff 0x1008FF04 -#define XF86XK_KbdBrightnessUp 0x1008FF05 -#define XF86XK_KbdBrightnessDown 0x1008FF06 -#define XF86XK_Standby 0x1008FF10 -#define XF86XK_AudioLowerVolume 0x1008FF11 -#define XF86XK_AudioMute 0x1008FF12 -#define XF86XK_AudioRaiseVolume 0x1008FF13 -#define XF86XK_AudioPlay 0x1008FF14 -#define XF86XK_AudioStop 0x1008FF15 -#define XF86XK_AudioPrev 0x1008FF16 -#define XF86XK_AudioNext 0x1008FF17 -#define XF86XK_HomePage 0x1008FF18 -#define XF86XK_Mail 0x1008FF19 -#define XF86XK_Start 0x1008FF1A -#define XF86XK_Search 0x1008FF1B -#define XF86XK_AudioRecord 0x1008FF1C -#define XF86XK_Calculator 0x1008FF1D -#define XF86XK_Memo 0x1008FF1E -#define XF86XK_ToDoList 0x1008FF1F -#define XF86XK_Calendar 0x1008FF20 -#define XF86XK_PowerDown 0x1008FF21 -#define XF86XK_ContrastAdjust 0x1008FF22 -#define XF86XK_Back 0x1008FF26 -#define XF86XK_Forward 0x1008FF27 -#define XF86XK_Stop 0x1008FF28 -#define XF86XK_Refresh 0x1008FF29 -#define XF86XK_PowerOff 0x1008FF2A -#define XF86XK_WakeUp 0x1008FF2B -#define XF86XK_Eject 0x1008FF2C -#define XF86XK_ScreenSaver 0x1008FF2D -#define XF86XK_WWW 0x1008FF2E -#define XF86XK_Sleep 0x1008FF2F -#define XF86XK_Favorites 0x1008FF30 -#define XF86XK_AudioPause 0x1008FF31 -#define XF86XK_AudioMedia 0x1008FF32 -#define XF86XK_MyComputer 0x1008FF33 -#define XF86XK_LightBulb 0x1008FF35 -#define XF86XK_Shop 0x1008FF36 -#define XF86XK_History 0x1008FF37 -#define XF86XK_OpenURL 0x1008FF38 -#define XF86XK_AddFavorite 0x1008FF39 -#define XF86XK_HotLinks 0x1008FF3A -#define XF86XK_BrightnessAdjust 0x1008FF3B -#define XF86XK_Finance 0x1008FF3C -#define XF86XK_Community 0x1008FF3D -#define XF86XK_AudioRewind 0x1008FF3E -#define XF86XK_BackForward 0x1008FF3F -#define XF86XK_Launch0 0x1008FF40 -#define XF86XK_Launch1 0x1008FF41 -#define XF86XK_Launch2 0x1008FF42 -#define XF86XK_Launch3 0x1008FF43 -#define XF86XK_Launch4 0x1008FF44 -#define XF86XK_Launch5 0x1008FF45 -#define XF86XK_Launch6 0x1008FF46 -#define XF86XK_Launch7 0x1008FF47 -#define XF86XK_Launch8 0x1008FF48 -#define XF86XK_Launch9 0x1008FF49 -#define XF86XK_LaunchA 0x1008FF4A -#define XF86XK_LaunchB 0x1008FF4B -#define XF86XK_LaunchC 0x1008FF4C -#define XF86XK_LaunchD 0x1008FF4D -#define XF86XK_LaunchE 0x1008FF4E -#define XF86XK_LaunchF 0x1008FF4F -#define XF86XK_ApplicationLeft 0x1008FF50 -#define XF86XK_ApplicationRight 0x1008FF51 -#define XF86XK_Book 0x1008FF52 -#define XF86XK_CD 0x1008FF53 -#define XF86XK_Calculater 0x1008FF54 -#define XF86XK_Clear 0x1008FF55 -#define XF86XK_ClearGrab 0x1008FE21 -#define XF86XK_Close 0x1008FF56 -#define XF86XK_Copy 0x1008FF57 -#define XF86XK_Cut 0x1008FF58 -#define XF86XK_Display 0x1008FF59 -#define XF86XK_DOS 0x1008FF5A -#define XF86XK_Documents 0x1008FF5B -#define XF86XK_Excel 0x1008FF5C -#define XF86XK_Explorer 0x1008FF5D -#define XF86XK_Game 0x1008FF5E -#define XF86XK_Go 0x1008FF5F -#define XF86XK_iTouch 0x1008FF60 -#define XF86XK_LogOff 0x1008FF61 -#define XF86XK_Market 0x1008FF62 -#define XF86XK_Meeting 0x1008FF63 -#define XF86XK_MenuKB 0x1008FF65 -#define XF86XK_MenuPB 0x1008FF66 -#define XF86XK_MySites 0x1008FF67 -#define XF86XK_News 0x1008FF69 -#define XF86XK_OfficeHome 0x1008FF6A -#define XF86XK_Option 0x1008FF6C -#define XF86XK_Paste 0x1008FF6D -#define XF86XK_Phone 0x1008FF6E -#define XF86XK_Reply 0x1008FF72 -#define XF86XK_Reload 0x1008FF73 -#define XF86XK_RotateWindows 0x1008FF74 -#define XF86XK_RotationPB 0x1008FF75 -#define XF86XK_RotationKB 0x1008FF76 -#define XF86XK_Save 0x1008FF77 -#define XF86XK_Send 0x1008FF7B -#define XF86XK_Spell 0x1008FF7C -#define XF86XK_SplitScreen 0x1008FF7D -#define XF86XK_Support 0x1008FF7E -#define XF86XK_TaskPane 0x1008FF7F -#define XF86XK_Terminal 0x1008FF80 -#define XF86XK_Tools 0x1008FF81 -#define XF86XK_Travel 0x1008FF82 -#define XF86XK_Video 0x1008FF87 -#define XF86XK_Word 0x1008FF89 -#define XF86XK_Xfer 0x1008FF8A -#define XF86XK_ZoomIn 0x1008FF8B -#define XF86XK_ZoomOut 0x1008FF8C -#define XF86XK_Away 0x1008FF8D -#define XF86XK_Messenger 0x1008FF8E -#define XF86XK_WebCam 0x1008FF8F -#define XF86XK_MailForward 0x1008FF90 -#define XF86XK_Pictures 0x1008FF91 -#define XF86XK_Music 0x1008FF92 -#define XF86XK_Battery 0x1008FF93 -#define XF86XK_Bluetooth 0x1008FF94 -#define XF86XK_WLAN 0x1008FF95 -#define XF86XK_UWB 0x1008FF96 -#define XF86XK_AudioForward 0x1008FF97 -#define XF86XK_AudioRepeat 0x1008FF98 -#define XF86XK_AudioRandomPlay 0x1008FF99 -#define XF86XK_Subtitle 0x1008FF9A -#define XF86XK_AudioCycleTrack 0x1008FF9B -#define XF86XK_Time 0x1008FF9F -#define XF86XK_Select 0x1008FFA0 -#define XF86XK_View 0x1008FFA1 -#define XF86XK_TopMenu 0x1008FFA2 -#define XF86XK_Suspend 0x1008FFA7 -#define XF86XK_Hibernate 0x1008FFA8 - - -// end of XF86keysyms.h - -// Special keys used by Qtopia, mapped into the X11 private keypad range. -#define QTOPIAXK_Select 0x11000601 -#define QTOPIAXK_Yes 0x11000602 -#define QTOPIAXK_No 0x11000603 -#define QTOPIAXK_Cancel 0x11000604 -#define QTOPIAXK_Printer 0x11000605 -#define QTOPIAXK_Execute 0x11000606 -#define QTOPIAXK_Sleep 0x11000607 -#define QTOPIAXK_Play 0x11000608 -#define QTOPIAXK_Zoom 0x11000609 -#define QTOPIAXK_Context1 0x1100060A -#define QTOPIAXK_Context2 0x1100060B -#define QTOPIAXK_Context3 0x1100060C -#define QTOPIAXK_Context4 0x1100060D -#define QTOPIAXK_Call 0x1100060E -#define QTOPIAXK_Hangup 0x1100060F -#define QTOPIAXK_Flip 0x11000610 - -// keyboard mapping table -static const unsigned int KeyTbl[] = { - - // misc keys - - XK_Escape, Qt::Key_Escape, - XK_Tab, Qt::Key_Tab, - XK_ISO_Left_Tab, Qt::Key_Backtab, - XK_BackSpace, Qt::Key_Backspace, - XK_Return, Qt::Key_Return, - XK_Insert, Qt::Key_Insert, - XK_Delete, Qt::Key_Delete, - XK_Clear, Qt::Key_Delete, - XK_Pause, Qt::Key_Pause, - XK_Print, Qt::Key_Print, - 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq - 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq - - // cursor movement - - XK_Home, Qt::Key_Home, - XK_End, Qt::Key_End, - XK_Left, Qt::Key_Left, - XK_Up, Qt::Key_Up, - XK_Right, Qt::Key_Right, - XK_Down, Qt::Key_Down, - XK_Prior, Qt::Key_PageUp, - XK_Next, Qt::Key_PageDown, - - // modifiers - - XK_Shift_L, Qt::Key_Shift, - XK_Shift_R, Qt::Key_Shift, - XK_Shift_Lock, Qt::Key_Shift, - XK_Control_L, Qt::Key_Control, - XK_Control_R, Qt::Key_Control, - XK_Meta_L, Qt::Key_Meta, - XK_Meta_R, Qt::Key_Meta, - XK_Alt_L, Qt::Key_Alt, - XK_Alt_R, Qt::Key_Alt, - XK_Caps_Lock, Qt::Key_CapsLock, - XK_Num_Lock, Qt::Key_NumLock, - XK_Scroll_Lock, Qt::Key_ScrollLock, - XK_Super_L, Qt::Key_Super_L, - XK_Super_R, Qt::Key_Super_R, - XK_Menu, Qt::Key_Menu, - XK_Hyper_L, Qt::Key_Hyper_L, - XK_Hyper_R, Qt::Key_Hyper_R, - XK_Help, Qt::Key_Help, - 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab - 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) - 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) - - // numeric and function keypad keys - - XK_KP_Space, Qt::Key_Space, - XK_KP_Tab, Qt::Key_Tab, - XK_KP_Enter, Qt::Key_Enter, - //XK_KP_F1, Qt::Key_F1, - //XK_KP_F2, Qt::Key_F2, - //XK_KP_F3, Qt::Key_F3, - //XK_KP_F4, Qt::Key_F4, - XK_KP_Home, Qt::Key_Home, - XK_KP_Left, Qt::Key_Left, - XK_KP_Up, Qt::Key_Up, - XK_KP_Right, Qt::Key_Right, - XK_KP_Down, Qt::Key_Down, - XK_KP_Prior, Qt::Key_PageUp, - XK_KP_Next, Qt::Key_PageDown, - XK_KP_End, Qt::Key_End, - XK_KP_Begin, Qt::Key_Clear, - XK_KP_Insert, Qt::Key_Insert, - XK_KP_Delete, Qt::Key_Delete, - XK_KP_Equal, Qt::Key_Equal, - XK_KP_Multiply, Qt::Key_Asterisk, - XK_KP_Add, Qt::Key_Plus, - XK_KP_Separator, Qt::Key_Comma, - XK_KP_Subtract, Qt::Key_Minus, - XK_KP_Decimal, Qt::Key_Period, - XK_KP_Divide, Qt::Key_Slash, - - // International input method support keys - - // International & multi-key character composition - XK_ISO_Level3_Shift, Qt::Key_AltGr, - 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_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 keys from X.org - This include multimedia keys, - // wireless/bluetooth/uwb keys, special launcher keys, etc. - XF86XK_Back, Qt::Key_Back, - XF86XK_Forward, Qt::Key_Forward, - XF86XK_Stop, Qt::Key_Stop, - XF86XK_Refresh, Qt::Key_Refresh, - XF86XK_Favorites, Qt::Key_Favorites, - XF86XK_AudioMedia, Qt::Key_LaunchMedia, - XF86XK_OpenURL, Qt::Key_OpenUrl, - XF86XK_HomePage, Qt::Key_HomePage, - XF86XK_Search, Qt::Key_Search, - XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, - XF86XK_AudioMute, Qt::Key_VolumeMute, - XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, - XF86XK_AudioPlay, Qt::Key_MediaPlay, - XF86XK_AudioStop, Qt::Key_MediaStop, - XF86XK_AudioPrev, Qt::Key_MediaPrevious, - XF86XK_AudioNext, Qt::Key_MediaNext, - XF86XK_AudioRecord, Qt::Key_MediaRecord, - XF86XK_Mail, Qt::Key_LaunchMail, - XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly - XF86XK_Calculator, Qt::Key_Launch1, - XF86XK_Memo, Qt::Key_Memo, - XF86XK_ToDoList, Qt::Key_ToDoList, - XF86XK_Calendar, Qt::Key_Calendar, - XF86XK_PowerDown, Qt::Key_PowerDown, - XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, - XF86XK_Standby, Qt::Key_Standby, - XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, - XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, - XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, - XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, - XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, - XF86XK_PowerOff, Qt::Key_PowerOff, - XF86XK_WakeUp, Qt::Key_WakeUp, - XF86XK_Eject, Qt::Key_Eject, - XF86XK_ScreenSaver, Qt::Key_ScreenSaver, - XF86XK_WWW, Qt::Key_WWW, - XF86XK_Sleep, Qt::Key_Sleep, - XF86XK_LightBulb, Qt::Key_LightBulb, - XF86XK_Shop, Qt::Key_Shop, - XF86XK_History, Qt::Key_History, - XF86XK_AddFavorite, Qt::Key_AddFavorite, - XF86XK_HotLinks, Qt::Key_HotLinks, - XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, - XF86XK_Finance, Qt::Key_Finance, - XF86XK_Community, Qt::Key_Community, - XF86XK_AudioRewind, Qt::Key_AudioRewind, - XF86XK_BackForward, Qt::Key_BackForward, - XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, - XF86XK_ApplicationRight, Qt::Key_ApplicationRight, - XF86XK_Book, Qt::Key_Book, - XF86XK_CD, Qt::Key_CD, - XF86XK_Calculater, Qt::Key_Calculator, - XF86XK_Clear, Qt::Key_Clear, - XF86XK_ClearGrab, Qt::Key_ClearGrab, - XF86XK_Close, Qt::Key_Close, - XF86XK_Copy, Qt::Key_Copy, - XF86XK_Cut, Qt::Key_Cut, - XF86XK_Display, Qt::Key_Display, - XF86XK_DOS, Qt::Key_DOS, - XF86XK_Documents, Qt::Key_Documents, - XF86XK_Excel, Qt::Key_Excel, - XF86XK_Explorer, Qt::Key_Explorer, - XF86XK_Game, Qt::Key_Game, - XF86XK_Go, Qt::Key_Go, - XF86XK_iTouch, Qt::Key_iTouch, - XF86XK_LogOff, Qt::Key_LogOff, - XF86XK_Market, Qt::Key_Market, - XF86XK_Meeting, Qt::Key_Meeting, - XF86XK_MenuKB, Qt::Key_MenuKB, - XF86XK_MenuPB, Qt::Key_MenuPB, - XF86XK_MySites, Qt::Key_MySites, - XF86XK_News, Qt::Key_News, - XF86XK_OfficeHome, Qt::Key_OfficeHome, - XF86XK_Option, Qt::Key_Option, - XF86XK_Paste, Qt::Key_Paste, - XF86XK_Phone, Qt::Key_Phone, - XF86XK_Reply, Qt::Key_Reply, - XF86XK_Reload, Qt::Key_Reload, - XF86XK_RotateWindows, Qt::Key_RotateWindows, - XF86XK_RotationPB, Qt::Key_RotationPB, - XF86XK_RotationKB, Qt::Key_RotationKB, - XF86XK_Save, Qt::Key_Save, - XF86XK_Send, Qt::Key_Send, - XF86XK_Spell, Qt::Key_Spell, - XF86XK_SplitScreen, Qt::Key_SplitScreen, - XF86XK_Support, Qt::Key_Support, - XF86XK_TaskPane, Qt::Key_TaskPane, - XF86XK_Terminal, Qt::Key_Terminal, - XF86XK_Tools, Qt::Key_Tools, - XF86XK_Travel, Qt::Key_Travel, - XF86XK_Video, Qt::Key_Video, - XF86XK_Word, Qt::Key_Word, - XF86XK_Xfer, Qt::Key_Xfer, - XF86XK_ZoomIn, Qt::Key_ZoomIn, - XF86XK_ZoomOut, Qt::Key_ZoomOut, - XF86XK_Away, Qt::Key_Away, - XF86XK_Messenger, Qt::Key_Messenger, - XF86XK_WebCam, Qt::Key_WebCam, - XF86XK_MailForward, Qt::Key_MailForward, - XF86XK_Pictures, Qt::Key_Pictures, - XF86XK_Music, Qt::Key_Music, - XF86XK_Battery, Qt::Key_Battery, - XF86XK_Bluetooth, Qt::Key_Bluetooth, - XF86XK_WLAN, Qt::Key_WLAN, - XF86XK_UWB, Qt::Key_UWB, - XF86XK_AudioForward, Qt::Key_AudioForward, - XF86XK_AudioRepeat, Qt::Key_AudioRepeat, - XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, - XF86XK_Subtitle, Qt::Key_Subtitle, - XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, - XF86XK_Time, Qt::Key_Time, - XF86XK_Select, Qt::Key_Select, - XF86XK_View, Qt::Key_View, - XF86XK_TopMenu, Qt::Key_TopMenu, - XF86XK_Bluetooth, Qt::Key_Bluetooth, - XF86XK_Suspend, Qt::Key_Suspend, - XF86XK_Hibernate, Qt::Key_Hibernate, - XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly - XF86XK_Launch1, Qt::Key_Launch3, - XF86XK_Launch2, Qt::Key_Launch4, - XF86XK_Launch3, Qt::Key_Launch5, - XF86XK_Launch4, Qt::Key_Launch6, - XF86XK_Launch5, Qt::Key_Launch7, - XF86XK_Launch6, Qt::Key_Launch8, - XF86XK_Launch7, Qt::Key_Launch9, - XF86XK_Launch8, Qt::Key_LaunchA, - XF86XK_Launch9, Qt::Key_LaunchB, - XF86XK_LaunchA, Qt::Key_LaunchC, - XF86XK_LaunchB, Qt::Key_LaunchD, - XF86XK_LaunchC, Qt::Key_LaunchE, - XF86XK_LaunchD, Qt::Key_LaunchF, - XF86XK_LaunchE, Qt::Key_LaunchG, - XF86XK_LaunchF, Qt::Key_LaunchH, - - // Qtopia keys - QTOPIAXK_Select, Qt::Key_Select, - QTOPIAXK_Yes, Qt::Key_Yes, - QTOPIAXK_No, Qt::Key_No, - QTOPIAXK_Cancel, Qt::Key_Cancel, - QTOPIAXK_Printer, Qt::Key_Printer, - QTOPIAXK_Execute, Qt::Key_Execute, - QTOPIAXK_Sleep, Qt::Key_Sleep, - QTOPIAXK_Play, Qt::Key_Play, - QTOPIAXK_Zoom, Qt::Key_Zoom, - QTOPIAXK_Context1, Qt::Key_Context1, - QTOPIAXK_Context2, Qt::Key_Context2, - QTOPIAXK_Context3, Qt::Key_Context3, - QTOPIAXK_Context4, Qt::Key_Context4, - QTOPIAXK_Call, Qt::Key_Call, - QTOPIAXK_Hangup, Qt::Key_Hangup, - QTOPIAXK_Flip, Qt::Key_Flip, - - 0, 0 -}; - -static const unsigned short katakanaKeysymsToUnicode[] = { - 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, - 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, - 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, - 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, - 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, - 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, - 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, - 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C -}; - -static const unsigned short cyrillicKeysymsToUnicode[] = { - 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, - 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - -static const unsigned short greekKeysymsToUnicode[] = { - 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, - 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, - 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, - 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short technicalKeysymsToUnicode[] = { - 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1, - 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8, - 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B, - 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, - 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000, - 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000 -}; - -static const unsigned short specialKeysymsToUnicode[] = { - 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000, - 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA, - 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C, - 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short publishingKeysymsToUnicode[] = { - 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, - 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, - 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, - 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, - 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, - 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, - 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, - 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, - 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, - 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, - 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000 -}; - -static const unsigned short aplKeysymsToUnicode[] = { - 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, - 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, - 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, - 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, - 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short koreanKeysymsToUnicode[] = { - 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, - 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, - 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, - 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, - 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, - 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, - 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, - 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, - 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, - 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, - 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, - 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 -}; - -static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) -{ - switch (byte3) { - case 0x04: - // katakana - if (byte4 > 0xa0 && byte4 < 0xe0) - return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]); - else if (byte4 == 0x7e) - return QChar(0x203e); // Overline - break; - case 0x06: - // russian, use lookup table - if (byte4 > 0xa0) - return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x07: - // greek - if (byte4 > 0xa0) - return QChar(greekKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x08: - // technical - if (byte4 > 0xa0) - return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x09: - // special - if (byte4 >= 0xe0) - return QChar(specialKeysymsToUnicode[byte4 - 0xe0]); - break; - case 0x0a: - // publishing - if (byte4 > 0xa0) - return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x0b: - // APL - if (byte4 > 0xa0) - return QChar(aplKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x0e: - // Korean - if (byte4 > 0xa0) - return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]); - break; - default: - break; - } - return QChar(0x0); -} - -Qt::KeyboardModifiers QXlibKeyboard::translateModifiers(int s) -{ - Qt::KeyboardModifiers ret = 0; - if (s & ShiftMask) - ret |= Qt::ShiftModifier; - if (s & ControlMask) - ret |= Qt::ControlModifier; - if (s & m_alt_mask) - ret |= Qt::AltModifier; - if (s & m_meta_mask) - ret |= Qt::MetaModifier; -// if (s & m_mode_switch_mask) //doesn't seem to work correctly -// ret |= Qt::GroupSwitchModifier; - return ret; -} - -void QXlibKeyboard::setMask(KeySym sym, uint mask) -{ - if (m_alt_mask == 0 - && m_meta_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && (sym == XK_Alt_L || sym == XK_Alt_R)) { - m_alt_mask = mask; - } - if (m_meta_mask == 0 - && m_alt_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && (sym == XK_Meta_L || sym == XK_Meta_R)) { - m_meta_mask = mask; - } - if (m_super_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_hyper_mask != mask - && (sym == XK_Super_L || sym == XK_Super_R)) { - m_super_mask = mask; - } - if (m_hyper_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_super_mask != mask - && (sym == XK_Hyper_L || sym == XK_Hyper_R)) { - m_hyper_mask = mask; - } - if (m_mode_switch_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && sym == XK_Mode_switch) { - m_mode_switch_mask = mask; - } - if (m_num_lock_mask == 0 - && sym == XK_Num_Lock) { - m_num_lock_mask = mask; - } -} - -int QXlibKeyboard::translateKeySym(uint key) const -{ - int code = -1; - int i = 0; // any other keys - while (KeyTbl[i]) { - if (key == KeyTbl[i]) { - code = (int)KeyTbl[i+1]; - break; - } - i += 2; - } - if (m_meta_mask) { - // translate Super/Hyper keys to Meta if we're using them as the MetaModifier - if (m_meta_mask == m_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) { - code = Qt::Key_Meta; - } else if (m_meta_mask == m_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) { - code = Qt::Key_Meta; - } - } - return code; -} - -QString QXlibKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, - int &code, Qt::KeyboardModifiers &modifiers, - QByteArray &chars, int &count) -{ - // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars - - QTextCodec *mapper = QTextCodec::codecForLocale(); - QChar converted; - - if (/*count == 0 &&*/ keysym < 0xff00) { - unsigned char byte3 = (unsigned char)(keysym >> 8); - int mib = -1; - switch(byte3) { - case 0: // Latin 1 - case 1: // Latin 2 - case 2: //latin 3 - case 3: // latin4 - mib = byte3 + 4; break; - case 5: // arabic - mib = 82; break; - case 12: // Hebrew - mib = 85; break; - case 13: // Thai - mib = 2259; break; - case 4: // kana - case 6: // cyrillic - case 7: // greek - case 8: // technical, no mapping here at the moment - case 9: // Special - case 10: // Publishing - case 11: // APL - case 14: // Korean, no mapping - mib = -1; // manual conversion - mapper= 0; -#if !defined(QT_NO_XIM) - converted = keysymToUnicode(byte3, keysym & 0xff); -#endif - case 0x20: - // currency symbols - if (keysym >= 0x20a0 && keysym <= 0x20ac) { - mib = -1; // manual conversion - mapper = 0; - converted = (uint)keysym; - } - break; - default: - break; - } - if (mib != -1) { - mapper = QTextCodec::codecForMib(mib); - if (chars.isEmpty()) - chars.resize(1); - chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later - count = 1; - } - } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) { - converted = (ushort) (keysym - 0x1000000); - mapper = 0; - } - if (count < (int)chars.size()-1) - chars[count] = '\0'; - - QString text; - if (!mapper && converted.unicode() != 0x0) { - text = converted; - } else if (!chars.isEmpty()) { - // convert chars (8bit) to text (unicode). - if (mapper) - text = mapper->toUnicode(chars.data(), count, 0); - if (text.isEmpty()) { - // no mapper, or codec couldn't convert to unicode (this - // can happen when running in the C locale or with no LANG - // set). try converting from latin-1 - text = QString::fromLatin1(chars); - } - } - - modifiers = translateModifiers(xmodifiers); - - // Commentary in X11/keysymdef says that X codes match ASCII, so it - // is safe to use the locale functions to process X codes in ISO8859-1. - // - // This is mainly for compatibility - applications should not use the - // Qt keycodes between 128 and 255, but should rather use the - // QKeyEvent::text(). - // - if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) { - // upper-case key, if known - code = isprint((int)keysym) ? toupper((int)keysym) : 0; - } else if (keysym >= XK_F1 && keysym <= XK_F35) { - // function keys - code = Qt::Key_F1 + ((int)keysym - XK_F1); - } else if (keysym >= XK_KP_Space && keysym <= XK_KP_9) { - if (keysym >= XK_KP_0) { - // numeric keypad keys - code = Qt::Key_0 + ((int)keysym - XK_KP_0); - } else { - code = translateKeySym(keysym); - } - modifiers |= Qt::KeypadModifier; - } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) { - code = text.unicode()->toUpper().unicode(); - } else { - // any other keys - code = translateKeySym(keysym); - - if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) { - // map shift+tab to shift+backtab, QShortcutMap knows about it - // and will handle it. - code = Qt::Key_Backtab; - text = QString(); - } - } - - return text; -} - -QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) - : m_screen(screen) - , m_alt_mask(0) - , m_super_mask(0) - , m_hyper_mask(0) - , m_meta_mask(0) -{ - changeLayout(); -} - -void QXlibKeyboard::changeLayout() -{ - XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); - for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { - const uint mask = xkbDesc->map->modmap ? xkbDesc->map->modmap[i] : 0; - if (mask == 0) { - // key is not bound to a modifier - continue; - } - - for (int j = 0; j < XkbKeyGroupsWidth(xkbDesc, i); ++j) { - KeySym keySym = XkbKeySym(xkbDesc, i, j); - if (keySym == NoSymbol) - continue; - setMask(keySym, mask); - } - } - XkbFreeKeyboard(xkbDesc, XkbAllComponentsMask, true); - -} - -static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) -{ - switch (qtcode) { - case Qt::Key_Control: - return Qt::ControlModifier; - case Qt::Key_Alt: - return Qt::AltModifier; - case Qt::Key_Shift: - return Qt::ShiftModifier; - case Qt::Key_Meta: - return Qt::MetaModifier; - default: - return Qt::NoModifier; - } -} - -void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) -{ - int qtcode = 0; - Qt::KeyboardModifiers modifiers = translateModifiers(ev->state); - QByteArray chars; - chars.resize(513); - int count = 0; - KeySym keySym; - count = XLookupString(ev,chars.data(),chars.size(),&keySym,0); - QString text = translateKeySym(keySym,ev->state,qtcode,modifiers,chars,count); - QWindowSystemInterface::handleKeyEvent(widget,ev->time,type,qtcode,modifiers,text.left(count)); -} diff --git a/src/plugins/platforms/testlite/qtestlitekeyboard.h b/src/plugins/platforms/testlite/qtestlitekeyboard.h deleted file mode 100644 index 98df4e1..0000000 --- a/src/plugins/platforms/testlite/qtestlitekeyboard.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEKEYBOARD_H -#define QTESTLITEKEYBOARD_H - -#include "qtestliteintegration.h" - -class QXlibKeyboard -{ -public: - QXlibKeyboard(QXlibScreen *screen); - - void changeLayout(); - - void handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev); - - Qt::KeyboardModifiers translateModifiers(int s); - -private: - - void setMask(KeySym sym, uint mask); - int translateKeySym(uint key) const; - QString translateKeySym(KeySym keysym, uint xmodifiers, - int &code, Qt::KeyboardModifiers &modifiers, - QByteArray &chars, int &count); - - QXlibScreen *m_screen; - - uint m_alt_mask; - uint m_super_mask; - uint m_hyper_mask; - uint m_meta_mask; - uint m_mode_switch_mask; - uint m_num_lock_mask; -}; - -#endif // QTESTLITEKEYBOARD_H diff --git a/src/plugins/platforms/testlite/qtestlitemime.cpp b/src/plugins/platforms/testlite/qtestlitemime.cpp deleted file mode 100644 index 5335ae9..0000000 --- a/src/plugins/platforms/testlite/qtestlitemime.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitemime.h" - -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" - -#include -#include -#include - -QXlibMime::QXlibMime() - : QInternalMimeData() -{ } - -QXlibMime::~QXlibMime() -{} - - - - - -QString QXlibMime::mimeAtomToString(Display *display, Atom a) -{ - if (!a) return 0; - - if (a == XA_STRING || a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) { - return "text/plain"; // some Xdnd clients are dumb - } - char *atom = XGetAtomName(display, a); - QString result = QString::fromLatin1(atom); - XFree(atom); - return result; -} - -Atom QXlibMime::mimeStringToAtom(Display *display, const QString &mimeType) -{ - if (mimeType.isEmpty()) - return 0; - return XInternAtom(display, mimeType.toLatin1().constData(), False); -} - -QStringList QXlibMime::mimeFormatsForAtom(Display *display, Atom a) -{ - QStringList formats; - if (a) { - QString atomName = mimeAtomToString(display, a); - formats.append(atomName); - - // special cases for string type - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) - || a == XA_STRING - || a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - formats.append(QLatin1String("text/plain")); - - // special cases for uris - if (atomName == QLatin1String("text/x-moz-url")) - formats.append(QLatin1String("text/uri-list")); - - // special case for images - if (a == XA_PIXMAP) - formats.append(QLatin1String("image/ppm")); - } - return formats; -} - -bool QXlibMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) -{ - bool ret = false; - *atomFormat = a; - *dataFormat = 8; - QString atomName = mimeAtomToString(display, a); - if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) { - *data = QInternalMimeData::renderDataHelper(atomName, mimeData); - if (atomName == QLatin1String("application/x-color")) - *dataFormat = 16; - ret = true; - } else { - if ((a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) - || a == XA_STRING - || a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - && QInternalMimeData::hasFormatHelper(QLatin1String("text/plain"), mimeData)) { - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)){ - *data = QInternalMimeData::renderDataHelper(QLatin1String("text/plain"), mimeData); - ret = true; - } else if (a == XA_STRING) { - *data = QString::fromUtf8(QInternalMimeData::renderDataHelper( - QLatin1String("text/plain"), mimeData)).toLocal8Bit(); - ret = true; - } else if (a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { - // the ICCCM states that TEXT and COMPOUND_TEXT are in the - // encoding of choice, so we choose the encoding of the locale - QByteArray strData = QString::fromUtf8(QInternalMimeData::renderDataHelper( - QLatin1String("text/plain"), mimeData)).toLocal8Bit(); - char *list[] = { strData.data(), NULL }; - - XICCEncodingStyle style = (a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - ? XCompoundTextStyle : XStdICCTextStyle; - XTextProperty textprop; - if (list[0] != NULL - && XmbTextListToTextProperty(display, list, 1, style, - &textprop) == Success) { - *atomFormat = textprop.encoding; - *dataFormat = textprop.format; - *data = QByteArray((const char *) textprop.value, textprop.nitems * textprop.format / 8); - ret = true; - - XFree(textprop.value); - } - } - } else if (atomName == QLatin1String("text/x-moz-url") && - QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) { - QByteArray uri = QInternalMimeData::renderDataHelper( - QLatin1String("text/uri-list"), mimeData).split('\n').first(); - QString mozUri = QString::fromLatin1(uri, uri.size()); - mozUri += QLatin1Char('\n'); - *data = QByteArray(reinterpret_cast(mozUri.utf16()), mozUri.length() * 2); - ret = true; - } else if ((a == XA_PIXMAP || a == XA_BITMAP) && mimeData->hasImage()) { - ret = true; - } - } - return ret && data != 0; -} - -QList QXlibMime::mimeAtomsForFormat(Display *display, const QString &format) -{ - QList atoms; - atoms.append(mimeStringToAtom(display, format)); - - // special cases for strings - if (format == QLatin1String("text/plain")) { - atoms.append(QXlibStatic::atom(QXlibStatic::UTF8_STRING)); - atoms.append(XA_STRING); - atoms.append(QXlibStatic::atom(QXlibStatic::TEXT)); - atoms.append(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)); - } - - // special cases for uris - if (format == QLatin1String("text/uri-list")) { - atoms.append(mimeStringToAtom(display,QLatin1String("text/x-moz-url"))); - } - - //special cases for images - if (format == QLatin1String("image/ppm")) - atoms.append(XA_PIXMAP); - if (format == QLatin1String("image/pbm")) - atoms.append(XA_BITMAP); - - return atoms; -} - -QVariant QXlibMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) -{ - QString atomName = mimeAtomToString(display,a); - if (atomName == format) - return data; - - if (!encoding.isEmpty() - && atomName == format + QLatin1String(";charset=") + QString::fromLatin1(encoding)) { - - if (requestedType == QVariant::String) { - QTextCodec *codec = QTextCodec::codecForName(encoding); - if (codec) - return codec->toUnicode(data); - } - - return data; - } - - // special cases for string types - if (format == QLatin1String("text/plain")) { - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) - return QString::fromUtf8(data); - if (a == XA_STRING) - return QString::fromLatin1(data); - if (a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - // #### might be wrong for COMPUND_TEXT - return QString::fromLocal8Bit(data, data.size()); - } - - // special case for uri types - if (format == QLatin1String("text/uri-list")) { - if (atomName == QLatin1String("text/x-moz-url")) { - // we expect this as utf16 - // the first part is a url that should only contain ascci char - // so it should be safe to check that the second char is 0 - // to verify that it is utf16 - if (data.size() > 1 && data.at(1) == 0) - return QString::fromRawData((const QChar *)data.constData(), - data.size() / 2).split(QLatin1Char('\n')).first().toLatin1(); - } - } - - // special cas for images - if (format == QLatin1String("image/ppm")) { - if (a == XA_PIXMAP && data.size() == sizeof(Pixmap)) { - Pixmap xpm = *((Pixmap*)data.data()); - if (!xpm) - return QByteArray(); - Window root; - int x; - int y; - uint width; - uint height; - uint border_width; - uint depth; - - XGetGeometry(display, xpm, &root, &x, &y, &width, &height, &border_width, &depth); - XImage *ximg = XGetImage(display,xpm,x,y,width,height,AllPlanes,depth==1 ? XYPixmap : ZPixmap); - QImage qimg = QXlibStatic::qimageFromXImage(ximg); - XDestroyImage(ximg); - - QImageWriter imageWriter; - imageWriter.setFormat("PPMRAW"); - QBuffer buf; - buf.open(QIODevice::WriteOnly); - imageWriter.setDevice(&buf); - imageWriter.write(qimg); - return buf.buffer(); - } - } - return QVariant(); -} - -Atom QXlibMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding) -{ - requestedEncoding->clear(); - - // find matches for string types - if (format == QLatin1String("text/plain")) { - if (atoms.contains(QXlibStatic::atom(QXlibStatic::UTF8_STRING))) - return QXlibStatic::atom(QXlibStatic::UTF8_STRING); - if (atoms.contains(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT))) - return QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT); - if (atoms.contains(QXlibStatic::atom(QXlibStatic::TEXT))) - return QXlibStatic::atom(QXlibStatic::TEXT); - if (atoms.contains(XA_STRING)) - return XA_STRING; - } - - // find matches for uri types - if (format == QLatin1String("text/uri-list")) { - Atom a = mimeStringToAtom(display,format); - if (a && atoms.contains(a)) - return a; - a = mimeStringToAtom(display,QLatin1String("text/x-moz-url")); - if (a && atoms.contains(a)) - return a; - } - - // find match for image - if (format == QLatin1String("image/ppm")) { - if (atoms.contains(XA_PIXMAP)) - return XA_PIXMAP; - } - - // for string/text requests try to use a format with a well-defined charset - // first to avoid encoding problems - if (requestedType == QVariant::String - && format.startsWith(QLatin1String("text/")) - && !format.contains(QLatin1String("charset="))) { - - QString formatWithCharset = format; - formatWithCharset.append(QLatin1String(";charset=utf-8")); - - Atom a = mimeStringToAtom(display,formatWithCharset); - if (a && atoms.contains(a)) { - *requestedEncoding = "utf-8"; - return a; - } - } - - Atom a = mimeStringToAtom(display,format); - if (a && atoms.contains(a)) - return a; - - return 0; -} diff --git a/src/plugins/platforms/testlite/qtestlitemime.h b/src/plugins/platforms/testlite/qtestlitemime.h deleted file mode 100644 index 6a70ea4..0000000 --- a/src/plugins/platforms/testlite/qtestlitemime.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEMIME_H -#define QTESTLITEMIME_H - -#include <private/qdnd_p.h> - -#include <QtGui/QClipboard> - -#include "qtestliteintegration.h" -#include "qtestliteclipboard.h" - -class QXlibMime : public QInternalMimeData { - Q_OBJECT -public: - QXlibMime(); - ~QXlibMime(); - - static QList<Atom> mimeAtomsForFormat(Display *display, const QString &format); - static QString mimeAtomToString(Display *display, Atom a); - static bool mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat); - static QStringList mimeFormatsForAtom(Display *display, Atom a); - static Atom mimeStringToAtom(Display *display, const QString &mimeType); - static QVariant mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding); - static Atom mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding); -}; - -#endif // QTESTLITEMIME_H diff --git a/src/plugins/platforms/testlite/qtestlitescreen.cpp b/src/plugins/platforms/testlite/qtestlitescreen.cpp deleted file mode 100644 index 714c17b..0000000 --- a/src/plugins/platforms/testlite/qtestlitescreen.cpp +++ /dev/null @@ -1,468 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitescreen.h" - -#include "qtestlitecursor.h" -#include "qtestlitewindow.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" -#include "qtestliteclipboard.h" - -#include <QtCore/QDebug> -#include <QtCore/QSocketNotifier> -#include <QtCore/QElapsedTimer> - -#include <private/qapplication_p.h> - -#include <X11/extensions/Xfixes.h> - -QT_BEGIN_NAMESPACE - -static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); -static bool seen_badwindow; - -static int qt_x_errhandler(Display *dpy, XErrorEvent *err) -{ - -qDebug() << "qt_x_errhandler" << err->error_code; - - switch (err->error_code) { - case BadAtom: -#if 0 - if (err->request_code == 20 /* X_GetProperty */ - && (err->resourceid == XA_RESOURCE_MANAGER - || err->resourceid == XA_RGB_DEFAULT_MAP - || err->resourceid == ATOM(_NET_SUPPORTED) - || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) - || err->resourceid == ATOM(KDE_FULL_SESSION) - || err->resourceid == ATOM(KWIN_RUNNING) - || err->resourceid == ATOM(XdndProxy) - || err->resourceid == ATOM(XdndAware)) - - - ) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } -#endif - qDebug() << "BadAtom"; - break; - - case BadWindow: - if (err->request_code == 2 /* X_ChangeWindowAttributes */ - || err->request_code == 38 /* X_QueryPointer */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } - } - seen_badwindow = true; - if (err->request_code == 25 /* X_SendEvent */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } -#if 0 - if (X11->xdndHandleBadwindow()) { - qDebug("xdndHandleBadwindow returned true"); - return 0; - } -#endif - } -#if 0 - if (X11->ignore_badwindow) - return 0; -#endif - break; - - case BadMatch: - if (err->request_code == 42 /* X_SetInputFocus */) - return 0; - break; - - default: -#if 0 //!defined(QT_NO_XINPUT) - if (err->request_code == X11->xinput_major - && err->error_code == (X11->xinput_errorbase + XI_BadDevice) - && err->minor_code == 3 /* X_OpenDevice */) { - return 0; - } -#endif - break; - } - - char errstr[256]; - XGetErrorText( dpy, err->error_code, errstr, 256 ); - char buffer[256]; - char request_str[256]; - qsnprintf(buffer, 256, "%d", err->request_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); - if (err->request_code < 128) { - // X error for a normal protocol request - qWarning( "X Error: %s %d\n" - " Major opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - request_str, - err->resourceid ); - } else { - // X error for an extension request - const char *extensionName = 0; -#if 0 - if (err->request_code == X11->xrender_major) - extensionName = "RENDER"; - else if (err->request_code == X11->xrandr_major) - extensionName = "RANDR"; - else if (err->request_code == X11->xinput_major) - extensionName = "XInputExtension"; - else if (err->request_code == X11->mitshm_major) - extensionName = "MIT-SHM"; -#endif - char minor_str[256]; - if (extensionName) { - qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); - } else { - extensionName = "Uknown extension"; - qsnprintf(minor_str, 256, "Unknown request"); - } - qWarning( "X Error: %s %d\n" - " Extension: %d (%s)\n" - " Minor opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - extensionName, - err->minor_code, - minor_str, - err->resourceid ); - } - - // ### we really should distinguish between severe, non-severe and - // ### application specific errors - - return 0; -} - -QXlibScreen::QXlibScreen() - : mFormat(QImage::Format_RGB32) -{ - char *display_name = getenv("DISPLAY"); - mDisplay = XOpenDisplay(display_name); - mDisplayName = QString::fromLocal8Bit(display_name); - if (!mDisplay) { - fprintf(stderr, "Cannot connect to X server: %s\n", - display_name); - exit(1); - } - -#ifndef DONT_USE_MIT_SHM - Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay); - Q_ASSERT(MIT_SHM_extension_supported == True); -#endif - original_x_errhandler = XSetErrorHandler(qt_x_errhandler); - - if (qgetenv("DO_X_SYNCHRONIZE").toInt()) - XSynchronize(mDisplay, true); - - mScreen = DefaultScreen(mDisplay); - XSelectInput(mDisplay,rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); - int width = DisplayWidth(mDisplay, mScreen); - int height = DisplayHeight(mDisplay, mScreen); - mGeometry = QRect(0,0,width,height); - - int physicalWidth = DisplayWidthMM(mDisplay, mScreen); - int physicalHeight = DisplayHeightMM(mDisplay, mScreen); - mPhysicalSize = QSize(physicalWidth,physicalHeight); - - int xSocketNumber = XConnectionNumber(mDisplay); - - mDepth = DefaultDepth(mDisplay,mScreen); -#ifdef MYX11_DEBUG - qDebug() << "X socket:"<< xSocketNumber; -#endif - QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); - connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); - - mCursor = new QXlibCursor(this); - mKeyboard = new QXlibKeyboard(this); -} - -QXlibScreen::~QXlibScreen() -{ - delete mCursor; - XCloseDisplay(mDisplay); -} - -#ifdef KeyPress -#undef KeyPress -#endif -#ifdef KeyRelease -#undef KeyRelease -#endif - -bool QXlibScreen::handleEvent(XEvent *xe) -{ - int quit = false; - QXlibWindow *platformWindow = 0; - QWidget *widget = QWidget::find(xe->xany.window); - if (widget) { - platformWindow = static_cast<QXlibWindow *>(widget->platformWindow()); - } - - Atom wmProtocolsAtom = QXlibStatic::atom(QXlibStatic::WM_PROTOCOLS); - Atom wmDeleteWindowAtom = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); - switch (xe->type) { - - case ClientMessage: - if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { - Atom a = xe->xclient.data.l[0]; - if (a == wmDeleteWindowAtom) - platformWindow->handleCloseEvent(); - } - break; - - case Expose: - if (platformWindow) - if (xe->xexpose.count == 0) - platformWindow->paintEvent(); - break; - case ConfigureNotify: - if (platformWindow) - platformWindow->resizeEvent(&xe->xconfigure); - break; - - case ButtonPress: - if (platformWindow) - platformWindow->mousePressEvent(&xe->xbutton); - break; - - case ButtonRelease: - if (platformWindow) - platformWindow->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton); - break; - - case MotionNotify: - if (platformWindow) - platformWindow->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); - break; - - case XKeyPress: - mKeyboard->handleKeyEvent(widget,QEvent::KeyPress, &xe->xkey); - break; - - case XKeyRelease: - mKeyboard->handleKeyEvent(widget,QEvent::KeyRelease, &xe->xkey); - break; - - case EnterNotify: - if (platformWindow) - platformWindow->handleEnterEvent(); - break; - - case LeaveNotify: - if (platformWindow) - platformWindow->handleLeaveEvent(); - break; - - case XFocusIn: - if (platformWindow) - platformWindow->handleFocusInEvent(); - break; - - case XFocusOut: - if (platformWindow) - platformWindow->handleFocusOutEvent(); - break; - - case PropertyNotify: - break; - - case SelectionClear: - qDebug() << "Selection Clear!!!"; - break; - case SelectionRequest: - handleSelectionRequest(xe); - break; - case SelectionNotify: - qDebug() << "Selection Notify!!!!"; - - break; - - - default: -#ifdef MYX11_DEBUG - qDebug() << hex << xe->xany.window << "Other X event" << xe->type; -#endif - break; - } - - return quit; -} - -static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer) -{ - Atom clipboard = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY - || e->xselectionrequest.selection == clipboard)) - || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY - || e->xselectionclear.selection == clipboard))); -} - -bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) -{ - QElapsedTimer timer; - timer.start(); - do { - if (XCheckTypedWindowEvent(mDisplay,win,type,event)) - return true; - - // process other clipboard events, since someone is probably requesting data from us - XEvent e; - if (XCheckIfEvent(mDisplay, &e, checkForClipboardEvents, 0)) - handleEvent(&e); - - XFlush(mDisplay); - - // sleep 50 ms, so we don't use up CPU cycles all the time. - struct timeval usleep_tv; - usleep_tv.tv_sec = 0; - usleep_tv.tv_usec = 50000; - select(0, 0, 0, 0, &usleep_tv); - } while (timer.elapsed() < timeout); - return false; -} - -void QXlibScreen::eventDispatcher() -{ - ulong marker = XNextRequest(mDisplay); - // int i = 0; - while (XPending(mDisplay)) { - XEvent event; - XNextEvent(mDisplay, &event); - /* done = */ - handleEvent(&event); - - if (event.xany.serial >= marker) { - #ifdef MYX11_DEBUG - qDebug() << "potential livelock averted"; - #endif - #if 0 - if (XEventsQueued(mDisplay, QueuedAfterFlush)) { - qDebug() << " with events queued"; - QTimer::singleShot(0, this, SLOT(eventDispatcher())); - } - #endif - break; - } - } -} - -QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) -{ - if (w == 0 || h ==0) - return QImage(); - - //WinId 0 means the desktop widget - if (!window) - window = rootWindow(); - - XWindowAttributes window_attr; - if (!XGetWindowAttributes(mDisplay, window, &window_attr)) - return QImage(); - - if (w < 0) - w = window_attr.width - x; - if (h < 0) - h = window_attr.height - y; - - // Ideally, we should also limit ourselves to the screen area, but the Qt docs say - // that it's "unsafe" to go outside the screen, so we can ignore that problem. - - //We're definitely not optimizing for speed... - XImage *xi = XGetImage(mDisplay, window, x, y, w, h, AllPlanes, ZPixmap); - - if (!xi) - return QImage(); - - //taking a copy to make sure we have ownership -- not fast - QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); - - XDestroyImage(xi); - - return result; -} - -QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) -{ - QPlatformScreen *platformScreen = platformScreenForWidget(widget); - return static_cast<QXlibScreen *>(platformScreen); -} - -Display * QXlibScreen::display() const -{ - return mDisplay; -} - -int QXlibScreen::xScreenNumber() const -{ - return mScreen; -} - -QXlibKeyboard * QXlibScreen::keyboard() const -{ - return mKeyboard; -} - -void QXlibScreen::handleSelectionRequest(XEvent *event) -{ - QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); - QXlibClipboard *clipboard = static_cast<QXlibClipboard *>(integration->clipboard()); - clipboard->handleSelectionRequest(event); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitescreen.h b/src/plugins/platforms/testlite/qtestlitescreen.h deleted file mode 100644 index 7e59a59..0000000 --- a/src/plugins/platforms/testlite/qtestlitescreen.h +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITESCREEN_H -#define QTESTLITESCREEN_H - -#include <QtGui/QPlatformScreen> -#include "qtestliteintegration.h" - -QT_BEGIN_NAMESPACE - -class QXlibCursor; -class QXlibKeyboard; - -class QXlibScreen : public QPlatformScreen -{ - Q_OBJECT -public: - QXlibScreen(); - - ~QXlibScreen(); - - QString displayName() const { return mDisplayName; } - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - - Window rootWindow() { return RootWindow(mDisplay, mScreen); } - unsigned long blackPixel() { return BlackPixel(mDisplay, mScreen); } - unsigned long whitePixel() { return WhitePixel(mDisplay, mScreen); } - - bool handleEvent(XEvent *xe); - bool waitForClipboardEvent(Window win, int type, XEvent *event, int timeout); - - QImage grabWindow(Window window, int x, int y, int w, int h); - - static QXlibScreen *testLiteScreenForWidget(QWidget *widget); - - Display *display() const; - int xScreenNumber() const; - - QXlibKeyboard *keyboard() const; - -public slots: - void eventDispatcher(); - -private: - - void handleSelectionRequest(XEvent *event); - QString mDisplayName; - QRect mGeometry; - QSize mPhysicalSize; - int mDepth; - QImage::Format mFormat; - QXlibCursor *mCursor; - QXlibKeyboard *mKeyboard; - - Display * mDisplay; - int mScreen; -}; - -QT_END_NAMESPACE - -#endif // QTESTLITESCREEN_H diff --git a/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp b/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp deleted file mode 100644 index 837636c..0000000 --- a/src/plugins/platforms/testlite/qtestlitestaticinfo.cpp +++ /dev/null @@ -1,511 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" - -#include <qplatformdefs.h> - -#include <QtGui/private/qapplication_p.h> -#include <QtCore/QBuffer> -#include <QtCore/QLibrary> - -#include <QDebug> - -#ifndef QT_NO_XFIXES -#include <X11/extensions/Xfixes.h> -#endif // QT_NO_XFIXES - -static const char * x11_atomnames = { - // window-manager <-> client protocols - "WM_PROTOCOLS\0" - "WM_DELETE_WINDOW\0" - "WM_TAKE_FOCUS\0" - "_NET_WM_PING\0" - "_NET_WM_CONTEXT_HELP\0" - "_NET_WM_SYNC_REQUEST\0" - "_NET_WM_SYNC_REQUEST_COUNTER\0" - - // ICCCM window state - "WM_STATE\0" - "WM_CHANGE_STATE\0" - - // Session management - "WM_CLIENT_LEADER\0" - "WM_WINDOW_ROLE\0" - "SM_CLIENT_ID\0" - - // Clipboard - "CLIPBOARD\0" - "INCR\0" - "TARGETS\0" - "MULTIPLE\0" - "TIMESTAMP\0" - "SAVE_TARGETS\0" - "CLIP_TEMPORARY\0" - "_QT_SELECTION\0" - "_QT_CLIPBOARD_SENTINEL\0" - "_QT_SELECTION_SENTINEL\0" - "CLIPBOARD_MANAGER\0" - - "RESOURCE_MANAGER\0" - - "_XSETROOT_ID\0" - - "_QT_SCROLL_DONE\0" - "_QT_INPUT_ENCODING\0" - - "_MOTIF_WM_HINTS\0" - - "DTWM_IS_RUNNING\0" - "ENLIGHTENMENT_DESKTOP\0" - "_DT_SAVE_MODE\0" - "_SGI_DESKS_MANAGER\0" - - // EWMH (aka NETWM) - "_NET_SUPPORTED\0" - "_NET_VIRTUAL_ROOTS\0" - "_NET_WORKAREA\0" - - "_NET_MOVERESIZE_WINDOW\0" - "_NET_WM_MOVERESIZE\0" - - "_NET_WM_NAME\0" - "_NET_WM_ICON_NAME\0" - "_NET_WM_ICON\0" - - "_NET_WM_PID\0" - - "_NET_WM_WINDOW_OPACITY\0" - - "_NET_WM_STATE\0" - "_NET_WM_STATE_ABOVE\0" - "_NET_WM_STATE_BELOW\0" - "_NET_WM_STATE_FULLSCREEN\0" - "_NET_WM_STATE_MAXIMIZED_HORZ\0" - "_NET_WM_STATE_MAXIMIZED_VERT\0" - "_NET_WM_STATE_MODAL\0" - "_NET_WM_STATE_STAYS_ON_TOP\0" - "_NET_WM_STATE_DEMANDS_ATTENTION\0" - - "_NET_WM_USER_TIME\0" - "_NET_WM_USER_TIME_WINDOW\0" - "_NET_WM_FULL_PLACEMENT\0" - - "_NET_WM_WINDOW_TYPE\0" - "_NET_WM_WINDOW_TYPE_DESKTOP\0" - "_NET_WM_WINDOW_TYPE_DOCK\0" - "_NET_WM_WINDOW_TYPE_TOOLBAR\0" - "_NET_WM_WINDOW_TYPE_MENU\0" - "_NET_WM_WINDOW_TYPE_UTILITY\0" - "_NET_WM_WINDOW_TYPE_SPLASH\0" - "_NET_WM_WINDOW_TYPE_DIALOG\0" - "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0" - "_NET_WM_WINDOW_TYPE_POPUP_MENU\0" - "_NET_WM_WINDOW_TYPE_TOOLTIP\0" - "_NET_WM_WINDOW_TYPE_NOTIFICATION\0" - "_NET_WM_WINDOW_TYPE_COMBO\0" - "_NET_WM_WINDOW_TYPE_DND\0" - "_NET_WM_WINDOW_TYPE_NORMAL\0" - "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0" - - "_KDE_NET_WM_FRAME_STRUT\0" - - "_NET_STARTUP_INFO\0" - "_NET_STARTUP_INFO_BEGIN\0" - - "_NET_SUPPORTING_WM_CHECK\0" - - "_NET_WM_CM_S0\0" - - "_NET_SYSTEM_TRAY_VISUAL\0" - - "_NET_ACTIVE_WINDOW\0" - - // Property formats - "COMPOUND_TEXT\0" - "TEXT\0" - "UTF8_STRING\0" - - // xdnd - "XdndEnter\0" - "XdndPosition\0" - "XdndStatus\0" - "XdndLeave\0" - "XdndDrop\0" - "XdndFinished\0" - "XdndTypeList\0" - "XdndActionList\0" - - "XdndSelection\0" - - "XdndAware\0" - "XdndProxy\0" - - "XdndActionCopy\0" - "XdndActionLink\0" - "XdndActionMove\0" - "XdndActionPrivate\0" - - // Motif DND - "_MOTIF_DRAG_AND_DROP_MESSAGE\0" - "_MOTIF_DRAG_INITIATOR_INFO\0" - "_MOTIF_DRAG_RECEIVER_INFO\0" - "_MOTIF_DRAG_WINDOW\0" - "_MOTIF_DRAG_TARGETS\0" - - "XmTRANSFER_SUCCESS\0" - "XmTRANSFER_FAILURE\0" - - // Xkb - "_XKB_RULES_NAMES\0" - - // XEMBED - "_XEMBED\0" - "_XEMBED_INFO\0" - - // Wacom old. (before version 0.10) - "Wacom Stylus\0" - "Wacom Cursor\0" - "Wacom Eraser\0" - - // Tablet - "STYLUS\0" - "ERASER\0" -}; - -/*! - \internal - Try to resolve a \a symbol from \a library with the version specified - by \a vernum. - - Note that, in the case of the Xfixes library, \a vernum is not the same as - \c XFIXES_MAJOR - it is a part of soname and may differ from the Xfixes - version. -*/ -static void* qt_load_library_runtime(const char *library, int vernum, - int highestVernum, const char *symbol) -{ - QList<int> versions; - // we try to load in the following order: - // explicit version -> the default one -> (from the highest (highestVernum) to the lowest (vernum) ) - if (vernum != -1) - versions << vernum; - versions << -1; - if (vernum != -1) { - for(int i = highestVernum; i > vernum; --i) - versions << i; - } - Q_FOREACH(int version, versions) { - QLatin1String libName(library); - QLibrary xfixesLib(libName, version); - void *ptr = xfixesLib.resolve(symbol); - if (ptr) - return ptr; - } - return 0; -} - -# define XFIXES_LOAD_RUNTIME(vernum, symbol, symbol_type) \ - (symbol_type)qt_load_library_runtime("libXfixes", vernum, 4, #symbol); -# define XFIXES_LOAD_V1(symbol) \ - XFIXES_LOAD_RUNTIME(1, symbol, Ptr##symbol) -# define XFIXES_LOAD_V2(symbol) \ - XFIXES_LOAD_RUNTIME(2, symbol, Ptr##symbol) - - -class QTestLiteStaticInfoPrivate -{ -public: - QTestLiteStaticInfoPrivate() - : use_xfixes(false) - , xfixes_major(0) - , xfixes_eventbase(0) - , xfixes_errorbase(0) - { - QXlibScreen *screen = qobject_cast<QXlibScreen *> (QApplicationPrivate::platformIntegration()->screens().at(0)); - Q_ASSERT(screen); - - initializeAllAtoms(screen); - initializeSupportedAtoms(screen); - - resolveXFixes(screen); - } - - bool isSupportedByWM(Atom atom) - { - if (!m_supportedAtoms) - return false; - - bool supported = false; - int i = 0; - while (m_supportedAtoms[i] != 0) { - if (m_supportedAtoms[i++] == atom) { - supported = true; - break; - } - } - - return supported; - } - - Atom atom(QXlibStatic::X11Atom atom) - { - return m_allAtoms[atom]; - } - - bool useXFixes() const { return use_xfixes; } - - int xFixesEventBase() const {return xfixes_eventbase; } - - PtrXFixesSelectSelectionInput xFixesSelectSelectionInput() const - { - return ptrXFixesSelectSelectionInput; - } - - QImage qimageFromXImage(XImage *xi) - { - QImage::Format format = QImage::Format_ARGB32_Premultiplied; - if (xi->depth == 24) - format = QImage::Format_RGB32; - else if (xi->depth == 16) - format = QImage::Format_RGB16; - - QImage image = QImage((uchar *)xi->data, xi->width, xi->height, xi->bytes_per_line, format).copy(); - - // we may have to swap the byte order - if ((QSysInfo::ByteOrder == QSysInfo::LittleEndian && xi->byte_order == MSBFirst) - || (QSysInfo::ByteOrder == QSysInfo::BigEndian && xi->byte_order == LSBFirst)) - { - for (int i=0; i < image.height(); i++) { - if (xi->depth == 16) { - ushort *p = (ushort*)image.scanLine(i); - ushort *end = p + image.width(); - while (p < end) { - *p = ((*p << 8) & 0xff00) | ((*p >> 8) & 0x00ff); - p++; - } - } else { - uint *p = (uint*)image.scanLine(i); - uint *end = p + image.width(); - while (p < end) { - *p = ((*p << 24) & 0xff000000) | ((*p << 8) & 0x00ff0000) - | ((*p >> 8) & 0x0000ff00) | ((*p >> 24) & 0x000000ff); - p++; - } - } - } - } - - // fix-up alpha channel - if (format == QImage::Format_RGB32) { - QRgb *p = (QRgb *)image.bits(); - for (int y = 0; y < xi->height; ++y) { - for (int x = 0; x < xi->width; ++x) - p[x] |= 0xff000000; - p += xi->bytes_per_line / 4; - } - } - - return image; - } - - -private: - - void initializeAllAtoms(QXlibScreen *screen) { - const char *names[QXlibStatic::NAtoms]; - const char *ptr = x11_atomnames; - - int i = 0; - while (*ptr) { - names[i++] = ptr; - while (*ptr) - ++ptr; - ++ptr; - } - - Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); - - QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); - settings_atom_name += XDisplayName(qPrintable(screen->displayName())); - names[i++] = settings_atom_name; - - Q_ASSERT(i == QXlibStatic::NAtoms); - #if 0//defined(XlibSpecificationRelease) && (XlibSpecificationRelease >= 6) - XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); - #else - for (i = 0; i < QXlibStatic::NAtoms; ++i) - m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); - #endif - } - - void initializeSupportedAtoms(QXlibScreen *screen) - { - Atom type; - int format; - long offset = 0; - unsigned long nitems, after; - unsigned char *data = 0; - - int e = XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, - False, XA_ATOM, &type, &format, &nitems, &after, &data); - if (data) - XFree(data); - - if (e == Success && type == XA_ATOM && format == 32) { - QBuffer ts; - ts.open(QIODevice::WriteOnly); - - while (after > 0) { - XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, - False, XA_ATOM, &type, &format, &nitems, &after, &data); - - if (type == XA_ATOM && format == 32) { - ts.write(reinterpret_cast<char *>(data), nitems * sizeof(long)); - offset += nitems; - } else - after = 0; - if (data) - XFree(data); - } - - // compute nitems - QByteArray buffer(ts.buffer()); - nitems = buffer.size() / sizeof(Atom); - m_supportedAtoms = new Atom[nitems + 1]; - Atom *a = (Atom *) buffer.data(); - uint i; - for (i = 0; i < nitems; i++) - m_supportedAtoms[i] = a[i]; - m_supportedAtoms[nitems] = 0; - - } - } - - void resolveXFixes(QXlibScreen *screen) - { -#ifndef QT_NO_XFIXES - // See if Xfixes is supported on the connected display - if (XQueryExtension(screen->display(), "XFIXES", &xfixes_major, - &xfixes_eventbase, &xfixes_errorbase)) { - ptrXFixesQueryExtension = XFIXES_LOAD_V1(XFixesQueryExtension); - ptrXFixesQueryVersion = XFIXES_LOAD_V1(XFixesQueryVersion); - ptrXFixesSetCursorName = XFIXES_LOAD_V2(XFixesSetCursorName); - ptrXFixesSelectSelectionInput = XFIXES_LOAD_V2(XFixesSelectSelectionInput); - - if(ptrXFixesQueryExtension && ptrXFixesQueryVersion - && ptrXFixesQueryExtension(screen->display(), &xfixes_eventbase, - &xfixes_errorbase)) { - // Xfixes is supported. - // Note: the XFixes protocol version is negotiated using QueryVersion. - // We supply the highest version we support, the X server replies with - // the highest version it supports, but no higher than the version we - // asked for. The version sent back is the protocol version the X server - // will use to talk us. If this call is removed, the behavior of the - // X server when it receives an XFixes request is undefined. - int major = 3; - int minor = 0; - ptrXFixesQueryVersion(screen->display(), &major, &minor); - use_xfixes = (major >= 1); - xfixes_major = major; - } - } -#endif // QT_NO_XFIXES - - } - - Atom *m_supportedAtoms; - Atom m_allAtoms[QXlibStatic::NAtoms]; - -#ifndef QT_NO_XFIXES - PtrXFixesQueryExtension ptrXFixesQueryExtension; - PtrXFixesQueryVersion ptrXFixesQueryVersion; - PtrXFixesSetCursorName ptrXFixesSetCursorName; - PtrXFixesSelectSelectionInput ptrXFixesSelectSelectionInput; -#endif - - bool use_xfixes; - int xfixes_major; - int xfixes_eventbase; - int xfixes_errorbase; - -}; -Q_GLOBAL_STATIC(QTestLiteStaticInfoPrivate, qTestLiteStaticInfoPrivate); - - -Atom QXlibStatic::atom(QXlibStatic::X11Atom atom) -{ - return qTestLiteStaticInfoPrivate()->atom(atom); -} - -bool QXlibStatic::isSupportedByWM(Atom atom) -{ - return qTestLiteStaticInfoPrivate()->isSupportedByWM(atom); -} - -bool QXlibStatic::useXFixes() -{ - return qTestLiteStaticInfoPrivate()->useXFixes(); -} - -int QXlibStatic::xFixesEventBase() -{ - return qTestLiteStaticInfoPrivate()->xFixesEventBase(); -} - -#ifndef QT_NO_XFIXES -PtrXFixesSelectSelectionInput QXlibStatic::xFixesSelectSelectionInput() -{ - qDebug() << qTestLiteStaticInfoPrivate()->useXFixes(); - if (!qTestLiteStaticInfoPrivate()->useXFixes()) - return 0; - - return qTestLiteStaticInfoPrivate()->xFixesSelectSelectionInput(); -} - -QImage QXlibStatic::qimageFromXImage(XImage *xi) -{ - return qTestLiteStaticInfoPrivate()->qimageFromXImage(xi); -} -#endif //QT_NO_XFIXES diff --git a/src/plugins/platforms/testlite/qtestlitestaticinfo.h b/src/plugins/platforms/testlite/qtestlitestaticinfo.h deleted file mode 100644 index 8473ee9..0000000 --- a/src/plugins/platforms/testlite/qtestlitestaticinfo.h +++ /dev/null @@ -1,413 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITESTATICINFO_H -#define QTESTLITESTATICINFO_H - -#include <QtCore/QTextStream> -#include <QtCore/QDataStream> -#include <QtCore/QMetaType> -#include <QtCore/QVariant> - -#if defined(_XLIB_H_) // crude hack, but... -#error "cannot include <X11/Xlib.h> before this file" -#endif -#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback -#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback -#define XSetIMValues qt_XSetIMValues -#include <X11/Xlib.h> -#undef XRegisterIMInstantiateCallback -#undef XUnregisterIMInstantiateCallback -#undef XSetIMValues - -#include <X11/Xutil.h> -#include <X11/Xos.h> -#ifdef index -# undef index -#endif -#ifdef rindex -# undef rindex -#endif -#ifdef Q_OS_VXWORS -# ifdef open -# undef open -# endif -# ifdef getpid -# undef getpid -# endif -#endif // Q_OS_VXWORKS -#include <X11/Xatom.h> - -//#define QT_NO_SHAPE -#ifdef QT_NO_SHAPE -# define XShapeCombineRegion(a,b,c,d,e,f,g) -# define XShapeCombineMask(a,b,c,d,e,f,g) -#else -# include <X11/extensions/shape.h> -#endif // QT_NO_SHAPE - - -#if !defined (QT_NO_TABLET) -# include <X11/extensions/XInput.h> -#if defined (Q_OS_IRIX) -# include <X11/extensions/SGIMisc.h> -# include <wacom.h> -#endif -#endif // QT_NO_TABLET - - -// #define QT_NO_XINERAMA -#ifndef QT_NO_XINERAMA -// XFree86 does not C++ify Xinerama (at least up to XFree86 4.0.3). -extern "C" { -# include <X11/extensions/Xinerama.h> -} -#endif // QT_NO_XINERAMA - -// #define QT_NO_XRANDR -#ifndef QT_NO_XRANDR -# include <X11/extensions/Xrandr.h> -#endif // QT_NO_XRANDR - -// #define QT_NO_XRENDER -#ifndef QT_NO_XRENDER -# include <X11/extensions/Xrender.h> -#endif // QT_NO_XRENDER - -#ifndef QT_NO_XSYNC -extern "C" { -# include "X11/extensions/sync.h" -} -#endif - -// #define QT_NO_XKB -#ifndef QT_NO_XKB -# include <X11/XKBlib.h> -#endif // QT_NO_XKB - - -#if !defined(XlibSpecificationRelease) -# define X11R4 -typedef char *XPointer; -#else -# undef X11R4 -#endif - -#ifndef QT_NO_XFIXES -typedef Bool (*PtrXFixesQueryExtension)(Display *, int *, int *); -typedef Status (*PtrXFixesQueryVersion)(Display *, int *, int *); -typedef void (*PtrXFixesSetCursorName)(Display *dpy, Cursor cursor, const char *name); -typedef void (*PtrXFixesSelectSelectionInput)(Display *dpy, Window win, Atom selection, unsigned long eventMask); -#endif // QT_NO_XFIXES - -#ifndef QT_NO_XCURSOR -#include <X11/Xcursor/Xcursor.h> -typedef Cursor (*PtrXcursorLibraryLoadCursor)(Display *, const char *); -#endif // QT_NO_XCURSOR - -#ifndef QT_NO_XINERAMA -typedef Bool (*PtrXineramaQueryExtension)(Display *dpy, int *event_base, int *error_base); -typedef Bool (*PtrXineramaIsActive)(Display *dpy); -typedef XineramaScreenInfo *(*PtrXineramaQueryScreens)(Display *dpy, int *number); -#endif // QT_NO_XINERAMA - -#ifndef QT_NO_XRANDR -typedef void (*PtrXRRSelectInput)(Display *, Window, int); -typedef int (*PtrXRRUpdateConfiguration)(XEvent *); -typedef int (*PtrXRRRootToScreen)(Display *, Window); -typedef Bool (*PtrXRRQueryExtension)(Display *, int *, int *); -#endif // QT_NO_XRANDR - -#ifndef QT_NO_XINPUT -typedef int (*PtrXCloseDevice)(Display *, XDevice *); -typedef XDeviceInfo* (*PtrXListInputDevices)(Display *, int *); -typedef XDevice* (*PtrXOpenDevice)(Display *, XID); -typedef void (*PtrXFreeDeviceList)(XDeviceInfo *); -typedef int (*PtrXSelectExtensionEvent)(Display *, Window, XEventClass *, int); -#endif // QT_NO_XINPUT - -/* - * Solaris patch 108652-47 and higher fixes crases in - * XRegisterIMInstantiateCallback, but the function doesn't seem to - * work. - * - * Instead, we disabled R6 input, and open the input method - * immediately at application start. - */ - -//######### XFree86 has wrong declarations for XRegisterIMInstantiateCallback -//######### and XUnregisterIMInstantiateCallback in at least version 3.3.2. -//######### Many old X11R6 header files lack XSetIMValues. -//######### Therefore, we have to declare these functions ourselves. - -extern "C" Bool XRegisterIMInstantiateCallback( - Display*, - struct _XrmHashBucketRec*, - char*, - char*, - XIMProc, //XFree86 has XIDProc, which has to be wrong - XPointer -); - -extern "C" Bool XUnregisterIMInstantiateCallback( - Display*, - struct _XrmHashBucketRec*, - char*, - char*, - XIMProc, //XFree86 has XIDProc, which has to be wrong - XPointer -); - -#ifndef X11R4 -# include <X11/Xlocale.h> -#endif // X11R4 - - -#ifndef QT_NO_MITSHM -# include <X11/extensions/XShm.h> -#endif // QT_NO_MITSHM - -// rename a couple of X defines to get rid of name clashes -// resolve the conflict between X11's FocusIn and QEvent::FocusIn -enum { - XFocusOut = FocusOut, - XFocusIn = FocusIn, - XKeyPress = KeyPress, - XKeyRelease = KeyRelease, - XNone = None, - XRevertToParent = RevertToParent, - XGrayScale = GrayScale, - XCursorShape = CursorShape -}; -#undef FocusOut -#undef FocusIn -#undef KeyPress -#undef KeyRelease -#undef None -#undef RevertToParent -#undef GrayScale -#undef CursorShape - -#ifdef FontChange -#undef FontChange -#endif - - -class QXlibStatic -{ -public: - enum X11Atom { - // window-manager <-> client protocols - WM_PROTOCOLS, - WM_DELETE_WINDOW, - WM_TAKE_FOCUS, - _NET_WM_PING, - _NET_WM_CONTEXT_HELP, - _NET_WM_SYNC_REQUEST, - _NET_WM_SYNC_REQUEST_COUNTER, - - // ICCCM window state - WM_STATE, - WM_CHANGE_STATE, - - // Session management - WM_CLIENT_LEADER, - WM_WINDOW_ROLE, - SM_CLIENT_ID, - - // Clipboard - CLIPBOARD, - INCR, - TARGETS, - MULTIPLE, - TIMESTAMP, - SAVE_TARGETS, - CLIP_TEMPORARY, - _QT_SELECTION, - _QT_CLIPBOARD_SENTINEL, - _QT_SELECTION_SENTINEL, - CLIPBOARD_MANAGER, - - RESOURCE_MANAGER, - - _XSETROOT_ID, - - _QT_SCROLL_DONE, - _QT_INPUT_ENCODING, - - _MOTIF_WM_HINTS, - - DTWM_IS_RUNNING, - ENLIGHTENMENT_DESKTOP, - _DT_SAVE_MODE, - _SGI_DESKS_MANAGER, - - // EWMH (aka NETWM) - _NET_SUPPORTED, - _NET_VIRTUAL_ROOTS, - _NET_WORKAREA, - - _NET_MOVERESIZE_WINDOW, - _NET_WM_MOVERESIZE, - - _NET_WM_NAME, - _NET_WM_ICON_NAME, - _NET_WM_ICON, - - _NET_WM_PID, - - _NET_WM_WINDOW_OPACITY, - - _NET_WM_STATE, - _NET_WM_STATE_ABOVE, - _NET_WM_STATE_BELOW, - _NET_WM_STATE_FULLSCREEN, - _NET_WM_STATE_MAXIMIZED_HORZ, - _NET_WM_STATE_MAXIMIZED_VERT, - _NET_WM_STATE_MODAL, - _NET_WM_STATE_STAYS_ON_TOP, - _NET_WM_STATE_DEMANDS_ATTENTION, - - _NET_WM_USER_TIME, - _NET_WM_USER_TIME_WINDOW, - _NET_WM_FULL_PLACEMENT, - - _NET_WM_WINDOW_TYPE, - _NET_WM_WINDOW_TYPE_DESKTOP, - _NET_WM_WINDOW_TYPE_DOCK, - _NET_WM_WINDOW_TYPE_TOOLBAR, - _NET_WM_WINDOW_TYPE_MENU, - _NET_WM_WINDOW_TYPE_UTILITY, - _NET_WM_WINDOW_TYPE_SPLASH, - _NET_WM_WINDOW_TYPE_DIALOG, - _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, - _NET_WM_WINDOW_TYPE_POPUP_MENU, - _NET_WM_WINDOW_TYPE_TOOLTIP, - _NET_WM_WINDOW_TYPE_NOTIFICATION, - _NET_WM_WINDOW_TYPE_COMBO, - _NET_WM_WINDOW_TYPE_DND, - _NET_WM_WINDOW_TYPE_NORMAL, - _KDE_NET_WM_WINDOW_TYPE_OVERRIDE, - - _KDE_NET_WM_FRAME_STRUT, - - _NET_STARTUP_INFO, - _NET_STARTUP_INFO_BEGIN, - - _NET_SUPPORTING_WM_CHECK, - - _NET_WM_CM_S0, - - _NET_SYSTEM_TRAY_VISUAL, - - _NET_ACTIVE_WINDOW, - - // Property formats - COMPOUND_TEXT, - TEXT, - UTF8_STRING, - - // Xdnd - XdndEnter, - XdndPosition, - XdndStatus, - XdndLeave, - XdndDrop, - XdndFinished, - XdndTypelist, - XdndActionList, - - XdndSelection, - - XdndAware, - XdndProxy, - - XdndActionCopy, - XdndActionLink, - XdndActionMove, - XdndActionPrivate, - - // Motif DND - _MOTIF_DRAG_AND_DROP_MESSAGE, - _MOTIF_DRAG_INITIATOR_INFO, - _MOTIF_DRAG_RECEIVER_INFO, - _MOTIF_DRAG_WINDOW, - _MOTIF_DRAG_TARGETS, - - XmTRANSFER_SUCCESS, - XmTRANSFER_FAILURE, - - // Xkb - _XKB_RULES_NAMES, - - // XEMBED - _XEMBED, - _XEMBED_INFO, - - XWacomStylus, - XWacomCursor, - XWacomEraser, - - XTabletStylus, - XTabletEraser, - - NPredefinedAtoms, - - _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, - NAtoms - }; - - static Atom atom(X11Atom atom); - static bool isSupportedByWM(Atom atom); - - static bool useXFixes(); - static int xFixesEventBase(); - - #ifndef QT_NO_XFIXES - static PtrXFixesSelectSelectionInput xFixesSelectSelectionInput(); - #endif //QT_NO_XFIXES - - static QImage qimageFromXImage(XImage *xi); - - -}; - -#endif // QTESTLITESTATICINFO_H diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp deleted file mode 100644 index 0f11a81..0000000 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ /dev/null @@ -1,735 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitewindow.h" - -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" - -#include <QtGui/QWindowSystemInterface> -#include <QSocketNotifier> -#include <QApplication> -#include <QDebug> - -#include <QtGui/private/qwindowsurface_p.h> -#include <QtGui/private/qapplication_p.h> - -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) -#include "qglxintegration.h" -#else -#include "../eglconvenience/qeglconvenience.h" -#include "../eglconvenience/qeglplatformcontext.h" -#include "qtestliteeglintegration.h" -#endif //QT_OPENGL_ES_2 -#endif //QT_NO_OPENGL - -//#define MYX11_DEBUG - -QT_BEGIN_NAMESPACE - -QXlibWindow::QXlibWindow(QWidget *window) - : QPlatformWindow(window) - , mGLContext(0) - , mScreen(QXlibScreen::testLiteScreenForWidget(window)) -{ - int x = window->x(); - int y = window->y(); - int w = window->width(); - int h = window->height(); - - if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL - && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); -#else - QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); - - EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); - EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); - VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); - - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = id; - - XVisualInfo *visualInfo; - int matchingCount = 0; - visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); -#endif //!defined(QT_OPENGL_ES_2) - if (visualInfo) { - Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); - - XSetWindowAttributes a; - a.colormap = cmap; - x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, - 0, visualInfo->depth, InputOutput, visualInfo->visual, - CWColormap, &a); - } else { - qFatal("no window!"); - } -#endif //!defined(QT_NO_OPENGL) - } else { - x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - mScreen->blackPixel(), mScreen->whitePixel()); - } - -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; -#endif - - XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); - - XSelectInput(mScreen->display(), x_window, - ExposureMask | KeyPressMask | KeyReleaseMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask | - PointerMotionMask | ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | PropertyChangeMask | - StructureNotifyMask); - - gc = createGC(); - - Atom protocols[5]; - int n = 0; - protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); // support del window protocol - protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_TAKE_FOCUS); // support take focus window protocol - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_PING); // support _NET_WM_PING protocol -#ifndef QT_NO_XSYNC - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol -#endif // QT_NO_XSYNC - if (window->windowFlags() & Qt::WindowContextHelpButtonHint) - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); - XSetWMProtocols(mScreen->display(), x_window, protocols, n); -} - - - -QXlibWindow::~QXlibWindow() -{ -#ifdef MYX11_DEBUG - qDebug() << "~QTestLiteWindow" << hex << x_window; -#endif - delete mGLContext; - XFreeGC(mScreen->display(), gc); - XDestroyWindow(mScreen->display(), x_window); -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Mouse event stuff -static Qt::MouseButtons translateMouseButtons(int s) -{ - Qt::MouseButtons ret = 0; - if (s & Button1Mask) - ret |= Qt::LeftButton; - if (s & Button2Mask) - ret |= Qt::MidButton; - if (s & Button3Mask) - ret |= Qt::RightButton; - return ret; -} - - - -void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) -{ - static QPoint mousePoint; - - Qt::MouseButton button = Qt::NoButton; - Qt::MouseButtons buttons = translateMouseButtons(e->state); - Qt::KeyboardModifiers modifiers = mScreen->keyboard()->translateModifiers(e->state); - if (type != QEvent::MouseMove) { - switch (e->button) { - case Button1: button = Qt::LeftButton; break; - case Button2: button = Qt::MidButton; break; - case Button3: button = Qt::RightButton; break; - case Button4: - case Button5: - case 6: - case 7: { - //mouse wheel - if (type == QEvent::MouseButtonPress) { - //logic borrowed from qapplication_x11.cpp - int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); - bool hor = (((e->button == Button4 || e->button == Button5) - && (modifiers & Qt::AltModifier)) - || (e->button == 6 || e->button == 7)); - QWindowSystemInterface::handleWheelEvent(widget(), e->time, - QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - delta, hor ? Qt::Horizontal : Qt::Vertical); - } - return; - } - default: break; - } - } - - buttons ^= button; // X event uses state *before*, Qt uses state *after* - - QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - buttons); - - mousePoint = QPoint(e->x_root, e->y_root); -} - -void QXlibWindow::handleCloseEvent() -{ - QWindowSystemInterface::handleCloseEvent(widget()); -} - - -void QXlibWindow::handleEnterEvent() -{ - QWindowSystemInterface::handleEnterEvent(widget()); -} - -void QXlibWindow::handleLeaveEvent() -{ - QWindowSystemInterface::handleLeaveEvent(widget()); -} - -void QXlibWindow::handleFocusInEvent() -{ - QWindowSystemInterface::handleWindowActivated(widget()); -} - -void QXlibWindow::handleFocusOutEvent() -{ - QWindowSystemInterface::handleWindowActivated(0); -} - - - -void QXlibWindow::setGeometry(const QRect &rect) -{ - XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); - QPlatformWindow::setGeometry(rect); -} - - -Qt::WindowFlags QXlibWindow::windowFlags() const -{ - return mWindowFlags; -} - -WId QXlibWindow::winId() const -{ - return x_window; -} - -void QXlibWindow::setParent(const QPlatformWindow *window) -{ - QPoint topLeft = geometry().topLeft(); - XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); -} - -void QXlibWindow::raise() -{ - XRaiseWindow(mScreen->display(), x_window); -} - -void QXlibWindow::lower() -{ - XLowerWindow(mScreen->display(), x_window); -} - -void QXlibWindow::setWindowTitle(const QString &title) -{ - QByteArray ba = title.toLatin1(); //We're not making a general solution here... - XTextProperty windowName; - windowName.value = (unsigned char *)ba.constData(); - windowName.encoding = XA_STRING; - windowName.format = 8; - windowName.nitems = ba.length(); - - XSetWMName(mScreen->display(), x_window, &windowName); -} - -GC QXlibWindow::createGC() -{ - GC gc; - - gc = XCreateGC(mScreen->display(), x_window, 0, 0); - if (gc < 0) { - qWarning("QTestLiteWindow::createGC() could not create GC"); - } - return gc; -} - -void QXlibWindow::paintEvent() -{ -#ifdef MYX11_DEBUG -// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; -#endif - - if (QWindowSurface *surface = widget()->windowSurface()) - surface->flush(widget(), widget()->geometry(), QPoint()); -} - -void QXlibWindow::requestActivateWindow() -{ - XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); -} - -void QXlibWindow::resizeEvent(XConfigureEvent *e) -{ - int xpos = geometry().x(); - int ypos = geometry().y(); - if ((e->width != geometry().width() || e->height != geometry().height()) && e->x == 0 && e->y == 0) { - //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; - } else { - //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; - xpos = e->x; - ypos = e->y; - } -#ifdef MYX11_DEBUG - qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; -#endif - - QRect newRect(xpos, ypos, e->width, e->height); - QWindowSystemInterface::handleGeometryChange(widget(), newRect); -} - -void QXlibWindow::mousePressEvent(XButtonEvent *e) -{ - static long prevTime = 0; - static Window prevWindow; - static int prevX = -999; - static int prevY = -999; - - QEvent::Type type = QEvent::MouseButtonPress; - - if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() - && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { - type = QEvent::MouseButtonDblClick; - prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time - } else { - prevTime = e->time; - } - prevWindow = e->window; - prevX = e->x; - prevY = e->y; - - handleMouseEvent(type, e); -} - -QXlibMWMHints QXlibWindow::getMWMHints() const -{ - QXlibMWMHints mwmhints; - - Atom type; - int format; - ulong nitems, bytesLeft; - uchar *data = 0; - Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); - if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, - atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, - &data) == Success) - && (type == atomForMotifWmHints - && format == 32 - && nitems >= 5)) { - mwmhints = *(reinterpret_cast<QXlibMWMHints *>(data)); - } else { - mwmhints.flags = 0L; - mwmhints.functions = MWM_FUNC_ALL; - mwmhints.decorations = MWM_DECOR_ALL; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - } - - if (data) - XFree(data); - - return mwmhints; -} - -void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) -{ - Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); - if (mwmhints.flags != 0l) { - XChangeProperty(mScreen->display(), x_window, - atomForMotifWmHints, atomForMotifWmHints, 32, - PropModeReplace, (unsigned char *) &mwmhints, 5); - } else { - XDeleteProperty(mScreen->display(), x_window, atomForMotifWmHints); - } -} - -// Returns true if we should set WM_TRANSIENT_FOR on \a w -static inline bool isTransient(const QWidget *w) -{ - return ((w->windowType() == Qt::Dialog - || w->windowType() == Qt::Sheet - || w->windowType() == Qt::Tool - || w->windowType() == Qt::SplashScreen - || w->windowType() == Qt::ToolTip - || w->windowType() == Qt::Drawer - || w->windowType() == Qt::Popup) - && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); -} - -QVector<Atom> QXlibWindow::getNetWmState() const -{ - QVector<Atom> returnValue; - - // Don't read anything, just get the size of the property data - Atom actualType; - int actualFormat; - ulong propertyLength; - ulong bytesLeft; - uchar *propertyData = 0; - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, - False, XA_ATOM, &actualType, &actualFormat, - &propertyLength, &bytesLeft, &propertyData) == Success - && actualType == XA_ATOM && actualFormat == 32) { - returnValue.resize(bytesLeft / 4); - XFree((char*) propertyData); - - // fetch all data - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, - returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, - &propertyLength, &bytesLeft, &propertyData) != Success) { - returnValue.clear(); - } else if (propertyLength != (ulong)returnValue.size()) { - returnValue.resize(propertyLength); - } - - // put it into netWmState - if (!returnValue.isEmpty()) { - memcpy(returnValue.data(), propertyData, returnValue.size() * sizeof(Atom)); - } - XFree((char*) propertyData); - } - - return returnValue; -} - -Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) -{ -// Q_ASSERT(flags & Qt::Window); - mWindowFlags = flags; - -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; -#endif - Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); - - if (type == Qt::ToolTip) - flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; - if (type == Qt::Popup) - flags |= Qt::X11BypassWindowManagerHint; - - bool topLevel = (flags & Qt::Window); - bool popup = (type == Qt::Popup); - bool dialog = (type == Qt::Dialog - || type == Qt::Sheet); - bool desktop = (type == Qt::Desktop); - bool tool = (type == Qt::Tool || type == Qt::SplashScreen - || type == Qt::ToolTip || type == Qt::Drawer); - - Q_UNUSED(topLevel); - Q_UNUSED(dialog); - Q_UNUSED(desktop); - - bool tooltip = (type == Qt::ToolTip); - - XSetWindowAttributes wsa; - - QXlibMWMHints mwmhints; - mwmhints.flags = 0L; - mwmhints.functions = 0L; - mwmhints.decorations = 0; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - - - ulong wsa_mask = 0; - if (type != Qt::SplashScreen) { // && customize) { - mwmhints.flags |= MWM_HINTS_DECORATIONS; - - bool customize = flags & Qt::CustomizeWindowHint; - if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { - mwmhints.decorations |= MWM_DECOR_BORDER; - mwmhints.decorations |= MWM_DECOR_RESIZEH; - - if (flags & Qt::WindowTitleHint) - mwmhints.decorations |= MWM_DECOR_TITLE; - - if (flags & Qt::WindowSystemMenuHint) - mwmhints.decorations |= MWM_DECOR_MENU; - - if (flags & Qt::WindowMinimizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MINIMIZE; - mwmhints.functions |= MWM_FUNC_MINIMIZE; - } - - if (flags & Qt::WindowMaximizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MAXIMIZE; - mwmhints.functions |= MWM_FUNC_MAXIMIZE; - } - - if (flags & Qt::WindowCloseButtonHint) - mwmhints.functions |= MWM_FUNC_CLOSE; - } - } else { - // if type == Qt::SplashScreen - mwmhints.decorations = MWM_DECOR_ALL; - } - - if (tool) { - wsa.save_under = True; - wsa_mask |= CWSaveUnder; - } - - if (flags & Qt::X11BypassWindowManagerHint) { - wsa.override_redirect = True; - wsa_mask |= CWOverrideRedirect; - } -#if 0 - if (wsa_mask && initializeWindow) { - Q_ASSERT(id); - XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); - } -#endif - if (mwmhints.functions != 0) { - mwmhints.flags |= MWM_HINTS_FUNCTIONS; - mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - } else { - mwmhints.functions = MWM_FUNC_ALL; - } - - if (!(flags & Qt::FramelessWindowHint) - && flags & Qt::CustomizeWindowHint - && flags & Qt::WindowTitleHint - && !(flags & - (Qt::WindowMinimizeButtonHint - | Qt::WindowMaximizeButtonHint - | Qt::WindowCloseButtonHint))) { - // a special case - only the titlebar without any button - mwmhints.flags = MWM_HINTS_FUNCTIONS; - mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - mwmhints.decorations = 0; - } - - if (widget()->windowModality() == Qt::WindowModal) { - mwmhints.input_mode = MWM_INPUT_PRIMARY_APPLICATION_MODAL; - } else if (widget()->windowModality() == Qt::ApplicationModal) { - mwmhints.input_mode = MWM_INPUT_FULL_APPLICATION_MODAL; - } - - setMWMHints(mwmhints); - - QVector<Atom> netWmState = getNetWmState(); - - if (flags & Qt::WindowStaysOnTopHint) { - if (flags & Qt::WindowStaysOnBottomHint) - qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE)); - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP)); - } else if (flags & Qt::WindowStaysOnBottomHint) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW)); - } - if (widget()->isFullScreen()) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN)); - } - if (widget()->isMaximized()) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT)); - } - if (widget()->windowModality() != Qt::NonModal) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL)); - } - - if (!netWmState.isEmpty()) { - XChangeProperty(mScreen->display(), x_window, - QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, - (unsigned char *) netWmState.data(), netWmState.size()); - } else { - XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); - } - -//##### only if initializeWindow??? - - if (popup || tooltip) { // popup widget -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; -#endif - // set EWMH window types - // setNetWmWindowTypes(); - - wsa.override_redirect = True; - wsa.save_under = True; - XChangeWindowAttributes(mScreen->display(), x_window, CWOverrideRedirect | CWSaveUnder, - &wsa); - } else { -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for non-popup"; -#endif - } - - return flags; -} - -void QXlibWindow::setVisible(bool visible) -{ -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; -#endif - if (isTransient(widget())) { - Window parentXWindow = x_window; - if (widget()->parentWidget()) { - QWidget *widgetParent = widget()->parentWidget()->window(); - if (widgetParent && widgetParent->platformWindow()) { - QXlibWindow *parentWidnow = static_cast<QXlibWindow *>(widgetParent->platformWindow()); - parentXWindow = parentWidnow->x_window; - } - } - XSetTransientForHint(mScreen->display(),x_window,parentXWindow); - } - - if (visible) { - //ensure that the window is viewed in correct position. - doSizeHints(); - XMapWindow(mScreen->display(), x_window); - } else { - XUnmapWindow(mScreen->display(), x_window); - } -} - -void QXlibWindow::setCursor(const Cursor &cursor) -{ - XDefineCursor(mScreen->display(), x_window, cursor); - XFlush(mScreen->display()); -} - -QPlatformGLContext *QXlibWindow::glContext() const -{ - if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) - return 0; - if (!mGLContext) { - QXlibWindow *that = const_cast<QXlibWindow *>(this); -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); -#else - EGLDisplay display = eglGetDisplay(mScreen->display()); - - QPlatformWindowFormat windowFormat = correctColorBuffers(widget()->platformWindowFormat()); - - EGLConfig config = q_configFromQPlatformWindowFormat(display,windowFormat); - QVector<EGLint> eglContextAttrs; - eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); - eglContextAttrs.append(2); - eglContextAttrs.append(EGL_NONE); - - EGLSurface eglSurface = eglCreateWindowSurface(display,config,(EGLNativeWindowType)x_window,0); - that->mGLContext = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); -#endif -#endif - } - return mGLContext; -} - -Window QXlibWindow::xWindow() const -{ - return x_window; -} - -GC QXlibWindow::graphicsContext() const -{ - return gc; -} - -void QXlibWindow::doSizeHints() -{ - Q_ASSERT(widget()->testAttribute(Qt::WA_WState_Created)); - XSizeHints s; - s.flags = 0; - QRect g = geometry(); - s.x = g.x(); - s.y = g.y(); - s.width = g.width(); - s.height = g.height(); - s.flags |= USPosition; - s.flags |= PPosition; - s.flags |= USSize; - s.flags |= PSize; - s.flags |= PWinGravity; - s.win_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity; - XSetWMNormalHints(mScreen->display(), x_window, &s); -} - -QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const -{ - // I have only tested this setup on a dodgy intel setup, where I didn't use standard libs, - // so this might be not what we want to do :) - if ( !(platformWindowFormat.redBufferSize() == -1 && - platformWindowFormat.greenBufferSize() == -1 && - platformWindowFormat.blueBufferSize() == -1)) - return platformWindowFormat; - - QPlatformWindowFormat windowFormat = platformWindowFormat; - if (mScreen->depth() == 16) { - windowFormat.setRedBufferSize(5); - windowFormat.setGreenBufferSize(6); - windowFormat.setBlueBufferSize(5); - } else { - windowFormat.setRedBufferSize(8); - windowFormat.setGreenBufferSize(8); - windowFormat.setBlueBufferSize(8); - } - - return windowFormat; -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h deleted file mode 100644 index ccf6867..0000000 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEWINDOW_H -#define QTESTLITEWINDOW_H - -#include "qtestliteintegration.h" - -#include <QPlatformWindow> -#include <QEvent> - -#include <QObject> -#include <QImage> - -struct QXlibMWMHints { - ulong flags, functions, decorations; - long input_mode; - ulong status; -}; - -enum { - MWM_HINTS_FUNCTIONS = (1L << 0), - - MWM_FUNC_ALL = (1L << 0), - MWM_FUNC_RESIZE = (1L << 1), - MWM_FUNC_MOVE = (1L << 2), - MWM_FUNC_MINIMIZE = (1L << 3), - MWM_FUNC_MAXIMIZE = (1L << 4), - MWM_FUNC_CLOSE = (1L << 5), - - MWM_HINTS_DECORATIONS = (1L << 1), - - MWM_DECOR_ALL = (1L << 0), - MWM_DECOR_BORDER = (1L << 1), - MWM_DECOR_RESIZEH = (1L << 2), - MWM_DECOR_TITLE = (1L << 3), - MWM_DECOR_MENU = (1L << 4), - MWM_DECOR_MINIMIZE = (1L << 5), - MWM_DECOR_MAXIMIZE = (1L << 6), - - MWM_HINTS_INPUT_MODE = (1L << 2), - - MWM_INPUT_MODELESS = 0L, - MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, - MWM_INPUT_FULL_APPLICATION_MODAL = 3L -}; - -class QXlibWindow : public QPlatformWindow -{ -public: - QXlibWindow(QWidget *window); - ~QXlibWindow(); - - - void mousePressEvent(XButtonEvent*); - void handleMouseEvent(QEvent::Type, XButtonEvent *ev); - - void handleCloseEvent(); - void handleEnterEvent(); - void handleLeaveEvent(); - void handleFocusInEvent(); - void handleFocusOutEvent(); - - void resizeEvent(XConfigureEvent *configure_event); - void paintEvent(); - - void requestActivateWindow(); - - void setGeometry(const QRect &rect); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - Qt::WindowFlags windowFlags() const; - void setVisible(bool visible); - WId winId() const; - void setParent(const QPlatformWindow *window); - void raise(); - void lower(); - void setWindowTitle(const QString &title); - - void setCursor(const Cursor &cursor); - - QPlatformGLContext *glContext() const; - - Window xWindow() const; - GC graphicsContext() const; - -protected: - QVector<Atom> getNetWmState() const; - void setMWMHints(const QXlibMWMHints &mwmhints); - QXlibMWMHints getMWMHints() const; - - void doSizeHints(); - -private: - QPlatformWindowFormat correctColorBuffers(const QPlatformWindowFormat &windowFormat)const; - - Window x_window; - GC gc; - - GC createGC(); - - QPlatformGLContext *mGLContext; - QXlibScreen *mScreen; - Qt::WindowFlags mWindowFlags; -}; - -#endif diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp deleted file mode 100644 index 088730d..0000000 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitewindowsurface.h" -#include "qtestliteintegration.h" - -#include <QtCore/qdebug.h> -#include <QWindowSystemInterface> - -#include "qtestlitewindow.h" -#include "qtestlitescreen.h" - -# include <sys/ipc.h> -# include <sys/shm.h> -# include <X11/extensions/XShm.h> - -QT_BEGIN_NAMESPACE - - -struct QXlibShmImageInfo { - QXlibShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~QXlibShmImageInfo() { destroy(); } - - void destroy(); - - XShmSegmentInfo shminfo; - XImage *image; - Display *display; -}; - - -#ifndef DONT_USE_MIT_SHM -void QXlibShmImageInfo::destroy() -{ - XShmDetach (display, &shminfo); - XDestroyImage (image); - shmdt (shminfo.shmaddr); - shmctl (shminfo.shmid, IPC_RMID, 0); -} -#endif - -void QXlibWindowSurface::resizeShmImage(int width, int height) -{ - -#ifdef DONT_USE_MIT_SHM - shm_img = QImage(width, height, QImage::Format_RGB32); -#else - - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window()); - if (image_info) - image_info->destroy(); - else - image_info = new QXlibShmImageInfo(screen->display()); - - Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); - - - XImage *image = XShmCreateImage (screen->display(), visual, 24, ZPixmap, 0, - &image_info->shminfo, width, height); - - - image_info->shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); - - image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); - image_info->shminfo.readOnly = False; - - image_info->image = image; - - Status shm_attach_status = XShmAttach(screen->display(), &image_info->shminfo); - - Q_ASSERT(shm_attach_status == True); - - shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); -#endif - painted = false; -} - - -void QXlibWindowSurface::resizeBuffer(QSize s) -{ - if (shm_img.size() != s) - resizeShmImage(s.width(), s.height()); -} - -QSize QXlibWindowSurface::bufferSize() const -{ - return shm_img.size(); -} - -QXlibWindowSurface::QXlibWindowSurface (QWidget *window) - : QWindowSurface(window), - painted(false), image_info(0) -{ - xw = static_cast<QXlibWindow*>(window->platformWindow()); -// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; -} - -QXlibWindowSurface::~QXlibWindowSurface() -{ - delete image_info; -} - -QPaintDevice *QXlibWindowSurface::paintDevice() -{ - return &shm_img; -} - - -void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - if (!painted) - return; - - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); - GC gc = xw->graphicsContext(); - Window window = xw->xWindow(); -#ifdef DONT_USE_MIT_SHM - // just convert the image every time... - if (!shm_img.isNull()) { - Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); - - QImage image = shm_img; - //img.convertToFormat( - XImage *xi = XCreateImage(screen->display(), visual, 24, ZPixmap, - 0, (char *) image.scanLine(0), image.width(), image.height(), - 32, image.bytesPerLine()); - - int x = 0; - int y = 0; - - /*int r =*/ XPutImage(screen->display(), window, gc, xi, 0, 0, x, y, image.width(), image.height()); - - xi->data = 0; // QImage owns these bits - XDestroyImage(xi); - } -#else - // Use MIT_SHM - if (image_info && image_info->image) { - //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; - int x = 0; - int y = 0; - - // We could set send_event to true, and then use the ShmCompletion to synchronize, - // but let's do like Qt/11 and just use XSync - XShmPutImage (screen->display(), window, gc, image_info->image, 0, 0, - x, y, image_info->image->width, image_info->image->height, - /*send_event*/ False); - - XSync(screen->display(), False); - } -#endif -} - -// from qwindowsurface.cpp -extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); - -bool QXlibWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - if (shm_img.isNull()) - return false; - - const QVector<QRect> rects = area.rects(); - for (int i = 0; i < rects.size(); ++i) - qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); - - return true; -} - - -void QXlibWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - resizeBuffer(size()); -} - -void QXlibWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - painted = true; //there is content in the buffer -} -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.h b/src/plugins/platforms/testlite/qtestlitewindowsurface.h deleted file mode 100644 index 12b4c60..0000000 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_TESTLITE_H -#define QWINDOWSURFACE_TESTLITE_H - -#include <QtGui/private/qwindowsurface_p.h> - - -QT_BEGIN_NAMESPACE - -class QXlibWindow; -class QXlibIntegration; -class QXlibScreen; -class QXlibShmImageInfo; - -class QXlibWindowSurface : public QWindowSurface -{ -public: - QXlibWindowSurface (QWidget *window); - ~QXlibWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - bool painted; - void resizeBuffer(QSize); - QSize bufferSize() const; - - - void resizeShmImage(int width, int height); - - QImage shm_img; - QXlibShmImageInfo *image_info; - - QXlibWindow *xw; - -}; - - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro deleted file mode 100644 index 7fb3304..0000000 --- a/src/plugins/platforms/testlite/testlite.pro +++ /dev/null @@ -1,57 +0,0 @@ -TARGET = qtestlite - -include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms - -SOURCES = \ - main.cpp \ - qtestliteintegration.cpp \ - qtestlitewindowsurface.cpp \ - qtestlitewindow.cpp \ - qtestlitecursor.cpp \ - qtestlitescreen.cpp \ - qtestlitekeyboard.cpp \ - qtestliteclipboard.cpp \ - qtestlitemime.cpp \ - qtestlitestaticinfo.cpp - -HEADERS = \ - qtestliteintegration.h \ - qtestlitewindowsurface.h \ - qtestlitewindow.h \ - qtestlitecursor.h \ - qtestlitescreen.h \ - qtestlitekeyboard.h \ - qtestliteclipboard.h \ - qtestlitemime.h \ - qtestlitestaticinfo.h - -LIBS += -lX11 -lXext - -mac { - LIBS += -L/usr/X11/lib -lz -framework Carbon -} - -include (../fontdatabases/genericunix/genericunix.pri) - -contains(QT_CONFIG, opengl) { - QT += opengl - !contains(QT_CONFIG, opengles2) { - HEADERS += qglxintegration.h - SOURCES += qglxintegration.cpp - } else { # There is no easy way to detect if we'r suppose to use glx or not - HEADERS += \ - ../eglconvenience/qeglplatformcontext.h \ - ../eglconvenience/qeglconvenience.h \ - qtestliteeglintegration.h - - SOURCES += \ - ../eglconvenience/qeglplatformcontext.cpp \ - ../eglconvenience/qeglconvenience.cpp \ - qtestliteeglintegration.cpp - LIBS += -lEGL - } -} - -target.path += $$[QT_INSTALL_PLUGINS]/platforms -INSTALLS += target diff --git a/src/plugins/platforms/xlib/main.cpp b/src/plugins/platforms/xlib/main.cpp new file mode 100644 index 0000000..131d399 --- /dev/null +++ b/src/plugins/platforms/xlib/main.cpp @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QPlatformIntegrationPlugin> +#include "qtestliteintegration.h" + +QT_BEGIN_NAMESPACE + +class QXlibIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&, const QStringList&); +}; + +QStringList QXlibIntegrationPlugin::keys() const +{ + QStringList list; + list << "Xlib"; +#ifndef QT_NO_OPENGL + list << "XlibGL"; +#endif + return list; +} + +QPlatformIntegration* QXlibIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.toLower() == "xlib") + return new QXlibIntegration; +#ifndef QT_NO_OPENGL + if (system.toLower() == "xlibgl") + return new QXlibIntegration(true); +#endif + + return 0; +} + +Q_EXPORT_PLUGIN2(xlib, QXlibIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qglxintegration.cpp b/src/plugins/platforms/xlib/qglxintegration.cpp new file mode 100644 index 0000000..46dfef9 --- /dev/null +++ b/src/plugins/platforms/xlib/qglxintegration.cpp @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QDebug> +#include <QLibrary> +#include <QGLFormat> + +#include "qtestlitewindow.h" +#include "qtestlitescreen.h" + +#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <GL/glx.h> + +#include "qglxintegration.h" + +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#include <dlfcn.h> +#endif + +QT_BEGIN_NAMESPACE + +QMutex QGLXContext::m_defaultSharedContextMutex(QMutex::Recursive); + +QVector<int> QGLXContext::buildSpec(const QPlatformWindowFormat &format) +{ + QVector<int> spec(48); + int i = 0; + + spec[i++] = GLX_LEVEL; + spec[i++] = 0; + spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; + + if (format.rgba()) { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); + spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); + spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); + if (format.alpha()) { + spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize(); + } + + spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + + if (format.alpha()) { + spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + } + + } else { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works.... + spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8; + } + + spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; + spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; + + if (format.depth()) { + spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); + } + + if (format.stencil()) { + spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); + } + if (format.sampleBuffers()) { + spec[i++] = GLX_SAMPLE_BUFFERS_ARB; + spec[i++] = 1; + spec[i++] = GLX_SAMPLES_ARB; + spec[i++] = format.samples() == -1 ? 4 : format.samples(); + } + + spec[i++] = XNone; + return spec; +} + +GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWindowFormat &format) +{ + bool reduced = true; + GLXFBConfig chosenConfig = 0; + QPlatformWindowFormat reducedFormat = format; + while (!chosenConfig && reduced) { + QVector<int> spec = buildSpec(reducedFormat); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(screen->display(),screen->xScreenNumber(),spec.constData(),&confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (reducedFormat.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(screen->display(),configs[i],GLX_ALPHA_SIZE,&alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } + } + + XFree(configs); + } + reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced); + } + + if (!chosenConfig) + qWarning("Warning no context created"); + + return chosenConfig; +} + +XVisualInfo *QGLXContext::findVisualInfo(const QXlibScreen *screen, const QPlatformWindowFormat &format) +{ + GLXFBConfig config = QGLXContext::findConfig(screen,format); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); + return visualInfo; +} + +QPlatformWindowFormat QGLXContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx) +{ + QPlatformWindowFormat format; + int redSize = 0; + int greenSize = 0; + int blueSize = 0; + int alphaSize = 0; + int depthSize = 0; + int stencilSize = 0; + int sampleBuffers = 0; + int sampleCount = 0; + int level = 0; + int rgba = 0; + int stereo = 0; + int accumSizeA = 0; + int accumSizeR = 0; + int accumSizeG = 0; + int accumSizeB = 0; + + XVisualInfo *vi = glXGetVisualFromFBConfig(display,config); + glXGetConfig(display,vi,GLX_RGBA,&rgba); + XFree(vi); + glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); + glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); + glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); + glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); + glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); + glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); + glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers); + glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); + glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_GREEN_SIZE, &accumSizeG); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_BLUE_SIZE, &accumSizeB); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSampleBuffers(sampleBuffers); + if (format.sampleBuffers()) { + glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); + format.setSamples(sampleCount); + } + + format.setDirectRendering(glXIsDirect(display, ctx)); + format.setRgba(rgba); + format.setStereo(stereo); + format.setAccumBufferSize(accumSizeB); + + return format; +} + +QPlatformWindowFormat QGLXContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced) +{ + QPlatformWindowFormat retFormat = format; + *reduced = true; + + if (retFormat.sampleBuffers()) { + retFormat.setSampleBuffers(false); + } else if (retFormat.stereo()) { + retFormat.setStereo(false); + } else if (retFormat.accum()) { + retFormat.setAccum(false); + }else if (retFormat.stencil()) { + retFormat.setStencil(false); + }else if (retFormat.alpha()) { + retFormat.setAlpha(false); + }else if (retFormat.depth()) { + retFormat.setDepth(false); + }else if (retFormat.doubleBuffer()) { + retFormat.setDoubleBuffer(false); + }else{ + *reduced = false; + } + return retFormat; +} + +QGLXContext::QGLXContext(Window window, QXlibScreen *screen, const QPlatformWindowFormat &format) + : QPlatformGLContext() + , m_screen(screen) + , m_drawable((Drawable)window) + , m_context(0) +{ + + const QPlatformGLContext *sharePlatformContext; + if (format.useDefaultSharedContext()) { + if (!QPlatformGLContext::defaultSharedContext()) { + if (m_defaultSharedContextMutex.tryLock()){ + createDefaultSharedContex(screen); + m_defaultSharedContextMutex.unlock(); + } else { + m_defaultSharedContextMutex.lock(); //wait to the the shared context is created + m_defaultSharedContextMutex.unlock(); + } + } + sharePlatformContext = QPlatformGLContext::defaultSharedContext(); + } else { + sharePlatformContext = format.sharedGLContext(); + } + GLXContext shareGlxContext = 0; + if (sharePlatformContext) + shareGlxContext = static_cast<const QGLXContext*>(sharePlatformContext)->glxContext(); + + GLXFBConfig config = findConfig(screen,format); + m_context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + m_windowFormat = QGLXContext::platformWindowFromGLXFBConfig(screen->display(),config,m_context); + +#ifdef MYX11_DEBUG + qDebug() << "QGLXGLContext::create context" << m_context; +#endif +} + +QGLXContext::QGLXContext(QXlibScreen *screen, Drawable drawable, GLXContext context) + : QPlatformGLContext(), m_screen(screen), m_drawable(drawable), m_context(context) +{ + +} + +QGLXContext::~QGLXContext() +{ + if (m_context) { + qDebug("Destroying GLX context 0x%p", m_context); + glXDestroyContext(m_screen->display(), m_context); + } +} + +void QGLXContext::createDefaultSharedContex(QXlibScreen *screen) +{ + int x = 0; + int y = 0; + int w = 3; + int h = 3; + + QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXContext context; + GLXFBConfig config = findConfig(screen,format); + if (config) { + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); + Colormap cmap = XCreateColormap(screen->display(),screen->rootWindow(),visualInfo->visual,AllocNone); + XSetWindowAttributes a; + a.colormap = cmap; + Window sharedWindow = XCreateWindow(screen->display(), screen->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + + context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,0,TRUE); + QPlatformGLContext *sharedContext = new QGLXContext(screen,sharedWindow,context); + QPlatformGLContext::setDefaultSharedContext(sharedContext); + } else { + qWarning("Warning no shared context created"); + } +} + +void QGLXContext::makeCurrent() +{ + QPlatformGLContext::makeCurrent(); +#ifdef MYX11_DEBUG + qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context); +#endif + glXMakeCurrent(m_screen->display(), m_drawable, m_context); +} + +void QGLXContext::doneCurrent() +{ + QPlatformGLContext::doneCurrent(); + glXMakeCurrent(m_screen->display(), 0, 0); +} + +void QGLXContext::swapBuffers() +{ + glXSwapBuffers(m_screen->display(), m_drawable); +} + +void* QGLXContext::getProcAddress(const QString& procName) +{ + typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); + static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; + static bool resolved = false; + + if (resolved && !glXGetProcAddressARB) + return 0; + if (!glXGetProcAddressARB) { + QList<QByteArray> glxExt = QByteArray(glXGetClientString(m_screen->display(), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) + void *handle = dlopen(NULL, RTLD_LAZY); + if (handle) { + glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); + dlclose(handle); + } + if (!glXGetProcAddressARB) +#endif + { + extern const QString qt_gl_library_name(); +// QLibrary lib(qt_gl_library_name()); + QLibrary lib(QLatin1String("GL")); + glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); + } + } + resolved = true; + } + if (!glXGetProcAddressARB) + return 0; + return glXGetProcAddressARB(reinterpret_cast<const GLubyte *>(procName.toLatin1().data())); +} + +QPlatformWindowFormat QGLXContext::platformWindowFormat() const +{ + return m_windowFormat; +} + +QT_END_NAMESPACE + +#endif //!defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) diff --git a/src/plugins/platforms/xlib/qglxintegration.h b/src/plugins/platforms/xlib/qglxintegration.h new file mode 100644 index 0000000..f982708 --- /dev/null +++ b/src/plugins/platforms/xlib/qglxintegration.h @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef Q_GLX_CONTEXT_H +#define Q_GLX_CONTEXT_H + +#include "qtestlitewindow.h" + +#include <QtGui/QPlatformGLContext> +#include <QtGui/QPlatformWindowFormat> + +#include <QtCore/QMutex> + +#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) +#include <GL/glx.h> + +QT_BEGIN_NAMESPACE + +class QGLXContext : public QPlatformGLContext +{ +public: + QGLXContext(Window window, QXlibScreen *xd, const QPlatformWindowFormat &format); + ~QGLXContext(); + + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers(); + virtual void* getProcAddress(const QString& procName); + + GLXContext glxContext() const {return m_context;} + + QPlatformWindowFormat platformWindowFormat() const; + + static XVisualInfo *findVisualInfo(const QXlibScreen *xd, const QPlatformWindowFormat &format); +private: + static GLXFBConfig findConfig(const QXlibScreen *xd,const QPlatformWindowFormat &format); + static QVector<int> buildSpec(const QPlatformWindowFormat &format); + static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); + + + QXlibScreen *m_screen; + Drawable m_drawable; + GLXContext m_context; + QPlatformWindowFormat m_windowFormat; + + QGLXContext (QXlibScreen *screen, Drawable drawable, GLXContext context); + static QMutex m_defaultSharedContextMutex; + static void createDefaultSharedContex(QXlibScreen *xd); +}; + +QT_END_NAMESPACE + +#endif //!defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) + +#endif diff --git a/src/plugins/platforms/xlib/qtestliteclipboard.cpp b/src/plugins/platforms/xlib/qtestliteclipboard.cpp new file mode 100644 index 0000000..1264b5a --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteclipboard.cpp @@ -0,0 +1,676 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteclipboard.h" + +#include "qtestlitescreen.h" +#include "qtestlitemime.h" + +#include <private/qapplication_p.h> + +#include <QtCore/QDebug> + +class QXlibClipboardMime : public QXlibMime +{ + Q_OBJECT +public: + QXlibClipboardMime(QClipboard::Mode mode, QXlibClipboard *clipboard) + : QXlibMime() + , m_clipboard(clipboard) + { + switch (mode) { + case QClipboard::Selection: + modeAtom = XA_PRIMARY; + break; + + case QClipboard::Clipboard: + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + break; + + default: + qWarning("QTestLiteMime: Internal error: Unsupported clipboard mode"); + break; + } + } + +protected: + QStringList formats_sys() const + { + if (empty()) + return QStringList(); + + if (!formatList.count()) { + QXlibClipboardMime *that = const_cast<QXlibClipboardMime *>(this); + // get the list of targets from the current clipboard owner - we do this + // once so that multiple calls to this function don't require multiple + // server round trips... + that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QXlibStatic::atom(QXlibStatic::TARGETS)); + + if (format_atoms.size() > 0) { + Atom *targets = (Atom *) format_atoms.data(); + int size = format_atoms.size() / sizeof(Atom); + + for (int i = 0; i < size; ++i) { + if (targets[i] == 0) + continue; + + QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display(),targets[i]); + for (int j = 0; j < formatsForAtom.size(); ++j) { + if (!formatList.contains(formatsForAtom.at(j))) + that->formatList.append(formatsForAtom.at(j)); + } + } + } + } + + return formatList; + } + + bool hasFormat_sys(const QString &format) const + { + QStringList list = formats(); + return list.contains(format); + } + + QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const + { + if (fmt.isEmpty() || empty()) + return QByteArray(); + + (void)formats(); // trigger update of format list + + QList<Atom> atoms; + Atom *targets = (Atom *) format_atoms.data(); + int size = format_atoms.size() / sizeof(Atom); + for (int i = 0; i < size; ++i) + atoms.append(targets[i]); + + QByteArray encoding; + Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display(),fmt, requestedType, atoms, &encoding); + + if (fmtatom == 0) + return QVariant(); + + return mimeConvertToFormat(m_clipboard->screen()->display(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); + } +private: + bool empty() const + { + Window win = XGetSelectionOwner(m_clipboard->screen()->display(), modeAtom); + + return win == XNone; + } + + + Atom modeAtom; + QXlibClipboard *m_clipboard; + QStringList formatList; + QByteArray format_atoms; +}; + +const int QXlibClipboard::clipboard_timeout = 5000; + +QXlibClipboard::QXlibClipboard(QXlibScreen *screen) + : QPlatformClipboard() + , m_screen(screen) + , m_xClipboard(0) + , m_clientClipboard(0) + , m_xSelection(0) + , m_clientSelection(0) + , m_requestor(XNone) + , m_owner(XNone) +{ +} + +const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const +{ + if (mode == QClipboard::Clipboard) { + if (!m_xClipboard) { + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + that->m_xClipboard = new QXlibClipboardMime(mode,that); + } + Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); + if (clipboardOwner == owner()) { + return m_clientClipboard; + } else { + return m_xClipboard; + } + } else if (mode == QClipboard::Selection) { + if (!m_xSelection) { + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + that->m_xSelection = new QXlibClipboardMime(mode,that); + } + Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); + if (clipboardOwner == owner()) { + return m_clientSelection; + } else { + return m_xSelection; + } + } + return 0; +} + +void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) +{ + Atom modeAtom; + QMimeData **d; + switch (mode) { + case QClipboard::Selection: + modeAtom = XA_PRIMARY; + d = &m_clientSelection; + break; + + case QClipboard::Clipboard: + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + d = &m_clientClipboard; + break; + + default: + qWarning("QClipboard::setMimeData: unsupported mode '%d'", mode); + return; + } + + Window newOwner; + + if (! data) { // no data, clear clipboard contents + newOwner = XNone; + } else { + newOwner = owner(); + + *d = data; + } + + XSetSelectionOwner(m_screen->display(), modeAtom, newOwner, CurrentTime); + + if (XGetSelectionOwner(m_screen->display(), modeAtom) != newOwner) { + qWarning("QClipboard::setData: Cannot set X11 selection owner"); + } + +} + +bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const +{ + if (mode == QClipboard::Clipboard || mode == QClipboard::Selection) + return true; + return false; +} + + +QXlibScreen * QXlibClipboard::screen() const +{ + return m_screen; +} + +Window QXlibClipboard::requestor() const +{ + if (!m_requestor) { + int x = 0, y = 0, w = 3, h = 3; + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + m_screen->blackPixel(), m_screen->whitePixel()); + that->setRequestor(window); + } + return m_requestor; +} + +void QXlibClipboard::setRequestor(Window window) +{ + if (m_requestor != XNone) { + XDestroyWindow(m_screen->display(),m_requestor); + } + m_requestor = window; +} + +Window QXlibClipboard::owner() const +{ + if (!m_owner) { + int x = 0, y = 0, w = 3, h = 3; + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + m_screen->blackPixel(), m_screen->whitePixel()); + that->setOwner(window); + } + return m_owner; +} + +void QXlibClipboard::setOwner(Window window) +{ + if (m_owner != XNone){ + XDestroyWindow(m_screen->display(),m_owner); + } + m_owner = window; +} + +Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) +{ + QVector<Atom> types; + QStringList formats = QInternalMimeData::formatsHelper(d); + for (int i = 0; i < formats.size(); ++i) { + QList<Atom> atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); + for (int j = 0; j < atoms.size(); ++j) { + if (!types.contains(atoms.at(j))) + types.append(atoms.at(j)); + } + } + types.append(QXlibStatic::atom(QXlibStatic::TARGETS)); + types.append(QXlibStatic::atom(QXlibStatic::MULTIPLE)); + types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); + types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); + + XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, + PropModeReplace, (uchar *) types.data(), types.size()); + return property; +} + +Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) +{ + Atom atomFormat = target; + int dataFormat = 0; + QByteArray data; + + QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); + if (fmt.isEmpty()) { // Not a MIME type we have + qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); + return XNone; + } + qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); + + if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { + + // don't allow INCR transfers when using MULTIPLE or to + // Motif clients (since Motif doesn't support INCR) + static Atom motif_clip_temporary = QXlibStatic::atom(QXlibStatic::CLIP_TEMPORARY); + bool allow_incr = property != motif_clip_temporary; + + // X_ChangeProperty protocol request is 24 bytes + const int increment = (XMaxRequestSize(screen()->display()) * 4) - 24; + if (data.size() > increment && allow_incr) { + long bytes = data.size(); + XChangeProperty(screen()->display(), window, property, + QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); + +// (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); + qDebug() << "not implemented INCRT just YET!"; + return property; + } + + // make sure we can perform the XChangeProperty in a single request + if (data.size() > increment) + return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend? + int dataSize = data.size() / (dataFormat / 8); + // use a single request to transfer data + XChangeProperty(screen()->display(), window, property, atomFormat, + dataFormat, PropModeReplace, (uchar *) data.data(), + dataSize); + } + return property; +} + +void QXlibClipboard::handleSelectionRequest(XEvent *xevent) +{ + XSelectionRequestEvent *req = &xevent->xselectionrequest; + + if (requestor() && req->requestor == requestor()) { + qDebug() << "This should be caught before"; + return; + } + + XEvent event; + event.xselection.type = SelectionNotify; + event.xselection.display = req->display; + event.xselection.requestor = req->requestor; + event.xselection.selection = req->selection; + event.xselection.target = req->target; + event.xselection.property = XNone; + event.xselection.time = req->time; + + QMimeData *d; + if (req->selection == XA_PRIMARY) { + d = m_clientSelection; + } else if (req->selection == QXlibStatic::atom(QXlibStatic::CLIPBOARD)) { + d = m_clientClipboard; + } else { + qWarning("QClipboard: Unknown selection '%lx'", req->selection); + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + + if (!d) { + qWarning("QClipboard: Cannot transfer data, no data available"); + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + + Atom xa_targets = QXlibStatic::atom(QXlibStatic::TARGETS); + Atom xa_multiple = QXlibStatic::atom(QXlibStatic::MULTIPLE); + Atom xa_timestamp = QXlibStatic::atom(QXlibStatic::TIMESTAMP); + + struct AtomPair { Atom target; Atom property; } *multi = 0; + Atom multi_type = XNone; + int multi_format = 0; + int nmulti = 0; + int imulti = -1; + bool multi_writeback = false; + + if (req->target == xa_multiple) { + QByteArray multi_data; + if (req->property == XNone + || !clipboardReadProperty(req->requestor, req->property, false, &multi_data, + 0, &multi_type, &multi_format) + || multi_format != 32) { + // MULTIPLE property not formatted correctly + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + nmulti = multi_data.size()/sizeof(*multi); + multi = new AtomPair[nmulti]; + memcpy(multi,multi_data.data(),multi_data.size()); + imulti = 0; + } + + for (; imulti < nmulti; ++imulti) { + Atom target; + Atom property; + + if (multi) { + target = multi[imulti].target; + property = multi[imulti].property; + } else { + target = req->target; + property = req->property; + if (property == XNone) // obsolete client + property = target; + } + + Atom ret = XNone; + if (target == XNone || property == XNone) { + ; + } else if (target == xa_timestamp) { +// if (d->timestamp != CurrentTime) { +// XChangeProperty(screen()->display(), req->requestor, property, XA_INTEGER, 32, +// PropModeReplace, CurrentTime, 1); +// ret = property; +// } else { +// qWarning("QClipboard: Invalid data timestamp"); +// } + } else if (target == xa_targets) { + ret = sendTargetsSelection(d, req->requestor, property); + } else { + ret = sendSelection(d, target, req->requestor, property); + } + + if (nmulti > 0) { + if (ret == XNone) { + multi[imulti].property = XNone; + multi_writeback = true; + } + } else { + event.xselection.property = ret; + break; + } + } + + if (nmulti > 0) { + if (multi_writeback) { + // according to ICCCM 2.6.2 says to put None back + // into the original property on the requestor window + XChangeProperty(screen()->display(), req->requestor, req->property, multi_type, 32, + PropModeReplace, (uchar *) multi, nmulti * 2); + } + + delete [] multi; + event.xselection.property = req->property; + } + + // send selection notify to requestor + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); +} + +static inline int maxSelectionIncr(Display *dpy) +{ return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; } + +bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const +{ + int maxsize = maxSelectionIncr(screen()->display()); + ulong bytes_left; // bytes_after + ulong length; // nitems + uchar *data; + Atom dummy_type; + int dummy_format; + int r; + + if (!type) // allow null args + type = &dummy_type; + if (!format) + format = &dummy_format; + + // Don't read anything, just get the size of the property data + r = XGetWindowProperty(screen()->display(), win, property, 0, 0, False, + AnyPropertyType, type, format, + &length, &bytes_left, &data); + if (r != Success || (type && *type == XNone)) { + buffer->resize(0); + return false; + } + XFree((char*)data); + + int offset = 0, buffer_offset = 0, format_inc = 1, proplen = bytes_left; + + switch (*format) { + case 8: + default: + format_inc = sizeof(char) / 1; + break; + + case 16: + format_inc = sizeof(short) / 2; + proplen *= sizeof(short) / 2; + break; + + case 32: + format_inc = sizeof(long) / 4; + proplen *= sizeof(long) / 4; + break; + } + + int newSize = proplen; + buffer->resize(newSize); + + bool ok = (buffer->size() == newSize); + + if (ok && newSize) { + // could allocate buffer + + while (bytes_left) { + // more to read... + + r = XGetWindowProperty(screen()->display(), win, property, offset, maxsize/4, + False, AnyPropertyType, type, format, + &length, &bytes_left, &data); + if (r != Success || (type && *type == XNone)) + break; + + offset += length / (32 / *format); + length *= format_inc * (*format) / 8; + + // Here we check if we get a buffer overflow and tries to + // recover -- this shouldn't normally happen, but it doesn't + // hurt to be defensive + if ((int)(buffer_offset + length) > buffer->size()) { + length = buffer->size() - buffer_offset; + + // escape loop + bytes_left = 0; + } + + memcpy(buffer->data() + buffer_offset, data, length); + buffer_offset += length; + + XFree((char*)data); + } + + if (*format == 8 && *type == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { + // convert COMPOUND_TEXT to a multibyte string + XTextProperty textprop; + textprop.encoding = *type; + textprop.format = *format; + textprop.nitems = buffer_offset; + textprop.value = (unsigned char *) buffer->data(); + + char **list_ret = 0; + int count; + if (XmbTextPropertyToTextList(screen()->display(), &textprop, &list_ret, + &count) == Success && count && list_ret) { + offset = buffer_offset = strlen(list_ret[0]); + buffer->resize(offset); + memcpy(buffer->data(), list_ret[0], offset); + } + if (list_ret) XFreeStringList(list_ret); + } + } + + // correct size, not 0-term. + if (size) + *size = buffer_offset; + + if (deleteProperty) + XDeleteProperty(screen()->display(), win, property); + + XFlush(screen()->display()); + + return ok; +} + +QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) +{ + XEvent event; + + QByteArray buf; + QByteArray tmp_buf; + bool alloc_error = false; + int length; + int offset = 0; + + if (nbytes > 0) { + // Reserve buffer + zero-terminator (for text data) + // We want to complete the INCR transfer even if we cannot + // allocate more memory + buf.resize(nbytes+1); + alloc_error = buf.size() != nbytes+1; + } + + for (;;) { + XFlush(screen()->display()); + if (!screen()->waitForClipboardEvent(win,PropertyNotify,&event,clipboard_timeout)) + break; + if (event.xproperty.atom != property || + event.xproperty.state != PropertyNewValue) + continue; + if (clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0)) { + if (length == 0) { // no more data, we're done + if (nullterm) { + buf.resize(offset+1); + buf[offset] = '\0'; + } else { + buf.resize(offset); + } + return buf; + } else if (!alloc_error) { + if (offset+length > (int)buf.size()) { + buf.resize(offset+length+65535); + if (buf.size() != offset+length+65535) { + alloc_error = true; + length = buf.size() - offset; + } + } + memcpy(buf.data()+offset, tmp_buf.constData(), length); + tmp_buf.resize(0); + offset += length; + } + } else { + break; + } + } + + // timed out ... create a new requestor window, otherwise the requestor + // could consider next request to be still part of this timed out request + setRequestor(0); + + return QByteArray(); +} + +QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) +{ + QByteArray buf; + + Window win = requestor(); + + XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events + + XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); + XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); + XSync(screen()->display(), false); + + XEvent xevent; + if (!screen()->waitForClipboardEvent(win,SelectionNotify,&xevent,clipboard_timeout) || + xevent.xselection.property == XNone) { + return buf; + } + + Atom type; + XSelectInput(screen()->display(), win, PropertyChangeMask); + + if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { + if (type == QXlibStatic::atom(QXlibStatic::INCR)) { + int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0; + buf = clipboardReadIncrementalProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), nbytes, false); + } + } + + XSelectInput(screen()->display(), win, NoEventMask); + + + return buf; +} + +#include "qtestliteclipboard.moc" diff --git a/src/plugins/platforms/xlib/qtestliteclipboard.h b/src/plugins/platforms/xlib/qtestliteclipboard.h new file mode 100644 index 0000000..109714c --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteclipboard.h @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITECLIPBOARD_H +#define QTESTLITECLIPBOARD_H + +#include <QPlatformClipboard> +#include "qtestlitestaticinfo.h" + +class QXlibScreen; +class QXlibClipboard : public QPlatformClipboard +{ +public: + QXlibClipboard(QXlibScreen *screen); + + const QMimeData *mimeData(QClipboard::Mode mode) const; + void setMimeData(QMimeData *data, QClipboard::Mode mode); + + bool supportsMode(QClipboard::Mode mode) const; + + QXlibScreen *screen() const; + + Window requestor() const; + void setRequestor(Window window); + + Window owner() const; + + void handleSelectionRequest(XEvent *event); + + bool clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const; + QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm); + + QByteArray getDataInFormat(Atom modeAtom, Atom fmtatom); + +private: + void setOwner(Window window); + + Atom sendTargetsSelection(QMimeData *d, Window window, Atom property); + Atom sendSelection(QMimeData *d, Atom target, Window window, Atom property); + + QXlibScreen *m_screen; + + QMimeData *m_xClipboard; + QMimeData *m_clientClipboard; + + QMimeData *m_xSelection; + QMimeData *m_clientSelection; + + Window m_requestor; + Window m_owner; + + static const int clipboard_timeout; + +}; + +#endif // QTESTLITECLIPBOARD_H diff --git a/src/plugins/platforms/xlib/qtestlitecursor.cpp b/src/plugins/platforms/xlib/qtestlitecursor.cpp new file mode 100644 index 0000000..2f7cfbf --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitecursor.cpp @@ -0,0 +1,199 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitecursor.h" + +#include "qtestliteintegration.h" +#include "qtestlitescreen.h" +#include "qtestlitewindow.h" + +#include <QtGui/QBitmap> + +#include <X11/cursorfont.h> + +QT_BEGIN_NAMESPACE + +QXlibCursor::QXlibCursor(QXlibScreen *screen) + : QPlatformCursor(screen) +{ +} + +void QXlibCursor::changeCursor(QCursor *cursor, QWidget *widget) +{ + QXlibWindow *w = 0; + if (widget) { + QWidget *window = widget->window(); + w = static_cast<QXlibWindow*>(window->platformWindow()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; + } + + if (!w) + return; + + int id = cursor->handle(); + + Cursor c; + if (!cursorMap.contains(id)) { + if (cursor->shape() == Qt::BitmapCursor) + c = createCursorBitmap(cursor); + else + c = createCursorShape(cursor->shape()); + if (!c) { + return; + } + cursorMap.insert(id, c); + } else { + c = cursorMap.value(id); + } + + w->setCursor(c); +} + +Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) +{ + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + QPoint spot = cursor->hotSpot(); + Window rootwin = testLiteScreen()->rootWindow(); + + QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); + QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); + + int width = cursor->bitmap()->width(); + int height = cursor->bitmap()->height(); + int bytesPerLine = mapImage.bytesPerLine(); + int destLineSize = width / 8; + if (width % 8) + destLineSize++; + + const uchar * map = mapImage.bits(); + const uchar * mask = maskImage.bits(); + + char * mapBits = new char[height * destLineSize]; + char * maskBits = new char[height * destLineSize]; + for (int i = 0; i < height; i++) { + memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); + memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); + } + + Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, maskBits, width, height); + Cursor c = XCreatePixmapCursor(testLiteScreen()->display(), cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(testLiteScreen()->display(), cp); + XFreePixmap(testLiteScreen()->display(), mp); + delete[] mapBits; + delete[] maskBits; + + return c; +} + +Cursor QXlibCursor::createCursorShape(int cshape) +{ + Cursor cursor = 0; + + if (cshape < 0 || cshape > Qt::LastCursor) + return 0; + + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + break; + + default: //default cursor for all the rest + break; + } + return cursor; +} + +QXlibScreen * QXlibCursor::testLiteScreen() const +{ + return static_cast<QXlibScreen *>(screen); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitecursor.h b/src/plugins/platforms/xlib/qtestlitecursor.h new file mode 100644 index 0000000..db9f9e2 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitecursor.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITECURSOR_H +#define QTESTLITECURSOR_H + +#include <QtGui/QPlatformCursor> + +#include "qtestliteintegration.h" + +QT_BEGIN_NAMESPACE + +class QXlibCursor : QPlatformCursor +{ +public: + QXlibCursor(QXlibScreen *screen); + + void changeCursor(QCursor * cursor, QWidget * widget); +private: + + Cursor createCursorBitmap(QCursor * cursor); + Cursor createCursorShape(int cshape); + + QXlibScreen *testLiteScreen() const; + QMap<int, Cursor> cursorMap; +}; + +QT_END_NAMESPACE + +#endif // QTESTLITECURSOR_H diff --git a/src/plugins/platforms/xlib/qtestliteeglintegration.cpp b/src/plugins/platforms/xlib/qtestliteeglintegration.cpp new file mode 100644 index 0000000..9bbe0ca --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteeglintegration.cpp @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteeglintegration.h" + +static int countBits(unsigned long mask) +{ + int count = 0; + while (mask != 0) { + if (mask & 1) + ++count; + mask >>= 1; + } + return count; +} + +VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) +{ + VisualID visualId = 0; + EGLint eglValue = 0; + + EGLDisplay eglDisplay = eglGetDisplay(display); + + EGLint configRedSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); + + EGLint configGreenSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); + + EGLint configBlueSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); + + EGLint configAlphaSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); + + eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); + int configId = eglValue; + + // See if EGL provided a valid VisualID: + eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); + visualId = (VisualID)eglValue; + if (visualId) { + // EGL has suggested a visual id, so get the rest of the visual info for that id: + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = visualId; + + XVisualInfo *chosenVisualInfo; + int matchingCount = 0; + chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); + if (chosenVisualInfo) { + // Skip size checks if implementation supports non-matching visual + // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). + if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { + XFree(chosenVisualInfo); + return visualId; + } + + int visualRedSize = countBits(chosenVisualInfo->red_mask); + int visualGreenSize = countBits(chosenVisualInfo->green_mask); + int visualBlueSize = countBits(chosenVisualInfo->blue_mask); + int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size + + bool visualMatchesConfig = false; + if ( visualRedSize == configRedSize && + visualGreenSize == configGreenSize && + visualBlueSize == configBlueSize ) + { + // We need XRender to check the alpha channel size of the visual. If we don't have + // the alpha size, we don't check it against the EGL config's alpha size. + if (visualAlphaSize >= 0) + visualMatchesConfig = visualAlphaSize == configAlphaSize; + else + visualMatchesConfig = true; + } + + if (!visualMatchesConfig) { + if (visualAlphaSize >= 0) { + qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", + (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, + configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); + } else { + qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", + (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, + configId, configRedSize, configGreenSize, configBlueSize); + } + visualId = 0; + } + } else { + qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", + (int)visualId, configId); + visualId = 0; + } + XFree(chosenVisualInfo); + } +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + else + qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); +#endif + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + if (configAlphaSize > 0) + qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); + else + qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); +#endif + return visualId; + } + + // Finally, try to + // use XGetVisualInfo and only use the bit depths to match on: + if (!visualId) { + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + XVisualInfo *matchingVisuals; + int matchingCount = 0; + + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + if (!matchingVisuals) { + // Try again without taking the alpha channel into account: + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + } + + if (matchingVisuals) { + visualId = matchingVisuals[0].visualid; + XFree(matchingVisuals); + } + } + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); +#endif + return visualId; + } + + qWarning("Unable to find an X11 visual which matches EGL config %d", configId); + return (VisualID)0; +} diff --git a/src/plugins/platforms/xlib/qtestliteeglintegration.h b/src/plugins/platforms/xlib/qtestliteeglintegration.h new file mode 100644 index 0000000..4c2e50d --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteeglintegration.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEEGLINTEGRATION_H +#define QTESTLITEEGLINTEGRATION_H + +#include "qtestlitestaticinfo.h" +#include "../eglconvenience/qeglconvenience.h" + +class QXlibEglIntegration +{ +public: + static VisualID getCompatibleVisualId(Display *display, EGLConfig config); +}; + +#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/xlib/qtestliteintegration.cpp b/src/plugins/platforms/xlib/qtestliteintegration.cpp new file mode 100644 index 0000000..cdc5c29 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteintegration.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteintegration.h" +#include "qtestlitewindowsurface.h" +#include <QtGui/private/qpixmap_raster_p.h> +#include <QtCore/qdebug.h> + +#include "qtestlitewindow.h" +#include "qgenericunixfontdatabase.h" +#include "qtestlitescreen.h" +#include "qtestliteclipboard.h" + +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) +#include <GL/glx.h> +#else +#include <EGL/egl.h> +#endif //!defined(QT_OPENGL_ES_2) +#include <private/qwindowsurface_gl_p.h> +#include <private/qpixmapdata_gl_p.h> +#endif //QT_NO_OPENGL + +QT_BEGIN_NAMESPACE + +QXlibIntegration::QXlibIntegration(bool useOpenGL) + : mUseOpenGL(useOpenGL) + , mFontDb(new QGenericUnixFontDatabase()) + , mClipboard(0) +{ + mPrimaryScreen = new QXlibScreen(); + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QXlibIntegration::createPixmapData(QPixmapData::PixelType type) const +{ +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLPixmapData(type); +#endif + return new QRasterPixmapData(type); +} + +QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const +{ +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLWindowSurface(widget); +#endif + return new QXlibWindowSurface(widget); +} + + +QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + return new QXlibWindow(widget); +} + + + +QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + QImage image; + QWidget *widget = QWidget::find(window); + if (widget) { + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); + image = screen->grabWindow(window,x,y,width,height); + } else { + for (int i = 0; i < mScreens.size(); i++) { + QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens[i]); + if (screen->rootWindow() == window) { + image = screen->grabWindow(window,x,y,width,height); + } + } + } + return QPixmap::fromImage(image); +} + +QPlatformFontDatabase *QXlibIntegration::fontDatabase() const +{ + return mFontDb; +} + +QPlatformClipboard * QXlibIntegration::clipboard() const +{ + //Use lazy init since clipboard needs QTestliteScreen + if (!mClipboard) { + QXlibIntegration *that = const_cast<QXlibIntegration *>(this); + that->mClipboard = new QXlibClipboard(mPrimaryScreen); + } + return mClipboard; +} + +bool QXlibIntegration::hasOpenGL() const +{ +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); + return glXQueryExtension(screen->display(), 0, 0) != 0; +#else + static bool eglHasbeenInitialized = false; + static bool wasEglInitialized = false; + if (!eglHasbeenInitialized) { + eglHasbeenInitialized = true; + const QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); + EGLint major, minor; + eglBindAPI(EGL_OPENGL_ES_API); + EGLDisplay disp = eglGetDisplay(screen->display()); + wasEglInitialized = eglInitialize(disp,&major,&minor); + } + return wasEglInitialized; +#endif +#endif + return false; +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestliteintegration.h b/src/plugins/platforms/xlib/qtestliteintegration.h new file mode 100644 index 0000000..c3125b8 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestliteintegration.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +//make sure textstream is included before any X11 headers +#include <QtCore/QTextStream> + +#include <QtGui/QPlatformIntegration> +#include <QtGui/QPlatformScreen> + +#include "qtestlitestaticinfo.h" + +QT_BEGIN_NAMESPACE + +class QXlibScreen; + +class QXlibIntegration : public QPlatformIntegration +{ +public: + QXlibIntegration(bool useOpenGL = false); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QList<QPlatformScreen *> screens() const { return mScreens; } + + QPlatformFontDatabase *fontDatabase() const; + QPlatformClipboard *clipboard() const; + + bool hasOpenGL() const; + +private: + bool mUseOpenGL; + QXlibScreen *mPrimaryScreen; + QList<QPlatformScreen *> mScreens; + QPlatformFontDatabase *mFontDb; + QPlatformClipboard *mClipboard; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/xlib/qtestlitekeyboard.cpp b/src/plugins/platforms/xlib/qtestlitekeyboard.cpp new file mode 100644 index 0000000..fb0cf2e --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitekeyboard.cpp @@ -0,0 +1,1000 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitekeyboard.h" + +#include "qtestlitescreen.h" + +#include <QtGui/QWindowSystemInterface> + +#include <QtCore/QTextCodec> + +#ifndef XK_ISO_Left_Tab +#define XK_ISO_Left_Tab 0xFE20 +#endif + +#ifndef XK_dead_hook +#define XK_dead_hook 0xFE61 +#endif + +#ifndef XK_dead_horn +#define XK_dead_horn 0xFE62 +#endif + +#ifndef XK_Codeinput +#define XK_Codeinput 0xFF37 +#endif + +#ifndef XK_Kanji_Bangou +#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */ +#endif + +// Fix old X libraries +#ifndef XK_KP_Home +#define XK_KP_Home 0xFF95 +#endif +#ifndef XK_KP_Left +#define XK_KP_Left 0xFF96 +#endif +#ifndef XK_KP_Up +#define XK_KP_Up 0xFF97 +#endif +#ifndef XK_KP_Right +#define XK_KP_Right 0xFF98 +#endif +#ifndef XK_KP_Down +#define XK_KP_Down 0xFF99 +#endif +#ifndef XK_KP_Prior +#define XK_KP_Prior 0xFF9A +#endif +#ifndef XK_KP_Next +#define XK_KP_Next 0xFF9B +#endif +#ifndef XK_KP_End +#define XK_KP_End 0xFF9C +#endif +#ifndef XK_KP_Insert +#define XK_KP_Insert 0xFF9E +#endif +#ifndef XK_KP_Delete +#define XK_KP_Delete 0xFF9F +#endif + +// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special +// multimedia keys. They are included here as not every system has them. +#define XF86XK_MonBrightnessUp 0x1008FF02 +#define XF86XK_MonBrightnessDown 0x1008FF03 +#define XF86XK_KbdLightOnOff 0x1008FF04 +#define XF86XK_KbdBrightnessUp 0x1008FF05 +#define XF86XK_KbdBrightnessDown 0x1008FF06 +#define XF86XK_Standby 0x1008FF10 +#define XF86XK_AudioLowerVolume 0x1008FF11 +#define XF86XK_AudioMute 0x1008FF12 +#define XF86XK_AudioRaiseVolume 0x1008FF13 +#define XF86XK_AudioPlay 0x1008FF14 +#define XF86XK_AudioStop 0x1008FF15 +#define XF86XK_AudioPrev 0x1008FF16 +#define XF86XK_AudioNext 0x1008FF17 +#define XF86XK_HomePage 0x1008FF18 +#define XF86XK_Mail 0x1008FF19 +#define XF86XK_Start 0x1008FF1A +#define XF86XK_Search 0x1008FF1B +#define XF86XK_AudioRecord 0x1008FF1C +#define XF86XK_Calculator 0x1008FF1D +#define XF86XK_Memo 0x1008FF1E +#define XF86XK_ToDoList 0x1008FF1F +#define XF86XK_Calendar 0x1008FF20 +#define XF86XK_PowerDown 0x1008FF21 +#define XF86XK_ContrastAdjust 0x1008FF22 +#define XF86XK_Back 0x1008FF26 +#define XF86XK_Forward 0x1008FF27 +#define XF86XK_Stop 0x1008FF28 +#define XF86XK_Refresh 0x1008FF29 +#define XF86XK_PowerOff 0x1008FF2A +#define XF86XK_WakeUp 0x1008FF2B +#define XF86XK_Eject 0x1008FF2C +#define XF86XK_ScreenSaver 0x1008FF2D +#define XF86XK_WWW 0x1008FF2E +#define XF86XK_Sleep 0x1008FF2F +#define XF86XK_Favorites 0x1008FF30 +#define XF86XK_AudioPause 0x1008FF31 +#define XF86XK_AudioMedia 0x1008FF32 +#define XF86XK_MyComputer 0x1008FF33 +#define XF86XK_LightBulb 0x1008FF35 +#define XF86XK_Shop 0x1008FF36 +#define XF86XK_History 0x1008FF37 +#define XF86XK_OpenURL 0x1008FF38 +#define XF86XK_AddFavorite 0x1008FF39 +#define XF86XK_HotLinks 0x1008FF3A +#define XF86XK_BrightnessAdjust 0x1008FF3B +#define XF86XK_Finance 0x1008FF3C +#define XF86XK_Community 0x1008FF3D +#define XF86XK_AudioRewind 0x1008FF3E +#define XF86XK_BackForward 0x1008FF3F +#define XF86XK_Launch0 0x1008FF40 +#define XF86XK_Launch1 0x1008FF41 +#define XF86XK_Launch2 0x1008FF42 +#define XF86XK_Launch3 0x1008FF43 +#define XF86XK_Launch4 0x1008FF44 +#define XF86XK_Launch5 0x1008FF45 +#define XF86XK_Launch6 0x1008FF46 +#define XF86XK_Launch7 0x1008FF47 +#define XF86XK_Launch8 0x1008FF48 +#define XF86XK_Launch9 0x1008FF49 +#define XF86XK_LaunchA 0x1008FF4A +#define XF86XK_LaunchB 0x1008FF4B +#define XF86XK_LaunchC 0x1008FF4C +#define XF86XK_LaunchD 0x1008FF4D +#define XF86XK_LaunchE 0x1008FF4E +#define XF86XK_LaunchF 0x1008FF4F +#define XF86XK_ApplicationLeft 0x1008FF50 +#define XF86XK_ApplicationRight 0x1008FF51 +#define XF86XK_Book 0x1008FF52 +#define XF86XK_CD 0x1008FF53 +#define XF86XK_Calculater 0x1008FF54 +#define XF86XK_Clear 0x1008FF55 +#define XF86XK_ClearGrab 0x1008FE21 +#define XF86XK_Close 0x1008FF56 +#define XF86XK_Copy 0x1008FF57 +#define XF86XK_Cut 0x1008FF58 +#define XF86XK_Display 0x1008FF59 +#define XF86XK_DOS 0x1008FF5A +#define XF86XK_Documents 0x1008FF5B +#define XF86XK_Excel 0x1008FF5C +#define XF86XK_Explorer 0x1008FF5D +#define XF86XK_Game 0x1008FF5E +#define XF86XK_Go 0x1008FF5F +#define XF86XK_iTouch 0x1008FF60 +#define XF86XK_LogOff 0x1008FF61 +#define XF86XK_Market 0x1008FF62 +#define XF86XK_Meeting 0x1008FF63 +#define XF86XK_MenuKB 0x1008FF65 +#define XF86XK_MenuPB 0x1008FF66 +#define XF86XK_MySites 0x1008FF67 +#define XF86XK_News 0x1008FF69 +#define XF86XK_OfficeHome 0x1008FF6A +#define XF86XK_Option 0x1008FF6C +#define XF86XK_Paste 0x1008FF6D +#define XF86XK_Phone 0x1008FF6E +#define XF86XK_Reply 0x1008FF72 +#define XF86XK_Reload 0x1008FF73 +#define XF86XK_RotateWindows 0x1008FF74 +#define XF86XK_RotationPB 0x1008FF75 +#define XF86XK_RotationKB 0x1008FF76 +#define XF86XK_Save 0x1008FF77 +#define XF86XK_Send 0x1008FF7B +#define XF86XK_Spell 0x1008FF7C +#define XF86XK_SplitScreen 0x1008FF7D +#define XF86XK_Support 0x1008FF7E +#define XF86XK_TaskPane 0x1008FF7F +#define XF86XK_Terminal 0x1008FF80 +#define XF86XK_Tools 0x1008FF81 +#define XF86XK_Travel 0x1008FF82 +#define XF86XK_Video 0x1008FF87 +#define XF86XK_Word 0x1008FF89 +#define XF86XK_Xfer 0x1008FF8A +#define XF86XK_ZoomIn 0x1008FF8B +#define XF86XK_ZoomOut 0x1008FF8C +#define XF86XK_Away 0x1008FF8D +#define XF86XK_Messenger 0x1008FF8E +#define XF86XK_WebCam 0x1008FF8F +#define XF86XK_MailForward 0x1008FF90 +#define XF86XK_Pictures 0x1008FF91 +#define XF86XK_Music 0x1008FF92 +#define XF86XK_Battery 0x1008FF93 +#define XF86XK_Bluetooth 0x1008FF94 +#define XF86XK_WLAN 0x1008FF95 +#define XF86XK_UWB 0x1008FF96 +#define XF86XK_AudioForward 0x1008FF97 +#define XF86XK_AudioRepeat 0x1008FF98 +#define XF86XK_AudioRandomPlay 0x1008FF99 +#define XF86XK_Subtitle 0x1008FF9A +#define XF86XK_AudioCycleTrack 0x1008FF9B +#define XF86XK_Time 0x1008FF9F +#define XF86XK_Select 0x1008FFA0 +#define XF86XK_View 0x1008FFA1 +#define XF86XK_TopMenu 0x1008FFA2 +#define XF86XK_Suspend 0x1008FFA7 +#define XF86XK_Hibernate 0x1008FFA8 + + +// end of XF86keysyms.h + +// Special keys used by Qtopia, mapped into the X11 private keypad range. +#define QTOPIAXK_Select 0x11000601 +#define QTOPIAXK_Yes 0x11000602 +#define QTOPIAXK_No 0x11000603 +#define QTOPIAXK_Cancel 0x11000604 +#define QTOPIAXK_Printer 0x11000605 +#define QTOPIAXK_Execute 0x11000606 +#define QTOPIAXK_Sleep 0x11000607 +#define QTOPIAXK_Play 0x11000608 +#define QTOPIAXK_Zoom 0x11000609 +#define QTOPIAXK_Context1 0x1100060A +#define QTOPIAXK_Context2 0x1100060B +#define QTOPIAXK_Context3 0x1100060C +#define QTOPIAXK_Context4 0x1100060D +#define QTOPIAXK_Call 0x1100060E +#define QTOPIAXK_Hangup 0x1100060F +#define QTOPIAXK_Flip 0x11000610 + +// keyboard mapping table +static const unsigned int KeyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + 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_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 keys from X.org - This include multimedia keys, + // wireless/bluetooth/uwb keys, special launcher keys, etc. + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Memo, Qt::Key_Memo, + XF86XK_ToDoList, Qt::Key_ToDoList, + XF86XK_Calendar, Qt::Key_Calendar, + XF86XK_PowerDown, Qt::Key_PowerDown, + XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, + XF86XK_Standby, Qt::Key_Standby, + XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, + XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, + XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, + XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, + XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, + XF86XK_PowerOff, Qt::Key_PowerOff, + XF86XK_WakeUp, Qt::Key_WakeUp, + XF86XK_Eject, Qt::Key_Eject, + XF86XK_ScreenSaver, Qt::Key_ScreenSaver, + XF86XK_WWW, Qt::Key_WWW, + XF86XK_Sleep, Qt::Key_Sleep, + XF86XK_LightBulb, Qt::Key_LightBulb, + XF86XK_Shop, Qt::Key_Shop, + XF86XK_History, Qt::Key_History, + XF86XK_AddFavorite, Qt::Key_AddFavorite, + XF86XK_HotLinks, Qt::Key_HotLinks, + XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, + XF86XK_Finance, Qt::Key_Finance, + XF86XK_Community, Qt::Key_Community, + XF86XK_AudioRewind, Qt::Key_AudioRewind, + XF86XK_BackForward, Qt::Key_BackForward, + XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, + XF86XK_ApplicationRight, Qt::Key_ApplicationRight, + XF86XK_Book, Qt::Key_Book, + XF86XK_CD, Qt::Key_CD, + XF86XK_Calculater, Qt::Key_Calculator, + XF86XK_Clear, Qt::Key_Clear, + XF86XK_ClearGrab, Qt::Key_ClearGrab, + XF86XK_Close, Qt::Key_Close, + XF86XK_Copy, Qt::Key_Copy, + XF86XK_Cut, Qt::Key_Cut, + XF86XK_Display, Qt::Key_Display, + XF86XK_DOS, Qt::Key_DOS, + XF86XK_Documents, Qt::Key_Documents, + XF86XK_Excel, Qt::Key_Excel, + XF86XK_Explorer, Qt::Key_Explorer, + XF86XK_Game, Qt::Key_Game, + XF86XK_Go, Qt::Key_Go, + XF86XK_iTouch, Qt::Key_iTouch, + XF86XK_LogOff, Qt::Key_LogOff, + XF86XK_Market, Qt::Key_Market, + XF86XK_Meeting, Qt::Key_Meeting, + XF86XK_MenuKB, Qt::Key_MenuKB, + XF86XK_MenuPB, Qt::Key_MenuPB, + XF86XK_MySites, Qt::Key_MySites, + XF86XK_News, Qt::Key_News, + XF86XK_OfficeHome, Qt::Key_OfficeHome, + XF86XK_Option, Qt::Key_Option, + XF86XK_Paste, Qt::Key_Paste, + XF86XK_Phone, Qt::Key_Phone, + XF86XK_Reply, Qt::Key_Reply, + XF86XK_Reload, Qt::Key_Reload, + XF86XK_RotateWindows, Qt::Key_RotateWindows, + XF86XK_RotationPB, Qt::Key_RotationPB, + XF86XK_RotationKB, Qt::Key_RotationKB, + XF86XK_Save, Qt::Key_Save, + XF86XK_Send, Qt::Key_Send, + XF86XK_Spell, Qt::Key_Spell, + XF86XK_SplitScreen, Qt::Key_SplitScreen, + XF86XK_Support, Qt::Key_Support, + XF86XK_TaskPane, Qt::Key_TaskPane, + XF86XK_Terminal, Qt::Key_Terminal, + XF86XK_Tools, Qt::Key_Tools, + XF86XK_Travel, Qt::Key_Travel, + XF86XK_Video, Qt::Key_Video, + XF86XK_Word, Qt::Key_Word, + XF86XK_Xfer, Qt::Key_Xfer, + XF86XK_ZoomIn, Qt::Key_ZoomIn, + XF86XK_ZoomOut, Qt::Key_ZoomOut, + XF86XK_Away, Qt::Key_Away, + XF86XK_Messenger, Qt::Key_Messenger, + XF86XK_WebCam, Qt::Key_WebCam, + XF86XK_MailForward, Qt::Key_MailForward, + XF86XK_Pictures, Qt::Key_Pictures, + XF86XK_Music, Qt::Key_Music, + XF86XK_Battery, Qt::Key_Battery, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_WLAN, Qt::Key_WLAN, + XF86XK_UWB, Qt::Key_UWB, + XF86XK_AudioForward, Qt::Key_AudioForward, + XF86XK_AudioRepeat, Qt::Key_AudioRepeat, + XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, + XF86XK_Subtitle, Qt::Key_Subtitle, + XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, + XF86XK_Time, Qt::Key_Time, + XF86XK_Select, Qt::Key_Select, + XF86XK_View, Qt::Key_View, + XF86XK_TopMenu, Qt::Key_TopMenu, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_Suspend, Qt::Key_Suspend, + XF86XK_Hibernate, Qt::Key_Hibernate, + XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, + XF86XK_LaunchE, Qt::Key_LaunchG, + XF86XK_LaunchF, Qt::Key_LaunchH, + + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, + + 0, 0 +}; + +static const unsigned short katakanaKeysymsToUnicode[] = { + 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, + 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, + 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, + 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, + 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, + 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, + 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, + 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C +}; + +static const unsigned short cyrillicKeysymsToUnicode[] = { + 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, + 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a +}; + +static const unsigned short greekKeysymsToUnicode[] = { + 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, + 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, + 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, + 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short technicalKeysymsToUnicode[] = { + 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1, + 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8, + 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B, + 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, + 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000, + 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000 +}; + +static const unsigned short specialKeysymsToUnicode[] = { + 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000, + 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA, + 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C, + 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short publishingKeysymsToUnicode[] = { + 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, + 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, + 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, + 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, + 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, + 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, + 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, + 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, + 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, + 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, + 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000 +}; + +static const unsigned short aplKeysymsToUnicode[] = { + 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, + 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, + 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, + 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, + 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short koreanKeysymsToUnicode[] = { + 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, + 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, + 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, + 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, + 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, + 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, + 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, + 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, + 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, + 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, + 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, + 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 +}; + +static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) +{ + switch (byte3) { + case 0x04: + // katakana + if (byte4 > 0xa0 && byte4 < 0xe0) + return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]); + else if (byte4 == 0x7e) + return QChar(0x203e); // Overline + break; + case 0x06: + // russian, use lookup table + if (byte4 > 0xa0) + return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x07: + // greek + if (byte4 > 0xa0) + return QChar(greekKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x08: + // technical + if (byte4 > 0xa0) + return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x09: + // special + if (byte4 >= 0xe0) + return QChar(specialKeysymsToUnicode[byte4 - 0xe0]); + break; + case 0x0a: + // publishing + if (byte4 > 0xa0) + return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0b: + // APL + if (byte4 > 0xa0) + return QChar(aplKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0e: + // Korean + if (byte4 > 0xa0) + return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]); + break; + default: + break; + } + return QChar(0x0); +} + +Qt::KeyboardModifiers QXlibKeyboard::translateModifiers(int s) +{ + Qt::KeyboardModifiers ret = 0; + if (s & ShiftMask) + ret |= Qt::ShiftModifier; + if (s & ControlMask) + ret |= Qt::ControlModifier; + if (s & m_alt_mask) + ret |= Qt::AltModifier; + if (s & m_meta_mask) + ret |= Qt::MetaModifier; +// if (s & m_mode_switch_mask) //doesn't seem to work correctly +// ret |= Qt::GroupSwitchModifier; + return ret; +} + +void QXlibKeyboard::setMask(KeySym sym, uint mask) +{ + if (m_alt_mask == 0 + && m_meta_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && (sym == XK_Alt_L || sym == XK_Alt_R)) { + m_alt_mask = mask; + } + if (m_meta_mask == 0 + && m_alt_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && (sym == XK_Meta_L || sym == XK_Meta_R)) { + m_meta_mask = mask; + } + if (m_super_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_hyper_mask != mask + && (sym == XK_Super_L || sym == XK_Super_R)) { + m_super_mask = mask; + } + if (m_hyper_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_super_mask != mask + && (sym == XK_Hyper_L || sym == XK_Hyper_R)) { + m_hyper_mask = mask; + } + if (m_mode_switch_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && sym == XK_Mode_switch) { + m_mode_switch_mask = mask; + } + if (m_num_lock_mask == 0 + && sym == XK_Num_Lock) { + m_num_lock_mask = mask; + } +} + +int QXlibKeyboard::translateKeySym(uint key) const +{ + int code = -1; + int i = 0; // any other keys + while (KeyTbl[i]) { + if (key == KeyTbl[i]) { + code = (int)KeyTbl[i+1]; + break; + } + i += 2; + } + if (m_meta_mask) { + // translate Super/Hyper keys to Meta if we're using them as the MetaModifier + if (m_meta_mask == m_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) { + code = Qt::Key_Meta; + } else if (m_meta_mask == m_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) { + code = Qt::Key_Meta; + } + } + return code; +} + +QString QXlibKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count) +{ + // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars + + QTextCodec *mapper = QTextCodec::codecForLocale(); + QChar converted; + + if (/*count == 0 &&*/ keysym < 0xff00) { + unsigned char byte3 = (unsigned char)(keysym >> 8); + int mib = -1; + switch(byte3) { + case 0: // Latin 1 + case 1: // Latin 2 + case 2: //latin 3 + case 3: // latin4 + mib = byte3 + 4; break; + case 5: // arabic + mib = 82; break; + case 12: // Hebrew + mib = 85; break; + case 13: // Thai + mib = 2259; break; + case 4: // kana + case 6: // cyrillic + case 7: // greek + case 8: // technical, no mapping here at the moment + case 9: // Special + case 10: // Publishing + case 11: // APL + case 14: // Korean, no mapping + mib = -1; // manual conversion + mapper= 0; +#if !defined(QT_NO_XIM) + converted = keysymToUnicode(byte3, keysym & 0xff); +#endif + case 0x20: + // currency symbols + if (keysym >= 0x20a0 && keysym <= 0x20ac) { + mib = -1; // manual conversion + mapper = 0; + converted = (uint)keysym; + } + break; + default: + break; + } + if (mib != -1) { + mapper = QTextCodec::codecForMib(mib); + if (chars.isEmpty()) + chars.resize(1); + chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later + count = 1; + } + } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) { + converted = (ushort) (keysym - 0x1000000); + mapper = 0; + } + if (count < (int)chars.size()-1) + chars[count] = '\0'; + + QString text; + if (!mapper && converted.unicode() != 0x0) { + text = converted; + } else if (!chars.isEmpty()) { + // convert chars (8bit) to text (unicode). + if (mapper) + text = mapper->toUnicode(chars.data(), count, 0); + if (text.isEmpty()) { + // no mapper, or codec couldn't convert to unicode (this + // can happen when running in the C locale or with no LANG + // set). try converting from latin-1 + text = QString::fromLatin1(chars); + } + } + + modifiers = translateModifiers(xmodifiers); + + // Commentary in X11/keysymdef says that X codes match ASCII, so it + // is safe to use the locale functions to process X codes in ISO8859-1. + // + // This is mainly for compatibility - applications should not use the + // Qt keycodes between 128 and 255, but should rather use the + // QKeyEvent::text(). + // + if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) { + // upper-case key, if known + code = isprint((int)keysym) ? toupper((int)keysym) : 0; + } else if (keysym >= XK_F1 && keysym <= XK_F35) { + // function keys + code = Qt::Key_F1 + ((int)keysym - XK_F1); + } else if (keysym >= XK_KP_Space && keysym <= XK_KP_9) { + if (keysym >= XK_KP_0) { + // numeric keypad keys + code = Qt::Key_0 + ((int)keysym - XK_KP_0); + } else { + code = translateKeySym(keysym); + } + modifiers |= Qt::KeypadModifier; + } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) { + code = text.unicode()->toUpper().unicode(); + } else { + // any other keys + code = translateKeySym(keysym); + + if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) { + // map shift+tab to shift+backtab, QShortcutMap knows about it + // and will handle it. + code = Qt::Key_Backtab; + text = QString(); + } + } + + return text; +} + +QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) + : m_screen(screen) + , m_alt_mask(0) + , m_super_mask(0) + , m_hyper_mask(0) + , m_meta_mask(0) +{ + changeLayout(); +} + +void QXlibKeyboard::changeLayout() +{ + XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); + for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { + const uint mask = xkbDesc->map->modmap ? xkbDesc->map->modmap[i] : 0; + if (mask == 0) { + // key is not bound to a modifier + continue; + } + + for (int j = 0; j < XkbKeyGroupsWidth(xkbDesc, i); ++j) { + KeySym keySym = XkbKeySym(xkbDesc, i, j); + if (keySym == NoSymbol) + continue; + setMask(keySym, mask); + } + } + XkbFreeKeyboard(xkbDesc, XkbAllComponentsMask, true); + +} + +static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) +{ + switch (qtcode) { + case Qt::Key_Control: + return Qt::ControlModifier; + case Qt::Key_Alt: + return Qt::AltModifier; + case Qt::Key_Shift: + return Qt::ShiftModifier; + case Qt::Key_Meta: + return Qt::MetaModifier; + default: + return Qt::NoModifier; + } +} + +void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) +{ + int qtcode = 0; + Qt::KeyboardModifiers modifiers = translateModifiers(ev->state); + QByteArray chars; + chars.resize(513); + int count = 0; + KeySym keySym; + count = XLookupString(ev,chars.data(),chars.size(),&keySym,0); + QString text = translateKeySym(keySym,ev->state,qtcode,modifiers,chars,count); + QWindowSystemInterface::handleKeyEvent(widget,ev->time,type,qtcode,modifiers,text.left(count)); +} diff --git a/src/plugins/platforms/xlib/qtestlitekeyboard.h b/src/plugins/platforms/xlib/qtestlitekeyboard.h new file mode 100644 index 0000000..98df4e1 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitekeyboard.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEKEYBOARD_H +#define QTESTLITEKEYBOARD_H + +#include "qtestliteintegration.h" + +class QXlibKeyboard +{ +public: + QXlibKeyboard(QXlibScreen *screen); + + void changeLayout(); + + void handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev); + + Qt::KeyboardModifiers translateModifiers(int s); + +private: + + void setMask(KeySym sym, uint mask); + int translateKeySym(uint key) const; + QString translateKeySym(KeySym keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count); + + QXlibScreen *m_screen; + + uint m_alt_mask; + uint m_super_mask; + uint m_hyper_mask; + uint m_meta_mask; + uint m_mode_switch_mask; + uint m_num_lock_mask; +}; + +#endif // QTESTLITEKEYBOARD_H diff --git a/src/plugins/platforms/xlib/qtestlitemime.cpp b/src/plugins/platforms/xlib/qtestlitemime.cpp new file mode 100644 index 0000000..5335ae9 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitemime.cpp @@ -0,0 +1,322 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitemime.h" + +#include "qtestlitestaticinfo.h" +#include "qtestlitescreen.h" + +#include <QtCore/QTextCodec> +#include <QtGui/QImageWriter> +#include <QtCore/QBuffer> + +QXlibMime::QXlibMime() + : QInternalMimeData() +{ } + +QXlibMime::~QXlibMime() +{} + + + + + +QString QXlibMime::mimeAtomToString(Display *display, Atom a) +{ + if (!a) return 0; + + if (a == XA_STRING || a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) { + return "text/plain"; // some Xdnd clients are dumb + } + char *atom = XGetAtomName(display, a); + QString result = QString::fromLatin1(atom); + XFree(atom); + return result; +} + +Atom QXlibMime::mimeStringToAtom(Display *display, const QString &mimeType) +{ + if (mimeType.isEmpty()) + return 0; + return XInternAtom(display, mimeType.toLatin1().constData(), False); +} + +QStringList QXlibMime::mimeFormatsForAtom(Display *display, Atom a) +{ + QStringList formats; + if (a) { + QString atomName = mimeAtomToString(display, a); + formats.append(atomName); + + // special cases for string type + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) + || a == XA_STRING + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + formats.append(QLatin1String("text/plain")); + + // special cases for uris + if (atomName == QLatin1String("text/x-moz-url")) + formats.append(QLatin1String("text/uri-list")); + + // special case for images + if (a == XA_PIXMAP) + formats.append(QLatin1String("image/ppm")); + } + return formats; +} + +bool QXlibMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) +{ + bool ret = false; + *atomFormat = a; + *dataFormat = 8; + QString atomName = mimeAtomToString(display, a); + if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) { + *data = QInternalMimeData::renderDataHelper(atomName, mimeData); + if (atomName == QLatin1String("application/x-color")) + *dataFormat = 16; + ret = true; + } else { + if ((a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) + || a == XA_STRING + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + && QInternalMimeData::hasFormatHelper(QLatin1String("text/plain"), mimeData)) { + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)){ + *data = QInternalMimeData::renderDataHelper(QLatin1String("text/plain"), mimeData); + ret = true; + } else if (a == XA_STRING) { + *data = QString::fromUtf8(QInternalMimeData::renderDataHelper( + QLatin1String("text/plain"), mimeData)).toLocal8Bit(); + ret = true; + } else if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { + // the ICCCM states that TEXT and COMPOUND_TEXT are in the + // encoding of choice, so we choose the encoding of the locale + QByteArray strData = QString::fromUtf8(QInternalMimeData::renderDataHelper( + QLatin1String("text/plain"), mimeData)).toLocal8Bit(); + char *list[] = { strData.data(), NULL }; + + XICCEncodingStyle style = (a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + ? XCompoundTextStyle : XStdICCTextStyle; + XTextProperty textprop; + if (list[0] != NULL + && XmbTextListToTextProperty(display, list, 1, style, + &textprop) == Success) { + *atomFormat = textprop.encoding; + *dataFormat = textprop.format; + *data = QByteArray((const char *) textprop.value, textprop.nitems * textprop.format / 8); + ret = true; + + XFree(textprop.value); + } + } + } else if (atomName == QLatin1String("text/x-moz-url") && + QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) { + QByteArray uri = QInternalMimeData::renderDataHelper( + QLatin1String("text/uri-list"), mimeData).split('\n').first(); + QString mozUri = QString::fromLatin1(uri, uri.size()); + mozUri += QLatin1Char('\n'); + *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), mozUri.length() * 2); + ret = true; + } else if ((a == XA_PIXMAP || a == XA_BITMAP) && mimeData->hasImage()) { + ret = true; + } + } + return ret && data != 0; +} + +QList<Atom> QXlibMime::mimeAtomsForFormat(Display *display, const QString &format) +{ + QList<Atom> atoms; + atoms.append(mimeStringToAtom(display, format)); + + // special cases for strings + if (format == QLatin1String("text/plain")) { + atoms.append(QXlibStatic::atom(QXlibStatic::UTF8_STRING)); + atoms.append(XA_STRING); + atoms.append(QXlibStatic::atom(QXlibStatic::TEXT)); + atoms.append(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)); + } + + // special cases for uris + if (format == QLatin1String("text/uri-list")) { + atoms.append(mimeStringToAtom(display,QLatin1String("text/x-moz-url"))); + } + + //special cases for images + if (format == QLatin1String("image/ppm")) + atoms.append(XA_PIXMAP); + if (format == QLatin1String("image/pbm")) + atoms.append(XA_BITMAP); + + return atoms; +} + +QVariant QXlibMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) +{ + QString atomName = mimeAtomToString(display,a); + if (atomName == format) + return data; + + if (!encoding.isEmpty() + && atomName == format + QLatin1String(";charset=") + QString::fromLatin1(encoding)) { + + if (requestedType == QVariant::String) { + QTextCodec *codec = QTextCodec::codecForName(encoding); + if (codec) + return codec->toUnicode(data); + } + + return data; + } + + // special cases for string types + if (format == QLatin1String("text/plain")) { + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) + return QString::fromUtf8(data); + if (a == XA_STRING) + return QString::fromLatin1(data); + if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + // #### might be wrong for COMPUND_TEXT + return QString::fromLocal8Bit(data, data.size()); + } + + // special case for uri types + if (format == QLatin1String("text/uri-list")) { + if (atomName == QLatin1String("text/x-moz-url")) { + // we expect this as utf16 <url><space><title> + // the first part is a url that should only contain ascci char + // so it should be safe to check that the second char is 0 + // to verify that it is utf16 + if (data.size() > 1 && data.at(1) == 0) + return QString::fromRawData((const QChar *)data.constData(), + data.size() / 2).split(QLatin1Char('\n')).first().toLatin1(); + } + } + + // special cas for images + if (format == QLatin1String("image/ppm")) { + if (a == XA_PIXMAP && data.size() == sizeof(Pixmap)) { + Pixmap xpm = *((Pixmap*)data.data()); + if (!xpm) + return QByteArray(); + Window root; + int x; + int y; + uint width; + uint height; + uint border_width; + uint depth; + + XGetGeometry(display, xpm, &root, &x, &y, &width, &height, &border_width, &depth); + XImage *ximg = XGetImage(display,xpm,x,y,width,height,AllPlanes,depth==1 ? XYPixmap : ZPixmap); + QImage qimg = QXlibStatic::qimageFromXImage(ximg); + XDestroyImage(ximg); + + QImageWriter imageWriter; + imageWriter.setFormat("PPMRAW"); + QBuffer buf; + buf.open(QIODevice::WriteOnly); + imageWriter.setDevice(&buf); + imageWriter.write(qimg); + return buf.buffer(); + } + } + return QVariant(); +} + +Atom QXlibMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding) +{ + requestedEncoding->clear(); + + // find matches for string types + if (format == QLatin1String("text/plain")) { + if (atoms.contains(QXlibStatic::atom(QXlibStatic::UTF8_STRING))) + return QXlibStatic::atom(QXlibStatic::UTF8_STRING); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT))) + return QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::TEXT))) + return QXlibStatic::atom(QXlibStatic::TEXT); + if (atoms.contains(XA_STRING)) + return XA_STRING; + } + + // find matches for uri types + if (format == QLatin1String("text/uri-list")) { + Atom a = mimeStringToAtom(display,format); + if (a && atoms.contains(a)) + return a; + a = mimeStringToAtom(display,QLatin1String("text/x-moz-url")); + if (a && atoms.contains(a)) + return a; + } + + // find match for image + if (format == QLatin1String("image/ppm")) { + if (atoms.contains(XA_PIXMAP)) + return XA_PIXMAP; + } + + // for string/text requests try to use a format with a well-defined charset + // first to avoid encoding problems + if (requestedType == QVariant::String + && format.startsWith(QLatin1String("text/")) + && !format.contains(QLatin1String("charset="))) { + + QString formatWithCharset = format; + formatWithCharset.append(QLatin1String(";charset=utf-8")); + + Atom a = mimeStringToAtom(display,formatWithCharset); + if (a && atoms.contains(a)) { + *requestedEncoding = "utf-8"; + return a; + } + } + + Atom a = mimeStringToAtom(display,format); + if (a && atoms.contains(a)) + return a; + + return 0; +} diff --git a/src/plugins/platforms/xlib/qtestlitemime.h b/src/plugins/platforms/xlib/qtestlitemime.h new file mode 100644 index 0000000..6a70ea4 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitemime.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEMIME_H +#define QTESTLITEMIME_H + +#include <private/qdnd_p.h> + +#include <QtGui/QClipboard> + +#include "qtestliteintegration.h" +#include "qtestliteclipboard.h" + +class QXlibMime : public QInternalMimeData { + Q_OBJECT +public: + QXlibMime(); + ~QXlibMime(); + + static QList<Atom> mimeAtomsForFormat(Display *display, const QString &format); + static QString mimeAtomToString(Display *display, Atom a); + static bool mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat); + static QStringList mimeFormatsForAtom(Display *display, Atom a); + static Atom mimeStringToAtom(Display *display, const QString &mimeType); + static QVariant mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding); + static Atom mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding); +}; + +#endif // QTESTLITEMIME_H diff --git a/src/plugins/platforms/xlib/qtestlitescreen.cpp b/src/plugins/platforms/xlib/qtestlitescreen.cpp new file mode 100644 index 0000000..714c17b --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitescreen.cpp @@ -0,0 +1,468 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitescreen.h" + +#include "qtestlitecursor.h" +#include "qtestlitewindow.h" +#include "qtestlitekeyboard.h" +#include "qtestlitestaticinfo.h" +#include "qtestliteclipboard.h" + +#include <QtCore/QDebug> +#include <QtCore/QSocketNotifier> +#include <QtCore/QElapsedTimer> + +#include <private/qapplication_p.h> + +#include <X11/extensions/Xfixes.h> + +QT_BEGIN_NAMESPACE + +static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); +static bool seen_badwindow; + +static int qt_x_errhandler(Display *dpy, XErrorEvent *err) +{ + +qDebug() << "qt_x_errhandler" << err->error_code; + + switch (err->error_code) { + case BadAtom: +#if 0 + if (err->request_code == 20 /* X_GetProperty */ + && (err->resourceid == XA_RESOURCE_MANAGER + || err->resourceid == XA_RGB_DEFAULT_MAP + || err->resourceid == ATOM(_NET_SUPPORTED) + || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) + || err->resourceid == ATOM(KDE_FULL_SESSION) + || err->resourceid == ATOM(KWIN_RUNNING) + || err->resourceid == ATOM(XdndProxy) + || err->resourceid == ATOM(XdndAware)) + + + ) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } +#endif + qDebug() << "BadAtom"; + break; + + case BadWindow: + if (err->request_code == 2 /* X_ChangeWindowAttributes */ + || err->request_code == 38 /* X_QueryPointer */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } + } + seen_badwindow = true; + if (err->request_code == 25 /* X_SendEvent */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } +#if 0 + if (X11->xdndHandleBadwindow()) { + qDebug("xdndHandleBadwindow returned true"); + return 0; + } +#endif + } +#if 0 + if (X11->ignore_badwindow) + return 0; +#endif + break; + + case BadMatch: + if (err->request_code == 42 /* X_SetInputFocus */) + return 0; + break; + + default: +#if 0 //!defined(QT_NO_XINPUT) + if (err->request_code == X11->xinput_major + && err->error_code == (X11->xinput_errorbase + XI_BadDevice) + && err->minor_code == 3 /* X_OpenDevice */) { + return 0; + } +#endif + break; + } + + char errstr[256]; + XGetErrorText( dpy, err->error_code, errstr, 256 ); + char buffer[256]; + char request_str[256]; + qsnprintf(buffer, 256, "%d", err->request_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); + if (err->request_code < 128) { + // X error for a normal protocol request + qWarning( "X Error: %s %d\n" + " Major opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + request_str, + err->resourceid ); + } else { + // X error for an extension request + const char *extensionName = 0; +#if 0 + if (err->request_code == X11->xrender_major) + extensionName = "RENDER"; + else if (err->request_code == X11->xrandr_major) + extensionName = "RANDR"; + else if (err->request_code == X11->xinput_major) + extensionName = "XInputExtension"; + else if (err->request_code == X11->mitshm_major) + extensionName = "MIT-SHM"; +#endif + char minor_str[256]; + if (extensionName) { + qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); + } else { + extensionName = "Uknown extension"; + qsnprintf(minor_str, 256, "Unknown request"); + } + qWarning( "X Error: %s %d\n" + " Extension: %d (%s)\n" + " Minor opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + extensionName, + err->minor_code, + minor_str, + err->resourceid ); + } + + // ### we really should distinguish between severe, non-severe and + // ### application specific errors + + return 0; +} + +QXlibScreen::QXlibScreen() + : mFormat(QImage::Format_RGB32) +{ + char *display_name = getenv("DISPLAY"); + mDisplay = XOpenDisplay(display_name); + mDisplayName = QString::fromLocal8Bit(display_name); + if (!mDisplay) { + fprintf(stderr, "Cannot connect to X server: %s\n", + display_name); + exit(1); + } + +#ifndef DONT_USE_MIT_SHM + Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay); + Q_ASSERT(MIT_SHM_extension_supported == True); +#endif + original_x_errhandler = XSetErrorHandler(qt_x_errhandler); + + if (qgetenv("DO_X_SYNCHRONIZE").toInt()) + XSynchronize(mDisplay, true); + + mScreen = DefaultScreen(mDisplay); + XSelectInput(mDisplay,rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); + int width = DisplayWidth(mDisplay, mScreen); + int height = DisplayHeight(mDisplay, mScreen); + mGeometry = QRect(0,0,width,height); + + int physicalWidth = DisplayWidthMM(mDisplay, mScreen); + int physicalHeight = DisplayHeightMM(mDisplay, mScreen); + mPhysicalSize = QSize(physicalWidth,physicalHeight); + + int xSocketNumber = XConnectionNumber(mDisplay); + + mDepth = DefaultDepth(mDisplay,mScreen); +#ifdef MYX11_DEBUG + qDebug() << "X socket:"<< xSocketNumber; +#endif + QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); + connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + mCursor = new QXlibCursor(this); + mKeyboard = new QXlibKeyboard(this); +} + +QXlibScreen::~QXlibScreen() +{ + delete mCursor; + XCloseDisplay(mDisplay); +} + +#ifdef KeyPress +#undef KeyPress +#endif +#ifdef KeyRelease +#undef KeyRelease +#endif + +bool QXlibScreen::handleEvent(XEvent *xe) +{ + int quit = false; + QXlibWindow *platformWindow = 0; + QWidget *widget = QWidget::find(xe->xany.window); + if (widget) { + platformWindow = static_cast<QXlibWindow *>(widget->platformWindow()); + } + + Atom wmProtocolsAtom = QXlibStatic::atom(QXlibStatic::WM_PROTOCOLS); + Atom wmDeleteWindowAtom = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); + switch (xe->type) { + + case ClientMessage: + if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { + Atom a = xe->xclient.data.l[0]; + if (a == wmDeleteWindowAtom) + platformWindow->handleCloseEvent(); + } + break; + + case Expose: + if (platformWindow) + if (xe->xexpose.count == 0) + platformWindow->paintEvent(); + break; + case ConfigureNotify: + if (platformWindow) + platformWindow->resizeEvent(&xe->xconfigure); + break; + + case ButtonPress: + if (platformWindow) + platformWindow->mousePressEvent(&xe->xbutton); + break; + + case ButtonRelease: + if (platformWindow) + platformWindow->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton); + break; + + case MotionNotify: + if (platformWindow) + platformWindow->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); + break; + + case XKeyPress: + mKeyboard->handleKeyEvent(widget,QEvent::KeyPress, &xe->xkey); + break; + + case XKeyRelease: + mKeyboard->handleKeyEvent(widget,QEvent::KeyRelease, &xe->xkey); + break; + + case EnterNotify: + if (platformWindow) + platformWindow->handleEnterEvent(); + break; + + case LeaveNotify: + if (platformWindow) + platformWindow->handleLeaveEvent(); + break; + + case XFocusIn: + if (platformWindow) + platformWindow->handleFocusInEvent(); + break; + + case XFocusOut: + if (platformWindow) + platformWindow->handleFocusOutEvent(); + break; + + case PropertyNotify: + break; + + case SelectionClear: + qDebug() << "Selection Clear!!!"; + break; + case SelectionRequest: + handleSelectionRequest(xe); + break; + case SelectionNotify: + qDebug() << "Selection Notify!!!!"; + + break; + + + default: +#ifdef MYX11_DEBUG + qDebug() << hex << xe->xany.window << "Other X event" << xe->type; +#endif + break; + } + + return quit; +} + +static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer) +{ + Atom clipboard = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY + || e->xselectionrequest.selection == clipboard)) + || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY + || e->xselectionclear.selection == clipboard))); +} + +bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) +{ + QElapsedTimer timer; + timer.start(); + do { + if (XCheckTypedWindowEvent(mDisplay,win,type,event)) + return true; + + // process other clipboard events, since someone is probably requesting data from us + XEvent e; + if (XCheckIfEvent(mDisplay, &e, checkForClipboardEvents, 0)) + handleEvent(&e); + + XFlush(mDisplay); + + // sleep 50 ms, so we don't use up CPU cycles all the time. + struct timeval usleep_tv; + usleep_tv.tv_sec = 0; + usleep_tv.tv_usec = 50000; + select(0, 0, 0, 0, &usleep_tv); + } while (timer.elapsed() < timeout); + return false; +} + +void QXlibScreen::eventDispatcher() +{ + ulong marker = XNextRequest(mDisplay); + // int i = 0; + while (XPending(mDisplay)) { + XEvent event; + XNextEvent(mDisplay, &event); + /* done = */ + handleEvent(&event); + + if (event.xany.serial >= marker) { + #ifdef MYX11_DEBUG + qDebug() << "potential livelock averted"; + #endif + #if 0 + if (XEventsQueued(mDisplay, QueuedAfterFlush)) { + qDebug() << " with events queued"; + QTimer::singleShot(0, this, SLOT(eventDispatcher())); + } + #endif + break; + } + } +} + +QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) +{ + if (w == 0 || h ==0) + return QImage(); + + //WinId 0 means the desktop widget + if (!window) + window = rootWindow(); + + XWindowAttributes window_attr; + if (!XGetWindowAttributes(mDisplay, window, &window_attr)) + return QImage(); + + if (w < 0) + w = window_attr.width - x; + if (h < 0) + h = window_attr.height - y; + + // Ideally, we should also limit ourselves to the screen area, but the Qt docs say + // that it's "unsafe" to go outside the screen, so we can ignore that problem. + + //We're definitely not optimizing for speed... + XImage *xi = XGetImage(mDisplay, window, x, y, w, h, AllPlanes, ZPixmap); + + if (!xi) + return QImage(); + + //taking a copy to make sure we have ownership -- not fast + QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); + + XDestroyImage(xi); + + return result; +} + +QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) +{ + QPlatformScreen *platformScreen = platformScreenForWidget(widget); + return static_cast<QXlibScreen *>(platformScreen); +} + +Display * QXlibScreen::display() const +{ + return mDisplay; +} + +int QXlibScreen::xScreenNumber() const +{ + return mScreen; +} + +QXlibKeyboard * QXlibScreen::keyboard() const +{ + return mKeyboard; +} + +void QXlibScreen::handleSelectionRequest(XEvent *event) +{ + QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); + QXlibClipboard *clipboard = static_cast<QXlibClipboard *>(integration->clipboard()); + clipboard->handleSelectionRequest(event); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitescreen.h b/src/plugins/platforms/xlib/qtestlitescreen.h new file mode 100644 index 0000000..7e59a59 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitescreen.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITESCREEN_H +#define QTESTLITESCREEN_H + +#include <QtGui/QPlatformScreen> +#include "qtestliteintegration.h" + +QT_BEGIN_NAMESPACE + +class QXlibCursor; +class QXlibKeyboard; + +class QXlibScreen : public QPlatformScreen +{ + Q_OBJECT +public: + QXlibScreen(); + + ~QXlibScreen(); + + QString displayName() const { return mDisplayName; } + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + + Window rootWindow() { return RootWindow(mDisplay, mScreen); } + unsigned long blackPixel() { return BlackPixel(mDisplay, mScreen); } + unsigned long whitePixel() { return WhitePixel(mDisplay, mScreen); } + + bool handleEvent(XEvent *xe); + bool waitForClipboardEvent(Window win, int type, XEvent *event, int timeout); + + QImage grabWindow(Window window, int x, int y, int w, int h); + + static QXlibScreen *testLiteScreenForWidget(QWidget *widget); + + Display *display() const; + int xScreenNumber() const; + + QXlibKeyboard *keyboard() const; + +public slots: + void eventDispatcher(); + +private: + + void handleSelectionRequest(XEvent *event); + QString mDisplayName; + QRect mGeometry; + QSize mPhysicalSize; + int mDepth; + QImage::Format mFormat; + QXlibCursor *mCursor; + QXlibKeyboard *mKeyboard; + + Display * mDisplay; + int mScreen; +}; + +QT_END_NAMESPACE + +#endif // QTESTLITESCREEN_H diff --git a/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp b/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp new file mode 100644 index 0000000..837636c --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp @@ -0,0 +1,511 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitestaticinfo.h" +#include "qtestlitescreen.h" + +#include <qplatformdefs.h> + +#include <QtGui/private/qapplication_p.h> +#include <QtCore/QBuffer> +#include <QtCore/QLibrary> + +#include <QDebug> + +#ifndef QT_NO_XFIXES +#include <X11/extensions/Xfixes.h> +#endif // QT_NO_XFIXES + +static const char * x11_atomnames = { + // window-manager <-> client protocols + "WM_PROTOCOLS\0" + "WM_DELETE_WINDOW\0" + "WM_TAKE_FOCUS\0" + "_NET_WM_PING\0" + "_NET_WM_CONTEXT_HELP\0" + "_NET_WM_SYNC_REQUEST\0" + "_NET_WM_SYNC_REQUEST_COUNTER\0" + + // ICCCM window state + "WM_STATE\0" + "WM_CHANGE_STATE\0" + + // Session management + "WM_CLIENT_LEADER\0" + "WM_WINDOW_ROLE\0" + "SM_CLIENT_ID\0" + + // Clipboard + "CLIPBOARD\0" + "INCR\0" + "TARGETS\0" + "MULTIPLE\0" + "TIMESTAMP\0" + "SAVE_TARGETS\0" + "CLIP_TEMPORARY\0" + "_QT_SELECTION\0" + "_QT_CLIPBOARD_SENTINEL\0" + "_QT_SELECTION_SENTINEL\0" + "CLIPBOARD_MANAGER\0" + + "RESOURCE_MANAGER\0" + + "_XSETROOT_ID\0" + + "_QT_SCROLL_DONE\0" + "_QT_INPUT_ENCODING\0" + + "_MOTIF_WM_HINTS\0" + + "DTWM_IS_RUNNING\0" + "ENLIGHTENMENT_DESKTOP\0" + "_DT_SAVE_MODE\0" + "_SGI_DESKS_MANAGER\0" + + // EWMH (aka NETWM) + "_NET_SUPPORTED\0" + "_NET_VIRTUAL_ROOTS\0" + "_NET_WORKAREA\0" + + "_NET_MOVERESIZE_WINDOW\0" + "_NET_WM_MOVERESIZE\0" + + "_NET_WM_NAME\0" + "_NET_WM_ICON_NAME\0" + "_NET_WM_ICON\0" + + "_NET_WM_PID\0" + + "_NET_WM_WINDOW_OPACITY\0" + + "_NET_WM_STATE\0" + "_NET_WM_STATE_ABOVE\0" + "_NET_WM_STATE_BELOW\0" + "_NET_WM_STATE_FULLSCREEN\0" + "_NET_WM_STATE_MAXIMIZED_HORZ\0" + "_NET_WM_STATE_MAXIMIZED_VERT\0" + "_NET_WM_STATE_MODAL\0" + "_NET_WM_STATE_STAYS_ON_TOP\0" + "_NET_WM_STATE_DEMANDS_ATTENTION\0" + + "_NET_WM_USER_TIME\0" + "_NET_WM_USER_TIME_WINDOW\0" + "_NET_WM_FULL_PLACEMENT\0" + + "_NET_WM_WINDOW_TYPE\0" + "_NET_WM_WINDOW_TYPE_DESKTOP\0" + "_NET_WM_WINDOW_TYPE_DOCK\0" + "_NET_WM_WINDOW_TYPE_TOOLBAR\0" + "_NET_WM_WINDOW_TYPE_MENU\0" + "_NET_WM_WINDOW_TYPE_UTILITY\0" + "_NET_WM_WINDOW_TYPE_SPLASH\0" + "_NET_WM_WINDOW_TYPE_DIALOG\0" + "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0" + "_NET_WM_WINDOW_TYPE_POPUP_MENU\0" + "_NET_WM_WINDOW_TYPE_TOOLTIP\0" + "_NET_WM_WINDOW_TYPE_NOTIFICATION\0" + "_NET_WM_WINDOW_TYPE_COMBO\0" + "_NET_WM_WINDOW_TYPE_DND\0" + "_NET_WM_WINDOW_TYPE_NORMAL\0" + "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0" + + "_KDE_NET_WM_FRAME_STRUT\0" + + "_NET_STARTUP_INFO\0" + "_NET_STARTUP_INFO_BEGIN\0" + + "_NET_SUPPORTING_WM_CHECK\0" + + "_NET_WM_CM_S0\0" + + "_NET_SYSTEM_TRAY_VISUAL\0" + + "_NET_ACTIVE_WINDOW\0" + + // Property formats + "COMPOUND_TEXT\0" + "TEXT\0" + "UTF8_STRING\0" + + // xdnd + "XdndEnter\0" + "XdndPosition\0" + "XdndStatus\0" + "XdndLeave\0" + "XdndDrop\0" + "XdndFinished\0" + "XdndTypeList\0" + "XdndActionList\0" + + "XdndSelection\0" + + "XdndAware\0" + "XdndProxy\0" + + "XdndActionCopy\0" + "XdndActionLink\0" + "XdndActionMove\0" + "XdndActionPrivate\0" + + // Motif DND + "_MOTIF_DRAG_AND_DROP_MESSAGE\0" + "_MOTIF_DRAG_INITIATOR_INFO\0" + "_MOTIF_DRAG_RECEIVER_INFO\0" + "_MOTIF_DRAG_WINDOW\0" + "_MOTIF_DRAG_TARGETS\0" + + "XmTRANSFER_SUCCESS\0" + "XmTRANSFER_FAILURE\0" + + // Xkb + "_XKB_RULES_NAMES\0" + + // XEMBED + "_XEMBED\0" + "_XEMBED_INFO\0" + + // Wacom old. (before version 0.10) + "Wacom Stylus\0" + "Wacom Cursor\0" + "Wacom Eraser\0" + + // Tablet + "STYLUS\0" + "ERASER\0" +}; + +/*! + \internal + Try to resolve a \a symbol from \a library with the version specified + by \a vernum. + + Note that, in the case of the Xfixes library, \a vernum is not the same as + \c XFIXES_MAJOR - it is a part of soname and may differ from the Xfixes + version. +*/ +static void* qt_load_library_runtime(const char *library, int vernum, + int highestVernum, const char *symbol) +{ + QList<int> versions; + // we try to load in the following order: + // explicit version -> the default one -> (from the highest (highestVernum) to the lowest (vernum) ) + if (vernum != -1) + versions << vernum; + versions << -1; + if (vernum != -1) { + for(int i = highestVernum; i > vernum; --i) + versions << i; + } + Q_FOREACH(int version, versions) { + QLatin1String libName(library); + QLibrary xfixesLib(libName, version); + void *ptr = xfixesLib.resolve(symbol); + if (ptr) + return ptr; + } + return 0; +} + +# define XFIXES_LOAD_RUNTIME(vernum, symbol, symbol_type) \ + (symbol_type)qt_load_library_runtime("libXfixes", vernum, 4, #symbol); +# define XFIXES_LOAD_V1(symbol) \ + XFIXES_LOAD_RUNTIME(1, symbol, Ptr##symbol) +# define XFIXES_LOAD_V2(symbol) \ + XFIXES_LOAD_RUNTIME(2, symbol, Ptr##symbol) + + +class QTestLiteStaticInfoPrivate +{ +public: + QTestLiteStaticInfoPrivate() + : use_xfixes(false) + , xfixes_major(0) + , xfixes_eventbase(0) + , xfixes_errorbase(0) + { + QXlibScreen *screen = qobject_cast<QXlibScreen *> (QApplicationPrivate::platformIntegration()->screens().at(0)); + Q_ASSERT(screen); + + initializeAllAtoms(screen); + initializeSupportedAtoms(screen); + + resolveXFixes(screen); + } + + bool isSupportedByWM(Atom atom) + { + if (!m_supportedAtoms) + return false; + + bool supported = false; + int i = 0; + while (m_supportedAtoms[i] != 0) { + if (m_supportedAtoms[i++] == atom) { + supported = true; + break; + } + } + + return supported; + } + + Atom atom(QXlibStatic::X11Atom atom) + { + return m_allAtoms[atom]; + } + + bool useXFixes() const { return use_xfixes; } + + int xFixesEventBase() const {return xfixes_eventbase; } + + PtrXFixesSelectSelectionInput xFixesSelectSelectionInput() const + { + return ptrXFixesSelectSelectionInput; + } + + QImage qimageFromXImage(XImage *xi) + { + QImage::Format format = QImage::Format_ARGB32_Premultiplied; + if (xi->depth == 24) + format = QImage::Format_RGB32; + else if (xi->depth == 16) + format = QImage::Format_RGB16; + + QImage image = QImage((uchar *)xi->data, xi->width, xi->height, xi->bytes_per_line, format).copy(); + + // we may have to swap the byte order + if ((QSysInfo::ByteOrder == QSysInfo::LittleEndian && xi->byte_order == MSBFirst) + || (QSysInfo::ByteOrder == QSysInfo::BigEndian && xi->byte_order == LSBFirst)) + { + for (int i=0; i < image.height(); i++) { + if (xi->depth == 16) { + ushort *p = (ushort*)image.scanLine(i); + ushort *end = p + image.width(); + while (p < end) { + *p = ((*p << 8) & 0xff00) | ((*p >> 8) & 0x00ff); + p++; + } + } else { + uint *p = (uint*)image.scanLine(i); + uint *end = p + image.width(); + while (p < end) { + *p = ((*p << 24) & 0xff000000) | ((*p << 8) & 0x00ff0000) + | ((*p >> 8) & 0x0000ff00) | ((*p >> 24) & 0x000000ff); + p++; + } + } + } + } + + // fix-up alpha channel + if (format == QImage::Format_RGB32) { + QRgb *p = (QRgb *)image.bits(); + for (int y = 0; y < xi->height; ++y) { + for (int x = 0; x < xi->width; ++x) + p[x] |= 0xff000000; + p += xi->bytes_per_line / 4; + } + } + + return image; + } + + +private: + + void initializeAllAtoms(QXlibScreen *screen) { + const char *names[QXlibStatic::NAtoms]; + const char *ptr = x11_atomnames; + + int i = 0; + while (*ptr) { + names[i++] = ptr; + while (*ptr) + ++ptr; + ++ptr; + } + + Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); + + QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); + settings_atom_name += XDisplayName(qPrintable(screen->displayName())); + names[i++] = settings_atom_name; + + Q_ASSERT(i == QXlibStatic::NAtoms); + #if 0//defined(XlibSpecificationRelease) && (XlibSpecificationRelease >= 6) + XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); + #else + for (i = 0; i < QXlibStatic::NAtoms; ++i) + m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); + #endif + } + + void initializeSupportedAtoms(QXlibScreen *screen) + { + Atom type; + int format; + long offset = 0; + unsigned long nitems, after; + unsigned char *data = 0; + + int e = XGetWindowProperty(screen->display(), screen->rootWindow(), + this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, + False, XA_ATOM, &type, &format, &nitems, &after, &data); + if (data) + XFree(data); + + if (e == Success && type == XA_ATOM && format == 32) { + QBuffer ts; + ts.open(QIODevice::WriteOnly); + + while (after > 0) { + XGetWindowProperty(screen->display(), screen->rootWindow(), + this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, + False, XA_ATOM, &type, &format, &nitems, &after, &data); + + if (type == XA_ATOM && format == 32) { + ts.write(reinterpret_cast<char *>(data), nitems * sizeof(long)); + offset += nitems; + } else + after = 0; + if (data) + XFree(data); + } + + // compute nitems + QByteArray buffer(ts.buffer()); + nitems = buffer.size() / sizeof(Atom); + m_supportedAtoms = new Atom[nitems + 1]; + Atom *a = (Atom *) buffer.data(); + uint i; + for (i = 0; i < nitems; i++) + m_supportedAtoms[i] = a[i]; + m_supportedAtoms[nitems] = 0; + + } + } + + void resolveXFixes(QXlibScreen *screen) + { +#ifndef QT_NO_XFIXES + // See if Xfixes is supported on the connected display + if (XQueryExtension(screen->display(), "XFIXES", &xfixes_major, + &xfixes_eventbase, &xfixes_errorbase)) { + ptrXFixesQueryExtension = XFIXES_LOAD_V1(XFixesQueryExtension); + ptrXFixesQueryVersion = XFIXES_LOAD_V1(XFixesQueryVersion); + ptrXFixesSetCursorName = XFIXES_LOAD_V2(XFixesSetCursorName); + ptrXFixesSelectSelectionInput = XFIXES_LOAD_V2(XFixesSelectSelectionInput); + + if(ptrXFixesQueryExtension && ptrXFixesQueryVersion + && ptrXFixesQueryExtension(screen->display(), &xfixes_eventbase, + &xfixes_errorbase)) { + // Xfixes is supported. + // Note: the XFixes protocol version is negotiated using QueryVersion. + // We supply the highest version we support, the X server replies with + // the highest version it supports, but no higher than the version we + // asked for. The version sent back is the protocol version the X server + // will use to talk us. If this call is removed, the behavior of the + // X server when it receives an XFixes request is undefined. + int major = 3; + int minor = 0; + ptrXFixesQueryVersion(screen->display(), &major, &minor); + use_xfixes = (major >= 1); + xfixes_major = major; + } + } +#endif // QT_NO_XFIXES + + } + + Atom *m_supportedAtoms; + Atom m_allAtoms[QXlibStatic::NAtoms]; + +#ifndef QT_NO_XFIXES + PtrXFixesQueryExtension ptrXFixesQueryExtension; + PtrXFixesQueryVersion ptrXFixesQueryVersion; + PtrXFixesSetCursorName ptrXFixesSetCursorName; + PtrXFixesSelectSelectionInput ptrXFixesSelectSelectionInput; +#endif + + bool use_xfixes; + int xfixes_major; + int xfixes_eventbase; + int xfixes_errorbase; + +}; +Q_GLOBAL_STATIC(QTestLiteStaticInfoPrivate, qTestLiteStaticInfoPrivate); + + +Atom QXlibStatic::atom(QXlibStatic::X11Atom atom) +{ + return qTestLiteStaticInfoPrivate()->atom(atom); +} + +bool QXlibStatic::isSupportedByWM(Atom atom) +{ + return qTestLiteStaticInfoPrivate()->isSupportedByWM(atom); +} + +bool QXlibStatic::useXFixes() +{ + return qTestLiteStaticInfoPrivate()->useXFixes(); +} + +int QXlibStatic::xFixesEventBase() +{ + return qTestLiteStaticInfoPrivate()->xFixesEventBase(); +} + +#ifndef QT_NO_XFIXES +PtrXFixesSelectSelectionInput QXlibStatic::xFixesSelectSelectionInput() +{ + qDebug() << qTestLiteStaticInfoPrivate()->useXFixes(); + if (!qTestLiteStaticInfoPrivate()->useXFixes()) + return 0; + + return qTestLiteStaticInfoPrivate()->xFixesSelectSelectionInput(); +} + +QImage QXlibStatic::qimageFromXImage(XImage *xi) +{ + return qTestLiteStaticInfoPrivate()->qimageFromXImage(xi); +} +#endif //QT_NO_XFIXES diff --git a/src/plugins/platforms/xlib/qtestlitestaticinfo.h b/src/plugins/platforms/xlib/qtestlitestaticinfo.h new file mode 100644 index 0000000..8473ee9 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitestaticinfo.h @@ -0,0 +1,413 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITESTATICINFO_H +#define QTESTLITESTATICINFO_H + +#include <QtCore/QTextStream> +#include <QtCore/QDataStream> +#include <QtCore/QMetaType> +#include <QtCore/QVariant> + +#if defined(_XLIB_H_) // crude hack, but... +#error "cannot include <X11/Xlib.h> before this file" +#endif +#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback +#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback +#define XSetIMValues qt_XSetIMValues +#include <X11/Xlib.h> +#undef XRegisterIMInstantiateCallback +#undef XUnregisterIMInstantiateCallback +#undef XSetIMValues + +#include <X11/Xutil.h> +#include <X11/Xos.h> +#ifdef index +# undef index +#endif +#ifdef rindex +# undef rindex +#endif +#ifdef Q_OS_VXWORS +# ifdef open +# undef open +# endif +# ifdef getpid +# undef getpid +# endif +#endif // Q_OS_VXWORKS +#include <X11/Xatom.h> + +//#define QT_NO_SHAPE +#ifdef QT_NO_SHAPE +# define XShapeCombineRegion(a,b,c,d,e,f,g) +# define XShapeCombineMask(a,b,c,d,e,f,g) +#else +# include <X11/extensions/shape.h> +#endif // QT_NO_SHAPE + + +#if !defined (QT_NO_TABLET) +# include <X11/extensions/XInput.h> +#if defined (Q_OS_IRIX) +# include <X11/extensions/SGIMisc.h> +# include <wacom.h> +#endif +#endif // QT_NO_TABLET + + +// #define QT_NO_XINERAMA +#ifndef QT_NO_XINERAMA +// XFree86 does not C++ify Xinerama (at least up to XFree86 4.0.3). +extern "C" { +# include <X11/extensions/Xinerama.h> +} +#endif // QT_NO_XINERAMA + +// #define QT_NO_XRANDR +#ifndef QT_NO_XRANDR +# include <X11/extensions/Xrandr.h> +#endif // QT_NO_XRANDR + +// #define QT_NO_XRENDER +#ifndef QT_NO_XRENDER +# include <X11/extensions/Xrender.h> +#endif // QT_NO_XRENDER + +#ifndef QT_NO_XSYNC +extern "C" { +# include "X11/extensions/sync.h" +} +#endif + +// #define QT_NO_XKB +#ifndef QT_NO_XKB +# include <X11/XKBlib.h> +#endif // QT_NO_XKB + + +#if !defined(XlibSpecificationRelease) +# define X11R4 +typedef char *XPointer; +#else +# undef X11R4 +#endif + +#ifndef QT_NO_XFIXES +typedef Bool (*PtrXFixesQueryExtension)(Display *, int *, int *); +typedef Status (*PtrXFixesQueryVersion)(Display *, int *, int *); +typedef void (*PtrXFixesSetCursorName)(Display *dpy, Cursor cursor, const char *name); +typedef void (*PtrXFixesSelectSelectionInput)(Display *dpy, Window win, Atom selection, unsigned long eventMask); +#endif // QT_NO_XFIXES + +#ifndef QT_NO_XCURSOR +#include <X11/Xcursor/Xcursor.h> +typedef Cursor (*PtrXcursorLibraryLoadCursor)(Display *, const char *); +#endif // QT_NO_XCURSOR + +#ifndef QT_NO_XINERAMA +typedef Bool (*PtrXineramaQueryExtension)(Display *dpy, int *event_base, int *error_base); +typedef Bool (*PtrXineramaIsActive)(Display *dpy); +typedef XineramaScreenInfo *(*PtrXineramaQueryScreens)(Display *dpy, int *number); +#endif // QT_NO_XINERAMA + +#ifndef QT_NO_XRANDR +typedef void (*PtrXRRSelectInput)(Display *, Window, int); +typedef int (*PtrXRRUpdateConfiguration)(XEvent *); +typedef int (*PtrXRRRootToScreen)(Display *, Window); +typedef Bool (*PtrXRRQueryExtension)(Display *, int *, int *); +#endif // QT_NO_XRANDR + +#ifndef QT_NO_XINPUT +typedef int (*PtrXCloseDevice)(Display *, XDevice *); +typedef XDeviceInfo* (*PtrXListInputDevices)(Display *, int *); +typedef XDevice* (*PtrXOpenDevice)(Display *, XID); +typedef void (*PtrXFreeDeviceList)(XDeviceInfo *); +typedef int (*PtrXSelectExtensionEvent)(Display *, Window, XEventClass *, int); +#endif // QT_NO_XINPUT + +/* + * Solaris patch 108652-47 and higher fixes crases in + * XRegisterIMInstantiateCallback, but the function doesn't seem to + * work. + * + * Instead, we disabled R6 input, and open the input method + * immediately at application start. + */ + +//######### XFree86 has wrong declarations for XRegisterIMInstantiateCallback +//######### and XUnregisterIMInstantiateCallback in at least version 3.3.2. +//######### Many old X11R6 header files lack XSetIMValues. +//######### Therefore, we have to declare these functions ourselves. + +extern "C" Bool XRegisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +extern "C" Bool XUnregisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +#ifndef X11R4 +# include <X11/Xlocale.h> +#endif // X11R4 + + +#ifndef QT_NO_MITSHM +# include <X11/extensions/XShm.h> +#endif // QT_NO_MITSHM + +// rename a couple of X defines to get rid of name clashes +// resolve the conflict between X11's FocusIn and QEvent::FocusIn +enum { + XFocusOut = FocusOut, + XFocusIn = FocusIn, + XKeyPress = KeyPress, + XKeyRelease = KeyRelease, + XNone = None, + XRevertToParent = RevertToParent, + XGrayScale = GrayScale, + XCursorShape = CursorShape +}; +#undef FocusOut +#undef FocusIn +#undef KeyPress +#undef KeyRelease +#undef None +#undef RevertToParent +#undef GrayScale +#undef CursorShape + +#ifdef FontChange +#undef FontChange +#endif + + +class QXlibStatic +{ +public: + enum X11Atom { + // window-manager <-> client protocols + WM_PROTOCOLS, + WM_DELETE_WINDOW, + WM_TAKE_FOCUS, + _NET_WM_PING, + _NET_WM_CONTEXT_HELP, + _NET_WM_SYNC_REQUEST, + _NET_WM_SYNC_REQUEST_COUNTER, + + // ICCCM window state + WM_STATE, + WM_CHANGE_STATE, + + // Session management + WM_CLIENT_LEADER, + WM_WINDOW_ROLE, + SM_CLIENT_ID, + + // Clipboard + CLIPBOARD, + INCR, + TARGETS, + MULTIPLE, + TIMESTAMP, + SAVE_TARGETS, + CLIP_TEMPORARY, + _QT_SELECTION, + _QT_CLIPBOARD_SENTINEL, + _QT_SELECTION_SENTINEL, + CLIPBOARD_MANAGER, + + RESOURCE_MANAGER, + + _XSETROOT_ID, + + _QT_SCROLL_DONE, + _QT_INPUT_ENCODING, + + _MOTIF_WM_HINTS, + + DTWM_IS_RUNNING, + ENLIGHTENMENT_DESKTOP, + _DT_SAVE_MODE, + _SGI_DESKS_MANAGER, + + // EWMH (aka NETWM) + _NET_SUPPORTED, + _NET_VIRTUAL_ROOTS, + _NET_WORKAREA, + + _NET_MOVERESIZE_WINDOW, + _NET_WM_MOVERESIZE, + + _NET_WM_NAME, + _NET_WM_ICON_NAME, + _NET_WM_ICON, + + _NET_WM_PID, + + _NET_WM_WINDOW_OPACITY, + + _NET_WM_STATE, + _NET_WM_STATE_ABOVE, + _NET_WM_STATE_BELOW, + _NET_WM_STATE_FULLSCREEN, + _NET_WM_STATE_MAXIMIZED_HORZ, + _NET_WM_STATE_MAXIMIZED_VERT, + _NET_WM_STATE_MODAL, + _NET_WM_STATE_STAYS_ON_TOP, + _NET_WM_STATE_DEMANDS_ATTENTION, + + _NET_WM_USER_TIME, + _NET_WM_USER_TIME_WINDOW, + _NET_WM_FULL_PLACEMENT, + + _NET_WM_WINDOW_TYPE, + _NET_WM_WINDOW_TYPE_DESKTOP, + _NET_WM_WINDOW_TYPE_DOCK, + _NET_WM_WINDOW_TYPE_TOOLBAR, + _NET_WM_WINDOW_TYPE_MENU, + _NET_WM_WINDOW_TYPE_UTILITY, + _NET_WM_WINDOW_TYPE_SPLASH, + _NET_WM_WINDOW_TYPE_DIALOG, + _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, + _NET_WM_WINDOW_TYPE_POPUP_MENU, + _NET_WM_WINDOW_TYPE_TOOLTIP, + _NET_WM_WINDOW_TYPE_NOTIFICATION, + _NET_WM_WINDOW_TYPE_COMBO, + _NET_WM_WINDOW_TYPE_DND, + _NET_WM_WINDOW_TYPE_NORMAL, + _KDE_NET_WM_WINDOW_TYPE_OVERRIDE, + + _KDE_NET_WM_FRAME_STRUT, + + _NET_STARTUP_INFO, + _NET_STARTUP_INFO_BEGIN, + + _NET_SUPPORTING_WM_CHECK, + + _NET_WM_CM_S0, + + _NET_SYSTEM_TRAY_VISUAL, + + _NET_ACTIVE_WINDOW, + + // Property formats + COMPOUND_TEXT, + TEXT, + UTF8_STRING, + + // Xdnd + XdndEnter, + XdndPosition, + XdndStatus, + XdndLeave, + XdndDrop, + XdndFinished, + XdndTypelist, + XdndActionList, + + XdndSelection, + + XdndAware, + XdndProxy, + + XdndActionCopy, + XdndActionLink, + XdndActionMove, + XdndActionPrivate, + + // Motif DND + _MOTIF_DRAG_AND_DROP_MESSAGE, + _MOTIF_DRAG_INITIATOR_INFO, + _MOTIF_DRAG_RECEIVER_INFO, + _MOTIF_DRAG_WINDOW, + _MOTIF_DRAG_TARGETS, + + XmTRANSFER_SUCCESS, + XmTRANSFER_FAILURE, + + // Xkb + _XKB_RULES_NAMES, + + // XEMBED + _XEMBED, + _XEMBED_INFO, + + XWacomStylus, + XWacomCursor, + XWacomEraser, + + XTabletStylus, + XTabletEraser, + + NPredefinedAtoms, + + _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, + NAtoms + }; + + static Atom atom(X11Atom atom); + static bool isSupportedByWM(Atom atom); + + static bool useXFixes(); + static int xFixesEventBase(); + + #ifndef QT_NO_XFIXES + static PtrXFixesSelectSelectionInput xFixesSelectSelectionInput(); + #endif //QT_NO_XFIXES + + static QImage qimageFromXImage(XImage *xi); + + +}; + +#endif // QTESTLITESTATICINFO_H diff --git a/src/plugins/platforms/xlib/qtestlitewindow.cpp b/src/plugins/platforms/xlib/qtestlitewindow.cpp new file mode 100644 index 0000000..0f11a81 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitewindow.cpp @@ -0,0 +1,735 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitewindow.h" + +#include "qtestliteintegration.h" +#include "qtestlitescreen.h" +#include "qtestlitekeyboard.h" +#include "qtestlitestaticinfo.h" + +#include <QtGui/QWindowSystemInterface> +#include <QSocketNotifier> +#include <QApplication> +#include <QDebug> + +#include <QtGui/private/qwindowsurface_p.h> +#include <QtGui/private/qapplication_p.h> + +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) +#include "qglxintegration.h" +#else +#include "../eglconvenience/qeglconvenience.h" +#include "../eglconvenience/qeglplatformcontext.h" +#include "qtestliteeglintegration.h" +#endif //QT_OPENGL_ES_2 +#endif //QT_NO_OPENGL + +//#define MYX11_DEBUG + +QT_BEGIN_NAMESPACE + +QXlibWindow::QXlibWindow(QWidget *window) + : QPlatformWindow(window) + , mGLContext(0) + , mScreen(QXlibScreen::testLiteScreenForWidget(window)) +{ + int x = window->x(); + int y = window->y(); + int w = window->width(); + int h = window->height(); + + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); +#else + QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); + + EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); + EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); + VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); + + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = id; + + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); +#endif //!defined(QT_OPENGL_ES_2) + if (visualInfo) { + Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + } else { + qFatal("no window!"); + } +#endif //!defined(QT_NO_OPENGL) + } else { + x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + mScreen->blackPixel(), mScreen->whitePixel()); + } + +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; +#endif + + XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); + + XSelectInput(mScreen->display(), x_window, + ExposureMask | KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | FocusChangeMask | + PointerMotionMask | ButtonPressMask | ButtonReleaseMask | + ButtonMotionMask | PropertyChangeMask | + StructureNotifyMask); + + gc = createGC(); + + Atom protocols[5]; + int n = 0; + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); // support del window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_TAKE_FOCUS); // support take focus window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_PING); // support _NET_WM_PING protocol +#ifndef QT_NO_XSYNC + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol +#endif // QT_NO_XSYNC + if (window->windowFlags() & Qt::WindowContextHelpButtonHint) + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); + XSetWMProtocols(mScreen->display(), x_window, protocols, n); +} + + + +QXlibWindow::~QXlibWindow() +{ +#ifdef MYX11_DEBUG + qDebug() << "~QTestLiteWindow" << hex << x_window; +#endif + delete mGLContext; + XFreeGC(mScreen->display(), gc); + XDestroyWindow(mScreen->display(), x_window); +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Mouse event stuff +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & Button1Mask) + ret |= Qt::LeftButton; + if (s & Button2Mask) + ret |= Qt::MidButton; + if (s & Button3Mask) + ret |= Qt::RightButton; + return ret; +} + + + +void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) +{ + static QPoint mousePoint; + + Qt::MouseButton button = Qt::NoButton; + Qt::MouseButtons buttons = translateMouseButtons(e->state); + Qt::KeyboardModifiers modifiers = mScreen->keyboard()->translateModifiers(e->state); + if (type != QEvent::MouseMove) { + switch (e->button) { + case Button1: button = Qt::LeftButton; break; + case Button2: button = Qt::MidButton; break; + case Button3: button = Qt::RightButton; break; + case Button4: + case Button5: + case 6: + case 7: { + //mouse wheel + if (type == QEvent::MouseButtonPress) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); + bool hor = (((e->button == Button4 || e->button == Button5) + && (modifiers & Qt::AltModifier)) + || (e->button == 6 || e->button == 7)); + QWindowSystemInterface::handleWheelEvent(widget(), e->time, + QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + delta, hor ? Qt::Horizontal : Qt::Vertical); + } + return; + } + default: break; + } + } + + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + buttons); + + mousePoint = QPoint(e->x_root, e->y_root); +} + +void QXlibWindow::handleCloseEvent() +{ + QWindowSystemInterface::handleCloseEvent(widget()); +} + + +void QXlibWindow::handleEnterEvent() +{ + QWindowSystemInterface::handleEnterEvent(widget()); +} + +void QXlibWindow::handleLeaveEvent() +{ + QWindowSystemInterface::handleLeaveEvent(widget()); +} + +void QXlibWindow::handleFocusInEvent() +{ + QWindowSystemInterface::handleWindowActivated(widget()); +} + +void QXlibWindow::handleFocusOutEvent() +{ + QWindowSystemInterface::handleWindowActivated(0); +} + + + +void QXlibWindow::setGeometry(const QRect &rect) +{ + XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); + QPlatformWindow::setGeometry(rect); +} + + +Qt::WindowFlags QXlibWindow::windowFlags() const +{ + return mWindowFlags; +} + +WId QXlibWindow::winId() const +{ + return x_window; +} + +void QXlibWindow::setParent(const QPlatformWindow *window) +{ + QPoint topLeft = geometry().topLeft(); + XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); +} + +void QXlibWindow::raise() +{ + XRaiseWindow(mScreen->display(), x_window); +} + +void QXlibWindow::lower() +{ + XLowerWindow(mScreen->display(), x_window); +} + +void QXlibWindow::setWindowTitle(const QString &title) +{ + QByteArray ba = title.toLatin1(); //We're not making a general solution here... + XTextProperty windowName; + windowName.value = (unsigned char *)ba.constData(); + windowName.encoding = XA_STRING; + windowName.format = 8; + windowName.nitems = ba.length(); + + XSetWMName(mScreen->display(), x_window, &windowName); +} + +GC QXlibWindow::createGC() +{ + GC gc; + + gc = XCreateGC(mScreen->display(), x_window, 0, 0); + if (gc < 0) { + qWarning("QTestLiteWindow::createGC() could not create GC"); + } + return gc; +} + +void QXlibWindow::paintEvent() +{ +#ifdef MYX11_DEBUG +// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; +#endif + + if (QWindowSurface *surface = widget()->windowSurface()) + surface->flush(widget(), widget()->geometry(), QPoint()); +} + +void QXlibWindow::requestActivateWindow() +{ + XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); +} + +void QXlibWindow::resizeEvent(XConfigureEvent *e) +{ + int xpos = geometry().x(); + int ypos = geometry().y(); + if ((e->width != geometry().width() || e->height != geometry().height()) && e->x == 0 && e->y == 0) { + //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; + } else { + //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; + xpos = e->x; + ypos = e->y; + } +#ifdef MYX11_DEBUG + qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; +#endif + + QRect newRect(xpos, ypos, e->width, e->height); + QWindowSystemInterface::handleGeometryChange(widget(), newRect); +} + +void QXlibWindow::mousePressEvent(XButtonEvent *e) +{ + static long prevTime = 0; + static Window prevWindow; + static int prevX = -999; + static int prevY = -999; + + QEvent::Type type = QEvent::MouseButtonPress; + + if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() + && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = e->time; + } + prevWindow = e->window; + prevX = e->x; + prevY = e->y; + + handleMouseEvent(type, e); +} + +QXlibMWMHints QXlibWindow::getMWMHints() const +{ + QXlibMWMHints mwmhints; + + Atom type; + int format; + ulong nitems, bytesLeft; + uchar *data = 0; + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); + if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, + atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, + &data) == Success) + && (type == atomForMotifWmHints + && format == 32 + && nitems >= 5)) { + mwmhints = *(reinterpret_cast<QXlibMWMHints *>(data)); + } else { + mwmhints.flags = 0L; + mwmhints.functions = MWM_FUNC_ALL; + mwmhints.decorations = MWM_DECOR_ALL; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + } + + if (data) + XFree(data); + + return mwmhints; +} + +void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) +{ + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); + if (mwmhints.flags != 0l) { + XChangeProperty(mScreen->display(), x_window, + atomForMotifWmHints, atomForMotifWmHints, 32, + PropModeReplace, (unsigned char *) &mwmhints, 5); + } else { + XDeleteProperty(mScreen->display(), x_window, atomForMotifWmHints); + } +} + +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + +QVector<Atom> QXlibWindow::getNetWmState() const +{ + QVector<Atom> returnValue; + + // Don't read anything, just get the size of the property data + Atom actualType; + int actualFormat; + ulong propertyLength; + ulong bytesLeft; + uchar *propertyData = 0; + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, + False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) == Success + && actualType == XA_ATOM && actualFormat == 32) { + returnValue.resize(bytesLeft / 4); + XFree((char*) propertyData); + + // fetch all data + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, + returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) != Success) { + returnValue.clear(); + } else if (propertyLength != (ulong)returnValue.size()) { + returnValue.resize(propertyLength); + } + + // put it into netWmState + if (!returnValue.isEmpty()) { + memcpy(returnValue.data(), propertyData, returnValue.size() * sizeof(Atom)); + } + XFree((char*) propertyData); + } + + return returnValue; +} + +Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) +{ +// Q_ASSERT(flags & Qt::Window); + mWindowFlags = flags; + +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; +#endif + Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + Q_UNUSED(topLevel); + Q_UNUSED(dialog); + Q_UNUSED(desktop); + + bool tooltip = (type == Qt::ToolTip); + + XSetWindowAttributes wsa; + + QXlibMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + + ulong wsa_mask = 0; + if (type != Qt::SplashScreen) { // && customize) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } + + if (tool) { + wsa.save_under = True; + wsa_mask |= CWSaveUnder; + } + + if (flags & Qt::X11BypassWindowManagerHint) { + wsa.override_redirect = True; + wsa_mask |= CWOverrideRedirect; + } +#if 0 + if (wsa_mask && initializeWindow) { + Q_ASSERT(id); + XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); + } +#endif + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + if (widget()->windowModality() == Qt::WindowModal) { + mwmhints.input_mode = MWM_INPUT_PRIMARY_APPLICATION_MODAL; + } else if (widget()->windowModality() == Qt::ApplicationModal) { + mwmhints.input_mode = MWM_INPUT_FULL_APPLICATION_MODAL; + } + + setMWMHints(mwmhints); + + QVector<Atom> netWmState = getNetWmState(); + + if (flags & Qt::WindowStaysOnTopHint) { + if (flags & Qt::WindowStaysOnBottomHint) + qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP)); + } else if (flags & Qt::WindowStaysOnBottomHint) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW)); + } + if (widget()->isFullScreen()) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN)); + } + if (widget()->isMaximized()) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT)); + } + if (widget()->windowModality() != Qt::NonModal) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL)); + } + + if (!netWmState.isEmpty()) { + XChangeProperty(mScreen->display(), x_window, + QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, + (unsigned char *) netWmState.data(), netWmState.size()); + } else { + XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); + } + +//##### only if initializeWindow??? + + if (popup || tooltip) { // popup widget +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; +#endif + // set EWMH window types + // setNetWmWindowTypes(); + + wsa.override_redirect = True; + wsa.save_under = True; + XChangeWindowAttributes(mScreen->display(), x_window, CWOverrideRedirect | CWSaveUnder, + &wsa); + } else { +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for non-popup"; +#endif + } + + return flags; +} + +void QXlibWindow::setVisible(bool visible) +{ +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; +#endif + if (isTransient(widget())) { + Window parentXWindow = x_window; + if (widget()->parentWidget()) { + QWidget *widgetParent = widget()->parentWidget()->window(); + if (widgetParent && widgetParent->platformWindow()) { + QXlibWindow *parentWidnow = static_cast<QXlibWindow *>(widgetParent->platformWindow()); + parentXWindow = parentWidnow->x_window; + } + } + XSetTransientForHint(mScreen->display(),x_window,parentXWindow); + } + + if (visible) { + //ensure that the window is viewed in correct position. + doSizeHints(); + XMapWindow(mScreen->display(), x_window); + } else { + XUnmapWindow(mScreen->display(), x_window); + } +} + +void QXlibWindow::setCursor(const Cursor &cursor) +{ + XDefineCursor(mScreen->display(), x_window, cursor); + XFlush(mScreen->display()); +} + +QPlatformGLContext *QXlibWindow::glContext() const +{ + if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) + return 0; + if (!mGLContext) { + QXlibWindow *that = const_cast<QXlibWindow *>(this); +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); +#else + EGLDisplay display = eglGetDisplay(mScreen->display()); + + QPlatformWindowFormat windowFormat = correctColorBuffers(widget()->platformWindowFormat()); + + EGLConfig config = q_configFromQPlatformWindowFormat(display,windowFormat); + QVector<EGLint> eglContextAttrs; + eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + eglContextAttrs.append(2); + eglContextAttrs.append(EGL_NONE); + + EGLSurface eglSurface = eglCreateWindowSurface(display,config,(EGLNativeWindowType)x_window,0); + that->mGLContext = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); +#endif +#endif + } + return mGLContext; +} + +Window QXlibWindow::xWindow() const +{ + return x_window; +} + +GC QXlibWindow::graphicsContext() const +{ + return gc; +} + +void QXlibWindow::doSizeHints() +{ + Q_ASSERT(widget()->testAttribute(Qt::WA_WState_Created)); + XSizeHints s; + s.flags = 0; + QRect g = geometry(); + s.x = g.x(); + s.y = g.y(); + s.width = g.width(); + s.height = g.height(); + s.flags |= USPosition; + s.flags |= PPosition; + s.flags |= USSize; + s.flags |= PSize; + s.flags |= PWinGravity; + s.win_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity; + XSetWMNormalHints(mScreen->display(), x_window, &s); +} + +QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const +{ + // I have only tested this setup on a dodgy intel setup, where I didn't use standard libs, + // so this might be not what we want to do :) + if ( !(platformWindowFormat.redBufferSize() == -1 && + platformWindowFormat.greenBufferSize() == -1 && + platformWindowFormat.blueBufferSize() == -1)) + return platformWindowFormat; + + QPlatformWindowFormat windowFormat = platformWindowFormat; + if (mScreen->depth() == 16) { + windowFormat.setRedBufferSize(5); + windowFormat.setGreenBufferSize(6); + windowFormat.setBlueBufferSize(5); + } else { + windowFormat.setRedBufferSize(8); + windowFormat.setGreenBufferSize(8); + windowFormat.setBlueBufferSize(8); + } + + return windowFormat; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitewindow.h b/src/plugins/platforms/xlib/qtestlitewindow.h new file mode 100644 index 0000000..ccf6867 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitewindow.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEWINDOW_H +#define QTESTLITEWINDOW_H + +#include "qtestliteintegration.h" + +#include <QPlatformWindow> +#include <QEvent> + +#include <QObject> +#include <QImage> + +struct QXlibMWMHints { + ulong flags, functions, decorations; + long input_mode; + ulong status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + +class QXlibWindow : public QPlatformWindow +{ +public: + QXlibWindow(QWidget *window); + ~QXlibWindow(); + + + void mousePressEvent(XButtonEvent*); + void handleMouseEvent(QEvent::Type, XButtonEvent *ev); + + void handleCloseEvent(); + void handleEnterEvent(); + void handleLeaveEvent(); + void handleFocusInEvent(); + void handleFocusOutEvent(); + + void resizeEvent(XConfigureEvent *configure_event); + void paintEvent(); + + void requestActivateWindow(); + + void setGeometry(const QRect &rect); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + Qt::WindowFlags windowFlags() const; + void setVisible(bool visible); + WId winId() const; + void setParent(const QPlatformWindow *window); + void raise(); + void lower(); + void setWindowTitle(const QString &title); + + void setCursor(const Cursor &cursor); + + QPlatformGLContext *glContext() const; + + Window xWindow() const; + GC graphicsContext() const; + +protected: + QVector<Atom> getNetWmState() const; + void setMWMHints(const QXlibMWMHints &mwmhints); + QXlibMWMHints getMWMHints() const; + + void doSizeHints(); + +private: + QPlatformWindowFormat correctColorBuffers(const QPlatformWindowFormat &windowFormat)const; + + Window x_window; + GC gc; + + GC createGC(); + + QPlatformGLContext *mGLContext; + QXlibScreen *mScreen; + Qt::WindowFlags mWindowFlags; +}; + +#endif diff --git a/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp b/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp new file mode 100644 index 0000000..088730d --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitewindowsurface.h" +#include "qtestliteintegration.h" + +#include <QtCore/qdebug.h> +#include <QWindowSystemInterface> + +#include "qtestlitewindow.h" +#include "qtestlitescreen.h" + +# include <sys/ipc.h> +# include <sys/shm.h> +# include <X11/extensions/XShm.h> + +QT_BEGIN_NAMESPACE + + +struct QXlibShmImageInfo { + QXlibShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~QXlibShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; + + +#ifndef DONT_USE_MIT_SHM +void QXlibShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void QXlibWindowSurface::resizeShmImage(int width, int height) +{ + +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window()); + if (image_info) + image_info->destroy(); + else + image_info = new QXlibShmImageInfo(screen->display()); + + Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); + + + XImage *image = XShmCreateImage (screen->display(), visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + + image_info->image = image; + + Status shm_attach_status = XShmAttach(screen->display(), &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif + painted = false; +} + + +void QXlibWindowSurface::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); +} + +QSize QXlibWindowSurface::bufferSize() const +{ + return shm_img.size(); +} + +QXlibWindowSurface::QXlibWindowSurface (QWidget *window) + : QWindowSurface(window), + painted(false), image_info(0) +{ + xw = static_cast<QXlibWindow*>(window->platformWindow()); +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; +} + +QXlibWindowSurface::~QXlibWindowSurface() +{ + delete image_info; +} + +QPaintDevice *QXlibWindowSurface::paintDevice() +{ + return &shm_img; +} + + +void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + if (!painted) + return; + + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); + GC gc = xw->graphicsContext(); + Window window = xw->xWindow(); +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); + + QImage image = shm_img; + //img.convertToFormat( + XImage *xi = XCreateImage(screen->display(), visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); + + int x = 0; + int y = 0; + + /*int r =*/ XPutImage(screen->display(), window, gc, xi, 0, 0, x, y, image.width(), image.height()); + + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +#else + // Use MIT_SHM + if (image_info && image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync + XShmPutImage (screen->display(), window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ False); + + XSync(screen->display(), False); + } +#endif +} + +// from qwindowsurface.cpp +extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); + +bool QXlibWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + if (shm_img.isNull()) + return false; + + const QVector<QRect> rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); + + return true; +} + + +void QXlibWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + resizeBuffer(size()); +} + +void QXlibWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + painted = true; //there is content in the buffer +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitewindowsurface.h b/src/plugins/platforms/xlib/qtestlitewindowsurface.h new file mode 100644 index 0000000..12b4c60 --- /dev/null +++ b/src/plugins/platforms/xlib/qtestlitewindowsurface.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include <QtGui/private/qwindowsurface_p.h> + + +QT_BEGIN_NAMESPACE + +class QXlibWindow; +class QXlibIntegration; +class QXlibScreen; +class QXlibShmImageInfo; + +class QXlibWindowSurface : public QWindowSurface +{ +public: + QXlibWindowSurface (QWidget *window); + ~QXlibWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; + + + void resizeShmImage(int width, int height); + + QImage shm_img; + QXlibShmImageInfo *image_info; + + QXlibWindow *xw; + +}; + + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/xlib/testlite.pro b/src/plugins/platforms/xlib/testlite.pro new file mode 100644 index 0000000..7fb3304 --- /dev/null +++ b/src/plugins/platforms/xlib/testlite.pro @@ -0,0 +1,57 @@ +TARGET = qtestlite + +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +SOURCES = \ + main.cpp \ + qtestliteintegration.cpp \ + qtestlitewindowsurface.cpp \ + qtestlitewindow.cpp \ + qtestlitecursor.cpp \ + qtestlitescreen.cpp \ + qtestlitekeyboard.cpp \ + qtestliteclipboard.cpp \ + qtestlitemime.cpp \ + qtestlitestaticinfo.cpp + +HEADERS = \ + qtestliteintegration.h \ + qtestlitewindowsurface.h \ + qtestlitewindow.h \ + qtestlitecursor.h \ + qtestlitescreen.h \ + qtestlitekeyboard.h \ + qtestliteclipboard.h \ + qtestlitemime.h \ + qtestlitestaticinfo.h + +LIBS += -lX11 -lXext + +mac { + LIBS += -L/usr/X11/lib -lz -framework Carbon +} + +include (../fontdatabases/genericunix/genericunix.pri) + +contains(QT_CONFIG, opengl) { + QT += opengl + !contains(QT_CONFIG, opengles2) { + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp + } else { # There is no easy way to detect if we'r suppose to use glx or not + HEADERS += \ + ../eglconvenience/qeglplatformcontext.h \ + ../eglconvenience/qeglconvenience.h \ + qtestliteeglintegration.h + + SOURCES += \ + ../eglconvenience/qeglplatformcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + qtestliteeglintegration.cpp + LIBS += -lEGL + } +} + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target -- cgit v0.12 From 29e009b19593bb42c65fd3a7e6646e929c514b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Mon, 14 Feb 2011 13:42:42 +0100 Subject: Lighthouse Renamed testlite files to xlib --- src/plugins/platforms/xlib/qtestliteclipboard.cpp | 676 ------------- src/plugins/platforms/xlib/qtestliteclipboard.h | 94 -- src/plugins/platforms/xlib/qtestlitecursor.cpp | 199 ---- src/plugins/platforms/xlib/qtestlitecursor.h | 68 -- .../platforms/xlib/qtestliteeglintegration.cpp | 186 ---- .../platforms/xlib/qtestliteeglintegration.h | 54 -- .../platforms/xlib/qtestliteintegration.cpp | 156 --- src/plugins/platforms/xlib/qtestliteintegration.h | 85 -- src/plugins/platforms/xlib/qtestlitekeyboard.cpp | 1000 -------------------- src/plugins/platforms/xlib/qtestlitekeyboard.h | 76 -- src/plugins/platforms/xlib/qtestlitemime.cpp | 322 ------- src/plugins/platforms/xlib/qtestlitemime.h | 67 -- src/plugins/platforms/xlib/qtestlitescreen.cpp | 468 --------- src/plugins/platforms/xlib/qtestlitescreen.h | 104 -- src/plugins/platforms/xlib/qtestlitestaticinfo.cpp | 511 ---------- src/plugins/platforms/xlib/qtestlitestaticinfo.h | 413 -------- src/plugins/platforms/xlib/qtestlitewindow.cpp | 735 -------------- src/plugins/platforms/xlib/qtestlitewindow.h | 145 --- .../platforms/xlib/qtestlitewindowsurface.cpp | 224 ----- .../platforms/xlib/qtestlitewindowsurface.h | 86 -- src/plugins/platforms/xlib/qxlibclipboard.cpp | 676 +++++++++++++ src/plugins/platforms/xlib/qxlibclipboard.h | 94 ++ src/plugins/platforms/xlib/qxlibcursor.cpp | 199 ++++ src/plugins/platforms/xlib/qxlibcursor.h | 68 ++ src/plugins/platforms/xlib/qxlibeglintegration.cpp | 186 ++++ src/plugins/platforms/xlib/qxlibeglintegration.h | 54 ++ src/plugins/platforms/xlib/qxlibintegration.cpp | 156 +++ src/plugins/platforms/xlib/qxlibintegration.h | 85 ++ src/plugins/platforms/xlib/qxlibkeyboard.cpp | 1000 ++++++++++++++++++++ src/plugins/platforms/xlib/qxlibkeyboard.h | 76 ++ src/plugins/platforms/xlib/qxlibmime.cpp | 322 +++++++ src/plugins/platforms/xlib/qxlibmime.h | 67 ++ src/plugins/platforms/xlib/qxlibscreen.cpp | 468 +++++++++ src/plugins/platforms/xlib/qxlibscreen.h | 104 ++ src/plugins/platforms/xlib/qxlibstatic.cpp | 511 ++++++++++ src/plugins/platforms/xlib/qxlibstatic.h | 413 ++++++++ src/plugins/platforms/xlib/qxlibwindow.cpp | 735 ++++++++++++++ src/plugins/platforms/xlib/qxlibwindow.h | 145 +++ src/plugins/platforms/xlib/qxlibwindowsurface.cpp | 224 +++++ src/plugins/platforms/xlib/qxlibwindowsurface.h | 86 ++ src/plugins/platforms/xlib/testlite.pro | 57 -- src/plugins/platforms/xlib/xlib.pro | 57 ++ 42 files changed, 5726 insertions(+), 5726 deletions(-) delete mode 100644 src/plugins/platforms/xlib/qtestliteclipboard.cpp delete mode 100644 src/plugins/platforms/xlib/qtestliteclipboard.h delete mode 100644 src/plugins/platforms/xlib/qtestlitecursor.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitecursor.h delete mode 100644 src/plugins/platforms/xlib/qtestliteeglintegration.cpp delete mode 100644 src/plugins/platforms/xlib/qtestliteeglintegration.h delete mode 100644 src/plugins/platforms/xlib/qtestliteintegration.cpp delete mode 100644 src/plugins/platforms/xlib/qtestliteintegration.h delete mode 100644 src/plugins/platforms/xlib/qtestlitekeyboard.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitekeyboard.h delete mode 100644 src/plugins/platforms/xlib/qtestlitemime.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitemime.h delete mode 100644 src/plugins/platforms/xlib/qtestlitescreen.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitescreen.h delete mode 100644 src/plugins/platforms/xlib/qtestlitestaticinfo.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitestaticinfo.h delete mode 100644 src/plugins/platforms/xlib/qtestlitewindow.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitewindow.h delete mode 100644 src/plugins/platforms/xlib/qtestlitewindowsurface.cpp delete mode 100644 src/plugins/platforms/xlib/qtestlitewindowsurface.h create mode 100644 src/plugins/platforms/xlib/qxlibclipboard.cpp create mode 100644 src/plugins/platforms/xlib/qxlibclipboard.h create mode 100644 src/plugins/platforms/xlib/qxlibcursor.cpp create mode 100644 src/plugins/platforms/xlib/qxlibcursor.h create mode 100644 src/plugins/platforms/xlib/qxlibeglintegration.cpp create mode 100644 src/plugins/platforms/xlib/qxlibeglintegration.h create mode 100644 src/plugins/platforms/xlib/qxlibintegration.cpp create mode 100644 src/plugins/platforms/xlib/qxlibintegration.h create mode 100644 src/plugins/platforms/xlib/qxlibkeyboard.cpp create mode 100644 src/plugins/platforms/xlib/qxlibkeyboard.h create mode 100644 src/plugins/platforms/xlib/qxlibmime.cpp create mode 100644 src/plugins/platforms/xlib/qxlibmime.h create mode 100644 src/plugins/platforms/xlib/qxlibscreen.cpp create mode 100644 src/plugins/platforms/xlib/qxlibscreen.h create mode 100644 src/plugins/platforms/xlib/qxlibstatic.cpp create mode 100644 src/plugins/platforms/xlib/qxlibstatic.h create mode 100644 src/plugins/platforms/xlib/qxlibwindow.cpp create mode 100644 src/plugins/platforms/xlib/qxlibwindow.h create mode 100644 src/plugins/platforms/xlib/qxlibwindowsurface.cpp create mode 100644 src/plugins/platforms/xlib/qxlibwindowsurface.h delete mode 100644 src/plugins/platforms/xlib/testlite.pro create mode 100644 src/plugins/platforms/xlib/xlib.pro diff --git a/src/plugins/platforms/xlib/qtestliteclipboard.cpp b/src/plugins/platforms/xlib/qtestliteclipboard.cpp deleted file mode 100644 index 1264b5a..0000000 --- a/src/plugins/platforms/xlib/qtestliteclipboard.cpp +++ /dev/null @@ -1,676 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteclipboard.h" - -#include "qtestlitescreen.h" -#include "qtestlitemime.h" - -#include <private/qapplication_p.h> - -#include <QtCore/QDebug> - -class QXlibClipboardMime : public QXlibMime -{ - Q_OBJECT -public: - QXlibClipboardMime(QClipboard::Mode mode, QXlibClipboard *clipboard) - : QXlibMime() - , m_clipboard(clipboard) - { - switch (mode) { - case QClipboard::Selection: - modeAtom = XA_PRIMARY; - break; - - case QClipboard::Clipboard: - modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - break; - - default: - qWarning("QTestLiteMime: Internal error: Unsupported clipboard mode"); - break; - } - } - -protected: - QStringList formats_sys() const - { - if (empty()) - return QStringList(); - - if (!formatList.count()) { - QXlibClipboardMime *that = const_cast<QXlibClipboardMime *>(this); - // get the list of targets from the current clipboard owner - we do this - // once so that multiple calls to this function don't require multiple - // server round trips... - that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QXlibStatic::atom(QXlibStatic::TARGETS)); - - if (format_atoms.size() > 0) { - Atom *targets = (Atom *) format_atoms.data(); - int size = format_atoms.size() / sizeof(Atom); - - for (int i = 0; i < size; ++i) { - if (targets[i] == 0) - continue; - - QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display(),targets[i]); - for (int j = 0; j < formatsForAtom.size(); ++j) { - if (!formatList.contains(formatsForAtom.at(j))) - that->formatList.append(formatsForAtom.at(j)); - } - } - } - } - - return formatList; - } - - bool hasFormat_sys(const QString &format) const - { - QStringList list = formats(); - return list.contains(format); - } - - QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const - { - if (fmt.isEmpty() || empty()) - return QByteArray(); - - (void)formats(); // trigger update of format list - - QList<Atom> atoms; - Atom *targets = (Atom *) format_atoms.data(); - int size = format_atoms.size() / sizeof(Atom); - for (int i = 0; i < size; ++i) - atoms.append(targets[i]); - - QByteArray encoding; - Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display(),fmt, requestedType, atoms, &encoding); - - if (fmtatom == 0) - return QVariant(); - - return mimeConvertToFormat(m_clipboard->screen()->display(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); - } -private: - bool empty() const - { - Window win = XGetSelectionOwner(m_clipboard->screen()->display(), modeAtom); - - return win == XNone; - } - - - Atom modeAtom; - QXlibClipboard *m_clipboard; - QStringList formatList; - QByteArray format_atoms; -}; - -const int QXlibClipboard::clipboard_timeout = 5000; - -QXlibClipboard::QXlibClipboard(QXlibScreen *screen) - : QPlatformClipboard() - , m_screen(screen) - , m_xClipboard(0) - , m_clientClipboard(0) - , m_xSelection(0) - , m_clientSelection(0) - , m_requestor(XNone) - , m_owner(XNone) -{ -} - -const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const -{ - if (mode == QClipboard::Clipboard) { - if (!m_xClipboard) { - QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - that->m_xClipboard = new QXlibClipboardMime(mode,that); - } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); - if (clipboardOwner == owner()) { - return m_clientClipboard; - } else { - return m_xClipboard; - } - } else if (mode == QClipboard::Selection) { - if (!m_xSelection) { - QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - that->m_xSelection = new QXlibClipboardMime(mode,that); - } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); - if (clipboardOwner == owner()) { - return m_clientSelection; - } else { - return m_xSelection; - } - } - return 0; -} - -void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) -{ - Atom modeAtom; - QMimeData **d; - switch (mode) { - case QClipboard::Selection: - modeAtom = XA_PRIMARY; - d = &m_clientSelection; - break; - - case QClipboard::Clipboard: - modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - d = &m_clientClipboard; - break; - - default: - qWarning("QClipboard::setMimeData: unsupported mode '%d'", mode); - return; - } - - Window newOwner; - - if (! data) { // no data, clear clipboard contents - newOwner = XNone; - } else { - newOwner = owner(); - - *d = data; - } - - XSetSelectionOwner(m_screen->display(), modeAtom, newOwner, CurrentTime); - - if (XGetSelectionOwner(m_screen->display(), modeAtom) != newOwner) { - qWarning("QClipboard::setData: Cannot set X11 selection owner"); - } - -} - -bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const -{ - if (mode == QClipboard::Clipboard || mode == QClipboard::Selection) - return true; - return false; -} - - -QXlibScreen * QXlibClipboard::screen() const -{ - return m_screen; -} - -Window QXlibClipboard::requestor() const -{ - if (!m_requestor) { - int x = 0, y = 0, w = 3, h = 3; - QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - m_screen->blackPixel(), m_screen->whitePixel()); - that->setRequestor(window); - } - return m_requestor; -} - -void QXlibClipboard::setRequestor(Window window) -{ - if (m_requestor != XNone) { - XDestroyWindow(m_screen->display(),m_requestor); - } - m_requestor = window; -} - -Window QXlibClipboard::owner() const -{ - if (!m_owner) { - int x = 0, y = 0, w = 3, h = 3; - QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - m_screen->blackPixel(), m_screen->whitePixel()); - that->setOwner(window); - } - return m_owner; -} - -void QXlibClipboard::setOwner(Window window) -{ - if (m_owner != XNone){ - XDestroyWindow(m_screen->display(),m_owner); - } - m_owner = window; -} - -Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) -{ - QVector<Atom> types; - QStringList formats = QInternalMimeData::formatsHelper(d); - for (int i = 0; i < formats.size(); ++i) { - QList<Atom> atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); - for (int j = 0; j < atoms.size(); ++j) { - if (!types.contains(atoms.at(j))) - types.append(atoms.at(j)); - } - } - types.append(QXlibStatic::atom(QXlibStatic::TARGETS)); - types.append(QXlibStatic::atom(QXlibStatic::MULTIPLE)); - types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); - types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); - - XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, - PropModeReplace, (uchar *) types.data(), types.size()); - return property; -} - -Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) -{ - Atom atomFormat = target; - int dataFormat = 0; - QByteArray data; - - QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); - if (fmt.isEmpty()) { // Not a MIME type we have - qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); - return XNone; - } - qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); - - if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { - - // don't allow INCR transfers when using MULTIPLE or to - // Motif clients (since Motif doesn't support INCR) - static Atom motif_clip_temporary = QXlibStatic::atom(QXlibStatic::CLIP_TEMPORARY); - bool allow_incr = property != motif_clip_temporary; - - // X_ChangeProperty protocol request is 24 bytes - const int increment = (XMaxRequestSize(screen()->display()) * 4) - 24; - if (data.size() > increment && allow_incr) { - long bytes = data.size(); - XChangeProperty(screen()->display(), window, property, - QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); - -// (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); - qDebug() << "not implemented INCRT just YET!"; - return property; - } - - // make sure we can perform the XChangeProperty in a single request - if (data.size() > increment) - return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend? - int dataSize = data.size() / (dataFormat / 8); - // use a single request to transfer data - XChangeProperty(screen()->display(), window, property, atomFormat, - dataFormat, PropModeReplace, (uchar *) data.data(), - dataSize); - } - return property; -} - -void QXlibClipboard::handleSelectionRequest(XEvent *xevent) -{ - XSelectionRequestEvent *req = &xevent->xselectionrequest; - - if (requestor() && req->requestor == requestor()) { - qDebug() << "This should be caught before"; - return; - } - - XEvent event; - event.xselection.type = SelectionNotify; - event.xselection.display = req->display; - event.xselection.requestor = req->requestor; - event.xselection.selection = req->selection; - event.xselection.target = req->target; - event.xselection.property = XNone; - event.xselection.time = req->time; - - QMimeData *d; - if (req->selection == XA_PRIMARY) { - d = m_clientSelection; - } else if (req->selection == QXlibStatic::atom(QXlibStatic::CLIPBOARD)) { - d = m_clientClipboard; - } else { - qWarning("QClipboard: Unknown selection '%lx'", req->selection); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - - if (!d) { - qWarning("QClipboard: Cannot transfer data, no data available"); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - - Atom xa_targets = QXlibStatic::atom(QXlibStatic::TARGETS); - Atom xa_multiple = QXlibStatic::atom(QXlibStatic::MULTIPLE); - Atom xa_timestamp = QXlibStatic::atom(QXlibStatic::TIMESTAMP); - - struct AtomPair { Atom target; Atom property; } *multi = 0; - Atom multi_type = XNone; - int multi_format = 0; - int nmulti = 0; - int imulti = -1; - bool multi_writeback = false; - - if (req->target == xa_multiple) { - QByteArray multi_data; - if (req->property == XNone - || !clipboardReadProperty(req->requestor, req->property, false, &multi_data, - 0, &multi_type, &multi_format) - || multi_format != 32) { - // MULTIPLE property not formatted correctly - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); - return; - } - nmulti = multi_data.size()/sizeof(*multi); - multi = new AtomPair[nmulti]; - memcpy(multi,multi_data.data(),multi_data.size()); - imulti = 0; - } - - for (; imulti < nmulti; ++imulti) { - Atom target; - Atom property; - - if (multi) { - target = multi[imulti].target; - property = multi[imulti].property; - } else { - target = req->target; - property = req->property; - if (property == XNone) // obsolete client - property = target; - } - - Atom ret = XNone; - if (target == XNone || property == XNone) { - ; - } else if (target == xa_timestamp) { -// if (d->timestamp != CurrentTime) { -// XChangeProperty(screen()->display(), req->requestor, property, XA_INTEGER, 32, -// PropModeReplace, CurrentTime, 1); -// ret = property; -// } else { -// qWarning("QClipboard: Invalid data timestamp"); -// } - } else if (target == xa_targets) { - ret = sendTargetsSelection(d, req->requestor, property); - } else { - ret = sendSelection(d, target, req->requestor, property); - } - - if (nmulti > 0) { - if (ret == XNone) { - multi[imulti].property = XNone; - multi_writeback = true; - } - } else { - event.xselection.property = ret; - break; - } - } - - if (nmulti > 0) { - if (multi_writeback) { - // according to ICCCM 2.6.2 says to put None back - // into the original property on the requestor window - XChangeProperty(screen()->display(), req->requestor, req->property, multi_type, 32, - PropModeReplace, (uchar *) multi, nmulti * 2); - } - - delete [] multi; - event.xselection.property = req->property; - } - - // send selection notify to requestor - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); -} - -static inline int maxSelectionIncr(Display *dpy) -{ return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; } - -bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const -{ - int maxsize = maxSelectionIncr(screen()->display()); - ulong bytes_left; // bytes_after - ulong length; // nitems - uchar *data; - Atom dummy_type; - int dummy_format; - int r; - - if (!type) // allow null args - type = &dummy_type; - if (!format) - format = &dummy_format; - - // Don't read anything, just get the size of the property data - r = XGetWindowProperty(screen()->display(), win, property, 0, 0, False, - AnyPropertyType, type, format, - &length, &bytes_left, &data); - if (r != Success || (type && *type == XNone)) { - buffer->resize(0); - return false; - } - XFree((char*)data); - - int offset = 0, buffer_offset = 0, format_inc = 1, proplen = bytes_left; - - switch (*format) { - case 8: - default: - format_inc = sizeof(char) / 1; - break; - - case 16: - format_inc = sizeof(short) / 2; - proplen *= sizeof(short) / 2; - break; - - case 32: - format_inc = sizeof(long) / 4; - proplen *= sizeof(long) / 4; - break; - } - - int newSize = proplen; - buffer->resize(newSize); - - bool ok = (buffer->size() == newSize); - - if (ok && newSize) { - // could allocate buffer - - while (bytes_left) { - // more to read... - - r = XGetWindowProperty(screen()->display(), win, property, offset, maxsize/4, - False, AnyPropertyType, type, format, - &length, &bytes_left, &data); - if (r != Success || (type && *type == XNone)) - break; - - offset += length / (32 / *format); - length *= format_inc * (*format) / 8; - - // Here we check if we get a buffer overflow and tries to - // recover -- this shouldn't normally happen, but it doesn't - // hurt to be defensive - if ((int)(buffer_offset + length) > buffer->size()) { - length = buffer->size() - buffer_offset; - - // escape loop - bytes_left = 0; - } - - memcpy(buffer->data() + buffer_offset, data, length); - buffer_offset += length; - - XFree((char*)data); - } - - if (*format == 8 && *type == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { - // convert COMPOUND_TEXT to a multibyte string - XTextProperty textprop; - textprop.encoding = *type; - textprop.format = *format; - textprop.nitems = buffer_offset; - textprop.value = (unsigned char *) buffer->data(); - - char **list_ret = 0; - int count; - if (XmbTextPropertyToTextList(screen()->display(), &textprop, &list_ret, - &count) == Success && count && list_ret) { - offset = buffer_offset = strlen(list_ret[0]); - buffer->resize(offset); - memcpy(buffer->data(), list_ret[0], offset); - } - if (list_ret) XFreeStringList(list_ret); - } - } - - // correct size, not 0-term. - if (size) - *size = buffer_offset; - - if (deleteProperty) - XDeleteProperty(screen()->display(), win, property); - - XFlush(screen()->display()); - - return ok; -} - -QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) -{ - XEvent event; - - QByteArray buf; - QByteArray tmp_buf; - bool alloc_error = false; - int length; - int offset = 0; - - if (nbytes > 0) { - // Reserve buffer + zero-terminator (for text data) - // We want to complete the INCR transfer even if we cannot - // allocate more memory - buf.resize(nbytes+1); - alloc_error = buf.size() != nbytes+1; - } - - for (;;) { - XFlush(screen()->display()); - if (!screen()->waitForClipboardEvent(win,PropertyNotify,&event,clipboard_timeout)) - break; - if (event.xproperty.atom != property || - event.xproperty.state != PropertyNewValue) - continue; - if (clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0)) { - if (length == 0) { // no more data, we're done - if (nullterm) { - buf.resize(offset+1); - buf[offset] = '\0'; - } else { - buf.resize(offset); - } - return buf; - } else if (!alloc_error) { - if (offset+length > (int)buf.size()) { - buf.resize(offset+length+65535); - if (buf.size() != offset+length+65535) { - alloc_error = true; - length = buf.size() - offset; - } - } - memcpy(buf.data()+offset, tmp_buf.constData(), length); - tmp_buf.resize(0); - offset += length; - } - } else { - break; - } - } - - // timed out ... create a new requestor window, otherwise the requestor - // could consider next request to be still part of this timed out request - setRequestor(0); - - return QByteArray(); -} - -QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) -{ - QByteArray buf; - - Window win = requestor(); - - XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events - - XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); - XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); - XSync(screen()->display(), false); - - XEvent xevent; - if (!screen()->waitForClipboardEvent(win,SelectionNotify,&xevent,clipboard_timeout) || - xevent.xselection.property == XNone) { - return buf; - } - - Atom type; - XSelectInput(screen()->display(), win, PropertyChangeMask); - - if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { - if (type == QXlibStatic::atom(QXlibStatic::INCR)) { - int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0; - buf = clipboardReadIncrementalProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), nbytes, false); - } - } - - XSelectInput(screen()->display(), win, NoEventMask); - - - return buf; -} - -#include "qtestliteclipboard.moc" diff --git a/src/plugins/platforms/xlib/qtestliteclipboard.h b/src/plugins/platforms/xlib/qtestliteclipboard.h deleted file mode 100644 index 109714c..0000000 --- a/src/plugins/platforms/xlib/qtestliteclipboard.h +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITECLIPBOARD_H -#define QTESTLITECLIPBOARD_H - -#include <QPlatformClipboard> -#include "qtestlitestaticinfo.h" - -class QXlibScreen; -class QXlibClipboard : public QPlatformClipboard -{ -public: - QXlibClipboard(QXlibScreen *screen); - - const QMimeData *mimeData(QClipboard::Mode mode) const; - void setMimeData(QMimeData *data, QClipboard::Mode mode); - - bool supportsMode(QClipboard::Mode mode) const; - - QXlibScreen *screen() const; - - Window requestor() const; - void setRequestor(Window window); - - Window owner() const; - - void handleSelectionRequest(XEvent *event); - - bool clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const; - QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm); - - QByteArray getDataInFormat(Atom modeAtom, Atom fmtatom); - -private: - void setOwner(Window window); - - Atom sendTargetsSelection(QMimeData *d, Window window, Atom property); - Atom sendSelection(QMimeData *d, Atom target, Window window, Atom property); - - QXlibScreen *m_screen; - - QMimeData *m_xClipboard; - QMimeData *m_clientClipboard; - - QMimeData *m_xSelection; - QMimeData *m_clientSelection; - - Window m_requestor; - Window m_owner; - - static const int clipboard_timeout; - -}; - -#endif // QTESTLITECLIPBOARD_H diff --git a/src/plugins/platforms/xlib/qtestlitecursor.cpp b/src/plugins/platforms/xlib/qtestlitecursor.cpp deleted file mode 100644 index 2f7cfbf..0000000 --- a/src/plugins/platforms/xlib/qtestlitecursor.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitecursor.h" - -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitewindow.h" - -#include <QtGui/QBitmap> - -#include <X11/cursorfont.h> - -QT_BEGIN_NAMESPACE - -QXlibCursor::QXlibCursor(QXlibScreen *screen) - : QPlatformCursor(screen) -{ -} - -void QXlibCursor::changeCursor(QCursor *cursor, QWidget *widget) -{ - QXlibWindow *w = 0; - if (widget) { - QWidget *window = widget->window(); - w = static_cast<QXlibWindow*>(window->platformWindow()); - } else { - // No X11 cursor control when there is no widget under the cursor - return; - } - - if (!w) - return; - - int id = cursor->handle(); - - Cursor c; - if (!cursorMap.contains(id)) { - if (cursor->shape() == Qt::BitmapCursor) - c = createCursorBitmap(cursor); - else - c = createCursorShape(cursor->shape()); - if (!c) { - return; - } - cursorMap.insert(id, c); - } else { - c = cursorMap.value(id); - } - - w->setCursor(c); -} - -Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) -{ - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - QPoint spot = cursor->hotSpot(); - Window rootwin = testLiteScreen()->rootWindow(); - - QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); - QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); - - int width = cursor->bitmap()->width(); - int height = cursor->bitmap()->height(); - int bytesPerLine = mapImage.bytesPerLine(); - int destLineSize = width / 8; - if (width % 8) - destLineSize++; - - const uchar * map = mapImage.bits(); - const uchar * mask = maskImage.bits(); - - char * mapBits = new char[height * destLineSize]; - char * maskBits = new char[height * destLineSize]; - for (int i = 0; i < height; i++) { - memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); - memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); - } - - Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, mapBits, width, height); - Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, maskBits, width, height); - Cursor c = XCreatePixmapCursor(testLiteScreen()->display(), cp, mp, &fg, &bg, spot.x(), spot.y()); - XFreePixmap(testLiteScreen()->display(), cp); - XFreePixmap(testLiteScreen()->display(), mp); - delete[] mapBits; - delete[] maskBits; - - return c; -} - -Cursor QXlibCursor::createCursorShape(int cshape) -{ - Cursor cursor = 0; - - if (cshape < 0 || cshape > Qt::LastCursor) - return 0; - - switch (cshape) { - case Qt::ArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_left_ptr); - break; - case Qt::UpArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_center_ptr); - break; - case Qt::CrossCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_crosshair); - break; - case Qt::WaitCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); - break; - case Qt::IBeamCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_xterm); - break; - case Qt::SizeAllCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_fleur); - break; - case Qt::PointingHandCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_hand2); - break; - case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_top_right_corner); - break; - case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_bottom_right_corner); - break; - case Qt::SizeVerCursor: - case Qt::SplitVCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_v_double_arrow); - break; - case Qt::SizeHorCursor: - case Qt::SplitHCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_h_double_arrow); - break; - case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_question_arrow); - break; - case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_circle); - break; - case Qt::BusyCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); - break; - - default: //default cursor for all the rest - break; - } - return cursor; -} - -QXlibScreen * QXlibCursor::testLiteScreen() const -{ - return static_cast<QXlibScreen *>(screen); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitecursor.h b/src/plugins/platforms/xlib/qtestlitecursor.h deleted file mode 100644 index db9f9e2..0000000 --- a/src/plugins/platforms/xlib/qtestlitecursor.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITECURSOR_H -#define QTESTLITECURSOR_H - -#include <QtGui/QPlatformCursor> - -#include "qtestliteintegration.h" - -QT_BEGIN_NAMESPACE - -class QXlibCursor : QPlatformCursor -{ -public: - QXlibCursor(QXlibScreen *screen); - - void changeCursor(QCursor * cursor, QWidget * widget); -private: - - Cursor createCursorBitmap(QCursor * cursor); - Cursor createCursorShape(int cshape); - - QXlibScreen *testLiteScreen() const; - QMap<int, Cursor> cursorMap; -}; - -QT_END_NAMESPACE - -#endif // QTESTLITECURSOR_H diff --git a/src/plugins/platforms/xlib/qtestliteeglintegration.cpp b/src/plugins/platforms/xlib/qtestliteeglintegration.cpp deleted file mode 100644 index 9bbe0ca..0000000 --- a/src/plugins/platforms/xlib/qtestliteeglintegration.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteeglintegration.h" - -static int countBits(unsigned long mask) -{ - int count = 0; - while (mask != 0) { - if (mask & 1) - ++count; - mask >>= 1; - } - return count; -} - -VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) -{ - VisualID visualId = 0; - EGLint eglValue = 0; - - EGLDisplay eglDisplay = eglGetDisplay(display); - - EGLint configRedSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); - - EGLint configGreenSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); - - EGLint configBlueSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); - - EGLint configAlphaSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); - - eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); - int configId = eglValue; - - // See if EGL provided a valid VisualID: - eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); - visualId = (VisualID)eglValue; - if (visualId) { - // EGL has suggested a visual id, so get the rest of the visual info for that id: - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = visualId; - - XVisualInfo *chosenVisualInfo; - int matchingCount = 0; - chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); - if (chosenVisualInfo) { - // Skip size checks if implementation supports non-matching visual - // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). - if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { - XFree(chosenVisualInfo); - return visualId; - } - - int visualRedSize = countBits(chosenVisualInfo->red_mask); - int visualGreenSize = countBits(chosenVisualInfo->green_mask); - int visualBlueSize = countBits(chosenVisualInfo->blue_mask); - int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size - - bool visualMatchesConfig = false; - if ( visualRedSize == configRedSize && - visualGreenSize == configGreenSize && - visualBlueSize == configBlueSize ) - { - // We need XRender to check the alpha channel size of the visual. If we don't have - // the alpha size, we don't check it against the EGL config's alpha size. - if (visualAlphaSize >= 0) - visualMatchesConfig = visualAlphaSize == configAlphaSize; - else - visualMatchesConfig = true; - } - - if (!visualMatchesConfig) { - if (visualAlphaSize >= 0) { - qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", - (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, - configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); - } else { - qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", - (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, - configId, configRedSize, configGreenSize, configBlueSize); - } - visualId = 0; - } - } else { - qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", - (int)visualId, configId); - visualId = 0; - } - XFree(chosenVisualInfo); - } -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - else - qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); -#endif - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - if (configAlphaSize > 0) - qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); - else - qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); -#endif - return visualId; - } - - // Finally, try to - // use XGetVisualInfo and only use the bit depths to match on: - if (!visualId) { - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - XVisualInfo *matchingVisuals; - int matchingCount = 0; - - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - if (!matchingVisuals) { - // Try again without taking the alpha channel into account: - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - } - - if (matchingVisuals) { - visualId = matchingVisuals[0].visualid; - XFree(matchingVisuals); - } - } - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); -#endif - return visualId; - } - - qWarning("Unable to find an X11 visual which matches EGL config %d", configId); - return (VisualID)0; -} diff --git a/src/plugins/platforms/xlib/qtestliteeglintegration.h b/src/plugins/platforms/xlib/qtestliteeglintegration.h deleted file mode 100644 index 4c2e50d..0000000 --- a/src/plugins/platforms/xlib/qtestliteeglintegration.h +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEEGLINTEGRATION_H -#define QTESTLITEEGLINTEGRATION_H - -#include "qtestlitestaticinfo.h" -#include "../eglconvenience/qeglconvenience.h" - -class QXlibEglIntegration -{ -public: - static VisualID getCompatibleVisualId(Display *display, EGLConfig config); -}; - -#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/xlib/qtestliteintegration.cpp b/src/plugins/platforms/xlib/qtestliteintegration.cpp deleted file mode 100644 index cdc5c29..0000000 --- a/src/plugins/platforms/xlib/qtestliteintegration.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestliteintegration.h" -#include "qtestlitewindowsurface.h" -#include <QtGui/private/qpixmap_raster_p.h> -#include <QtCore/qdebug.h> - -#include "qtestlitewindow.h" -#include "qgenericunixfontdatabase.h" -#include "qtestlitescreen.h" -#include "qtestliteclipboard.h" - -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) -#include <GL/glx.h> -#else -#include <EGL/egl.h> -#endif //!defined(QT_OPENGL_ES_2) -#include <private/qwindowsurface_gl_p.h> -#include <private/qpixmapdata_gl_p.h> -#endif //QT_NO_OPENGL - -QT_BEGIN_NAMESPACE - -QXlibIntegration::QXlibIntegration(bool useOpenGL) - : mUseOpenGL(useOpenGL) - , mFontDb(new QGenericUnixFontDatabase()) - , mClipboard(0) -{ - mPrimaryScreen = new QXlibScreen(); - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QXlibIntegration::createPixmapData(QPixmapData::PixelType type) const -{ -#ifndef QT_NO_OPENGL - if (mUseOpenGL) - return new QGLPixmapData(type); -#endif - return new QRasterPixmapData(type); -} - -QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const -{ -#ifndef QT_NO_OPENGL - if (mUseOpenGL) - return new QGLWindowSurface(widget); -#endif - return new QXlibWindowSurface(widget); -} - - -QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const -{ - return new QXlibWindow(widget); -} - - - -QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const -{ - QImage image; - QWidget *widget = QWidget::find(window); - if (widget) { - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); - image = screen->grabWindow(window,x,y,width,height); - } else { - for (int i = 0; i < mScreens.size(); i++) { - QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens[i]); - if (screen->rootWindow() == window) { - image = screen->grabWindow(window,x,y,width,height); - } - } - } - return QPixmap::fromImage(image); -} - -QPlatformFontDatabase *QXlibIntegration::fontDatabase() const -{ - return mFontDb; -} - -QPlatformClipboard * QXlibIntegration::clipboard() const -{ - //Use lazy init since clipboard needs QTestliteScreen - if (!mClipboard) { - QXlibIntegration *that = const_cast<QXlibIntegration *>(this); - that->mClipboard = new QXlibClipboard(mPrimaryScreen); - } - return mClipboard; -} - -bool QXlibIntegration::hasOpenGL() const -{ -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); - return glXQueryExtension(screen->display(), 0, 0) != 0; -#else - static bool eglHasbeenInitialized = false; - static bool wasEglInitialized = false; - if (!eglHasbeenInitialized) { - eglHasbeenInitialized = true; - const QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); - EGLint major, minor; - eglBindAPI(EGL_OPENGL_ES_API); - EGLDisplay disp = eglGetDisplay(screen->display()); - wasEglInitialized = eglInitialize(disp,&major,&minor); - } - return wasEglInitialized; -#endif -#endif - return false; -} - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestliteintegration.h b/src/plugins/platforms/xlib/qtestliteintegration.h deleted file mode 100644 index c3125b8..0000000 --- a/src/plugins/platforms/xlib/qtestliteintegration.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_TESTLITE_H -#define QGRAPHICSSYSTEM_TESTLITE_H - -//make sure textstream is included before any X11 headers -#include <QtCore/QTextStream> - -#include <QtGui/QPlatformIntegration> -#include <QtGui/QPlatformScreen> - -#include "qtestlitestaticinfo.h" - -QT_BEGIN_NAMESPACE - -class QXlibScreen; - -class QXlibIntegration : public QPlatformIntegration -{ -public: - QXlibIntegration(bool useOpenGL = false); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - QList<QPlatformScreen *> screens() const { return mScreens; } - - QPlatformFontDatabase *fontDatabase() const; - QPlatformClipboard *clipboard() const; - - bool hasOpenGL() const; - -private: - bool mUseOpenGL; - QXlibScreen *mPrimaryScreen; - QList<QPlatformScreen *> mScreens; - QPlatformFontDatabase *mFontDb; - QPlatformClipboard *mClipboard; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/xlib/qtestlitekeyboard.cpp b/src/plugins/platforms/xlib/qtestlitekeyboard.cpp deleted file mode 100644 index fb0cf2e..0000000 --- a/src/plugins/platforms/xlib/qtestlitekeyboard.cpp +++ /dev/null @@ -1,1000 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitekeyboard.h" - -#include "qtestlitescreen.h" - -#include <QtGui/QWindowSystemInterface> - -#include <QtCore/QTextCodec> - -#ifndef XK_ISO_Left_Tab -#define XK_ISO_Left_Tab 0xFE20 -#endif - -#ifndef XK_dead_hook -#define XK_dead_hook 0xFE61 -#endif - -#ifndef XK_dead_horn -#define XK_dead_horn 0xFE62 -#endif - -#ifndef XK_Codeinput -#define XK_Codeinput 0xFF37 -#endif - -#ifndef XK_Kanji_Bangou -#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */ -#endif - -// Fix old X libraries -#ifndef XK_KP_Home -#define XK_KP_Home 0xFF95 -#endif -#ifndef XK_KP_Left -#define XK_KP_Left 0xFF96 -#endif -#ifndef XK_KP_Up -#define XK_KP_Up 0xFF97 -#endif -#ifndef XK_KP_Right -#define XK_KP_Right 0xFF98 -#endif -#ifndef XK_KP_Down -#define XK_KP_Down 0xFF99 -#endif -#ifndef XK_KP_Prior -#define XK_KP_Prior 0xFF9A -#endif -#ifndef XK_KP_Next -#define XK_KP_Next 0xFF9B -#endif -#ifndef XK_KP_End -#define XK_KP_End 0xFF9C -#endif -#ifndef XK_KP_Insert -#define XK_KP_Insert 0xFF9E -#endif -#ifndef XK_KP_Delete -#define XK_KP_Delete 0xFF9F -#endif - -// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special -// multimedia keys. They are included here as not every system has them. -#define XF86XK_MonBrightnessUp 0x1008FF02 -#define XF86XK_MonBrightnessDown 0x1008FF03 -#define XF86XK_KbdLightOnOff 0x1008FF04 -#define XF86XK_KbdBrightnessUp 0x1008FF05 -#define XF86XK_KbdBrightnessDown 0x1008FF06 -#define XF86XK_Standby 0x1008FF10 -#define XF86XK_AudioLowerVolume 0x1008FF11 -#define XF86XK_AudioMute 0x1008FF12 -#define XF86XK_AudioRaiseVolume 0x1008FF13 -#define XF86XK_AudioPlay 0x1008FF14 -#define XF86XK_AudioStop 0x1008FF15 -#define XF86XK_AudioPrev 0x1008FF16 -#define XF86XK_AudioNext 0x1008FF17 -#define XF86XK_HomePage 0x1008FF18 -#define XF86XK_Mail 0x1008FF19 -#define XF86XK_Start 0x1008FF1A -#define XF86XK_Search 0x1008FF1B -#define XF86XK_AudioRecord 0x1008FF1C -#define XF86XK_Calculator 0x1008FF1D -#define XF86XK_Memo 0x1008FF1E -#define XF86XK_ToDoList 0x1008FF1F -#define XF86XK_Calendar 0x1008FF20 -#define XF86XK_PowerDown 0x1008FF21 -#define XF86XK_ContrastAdjust 0x1008FF22 -#define XF86XK_Back 0x1008FF26 -#define XF86XK_Forward 0x1008FF27 -#define XF86XK_Stop 0x1008FF28 -#define XF86XK_Refresh 0x1008FF29 -#define XF86XK_PowerOff 0x1008FF2A -#define XF86XK_WakeUp 0x1008FF2B -#define XF86XK_Eject 0x1008FF2C -#define XF86XK_ScreenSaver 0x1008FF2D -#define XF86XK_WWW 0x1008FF2E -#define XF86XK_Sleep 0x1008FF2F -#define XF86XK_Favorites 0x1008FF30 -#define XF86XK_AudioPause 0x1008FF31 -#define XF86XK_AudioMedia 0x1008FF32 -#define XF86XK_MyComputer 0x1008FF33 -#define XF86XK_LightBulb 0x1008FF35 -#define XF86XK_Shop 0x1008FF36 -#define XF86XK_History 0x1008FF37 -#define XF86XK_OpenURL 0x1008FF38 -#define XF86XK_AddFavorite 0x1008FF39 -#define XF86XK_HotLinks 0x1008FF3A -#define XF86XK_BrightnessAdjust 0x1008FF3B -#define XF86XK_Finance 0x1008FF3C -#define XF86XK_Community 0x1008FF3D -#define XF86XK_AudioRewind 0x1008FF3E -#define XF86XK_BackForward 0x1008FF3F -#define XF86XK_Launch0 0x1008FF40 -#define XF86XK_Launch1 0x1008FF41 -#define XF86XK_Launch2 0x1008FF42 -#define XF86XK_Launch3 0x1008FF43 -#define XF86XK_Launch4 0x1008FF44 -#define XF86XK_Launch5 0x1008FF45 -#define XF86XK_Launch6 0x1008FF46 -#define XF86XK_Launch7 0x1008FF47 -#define XF86XK_Launch8 0x1008FF48 -#define XF86XK_Launch9 0x1008FF49 -#define XF86XK_LaunchA 0x1008FF4A -#define XF86XK_LaunchB 0x1008FF4B -#define XF86XK_LaunchC 0x1008FF4C -#define XF86XK_LaunchD 0x1008FF4D -#define XF86XK_LaunchE 0x1008FF4E -#define XF86XK_LaunchF 0x1008FF4F -#define XF86XK_ApplicationLeft 0x1008FF50 -#define XF86XK_ApplicationRight 0x1008FF51 -#define XF86XK_Book 0x1008FF52 -#define XF86XK_CD 0x1008FF53 -#define XF86XK_Calculater 0x1008FF54 -#define XF86XK_Clear 0x1008FF55 -#define XF86XK_ClearGrab 0x1008FE21 -#define XF86XK_Close 0x1008FF56 -#define XF86XK_Copy 0x1008FF57 -#define XF86XK_Cut 0x1008FF58 -#define XF86XK_Display 0x1008FF59 -#define XF86XK_DOS 0x1008FF5A -#define XF86XK_Documents 0x1008FF5B -#define XF86XK_Excel 0x1008FF5C -#define XF86XK_Explorer 0x1008FF5D -#define XF86XK_Game 0x1008FF5E -#define XF86XK_Go 0x1008FF5F -#define XF86XK_iTouch 0x1008FF60 -#define XF86XK_LogOff 0x1008FF61 -#define XF86XK_Market 0x1008FF62 -#define XF86XK_Meeting 0x1008FF63 -#define XF86XK_MenuKB 0x1008FF65 -#define XF86XK_MenuPB 0x1008FF66 -#define XF86XK_MySites 0x1008FF67 -#define XF86XK_News 0x1008FF69 -#define XF86XK_OfficeHome 0x1008FF6A -#define XF86XK_Option 0x1008FF6C -#define XF86XK_Paste 0x1008FF6D -#define XF86XK_Phone 0x1008FF6E -#define XF86XK_Reply 0x1008FF72 -#define XF86XK_Reload 0x1008FF73 -#define XF86XK_RotateWindows 0x1008FF74 -#define XF86XK_RotationPB 0x1008FF75 -#define XF86XK_RotationKB 0x1008FF76 -#define XF86XK_Save 0x1008FF77 -#define XF86XK_Send 0x1008FF7B -#define XF86XK_Spell 0x1008FF7C -#define XF86XK_SplitScreen 0x1008FF7D -#define XF86XK_Support 0x1008FF7E -#define XF86XK_TaskPane 0x1008FF7F -#define XF86XK_Terminal 0x1008FF80 -#define XF86XK_Tools 0x1008FF81 -#define XF86XK_Travel 0x1008FF82 -#define XF86XK_Video 0x1008FF87 -#define XF86XK_Word 0x1008FF89 -#define XF86XK_Xfer 0x1008FF8A -#define XF86XK_ZoomIn 0x1008FF8B -#define XF86XK_ZoomOut 0x1008FF8C -#define XF86XK_Away 0x1008FF8D -#define XF86XK_Messenger 0x1008FF8E -#define XF86XK_WebCam 0x1008FF8F -#define XF86XK_MailForward 0x1008FF90 -#define XF86XK_Pictures 0x1008FF91 -#define XF86XK_Music 0x1008FF92 -#define XF86XK_Battery 0x1008FF93 -#define XF86XK_Bluetooth 0x1008FF94 -#define XF86XK_WLAN 0x1008FF95 -#define XF86XK_UWB 0x1008FF96 -#define XF86XK_AudioForward 0x1008FF97 -#define XF86XK_AudioRepeat 0x1008FF98 -#define XF86XK_AudioRandomPlay 0x1008FF99 -#define XF86XK_Subtitle 0x1008FF9A -#define XF86XK_AudioCycleTrack 0x1008FF9B -#define XF86XK_Time 0x1008FF9F -#define XF86XK_Select 0x1008FFA0 -#define XF86XK_View 0x1008FFA1 -#define XF86XK_TopMenu 0x1008FFA2 -#define XF86XK_Suspend 0x1008FFA7 -#define XF86XK_Hibernate 0x1008FFA8 - - -// end of XF86keysyms.h - -// Special keys used by Qtopia, mapped into the X11 private keypad range. -#define QTOPIAXK_Select 0x11000601 -#define QTOPIAXK_Yes 0x11000602 -#define QTOPIAXK_No 0x11000603 -#define QTOPIAXK_Cancel 0x11000604 -#define QTOPIAXK_Printer 0x11000605 -#define QTOPIAXK_Execute 0x11000606 -#define QTOPIAXK_Sleep 0x11000607 -#define QTOPIAXK_Play 0x11000608 -#define QTOPIAXK_Zoom 0x11000609 -#define QTOPIAXK_Context1 0x1100060A -#define QTOPIAXK_Context2 0x1100060B -#define QTOPIAXK_Context3 0x1100060C -#define QTOPIAXK_Context4 0x1100060D -#define QTOPIAXK_Call 0x1100060E -#define QTOPIAXK_Hangup 0x1100060F -#define QTOPIAXK_Flip 0x11000610 - -// keyboard mapping table -static const unsigned int KeyTbl[] = { - - // misc keys - - XK_Escape, Qt::Key_Escape, - XK_Tab, Qt::Key_Tab, - XK_ISO_Left_Tab, Qt::Key_Backtab, - XK_BackSpace, Qt::Key_Backspace, - XK_Return, Qt::Key_Return, - XK_Insert, Qt::Key_Insert, - XK_Delete, Qt::Key_Delete, - XK_Clear, Qt::Key_Delete, - XK_Pause, Qt::Key_Pause, - XK_Print, Qt::Key_Print, - 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq - 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq - - // cursor movement - - XK_Home, Qt::Key_Home, - XK_End, Qt::Key_End, - XK_Left, Qt::Key_Left, - XK_Up, Qt::Key_Up, - XK_Right, Qt::Key_Right, - XK_Down, Qt::Key_Down, - XK_Prior, Qt::Key_PageUp, - XK_Next, Qt::Key_PageDown, - - // modifiers - - XK_Shift_L, Qt::Key_Shift, - XK_Shift_R, Qt::Key_Shift, - XK_Shift_Lock, Qt::Key_Shift, - XK_Control_L, Qt::Key_Control, - XK_Control_R, Qt::Key_Control, - XK_Meta_L, Qt::Key_Meta, - XK_Meta_R, Qt::Key_Meta, - XK_Alt_L, Qt::Key_Alt, - XK_Alt_R, Qt::Key_Alt, - XK_Caps_Lock, Qt::Key_CapsLock, - XK_Num_Lock, Qt::Key_NumLock, - XK_Scroll_Lock, Qt::Key_ScrollLock, - XK_Super_L, Qt::Key_Super_L, - XK_Super_R, Qt::Key_Super_R, - XK_Menu, Qt::Key_Menu, - XK_Hyper_L, Qt::Key_Hyper_L, - XK_Hyper_R, Qt::Key_Hyper_R, - XK_Help, Qt::Key_Help, - 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab - 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) - 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) - - // numeric and function keypad keys - - XK_KP_Space, Qt::Key_Space, - XK_KP_Tab, Qt::Key_Tab, - XK_KP_Enter, Qt::Key_Enter, - //XK_KP_F1, Qt::Key_F1, - //XK_KP_F2, Qt::Key_F2, - //XK_KP_F3, Qt::Key_F3, - //XK_KP_F4, Qt::Key_F4, - XK_KP_Home, Qt::Key_Home, - XK_KP_Left, Qt::Key_Left, - XK_KP_Up, Qt::Key_Up, - XK_KP_Right, Qt::Key_Right, - XK_KP_Down, Qt::Key_Down, - XK_KP_Prior, Qt::Key_PageUp, - XK_KP_Next, Qt::Key_PageDown, - XK_KP_End, Qt::Key_End, - XK_KP_Begin, Qt::Key_Clear, - XK_KP_Insert, Qt::Key_Insert, - XK_KP_Delete, Qt::Key_Delete, - XK_KP_Equal, Qt::Key_Equal, - XK_KP_Multiply, Qt::Key_Asterisk, - XK_KP_Add, Qt::Key_Plus, - XK_KP_Separator, Qt::Key_Comma, - XK_KP_Subtract, Qt::Key_Minus, - XK_KP_Decimal, Qt::Key_Period, - XK_KP_Divide, Qt::Key_Slash, - - // International input method support keys - - // International & multi-key character composition - XK_ISO_Level3_Shift, Qt::Key_AltGr, - 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_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 keys from X.org - This include multimedia keys, - // wireless/bluetooth/uwb keys, special launcher keys, etc. - XF86XK_Back, Qt::Key_Back, - XF86XK_Forward, Qt::Key_Forward, - XF86XK_Stop, Qt::Key_Stop, - XF86XK_Refresh, Qt::Key_Refresh, - XF86XK_Favorites, Qt::Key_Favorites, - XF86XK_AudioMedia, Qt::Key_LaunchMedia, - XF86XK_OpenURL, Qt::Key_OpenUrl, - XF86XK_HomePage, Qt::Key_HomePage, - XF86XK_Search, Qt::Key_Search, - XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, - XF86XK_AudioMute, Qt::Key_VolumeMute, - XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, - XF86XK_AudioPlay, Qt::Key_MediaPlay, - XF86XK_AudioStop, Qt::Key_MediaStop, - XF86XK_AudioPrev, Qt::Key_MediaPrevious, - XF86XK_AudioNext, Qt::Key_MediaNext, - XF86XK_AudioRecord, Qt::Key_MediaRecord, - XF86XK_Mail, Qt::Key_LaunchMail, - XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly - XF86XK_Calculator, Qt::Key_Launch1, - XF86XK_Memo, Qt::Key_Memo, - XF86XK_ToDoList, Qt::Key_ToDoList, - XF86XK_Calendar, Qt::Key_Calendar, - XF86XK_PowerDown, Qt::Key_PowerDown, - XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, - XF86XK_Standby, Qt::Key_Standby, - XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, - XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, - XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, - XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, - XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, - XF86XK_PowerOff, Qt::Key_PowerOff, - XF86XK_WakeUp, Qt::Key_WakeUp, - XF86XK_Eject, Qt::Key_Eject, - XF86XK_ScreenSaver, Qt::Key_ScreenSaver, - XF86XK_WWW, Qt::Key_WWW, - XF86XK_Sleep, Qt::Key_Sleep, - XF86XK_LightBulb, Qt::Key_LightBulb, - XF86XK_Shop, Qt::Key_Shop, - XF86XK_History, Qt::Key_History, - XF86XK_AddFavorite, Qt::Key_AddFavorite, - XF86XK_HotLinks, Qt::Key_HotLinks, - XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, - XF86XK_Finance, Qt::Key_Finance, - XF86XK_Community, Qt::Key_Community, - XF86XK_AudioRewind, Qt::Key_AudioRewind, - XF86XK_BackForward, Qt::Key_BackForward, - XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, - XF86XK_ApplicationRight, Qt::Key_ApplicationRight, - XF86XK_Book, Qt::Key_Book, - XF86XK_CD, Qt::Key_CD, - XF86XK_Calculater, Qt::Key_Calculator, - XF86XK_Clear, Qt::Key_Clear, - XF86XK_ClearGrab, Qt::Key_ClearGrab, - XF86XK_Close, Qt::Key_Close, - XF86XK_Copy, Qt::Key_Copy, - XF86XK_Cut, Qt::Key_Cut, - XF86XK_Display, Qt::Key_Display, - XF86XK_DOS, Qt::Key_DOS, - XF86XK_Documents, Qt::Key_Documents, - XF86XK_Excel, Qt::Key_Excel, - XF86XK_Explorer, Qt::Key_Explorer, - XF86XK_Game, Qt::Key_Game, - XF86XK_Go, Qt::Key_Go, - XF86XK_iTouch, Qt::Key_iTouch, - XF86XK_LogOff, Qt::Key_LogOff, - XF86XK_Market, Qt::Key_Market, - XF86XK_Meeting, Qt::Key_Meeting, - XF86XK_MenuKB, Qt::Key_MenuKB, - XF86XK_MenuPB, Qt::Key_MenuPB, - XF86XK_MySites, Qt::Key_MySites, - XF86XK_News, Qt::Key_News, - XF86XK_OfficeHome, Qt::Key_OfficeHome, - XF86XK_Option, Qt::Key_Option, - XF86XK_Paste, Qt::Key_Paste, - XF86XK_Phone, Qt::Key_Phone, - XF86XK_Reply, Qt::Key_Reply, - XF86XK_Reload, Qt::Key_Reload, - XF86XK_RotateWindows, Qt::Key_RotateWindows, - XF86XK_RotationPB, Qt::Key_RotationPB, - XF86XK_RotationKB, Qt::Key_RotationKB, - XF86XK_Save, Qt::Key_Save, - XF86XK_Send, Qt::Key_Send, - XF86XK_Spell, Qt::Key_Spell, - XF86XK_SplitScreen, Qt::Key_SplitScreen, - XF86XK_Support, Qt::Key_Support, - XF86XK_TaskPane, Qt::Key_TaskPane, - XF86XK_Terminal, Qt::Key_Terminal, - XF86XK_Tools, Qt::Key_Tools, - XF86XK_Travel, Qt::Key_Travel, - XF86XK_Video, Qt::Key_Video, - XF86XK_Word, Qt::Key_Word, - XF86XK_Xfer, Qt::Key_Xfer, - XF86XK_ZoomIn, Qt::Key_ZoomIn, - XF86XK_ZoomOut, Qt::Key_ZoomOut, - XF86XK_Away, Qt::Key_Away, - XF86XK_Messenger, Qt::Key_Messenger, - XF86XK_WebCam, Qt::Key_WebCam, - XF86XK_MailForward, Qt::Key_MailForward, - XF86XK_Pictures, Qt::Key_Pictures, - XF86XK_Music, Qt::Key_Music, - XF86XK_Battery, Qt::Key_Battery, - XF86XK_Bluetooth, Qt::Key_Bluetooth, - XF86XK_WLAN, Qt::Key_WLAN, - XF86XK_UWB, Qt::Key_UWB, - XF86XK_AudioForward, Qt::Key_AudioForward, - XF86XK_AudioRepeat, Qt::Key_AudioRepeat, - XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, - XF86XK_Subtitle, Qt::Key_Subtitle, - XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, - XF86XK_Time, Qt::Key_Time, - XF86XK_Select, Qt::Key_Select, - XF86XK_View, Qt::Key_View, - XF86XK_TopMenu, Qt::Key_TopMenu, - XF86XK_Bluetooth, Qt::Key_Bluetooth, - XF86XK_Suspend, Qt::Key_Suspend, - XF86XK_Hibernate, Qt::Key_Hibernate, - XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly - XF86XK_Launch1, Qt::Key_Launch3, - XF86XK_Launch2, Qt::Key_Launch4, - XF86XK_Launch3, Qt::Key_Launch5, - XF86XK_Launch4, Qt::Key_Launch6, - XF86XK_Launch5, Qt::Key_Launch7, - XF86XK_Launch6, Qt::Key_Launch8, - XF86XK_Launch7, Qt::Key_Launch9, - XF86XK_Launch8, Qt::Key_LaunchA, - XF86XK_Launch9, Qt::Key_LaunchB, - XF86XK_LaunchA, Qt::Key_LaunchC, - XF86XK_LaunchB, Qt::Key_LaunchD, - XF86XK_LaunchC, Qt::Key_LaunchE, - XF86XK_LaunchD, Qt::Key_LaunchF, - XF86XK_LaunchE, Qt::Key_LaunchG, - XF86XK_LaunchF, Qt::Key_LaunchH, - - // Qtopia keys - QTOPIAXK_Select, Qt::Key_Select, - QTOPIAXK_Yes, Qt::Key_Yes, - QTOPIAXK_No, Qt::Key_No, - QTOPIAXK_Cancel, Qt::Key_Cancel, - QTOPIAXK_Printer, Qt::Key_Printer, - QTOPIAXK_Execute, Qt::Key_Execute, - QTOPIAXK_Sleep, Qt::Key_Sleep, - QTOPIAXK_Play, Qt::Key_Play, - QTOPIAXK_Zoom, Qt::Key_Zoom, - QTOPIAXK_Context1, Qt::Key_Context1, - QTOPIAXK_Context2, Qt::Key_Context2, - QTOPIAXK_Context3, Qt::Key_Context3, - QTOPIAXK_Context4, Qt::Key_Context4, - QTOPIAXK_Call, Qt::Key_Call, - QTOPIAXK_Hangup, Qt::Key_Hangup, - QTOPIAXK_Flip, Qt::Key_Flip, - - 0, 0 -}; - -static const unsigned short katakanaKeysymsToUnicode[] = { - 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, - 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, - 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, - 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, - 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, - 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, - 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, - 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C -}; - -static const unsigned short cyrillicKeysymsToUnicode[] = { - 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, - 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, - 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, - 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - -static const unsigned short greekKeysymsToUnicode[] = { - 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, - 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, - 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, - 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short technicalKeysymsToUnicode[] = { - 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1, - 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8, - 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B, - 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, - 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000, - 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, - 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000 -}; - -static const unsigned short specialKeysymsToUnicode[] = { - 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000, - 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA, - 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C, - 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short publishingKeysymsToUnicode[] = { - 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, - 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, - 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, - 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, - 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, - 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, - 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, - 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, - 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, - 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, - 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, - 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000 -}; - -static const unsigned short aplKeysymsToUnicode[] = { - 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, - 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, - 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, - 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, - 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000 -}; - -static const unsigned short koreanKeysymsToUnicode[] = { - 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, - 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, - 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, - 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, - 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, - 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, - 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, - 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, - 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, - 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, - 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, - 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 -}; - -static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) -{ - switch (byte3) { - case 0x04: - // katakana - if (byte4 > 0xa0 && byte4 < 0xe0) - return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]); - else if (byte4 == 0x7e) - return QChar(0x203e); // Overline - break; - case 0x06: - // russian, use lookup table - if (byte4 > 0xa0) - return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x07: - // greek - if (byte4 > 0xa0) - return QChar(greekKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x08: - // technical - if (byte4 > 0xa0) - return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x09: - // special - if (byte4 >= 0xe0) - return QChar(specialKeysymsToUnicode[byte4 - 0xe0]); - break; - case 0x0a: - // publishing - if (byte4 > 0xa0) - return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x0b: - // APL - if (byte4 > 0xa0) - return QChar(aplKeysymsToUnicode[byte4 - 0xa0]); - break; - case 0x0e: - // Korean - if (byte4 > 0xa0) - return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]); - break; - default: - break; - } - return QChar(0x0); -} - -Qt::KeyboardModifiers QXlibKeyboard::translateModifiers(int s) -{ - Qt::KeyboardModifiers ret = 0; - if (s & ShiftMask) - ret |= Qt::ShiftModifier; - if (s & ControlMask) - ret |= Qt::ControlModifier; - if (s & m_alt_mask) - ret |= Qt::AltModifier; - if (s & m_meta_mask) - ret |= Qt::MetaModifier; -// if (s & m_mode_switch_mask) //doesn't seem to work correctly -// ret |= Qt::GroupSwitchModifier; - return ret; -} - -void QXlibKeyboard::setMask(KeySym sym, uint mask) -{ - if (m_alt_mask == 0 - && m_meta_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && (sym == XK_Alt_L || sym == XK_Alt_R)) { - m_alt_mask = mask; - } - if (m_meta_mask == 0 - && m_alt_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && (sym == XK_Meta_L || sym == XK_Meta_R)) { - m_meta_mask = mask; - } - if (m_super_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_hyper_mask != mask - && (sym == XK_Super_L || sym == XK_Super_R)) { - m_super_mask = mask; - } - if (m_hyper_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_super_mask != mask - && (sym == XK_Hyper_L || sym == XK_Hyper_R)) { - m_hyper_mask = mask; - } - if (m_mode_switch_mask == 0 - && m_alt_mask != mask - && m_meta_mask != mask - && m_super_mask != mask - && m_hyper_mask != mask - && sym == XK_Mode_switch) { - m_mode_switch_mask = mask; - } - if (m_num_lock_mask == 0 - && sym == XK_Num_Lock) { - m_num_lock_mask = mask; - } -} - -int QXlibKeyboard::translateKeySym(uint key) const -{ - int code = -1; - int i = 0; // any other keys - while (KeyTbl[i]) { - if (key == KeyTbl[i]) { - code = (int)KeyTbl[i+1]; - break; - } - i += 2; - } - if (m_meta_mask) { - // translate Super/Hyper keys to Meta if we're using them as the MetaModifier - if (m_meta_mask == m_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) { - code = Qt::Key_Meta; - } else if (m_meta_mask == m_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) { - code = Qt::Key_Meta; - } - } - return code; -} - -QString QXlibKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, - int &code, Qt::KeyboardModifiers &modifiers, - QByteArray &chars, int &count) -{ - // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars - - QTextCodec *mapper = QTextCodec::codecForLocale(); - QChar converted; - - if (/*count == 0 &&*/ keysym < 0xff00) { - unsigned char byte3 = (unsigned char)(keysym >> 8); - int mib = -1; - switch(byte3) { - case 0: // Latin 1 - case 1: // Latin 2 - case 2: //latin 3 - case 3: // latin4 - mib = byte3 + 4; break; - case 5: // arabic - mib = 82; break; - case 12: // Hebrew - mib = 85; break; - case 13: // Thai - mib = 2259; break; - case 4: // kana - case 6: // cyrillic - case 7: // greek - case 8: // technical, no mapping here at the moment - case 9: // Special - case 10: // Publishing - case 11: // APL - case 14: // Korean, no mapping - mib = -1; // manual conversion - mapper= 0; -#if !defined(QT_NO_XIM) - converted = keysymToUnicode(byte3, keysym & 0xff); -#endif - case 0x20: - // currency symbols - if (keysym >= 0x20a0 && keysym <= 0x20ac) { - mib = -1; // manual conversion - mapper = 0; - converted = (uint)keysym; - } - break; - default: - break; - } - if (mib != -1) { - mapper = QTextCodec::codecForMib(mib); - if (chars.isEmpty()) - chars.resize(1); - chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later - count = 1; - } - } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) { - converted = (ushort) (keysym - 0x1000000); - mapper = 0; - } - if (count < (int)chars.size()-1) - chars[count] = '\0'; - - QString text; - if (!mapper && converted.unicode() != 0x0) { - text = converted; - } else if (!chars.isEmpty()) { - // convert chars (8bit) to text (unicode). - if (mapper) - text = mapper->toUnicode(chars.data(), count, 0); - if (text.isEmpty()) { - // no mapper, or codec couldn't convert to unicode (this - // can happen when running in the C locale or with no LANG - // set). try converting from latin-1 - text = QString::fromLatin1(chars); - } - } - - modifiers = translateModifiers(xmodifiers); - - // Commentary in X11/keysymdef says that X codes match ASCII, so it - // is safe to use the locale functions to process X codes in ISO8859-1. - // - // This is mainly for compatibility - applications should not use the - // Qt keycodes between 128 and 255, but should rather use the - // QKeyEvent::text(). - // - if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) { - // upper-case key, if known - code = isprint((int)keysym) ? toupper((int)keysym) : 0; - } else if (keysym >= XK_F1 && keysym <= XK_F35) { - // function keys - code = Qt::Key_F1 + ((int)keysym - XK_F1); - } else if (keysym >= XK_KP_Space && keysym <= XK_KP_9) { - if (keysym >= XK_KP_0) { - // numeric keypad keys - code = Qt::Key_0 + ((int)keysym - XK_KP_0); - } else { - code = translateKeySym(keysym); - } - modifiers |= Qt::KeypadModifier; - } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) { - code = text.unicode()->toUpper().unicode(); - } else { - // any other keys - code = translateKeySym(keysym); - - if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) { - // map shift+tab to shift+backtab, QShortcutMap knows about it - // and will handle it. - code = Qt::Key_Backtab; - text = QString(); - } - } - - return text; -} - -QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) - : m_screen(screen) - , m_alt_mask(0) - , m_super_mask(0) - , m_hyper_mask(0) - , m_meta_mask(0) -{ - changeLayout(); -} - -void QXlibKeyboard::changeLayout() -{ - XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); - for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { - const uint mask = xkbDesc->map->modmap ? xkbDesc->map->modmap[i] : 0; - if (mask == 0) { - // key is not bound to a modifier - continue; - } - - for (int j = 0; j < XkbKeyGroupsWidth(xkbDesc, i); ++j) { - KeySym keySym = XkbKeySym(xkbDesc, i, j); - if (keySym == NoSymbol) - continue; - setMask(keySym, mask); - } - } - XkbFreeKeyboard(xkbDesc, XkbAllComponentsMask, true); - -} - -static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) -{ - switch (qtcode) { - case Qt::Key_Control: - return Qt::ControlModifier; - case Qt::Key_Alt: - return Qt::AltModifier; - case Qt::Key_Shift: - return Qt::ShiftModifier; - case Qt::Key_Meta: - return Qt::MetaModifier; - default: - return Qt::NoModifier; - } -} - -void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) -{ - int qtcode = 0; - Qt::KeyboardModifiers modifiers = translateModifiers(ev->state); - QByteArray chars; - chars.resize(513); - int count = 0; - KeySym keySym; - count = XLookupString(ev,chars.data(),chars.size(),&keySym,0); - QString text = translateKeySym(keySym,ev->state,qtcode,modifiers,chars,count); - QWindowSystemInterface::handleKeyEvent(widget,ev->time,type,qtcode,modifiers,text.left(count)); -} diff --git a/src/plugins/platforms/xlib/qtestlitekeyboard.h b/src/plugins/platforms/xlib/qtestlitekeyboard.h deleted file mode 100644 index 98df4e1..0000000 --- a/src/plugins/platforms/xlib/qtestlitekeyboard.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEKEYBOARD_H -#define QTESTLITEKEYBOARD_H - -#include "qtestliteintegration.h" - -class QXlibKeyboard -{ -public: - QXlibKeyboard(QXlibScreen *screen); - - void changeLayout(); - - void handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev); - - Qt::KeyboardModifiers translateModifiers(int s); - -private: - - void setMask(KeySym sym, uint mask); - int translateKeySym(uint key) const; - QString translateKeySym(KeySym keysym, uint xmodifiers, - int &code, Qt::KeyboardModifiers &modifiers, - QByteArray &chars, int &count); - - QXlibScreen *m_screen; - - uint m_alt_mask; - uint m_super_mask; - uint m_hyper_mask; - uint m_meta_mask; - uint m_mode_switch_mask; - uint m_num_lock_mask; -}; - -#endif // QTESTLITEKEYBOARD_H diff --git a/src/plugins/platforms/xlib/qtestlitemime.cpp b/src/plugins/platforms/xlib/qtestlitemime.cpp deleted file mode 100644 index 5335ae9..0000000 --- a/src/plugins/platforms/xlib/qtestlitemime.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitemime.h" - -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" - -#include <QtCore/QTextCodec> -#include <QtGui/QImageWriter> -#include <QtCore/QBuffer> - -QXlibMime::QXlibMime() - : QInternalMimeData() -{ } - -QXlibMime::~QXlibMime() -{} - - - - - -QString QXlibMime::mimeAtomToString(Display *display, Atom a) -{ - if (!a) return 0; - - if (a == XA_STRING || a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) { - return "text/plain"; // some Xdnd clients are dumb - } - char *atom = XGetAtomName(display, a); - QString result = QString::fromLatin1(atom); - XFree(atom); - return result; -} - -Atom QXlibMime::mimeStringToAtom(Display *display, const QString &mimeType) -{ - if (mimeType.isEmpty()) - return 0; - return XInternAtom(display, mimeType.toLatin1().constData(), False); -} - -QStringList QXlibMime::mimeFormatsForAtom(Display *display, Atom a) -{ - QStringList formats; - if (a) { - QString atomName = mimeAtomToString(display, a); - formats.append(atomName); - - // special cases for string type - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) - || a == XA_STRING - || a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - formats.append(QLatin1String("text/plain")); - - // special cases for uris - if (atomName == QLatin1String("text/x-moz-url")) - formats.append(QLatin1String("text/uri-list")); - - // special case for images - if (a == XA_PIXMAP) - formats.append(QLatin1String("image/ppm")); - } - return formats; -} - -bool QXlibMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) -{ - bool ret = false; - *atomFormat = a; - *dataFormat = 8; - QString atomName = mimeAtomToString(display, a); - if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) { - *data = QInternalMimeData::renderDataHelper(atomName, mimeData); - if (atomName == QLatin1String("application/x-color")) - *dataFormat = 16; - ret = true; - } else { - if ((a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) - || a == XA_STRING - || a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - && QInternalMimeData::hasFormatHelper(QLatin1String("text/plain"), mimeData)) { - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)){ - *data = QInternalMimeData::renderDataHelper(QLatin1String("text/plain"), mimeData); - ret = true; - } else if (a == XA_STRING) { - *data = QString::fromUtf8(QInternalMimeData::renderDataHelper( - QLatin1String("text/plain"), mimeData)).toLocal8Bit(); - ret = true; - } else if (a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { - // the ICCCM states that TEXT and COMPOUND_TEXT are in the - // encoding of choice, so we choose the encoding of the locale - QByteArray strData = QString::fromUtf8(QInternalMimeData::renderDataHelper( - QLatin1String("text/plain"), mimeData)).toLocal8Bit(); - char *list[] = { strData.data(), NULL }; - - XICCEncodingStyle style = (a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - ? XCompoundTextStyle : XStdICCTextStyle; - XTextProperty textprop; - if (list[0] != NULL - && XmbTextListToTextProperty(display, list, 1, style, - &textprop) == Success) { - *atomFormat = textprop.encoding; - *dataFormat = textprop.format; - *data = QByteArray((const char *) textprop.value, textprop.nitems * textprop.format / 8); - ret = true; - - XFree(textprop.value); - } - } - } else if (atomName == QLatin1String("text/x-moz-url") && - QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) { - QByteArray uri = QInternalMimeData::renderDataHelper( - QLatin1String("text/uri-list"), mimeData).split('\n').first(); - QString mozUri = QString::fromLatin1(uri, uri.size()); - mozUri += QLatin1Char('\n'); - *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), mozUri.length() * 2); - ret = true; - } else if ((a == XA_PIXMAP || a == XA_BITMAP) && mimeData->hasImage()) { - ret = true; - } - } - return ret && data != 0; -} - -QList<Atom> QXlibMime::mimeAtomsForFormat(Display *display, const QString &format) -{ - QList<Atom> atoms; - atoms.append(mimeStringToAtom(display, format)); - - // special cases for strings - if (format == QLatin1String("text/plain")) { - atoms.append(QXlibStatic::atom(QXlibStatic::UTF8_STRING)); - atoms.append(XA_STRING); - atoms.append(QXlibStatic::atom(QXlibStatic::TEXT)); - atoms.append(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)); - } - - // special cases for uris - if (format == QLatin1String("text/uri-list")) { - atoms.append(mimeStringToAtom(display,QLatin1String("text/x-moz-url"))); - } - - //special cases for images - if (format == QLatin1String("image/ppm")) - atoms.append(XA_PIXMAP); - if (format == QLatin1String("image/pbm")) - atoms.append(XA_BITMAP); - - return atoms; -} - -QVariant QXlibMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) -{ - QString atomName = mimeAtomToString(display,a); - if (atomName == format) - return data; - - if (!encoding.isEmpty() - && atomName == format + QLatin1String(";charset=") + QString::fromLatin1(encoding)) { - - if (requestedType == QVariant::String) { - QTextCodec *codec = QTextCodec::codecForName(encoding); - if (codec) - return codec->toUnicode(data); - } - - return data; - } - - // special cases for string types - if (format == QLatin1String("text/plain")) { - if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) - return QString::fromUtf8(data); - if (a == XA_STRING) - return QString::fromLatin1(data); - if (a == QXlibStatic::atom(QXlibStatic::TEXT) - || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) - // #### might be wrong for COMPUND_TEXT - return QString::fromLocal8Bit(data, data.size()); - } - - // special case for uri types - if (format == QLatin1String("text/uri-list")) { - if (atomName == QLatin1String("text/x-moz-url")) { - // we expect this as utf16 <url><space><title> - // the first part is a url that should only contain ascci char - // so it should be safe to check that the second char is 0 - // to verify that it is utf16 - if (data.size() > 1 && data.at(1) == 0) - return QString::fromRawData((const QChar *)data.constData(), - data.size() / 2).split(QLatin1Char('\n')).first().toLatin1(); - } - } - - // special cas for images - if (format == QLatin1String("image/ppm")) { - if (a == XA_PIXMAP && data.size() == sizeof(Pixmap)) { - Pixmap xpm = *((Pixmap*)data.data()); - if (!xpm) - return QByteArray(); - Window root; - int x; - int y; - uint width; - uint height; - uint border_width; - uint depth; - - XGetGeometry(display, xpm, &root, &x, &y, &width, &height, &border_width, &depth); - XImage *ximg = XGetImage(display,xpm,x,y,width,height,AllPlanes,depth==1 ? XYPixmap : ZPixmap); - QImage qimg = QXlibStatic::qimageFromXImage(ximg); - XDestroyImage(ximg); - - QImageWriter imageWriter; - imageWriter.setFormat("PPMRAW"); - QBuffer buf; - buf.open(QIODevice::WriteOnly); - imageWriter.setDevice(&buf); - imageWriter.write(qimg); - return buf.buffer(); - } - } - return QVariant(); -} - -Atom QXlibMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding) -{ - requestedEncoding->clear(); - - // find matches for string types - if (format == QLatin1String("text/plain")) { - if (atoms.contains(QXlibStatic::atom(QXlibStatic::UTF8_STRING))) - return QXlibStatic::atom(QXlibStatic::UTF8_STRING); - if (atoms.contains(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT))) - return QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT); - if (atoms.contains(QXlibStatic::atom(QXlibStatic::TEXT))) - return QXlibStatic::atom(QXlibStatic::TEXT); - if (atoms.contains(XA_STRING)) - return XA_STRING; - } - - // find matches for uri types - if (format == QLatin1String("text/uri-list")) { - Atom a = mimeStringToAtom(display,format); - if (a && atoms.contains(a)) - return a; - a = mimeStringToAtom(display,QLatin1String("text/x-moz-url")); - if (a && atoms.contains(a)) - return a; - } - - // find match for image - if (format == QLatin1String("image/ppm")) { - if (atoms.contains(XA_PIXMAP)) - return XA_PIXMAP; - } - - // for string/text requests try to use a format with a well-defined charset - // first to avoid encoding problems - if (requestedType == QVariant::String - && format.startsWith(QLatin1String("text/")) - && !format.contains(QLatin1String("charset="))) { - - QString formatWithCharset = format; - formatWithCharset.append(QLatin1String(";charset=utf-8")); - - Atom a = mimeStringToAtom(display,formatWithCharset); - if (a && atoms.contains(a)) { - *requestedEncoding = "utf-8"; - return a; - } - } - - Atom a = mimeStringToAtom(display,format); - if (a && atoms.contains(a)) - return a; - - return 0; -} diff --git a/src/plugins/platforms/xlib/qtestlitemime.h b/src/plugins/platforms/xlib/qtestlitemime.h deleted file mode 100644 index 6a70ea4..0000000 --- a/src/plugins/platforms/xlib/qtestlitemime.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEMIME_H -#define QTESTLITEMIME_H - -#include <private/qdnd_p.h> - -#include <QtGui/QClipboard> - -#include "qtestliteintegration.h" -#include "qtestliteclipboard.h" - -class QXlibMime : public QInternalMimeData { - Q_OBJECT -public: - QXlibMime(); - ~QXlibMime(); - - static QList<Atom> mimeAtomsForFormat(Display *display, const QString &format); - static QString mimeAtomToString(Display *display, Atom a); - static bool mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat); - static QStringList mimeFormatsForAtom(Display *display, Atom a); - static Atom mimeStringToAtom(Display *display, const QString &mimeType); - static QVariant mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding); - static Atom mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding); -}; - -#endif // QTESTLITEMIME_H diff --git a/src/plugins/platforms/xlib/qtestlitescreen.cpp b/src/plugins/platforms/xlib/qtestlitescreen.cpp deleted file mode 100644 index 714c17b..0000000 --- a/src/plugins/platforms/xlib/qtestlitescreen.cpp +++ /dev/null @@ -1,468 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitescreen.h" - -#include "qtestlitecursor.h" -#include "qtestlitewindow.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" -#include "qtestliteclipboard.h" - -#include <QtCore/QDebug> -#include <QtCore/QSocketNotifier> -#include <QtCore/QElapsedTimer> - -#include <private/qapplication_p.h> - -#include <X11/extensions/Xfixes.h> - -QT_BEGIN_NAMESPACE - -static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); -static bool seen_badwindow; - -static int qt_x_errhandler(Display *dpy, XErrorEvent *err) -{ - -qDebug() << "qt_x_errhandler" << err->error_code; - - switch (err->error_code) { - case BadAtom: -#if 0 - if (err->request_code == 20 /* X_GetProperty */ - && (err->resourceid == XA_RESOURCE_MANAGER - || err->resourceid == XA_RGB_DEFAULT_MAP - || err->resourceid == ATOM(_NET_SUPPORTED) - || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) - || err->resourceid == ATOM(KDE_FULL_SESSION) - || err->resourceid == ATOM(KWIN_RUNNING) - || err->resourceid == ATOM(XdndProxy) - || err->resourceid == ATOM(XdndAware)) - - - ) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } -#endif - qDebug() << "BadAtom"; - break; - - case BadWindow: - if (err->request_code == 2 /* X_ChangeWindowAttributes */ - || err->request_code == 38 /* X_QueryPointer */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } - } - seen_badwindow = true; - if (err->request_code == 25 /* X_SendEvent */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } -#if 0 - if (X11->xdndHandleBadwindow()) { - qDebug("xdndHandleBadwindow returned true"); - return 0; - } -#endif - } -#if 0 - if (X11->ignore_badwindow) - return 0; -#endif - break; - - case BadMatch: - if (err->request_code == 42 /* X_SetInputFocus */) - return 0; - break; - - default: -#if 0 //!defined(QT_NO_XINPUT) - if (err->request_code == X11->xinput_major - && err->error_code == (X11->xinput_errorbase + XI_BadDevice) - && err->minor_code == 3 /* X_OpenDevice */) { - return 0; - } -#endif - break; - } - - char errstr[256]; - XGetErrorText( dpy, err->error_code, errstr, 256 ); - char buffer[256]; - char request_str[256]; - qsnprintf(buffer, 256, "%d", err->request_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); - if (err->request_code < 128) { - // X error for a normal protocol request - qWarning( "X Error: %s %d\n" - " Major opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - request_str, - err->resourceid ); - } else { - // X error for an extension request - const char *extensionName = 0; -#if 0 - if (err->request_code == X11->xrender_major) - extensionName = "RENDER"; - else if (err->request_code == X11->xrandr_major) - extensionName = "RANDR"; - else if (err->request_code == X11->xinput_major) - extensionName = "XInputExtension"; - else if (err->request_code == X11->mitshm_major) - extensionName = "MIT-SHM"; -#endif - char minor_str[256]; - if (extensionName) { - qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); - } else { - extensionName = "Uknown extension"; - qsnprintf(minor_str, 256, "Unknown request"); - } - qWarning( "X Error: %s %d\n" - " Extension: %d (%s)\n" - " Minor opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - extensionName, - err->minor_code, - minor_str, - err->resourceid ); - } - - // ### we really should distinguish between severe, non-severe and - // ### application specific errors - - return 0; -} - -QXlibScreen::QXlibScreen() - : mFormat(QImage::Format_RGB32) -{ - char *display_name = getenv("DISPLAY"); - mDisplay = XOpenDisplay(display_name); - mDisplayName = QString::fromLocal8Bit(display_name); - if (!mDisplay) { - fprintf(stderr, "Cannot connect to X server: %s\n", - display_name); - exit(1); - } - -#ifndef DONT_USE_MIT_SHM - Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay); - Q_ASSERT(MIT_SHM_extension_supported == True); -#endif - original_x_errhandler = XSetErrorHandler(qt_x_errhandler); - - if (qgetenv("DO_X_SYNCHRONIZE").toInt()) - XSynchronize(mDisplay, true); - - mScreen = DefaultScreen(mDisplay); - XSelectInput(mDisplay,rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); - int width = DisplayWidth(mDisplay, mScreen); - int height = DisplayHeight(mDisplay, mScreen); - mGeometry = QRect(0,0,width,height); - - int physicalWidth = DisplayWidthMM(mDisplay, mScreen); - int physicalHeight = DisplayHeightMM(mDisplay, mScreen); - mPhysicalSize = QSize(physicalWidth,physicalHeight); - - int xSocketNumber = XConnectionNumber(mDisplay); - - mDepth = DefaultDepth(mDisplay,mScreen); -#ifdef MYX11_DEBUG - qDebug() << "X socket:"<< xSocketNumber; -#endif - QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); - connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); - - mCursor = new QXlibCursor(this); - mKeyboard = new QXlibKeyboard(this); -} - -QXlibScreen::~QXlibScreen() -{ - delete mCursor; - XCloseDisplay(mDisplay); -} - -#ifdef KeyPress -#undef KeyPress -#endif -#ifdef KeyRelease -#undef KeyRelease -#endif - -bool QXlibScreen::handleEvent(XEvent *xe) -{ - int quit = false; - QXlibWindow *platformWindow = 0; - QWidget *widget = QWidget::find(xe->xany.window); - if (widget) { - platformWindow = static_cast<QXlibWindow *>(widget->platformWindow()); - } - - Atom wmProtocolsAtom = QXlibStatic::atom(QXlibStatic::WM_PROTOCOLS); - Atom wmDeleteWindowAtom = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); - switch (xe->type) { - - case ClientMessage: - if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { - Atom a = xe->xclient.data.l[0]; - if (a == wmDeleteWindowAtom) - platformWindow->handleCloseEvent(); - } - break; - - case Expose: - if (platformWindow) - if (xe->xexpose.count == 0) - platformWindow->paintEvent(); - break; - case ConfigureNotify: - if (platformWindow) - platformWindow->resizeEvent(&xe->xconfigure); - break; - - case ButtonPress: - if (platformWindow) - platformWindow->mousePressEvent(&xe->xbutton); - break; - - case ButtonRelease: - if (platformWindow) - platformWindow->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton); - break; - - case MotionNotify: - if (platformWindow) - platformWindow->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); - break; - - case XKeyPress: - mKeyboard->handleKeyEvent(widget,QEvent::KeyPress, &xe->xkey); - break; - - case XKeyRelease: - mKeyboard->handleKeyEvent(widget,QEvent::KeyRelease, &xe->xkey); - break; - - case EnterNotify: - if (platformWindow) - platformWindow->handleEnterEvent(); - break; - - case LeaveNotify: - if (platformWindow) - platformWindow->handleLeaveEvent(); - break; - - case XFocusIn: - if (platformWindow) - platformWindow->handleFocusInEvent(); - break; - - case XFocusOut: - if (platformWindow) - platformWindow->handleFocusOutEvent(); - break; - - case PropertyNotify: - break; - - case SelectionClear: - qDebug() << "Selection Clear!!!"; - break; - case SelectionRequest: - handleSelectionRequest(xe); - break; - case SelectionNotify: - qDebug() << "Selection Notify!!!!"; - - break; - - - default: -#ifdef MYX11_DEBUG - qDebug() << hex << xe->xany.window << "Other X event" << xe->type; -#endif - break; - } - - return quit; -} - -static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer) -{ - Atom clipboard = QXlibStatic::atom(QXlibStatic::CLIPBOARD); - return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY - || e->xselectionrequest.selection == clipboard)) - || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY - || e->xselectionclear.selection == clipboard))); -} - -bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) -{ - QElapsedTimer timer; - timer.start(); - do { - if (XCheckTypedWindowEvent(mDisplay,win,type,event)) - return true; - - // process other clipboard events, since someone is probably requesting data from us - XEvent e; - if (XCheckIfEvent(mDisplay, &e, checkForClipboardEvents, 0)) - handleEvent(&e); - - XFlush(mDisplay); - - // sleep 50 ms, so we don't use up CPU cycles all the time. - struct timeval usleep_tv; - usleep_tv.tv_sec = 0; - usleep_tv.tv_usec = 50000; - select(0, 0, 0, 0, &usleep_tv); - } while (timer.elapsed() < timeout); - return false; -} - -void QXlibScreen::eventDispatcher() -{ - ulong marker = XNextRequest(mDisplay); - // int i = 0; - while (XPending(mDisplay)) { - XEvent event; - XNextEvent(mDisplay, &event); - /* done = */ - handleEvent(&event); - - if (event.xany.serial >= marker) { - #ifdef MYX11_DEBUG - qDebug() << "potential livelock averted"; - #endif - #if 0 - if (XEventsQueued(mDisplay, QueuedAfterFlush)) { - qDebug() << " with events queued"; - QTimer::singleShot(0, this, SLOT(eventDispatcher())); - } - #endif - break; - } - } -} - -QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) -{ - if (w == 0 || h ==0) - return QImage(); - - //WinId 0 means the desktop widget - if (!window) - window = rootWindow(); - - XWindowAttributes window_attr; - if (!XGetWindowAttributes(mDisplay, window, &window_attr)) - return QImage(); - - if (w < 0) - w = window_attr.width - x; - if (h < 0) - h = window_attr.height - y; - - // Ideally, we should also limit ourselves to the screen area, but the Qt docs say - // that it's "unsafe" to go outside the screen, so we can ignore that problem. - - //We're definitely not optimizing for speed... - XImage *xi = XGetImage(mDisplay, window, x, y, w, h, AllPlanes, ZPixmap); - - if (!xi) - return QImage(); - - //taking a copy to make sure we have ownership -- not fast - QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); - - XDestroyImage(xi); - - return result; -} - -QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) -{ - QPlatformScreen *platformScreen = platformScreenForWidget(widget); - return static_cast<QXlibScreen *>(platformScreen); -} - -Display * QXlibScreen::display() const -{ - return mDisplay; -} - -int QXlibScreen::xScreenNumber() const -{ - return mScreen; -} - -QXlibKeyboard * QXlibScreen::keyboard() const -{ - return mKeyboard; -} - -void QXlibScreen::handleSelectionRequest(XEvent *event) -{ - QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); - QXlibClipboard *clipboard = static_cast<QXlibClipboard *>(integration->clipboard()); - clipboard->handleSelectionRequest(event); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitescreen.h b/src/plugins/platforms/xlib/qtestlitescreen.h deleted file mode 100644 index 7e59a59..0000000 --- a/src/plugins/platforms/xlib/qtestlitescreen.h +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITESCREEN_H -#define QTESTLITESCREEN_H - -#include <QtGui/QPlatformScreen> -#include "qtestliteintegration.h" - -QT_BEGIN_NAMESPACE - -class QXlibCursor; -class QXlibKeyboard; - -class QXlibScreen : public QPlatformScreen -{ - Q_OBJECT -public: - QXlibScreen(); - - ~QXlibScreen(); - - QString displayName() const { return mDisplayName; } - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - - Window rootWindow() { return RootWindow(mDisplay, mScreen); } - unsigned long blackPixel() { return BlackPixel(mDisplay, mScreen); } - unsigned long whitePixel() { return WhitePixel(mDisplay, mScreen); } - - bool handleEvent(XEvent *xe); - bool waitForClipboardEvent(Window win, int type, XEvent *event, int timeout); - - QImage grabWindow(Window window, int x, int y, int w, int h); - - static QXlibScreen *testLiteScreenForWidget(QWidget *widget); - - Display *display() const; - int xScreenNumber() const; - - QXlibKeyboard *keyboard() const; - -public slots: - void eventDispatcher(); - -private: - - void handleSelectionRequest(XEvent *event); - QString mDisplayName; - QRect mGeometry; - QSize mPhysicalSize; - int mDepth; - QImage::Format mFormat; - QXlibCursor *mCursor; - QXlibKeyboard *mKeyboard; - - Display * mDisplay; - int mScreen; -}; - -QT_END_NAMESPACE - -#endif // QTESTLITESCREEN_H diff --git a/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp b/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp deleted file mode 100644 index 837636c..0000000 --- a/src/plugins/platforms/xlib/qtestlitestaticinfo.cpp +++ /dev/null @@ -1,511 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" - -#include <qplatformdefs.h> - -#include <QtGui/private/qapplication_p.h> -#include <QtCore/QBuffer> -#include <QtCore/QLibrary> - -#include <QDebug> - -#ifndef QT_NO_XFIXES -#include <X11/extensions/Xfixes.h> -#endif // QT_NO_XFIXES - -static const char * x11_atomnames = { - // window-manager <-> client protocols - "WM_PROTOCOLS\0" - "WM_DELETE_WINDOW\0" - "WM_TAKE_FOCUS\0" - "_NET_WM_PING\0" - "_NET_WM_CONTEXT_HELP\0" - "_NET_WM_SYNC_REQUEST\0" - "_NET_WM_SYNC_REQUEST_COUNTER\0" - - // ICCCM window state - "WM_STATE\0" - "WM_CHANGE_STATE\0" - - // Session management - "WM_CLIENT_LEADER\0" - "WM_WINDOW_ROLE\0" - "SM_CLIENT_ID\0" - - // Clipboard - "CLIPBOARD\0" - "INCR\0" - "TARGETS\0" - "MULTIPLE\0" - "TIMESTAMP\0" - "SAVE_TARGETS\0" - "CLIP_TEMPORARY\0" - "_QT_SELECTION\0" - "_QT_CLIPBOARD_SENTINEL\0" - "_QT_SELECTION_SENTINEL\0" - "CLIPBOARD_MANAGER\0" - - "RESOURCE_MANAGER\0" - - "_XSETROOT_ID\0" - - "_QT_SCROLL_DONE\0" - "_QT_INPUT_ENCODING\0" - - "_MOTIF_WM_HINTS\0" - - "DTWM_IS_RUNNING\0" - "ENLIGHTENMENT_DESKTOP\0" - "_DT_SAVE_MODE\0" - "_SGI_DESKS_MANAGER\0" - - // EWMH (aka NETWM) - "_NET_SUPPORTED\0" - "_NET_VIRTUAL_ROOTS\0" - "_NET_WORKAREA\0" - - "_NET_MOVERESIZE_WINDOW\0" - "_NET_WM_MOVERESIZE\0" - - "_NET_WM_NAME\0" - "_NET_WM_ICON_NAME\0" - "_NET_WM_ICON\0" - - "_NET_WM_PID\0" - - "_NET_WM_WINDOW_OPACITY\0" - - "_NET_WM_STATE\0" - "_NET_WM_STATE_ABOVE\0" - "_NET_WM_STATE_BELOW\0" - "_NET_WM_STATE_FULLSCREEN\0" - "_NET_WM_STATE_MAXIMIZED_HORZ\0" - "_NET_WM_STATE_MAXIMIZED_VERT\0" - "_NET_WM_STATE_MODAL\0" - "_NET_WM_STATE_STAYS_ON_TOP\0" - "_NET_WM_STATE_DEMANDS_ATTENTION\0" - - "_NET_WM_USER_TIME\0" - "_NET_WM_USER_TIME_WINDOW\0" - "_NET_WM_FULL_PLACEMENT\0" - - "_NET_WM_WINDOW_TYPE\0" - "_NET_WM_WINDOW_TYPE_DESKTOP\0" - "_NET_WM_WINDOW_TYPE_DOCK\0" - "_NET_WM_WINDOW_TYPE_TOOLBAR\0" - "_NET_WM_WINDOW_TYPE_MENU\0" - "_NET_WM_WINDOW_TYPE_UTILITY\0" - "_NET_WM_WINDOW_TYPE_SPLASH\0" - "_NET_WM_WINDOW_TYPE_DIALOG\0" - "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0" - "_NET_WM_WINDOW_TYPE_POPUP_MENU\0" - "_NET_WM_WINDOW_TYPE_TOOLTIP\0" - "_NET_WM_WINDOW_TYPE_NOTIFICATION\0" - "_NET_WM_WINDOW_TYPE_COMBO\0" - "_NET_WM_WINDOW_TYPE_DND\0" - "_NET_WM_WINDOW_TYPE_NORMAL\0" - "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0" - - "_KDE_NET_WM_FRAME_STRUT\0" - - "_NET_STARTUP_INFO\0" - "_NET_STARTUP_INFO_BEGIN\0" - - "_NET_SUPPORTING_WM_CHECK\0" - - "_NET_WM_CM_S0\0" - - "_NET_SYSTEM_TRAY_VISUAL\0" - - "_NET_ACTIVE_WINDOW\0" - - // Property formats - "COMPOUND_TEXT\0" - "TEXT\0" - "UTF8_STRING\0" - - // xdnd - "XdndEnter\0" - "XdndPosition\0" - "XdndStatus\0" - "XdndLeave\0" - "XdndDrop\0" - "XdndFinished\0" - "XdndTypeList\0" - "XdndActionList\0" - - "XdndSelection\0" - - "XdndAware\0" - "XdndProxy\0" - - "XdndActionCopy\0" - "XdndActionLink\0" - "XdndActionMove\0" - "XdndActionPrivate\0" - - // Motif DND - "_MOTIF_DRAG_AND_DROP_MESSAGE\0" - "_MOTIF_DRAG_INITIATOR_INFO\0" - "_MOTIF_DRAG_RECEIVER_INFO\0" - "_MOTIF_DRAG_WINDOW\0" - "_MOTIF_DRAG_TARGETS\0" - - "XmTRANSFER_SUCCESS\0" - "XmTRANSFER_FAILURE\0" - - // Xkb - "_XKB_RULES_NAMES\0" - - // XEMBED - "_XEMBED\0" - "_XEMBED_INFO\0" - - // Wacom old. (before version 0.10) - "Wacom Stylus\0" - "Wacom Cursor\0" - "Wacom Eraser\0" - - // Tablet - "STYLUS\0" - "ERASER\0" -}; - -/*! - \internal - Try to resolve a \a symbol from \a library with the version specified - by \a vernum. - - Note that, in the case of the Xfixes library, \a vernum is not the same as - \c XFIXES_MAJOR - it is a part of soname and may differ from the Xfixes - version. -*/ -static void* qt_load_library_runtime(const char *library, int vernum, - int highestVernum, const char *symbol) -{ - QList<int> versions; - // we try to load in the following order: - // explicit version -> the default one -> (from the highest (highestVernum) to the lowest (vernum) ) - if (vernum != -1) - versions << vernum; - versions << -1; - if (vernum != -1) { - for(int i = highestVernum; i > vernum; --i) - versions << i; - } - Q_FOREACH(int version, versions) { - QLatin1String libName(library); - QLibrary xfixesLib(libName, version); - void *ptr = xfixesLib.resolve(symbol); - if (ptr) - return ptr; - } - return 0; -} - -# define XFIXES_LOAD_RUNTIME(vernum, symbol, symbol_type) \ - (symbol_type)qt_load_library_runtime("libXfixes", vernum, 4, #symbol); -# define XFIXES_LOAD_V1(symbol) \ - XFIXES_LOAD_RUNTIME(1, symbol, Ptr##symbol) -# define XFIXES_LOAD_V2(symbol) \ - XFIXES_LOAD_RUNTIME(2, symbol, Ptr##symbol) - - -class QTestLiteStaticInfoPrivate -{ -public: - QTestLiteStaticInfoPrivate() - : use_xfixes(false) - , xfixes_major(0) - , xfixes_eventbase(0) - , xfixes_errorbase(0) - { - QXlibScreen *screen = qobject_cast<QXlibScreen *> (QApplicationPrivate::platformIntegration()->screens().at(0)); - Q_ASSERT(screen); - - initializeAllAtoms(screen); - initializeSupportedAtoms(screen); - - resolveXFixes(screen); - } - - bool isSupportedByWM(Atom atom) - { - if (!m_supportedAtoms) - return false; - - bool supported = false; - int i = 0; - while (m_supportedAtoms[i] != 0) { - if (m_supportedAtoms[i++] == atom) { - supported = true; - break; - } - } - - return supported; - } - - Atom atom(QXlibStatic::X11Atom atom) - { - return m_allAtoms[atom]; - } - - bool useXFixes() const { return use_xfixes; } - - int xFixesEventBase() const {return xfixes_eventbase; } - - PtrXFixesSelectSelectionInput xFixesSelectSelectionInput() const - { - return ptrXFixesSelectSelectionInput; - } - - QImage qimageFromXImage(XImage *xi) - { - QImage::Format format = QImage::Format_ARGB32_Premultiplied; - if (xi->depth == 24) - format = QImage::Format_RGB32; - else if (xi->depth == 16) - format = QImage::Format_RGB16; - - QImage image = QImage((uchar *)xi->data, xi->width, xi->height, xi->bytes_per_line, format).copy(); - - // we may have to swap the byte order - if ((QSysInfo::ByteOrder == QSysInfo::LittleEndian && xi->byte_order == MSBFirst) - || (QSysInfo::ByteOrder == QSysInfo::BigEndian && xi->byte_order == LSBFirst)) - { - for (int i=0; i < image.height(); i++) { - if (xi->depth == 16) { - ushort *p = (ushort*)image.scanLine(i); - ushort *end = p + image.width(); - while (p < end) { - *p = ((*p << 8) & 0xff00) | ((*p >> 8) & 0x00ff); - p++; - } - } else { - uint *p = (uint*)image.scanLine(i); - uint *end = p + image.width(); - while (p < end) { - *p = ((*p << 24) & 0xff000000) | ((*p << 8) & 0x00ff0000) - | ((*p >> 8) & 0x0000ff00) | ((*p >> 24) & 0x000000ff); - p++; - } - } - } - } - - // fix-up alpha channel - if (format == QImage::Format_RGB32) { - QRgb *p = (QRgb *)image.bits(); - for (int y = 0; y < xi->height; ++y) { - for (int x = 0; x < xi->width; ++x) - p[x] |= 0xff000000; - p += xi->bytes_per_line / 4; - } - } - - return image; - } - - -private: - - void initializeAllAtoms(QXlibScreen *screen) { - const char *names[QXlibStatic::NAtoms]; - const char *ptr = x11_atomnames; - - int i = 0; - while (*ptr) { - names[i++] = ptr; - while (*ptr) - ++ptr; - ++ptr; - } - - Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); - - QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); - settings_atom_name += XDisplayName(qPrintable(screen->displayName())); - names[i++] = settings_atom_name; - - Q_ASSERT(i == QXlibStatic::NAtoms); - #if 0//defined(XlibSpecificationRelease) && (XlibSpecificationRelease >= 6) - XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); - #else - for (i = 0; i < QXlibStatic::NAtoms; ++i) - m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); - #endif - } - - void initializeSupportedAtoms(QXlibScreen *screen) - { - Atom type; - int format; - long offset = 0; - unsigned long nitems, after; - unsigned char *data = 0; - - int e = XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, - False, XA_ATOM, &type, &format, &nitems, &after, &data); - if (data) - XFree(data); - - if (e == Success && type == XA_ATOM && format == 32) { - QBuffer ts; - ts.open(QIODevice::WriteOnly); - - while (after > 0) { - XGetWindowProperty(screen->display(), screen->rootWindow(), - this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, - False, XA_ATOM, &type, &format, &nitems, &after, &data); - - if (type == XA_ATOM && format == 32) { - ts.write(reinterpret_cast<char *>(data), nitems * sizeof(long)); - offset += nitems; - } else - after = 0; - if (data) - XFree(data); - } - - // compute nitems - QByteArray buffer(ts.buffer()); - nitems = buffer.size() / sizeof(Atom); - m_supportedAtoms = new Atom[nitems + 1]; - Atom *a = (Atom *) buffer.data(); - uint i; - for (i = 0; i < nitems; i++) - m_supportedAtoms[i] = a[i]; - m_supportedAtoms[nitems] = 0; - - } - } - - void resolveXFixes(QXlibScreen *screen) - { -#ifndef QT_NO_XFIXES - // See if Xfixes is supported on the connected display - if (XQueryExtension(screen->display(), "XFIXES", &xfixes_major, - &xfixes_eventbase, &xfixes_errorbase)) { - ptrXFixesQueryExtension = XFIXES_LOAD_V1(XFixesQueryExtension); - ptrXFixesQueryVersion = XFIXES_LOAD_V1(XFixesQueryVersion); - ptrXFixesSetCursorName = XFIXES_LOAD_V2(XFixesSetCursorName); - ptrXFixesSelectSelectionInput = XFIXES_LOAD_V2(XFixesSelectSelectionInput); - - if(ptrXFixesQueryExtension && ptrXFixesQueryVersion - && ptrXFixesQueryExtension(screen->display(), &xfixes_eventbase, - &xfixes_errorbase)) { - // Xfixes is supported. - // Note: the XFixes protocol version is negotiated using QueryVersion. - // We supply the highest version we support, the X server replies with - // the highest version it supports, but no higher than the version we - // asked for. The version sent back is the protocol version the X server - // will use to talk us. If this call is removed, the behavior of the - // X server when it receives an XFixes request is undefined. - int major = 3; - int minor = 0; - ptrXFixesQueryVersion(screen->display(), &major, &minor); - use_xfixes = (major >= 1); - xfixes_major = major; - } - } -#endif // QT_NO_XFIXES - - } - - Atom *m_supportedAtoms; - Atom m_allAtoms[QXlibStatic::NAtoms]; - -#ifndef QT_NO_XFIXES - PtrXFixesQueryExtension ptrXFixesQueryExtension; - PtrXFixesQueryVersion ptrXFixesQueryVersion; - PtrXFixesSetCursorName ptrXFixesSetCursorName; - PtrXFixesSelectSelectionInput ptrXFixesSelectSelectionInput; -#endif - - bool use_xfixes; - int xfixes_major; - int xfixes_eventbase; - int xfixes_errorbase; - -}; -Q_GLOBAL_STATIC(QTestLiteStaticInfoPrivate, qTestLiteStaticInfoPrivate); - - -Atom QXlibStatic::atom(QXlibStatic::X11Atom atom) -{ - return qTestLiteStaticInfoPrivate()->atom(atom); -} - -bool QXlibStatic::isSupportedByWM(Atom atom) -{ - return qTestLiteStaticInfoPrivate()->isSupportedByWM(atom); -} - -bool QXlibStatic::useXFixes() -{ - return qTestLiteStaticInfoPrivate()->useXFixes(); -} - -int QXlibStatic::xFixesEventBase() -{ - return qTestLiteStaticInfoPrivate()->xFixesEventBase(); -} - -#ifndef QT_NO_XFIXES -PtrXFixesSelectSelectionInput QXlibStatic::xFixesSelectSelectionInput() -{ - qDebug() << qTestLiteStaticInfoPrivate()->useXFixes(); - if (!qTestLiteStaticInfoPrivate()->useXFixes()) - return 0; - - return qTestLiteStaticInfoPrivate()->xFixesSelectSelectionInput(); -} - -QImage QXlibStatic::qimageFromXImage(XImage *xi) -{ - return qTestLiteStaticInfoPrivate()->qimageFromXImage(xi); -} -#endif //QT_NO_XFIXES diff --git a/src/plugins/platforms/xlib/qtestlitestaticinfo.h b/src/plugins/platforms/xlib/qtestlitestaticinfo.h deleted file mode 100644 index 8473ee9..0000000 --- a/src/plugins/platforms/xlib/qtestlitestaticinfo.h +++ /dev/null @@ -1,413 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITESTATICINFO_H -#define QTESTLITESTATICINFO_H - -#include <QtCore/QTextStream> -#include <QtCore/QDataStream> -#include <QtCore/QMetaType> -#include <QtCore/QVariant> - -#if defined(_XLIB_H_) // crude hack, but... -#error "cannot include <X11/Xlib.h> before this file" -#endif -#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback -#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback -#define XSetIMValues qt_XSetIMValues -#include <X11/Xlib.h> -#undef XRegisterIMInstantiateCallback -#undef XUnregisterIMInstantiateCallback -#undef XSetIMValues - -#include <X11/Xutil.h> -#include <X11/Xos.h> -#ifdef index -# undef index -#endif -#ifdef rindex -# undef rindex -#endif -#ifdef Q_OS_VXWORS -# ifdef open -# undef open -# endif -# ifdef getpid -# undef getpid -# endif -#endif // Q_OS_VXWORKS -#include <X11/Xatom.h> - -//#define QT_NO_SHAPE -#ifdef QT_NO_SHAPE -# define XShapeCombineRegion(a,b,c,d,e,f,g) -# define XShapeCombineMask(a,b,c,d,e,f,g) -#else -# include <X11/extensions/shape.h> -#endif // QT_NO_SHAPE - - -#if !defined (QT_NO_TABLET) -# include <X11/extensions/XInput.h> -#if defined (Q_OS_IRIX) -# include <X11/extensions/SGIMisc.h> -# include <wacom.h> -#endif -#endif // QT_NO_TABLET - - -// #define QT_NO_XINERAMA -#ifndef QT_NO_XINERAMA -// XFree86 does not C++ify Xinerama (at least up to XFree86 4.0.3). -extern "C" { -# include <X11/extensions/Xinerama.h> -} -#endif // QT_NO_XINERAMA - -// #define QT_NO_XRANDR -#ifndef QT_NO_XRANDR -# include <X11/extensions/Xrandr.h> -#endif // QT_NO_XRANDR - -// #define QT_NO_XRENDER -#ifndef QT_NO_XRENDER -# include <X11/extensions/Xrender.h> -#endif // QT_NO_XRENDER - -#ifndef QT_NO_XSYNC -extern "C" { -# include "X11/extensions/sync.h" -} -#endif - -// #define QT_NO_XKB -#ifndef QT_NO_XKB -# include <X11/XKBlib.h> -#endif // QT_NO_XKB - - -#if !defined(XlibSpecificationRelease) -# define X11R4 -typedef char *XPointer; -#else -# undef X11R4 -#endif - -#ifndef QT_NO_XFIXES -typedef Bool (*PtrXFixesQueryExtension)(Display *, int *, int *); -typedef Status (*PtrXFixesQueryVersion)(Display *, int *, int *); -typedef void (*PtrXFixesSetCursorName)(Display *dpy, Cursor cursor, const char *name); -typedef void (*PtrXFixesSelectSelectionInput)(Display *dpy, Window win, Atom selection, unsigned long eventMask); -#endif // QT_NO_XFIXES - -#ifndef QT_NO_XCURSOR -#include <X11/Xcursor/Xcursor.h> -typedef Cursor (*PtrXcursorLibraryLoadCursor)(Display *, const char *); -#endif // QT_NO_XCURSOR - -#ifndef QT_NO_XINERAMA -typedef Bool (*PtrXineramaQueryExtension)(Display *dpy, int *event_base, int *error_base); -typedef Bool (*PtrXineramaIsActive)(Display *dpy); -typedef XineramaScreenInfo *(*PtrXineramaQueryScreens)(Display *dpy, int *number); -#endif // QT_NO_XINERAMA - -#ifndef QT_NO_XRANDR -typedef void (*PtrXRRSelectInput)(Display *, Window, int); -typedef int (*PtrXRRUpdateConfiguration)(XEvent *); -typedef int (*PtrXRRRootToScreen)(Display *, Window); -typedef Bool (*PtrXRRQueryExtension)(Display *, int *, int *); -#endif // QT_NO_XRANDR - -#ifndef QT_NO_XINPUT -typedef int (*PtrXCloseDevice)(Display *, XDevice *); -typedef XDeviceInfo* (*PtrXListInputDevices)(Display *, int *); -typedef XDevice* (*PtrXOpenDevice)(Display *, XID); -typedef void (*PtrXFreeDeviceList)(XDeviceInfo *); -typedef int (*PtrXSelectExtensionEvent)(Display *, Window, XEventClass *, int); -#endif // QT_NO_XINPUT - -/* - * Solaris patch 108652-47 and higher fixes crases in - * XRegisterIMInstantiateCallback, but the function doesn't seem to - * work. - * - * Instead, we disabled R6 input, and open the input method - * immediately at application start. - */ - -//######### XFree86 has wrong declarations for XRegisterIMInstantiateCallback -//######### and XUnregisterIMInstantiateCallback in at least version 3.3.2. -//######### Many old X11R6 header files lack XSetIMValues. -//######### Therefore, we have to declare these functions ourselves. - -extern "C" Bool XRegisterIMInstantiateCallback( - Display*, - struct _XrmHashBucketRec*, - char*, - char*, - XIMProc, //XFree86 has XIDProc, which has to be wrong - XPointer -); - -extern "C" Bool XUnregisterIMInstantiateCallback( - Display*, - struct _XrmHashBucketRec*, - char*, - char*, - XIMProc, //XFree86 has XIDProc, which has to be wrong - XPointer -); - -#ifndef X11R4 -# include <X11/Xlocale.h> -#endif // X11R4 - - -#ifndef QT_NO_MITSHM -# include <X11/extensions/XShm.h> -#endif // QT_NO_MITSHM - -// rename a couple of X defines to get rid of name clashes -// resolve the conflict between X11's FocusIn and QEvent::FocusIn -enum { - XFocusOut = FocusOut, - XFocusIn = FocusIn, - XKeyPress = KeyPress, - XKeyRelease = KeyRelease, - XNone = None, - XRevertToParent = RevertToParent, - XGrayScale = GrayScale, - XCursorShape = CursorShape -}; -#undef FocusOut -#undef FocusIn -#undef KeyPress -#undef KeyRelease -#undef None -#undef RevertToParent -#undef GrayScale -#undef CursorShape - -#ifdef FontChange -#undef FontChange -#endif - - -class QXlibStatic -{ -public: - enum X11Atom { - // window-manager <-> client protocols - WM_PROTOCOLS, - WM_DELETE_WINDOW, - WM_TAKE_FOCUS, - _NET_WM_PING, - _NET_WM_CONTEXT_HELP, - _NET_WM_SYNC_REQUEST, - _NET_WM_SYNC_REQUEST_COUNTER, - - // ICCCM window state - WM_STATE, - WM_CHANGE_STATE, - - // Session management - WM_CLIENT_LEADER, - WM_WINDOW_ROLE, - SM_CLIENT_ID, - - // Clipboard - CLIPBOARD, - INCR, - TARGETS, - MULTIPLE, - TIMESTAMP, - SAVE_TARGETS, - CLIP_TEMPORARY, - _QT_SELECTION, - _QT_CLIPBOARD_SENTINEL, - _QT_SELECTION_SENTINEL, - CLIPBOARD_MANAGER, - - RESOURCE_MANAGER, - - _XSETROOT_ID, - - _QT_SCROLL_DONE, - _QT_INPUT_ENCODING, - - _MOTIF_WM_HINTS, - - DTWM_IS_RUNNING, - ENLIGHTENMENT_DESKTOP, - _DT_SAVE_MODE, - _SGI_DESKS_MANAGER, - - // EWMH (aka NETWM) - _NET_SUPPORTED, - _NET_VIRTUAL_ROOTS, - _NET_WORKAREA, - - _NET_MOVERESIZE_WINDOW, - _NET_WM_MOVERESIZE, - - _NET_WM_NAME, - _NET_WM_ICON_NAME, - _NET_WM_ICON, - - _NET_WM_PID, - - _NET_WM_WINDOW_OPACITY, - - _NET_WM_STATE, - _NET_WM_STATE_ABOVE, - _NET_WM_STATE_BELOW, - _NET_WM_STATE_FULLSCREEN, - _NET_WM_STATE_MAXIMIZED_HORZ, - _NET_WM_STATE_MAXIMIZED_VERT, - _NET_WM_STATE_MODAL, - _NET_WM_STATE_STAYS_ON_TOP, - _NET_WM_STATE_DEMANDS_ATTENTION, - - _NET_WM_USER_TIME, - _NET_WM_USER_TIME_WINDOW, - _NET_WM_FULL_PLACEMENT, - - _NET_WM_WINDOW_TYPE, - _NET_WM_WINDOW_TYPE_DESKTOP, - _NET_WM_WINDOW_TYPE_DOCK, - _NET_WM_WINDOW_TYPE_TOOLBAR, - _NET_WM_WINDOW_TYPE_MENU, - _NET_WM_WINDOW_TYPE_UTILITY, - _NET_WM_WINDOW_TYPE_SPLASH, - _NET_WM_WINDOW_TYPE_DIALOG, - _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, - _NET_WM_WINDOW_TYPE_POPUP_MENU, - _NET_WM_WINDOW_TYPE_TOOLTIP, - _NET_WM_WINDOW_TYPE_NOTIFICATION, - _NET_WM_WINDOW_TYPE_COMBO, - _NET_WM_WINDOW_TYPE_DND, - _NET_WM_WINDOW_TYPE_NORMAL, - _KDE_NET_WM_WINDOW_TYPE_OVERRIDE, - - _KDE_NET_WM_FRAME_STRUT, - - _NET_STARTUP_INFO, - _NET_STARTUP_INFO_BEGIN, - - _NET_SUPPORTING_WM_CHECK, - - _NET_WM_CM_S0, - - _NET_SYSTEM_TRAY_VISUAL, - - _NET_ACTIVE_WINDOW, - - // Property formats - COMPOUND_TEXT, - TEXT, - UTF8_STRING, - - // Xdnd - XdndEnter, - XdndPosition, - XdndStatus, - XdndLeave, - XdndDrop, - XdndFinished, - XdndTypelist, - XdndActionList, - - XdndSelection, - - XdndAware, - XdndProxy, - - XdndActionCopy, - XdndActionLink, - XdndActionMove, - XdndActionPrivate, - - // Motif DND - _MOTIF_DRAG_AND_DROP_MESSAGE, - _MOTIF_DRAG_INITIATOR_INFO, - _MOTIF_DRAG_RECEIVER_INFO, - _MOTIF_DRAG_WINDOW, - _MOTIF_DRAG_TARGETS, - - XmTRANSFER_SUCCESS, - XmTRANSFER_FAILURE, - - // Xkb - _XKB_RULES_NAMES, - - // XEMBED - _XEMBED, - _XEMBED_INFO, - - XWacomStylus, - XWacomCursor, - XWacomEraser, - - XTabletStylus, - XTabletEraser, - - NPredefinedAtoms, - - _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, - NAtoms - }; - - static Atom atom(X11Atom atom); - static bool isSupportedByWM(Atom atom); - - static bool useXFixes(); - static int xFixesEventBase(); - - #ifndef QT_NO_XFIXES - static PtrXFixesSelectSelectionInput xFixesSelectSelectionInput(); - #endif //QT_NO_XFIXES - - static QImage qimageFromXImage(XImage *xi); - - -}; - -#endif // QTESTLITESTATICINFO_H diff --git a/src/plugins/platforms/xlib/qtestlitewindow.cpp b/src/plugins/platforms/xlib/qtestlitewindow.cpp deleted file mode 100644 index 0f11a81..0000000 --- a/src/plugins/platforms/xlib/qtestlitewindow.cpp +++ /dev/null @@ -1,735 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitewindow.h" - -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" - -#include <QtGui/QWindowSystemInterface> -#include <QSocketNotifier> -#include <QApplication> -#include <QDebug> - -#include <QtGui/private/qwindowsurface_p.h> -#include <QtGui/private/qapplication_p.h> - -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) -#include "qglxintegration.h" -#else -#include "../eglconvenience/qeglconvenience.h" -#include "../eglconvenience/qeglplatformcontext.h" -#include "qtestliteeglintegration.h" -#endif //QT_OPENGL_ES_2 -#endif //QT_NO_OPENGL - -//#define MYX11_DEBUG - -QT_BEGIN_NAMESPACE - -QXlibWindow::QXlibWindow(QWidget *window) - : QPlatformWindow(window) - , mGLContext(0) - , mScreen(QXlibScreen::testLiteScreenForWidget(window)) -{ - int x = window->x(); - int y = window->y(); - int w = window->width(); - int h = window->height(); - - if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL - && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); -#else - QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); - - EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); - EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); - VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); - - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = id; - - XVisualInfo *visualInfo; - int matchingCount = 0; - visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); -#endif //!defined(QT_OPENGL_ES_2) - if (visualInfo) { - Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); - - XSetWindowAttributes a; - a.colormap = cmap; - x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, - 0, visualInfo->depth, InputOutput, visualInfo->visual, - CWColormap, &a); - } else { - qFatal("no window!"); - } -#endif //!defined(QT_NO_OPENGL) - } else { - x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), - x, y, w, h, 0 /*border_width*/, - mScreen->blackPixel(), mScreen->whitePixel()); - } - -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; -#endif - - XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); - - XSelectInput(mScreen->display(), x_window, - ExposureMask | KeyPressMask | KeyReleaseMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask | - PointerMotionMask | ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | PropertyChangeMask | - StructureNotifyMask); - - gc = createGC(); - - Atom protocols[5]; - int n = 0; - protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); // support del window protocol - protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_TAKE_FOCUS); // support take focus window protocol - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_PING); // support _NET_WM_PING protocol -#ifndef QT_NO_XSYNC - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol -#endif // QT_NO_XSYNC - if (window->windowFlags() & Qt::WindowContextHelpButtonHint) - protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); - XSetWMProtocols(mScreen->display(), x_window, protocols, n); -} - - - -QXlibWindow::~QXlibWindow() -{ -#ifdef MYX11_DEBUG - qDebug() << "~QTestLiteWindow" << hex << x_window; -#endif - delete mGLContext; - XFreeGC(mScreen->display(), gc); - XDestroyWindow(mScreen->display(), x_window); -} - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Mouse event stuff -static Qt::MouseButtons translateMouseButtons(int s) -{ - Qt::MouseButtons ret = 0; - if (s & Button1Mask) - ret |= Qt::LeftButton; - if (s & Button2Mask) - ret |= Qt::MidButton; - if (s & Button3Mask) - ret |= Qt::RightButton; - return ret; -} - - - -void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) -{ - static QPoint mousePoint; - - Qt::MouseButton button = Qt::NoButton; - Qt::MouseButtons buttons = translateMouseButtons(e->state); - Qt::KeyboardModifiers modifiers = mScreen->keyboard()->translateModifiers(e->state); - if (type != QEvent::MouseMove) { - switch (e->button) { - case Button1: button = Qt::LeftButton; break; - case Button2: button = Qt::MidButton; break; - case Button3: button = Qt::RightButton; break; - case Button4: - case Button5: - case 6: - case 7: { - //mouse wheel - if (type == QEvent::MouseButtonPress) { - //logic borrowed from qapplication_x11.cpp - int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); - bool hor = (((e->button == Button4 || e->button == Button5) - && (modifiers & Qt::AltModifier)) - || (e->button == 6 || e->button == 7)); - QWindowSystemInterface::handleWheelEvent(widget(), e->time, - QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - delta, hor ? Qt::Horizontal : Qt::Vertical); - } - return; - } - default: break; - } - } - - buttons ^= button; // X event uses state *before*, Qt uses state *after* - - QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - buttons); - - mousePoint = QPoint(e->x_root, e->y_root); -} - -void QXlibWindow::handleCloseEvent() -{ - QWindowSystemInterface::handleCloseEvent(widget()); -} - - -void QXlibWindow::handleEnterEvent() -{ - QWindowSystemInterface::handleEnterEvent(widget()); -} - -void QXlibWindow::handleLeaveEvent() -{ - QWindowSystemInterface::handleLeaveEvent(widget()); -} - -void QXlibWindow::handleFocusInEvent() -{ - QWindowSystemInterface::handleWindowActivated(widget()); -} - -void QXlibWindow::handleFocusOutEvent() -{ - QWindowSystemInterface::handleWindowActivated(0); -} - - - -void QXlibWindow::setGeometry(const QRect &rect) -{ - XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); - QPlatformWindow::setGeometry(rect); -} - - -Qt::WindowFlags QXlibWindow::windowFlags() const -{ - return mWindowFlags; -} - -WId QXlibWindow::winId() const -{ - return x_window; -} - -void QXlibWindow::setParent(const QPlatformWindow *window) -{ - QPoint topLeft = geometry().topLeft(); - XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); -} - -void QXlibWindow::raise() -{ - XRaiseWindow(mScreen->display(), x_window); -} - -void QXlibWindow::lower() -{ - XLowerWindow(mScreen->display(), x_window); -} - -void QXlibWindow::setWindowTitle(const QString &title) -{ - QByteArray ba = title.toLatin1(); //We're not making a general solution here... - XTextProperty windowName; - windowName.value = (unsigned char *)ba.constData(); - windowName.encoding = XA_STRING; - windowName.format = 8; - windowName.nitems = ba.length(); - - XSetWMName(mScreen->display(), x_window, &windowName); -} - -GC QXlibWindow::createGC() -{ - GC gc; - - gc = XCreateGC(mScreen->display(), x_window, 0, 0); - if (gc < 0) { - qWarning("QTestLiteWindow::createGC() could not create GC"); - } - return gc; -} - -void QXlibWindow::paintEvent() -{ -#ifdef MYX11_DEBUG -// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; -#endif - - if (QWindowSurface *surface = widget()->windowSurface()) - surface->flush(widget(), widget()->geometry(), QPoint()); -} - -void QXlibWindow::requestActivateWindow() -{ - XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); -} - -void QXlibWindow::resizeEvent(XConfigureEvent *e) -{ - int xpos = geometry().x(); - int ypos = geometry().y(); - if ((e->width != geometry().width() || e->height != geometry().height()) && e->x == 0 && e->y == 0) { - //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; - } else { - //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; - xpos = e->x; - ypos = e->y; - } -#ifdef MYX11_DEBUG - qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; -#endif - - QRect newRect(xpos, ypos, e->width, e->height); - QWindowSystemInterface::handleGeometryChange(widget(), newRect); -} - -void QXlibWindow::mousePressEvent(XButtonEvent *e) -{ - static long prevTime = 0; - static Window prevWindow; - static int prevX = -999; - static int prevY = -999; - - QEvent::Type type = QEvent::MouseButtonPress; - - if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() - && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { - type = QEvent::MouseButtonDblClick; - prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time - } else { - prevTime = e->time; - } - prevWindow = e->window; - prevX = e->x; - prevY = e->y; - - handleMouseEvent(type, e); -} - -QXlibMWMHints QXlibWindow::getMWMHints() const -{ - QXlibMWMHints mwmhints; - - Atom type; - int format; - ulong nitems, bytesLeft; - uchar *data = 0; - Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); - if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, - atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, - &data) == Success) - && (type == atomForMotifWmHints - && format == 32 - && nitems >= 5)) { - mwmhints = *(reinterpret_cast<QXlibMWMHints *>(data)); - } else { - mwmhints.flags = 0L; - mwmhints.functions = MWM_FUNC_ALL; - mwmhints.decorations = MWM_DECOR_ALL; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - } - - if (data) - XFree(data); - - return mwmhints; -} - -void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) -{ - Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); - if (mwmhints.flags != 0l) { - XChangeProperty(mScreen->display(), x_window, - atomForMotifWmHints, atomForMotifWmHints, 32, - PropModeReplace, (unsigned char *) &mwmhints, 5); - } else { - XDeleteProperty(mScreen->display(), x_window, atomForMotifWmHints); - } -} - -// Returns true if we should set WM_TRANSIENT_FOR on \a w -static inline bool isTransient(const QWidget *w) -{ - return ((w->windowType() == Qt::Dialog - || w->windowType() == Qt::Sheet - || w->windowType() == Qt::Tool - || w->windowType() == Qt::SplashScreen - || w->windowType() == Qt::ToolTip - || w->windowType() == Qt::Drawer - || w->windowType() == Qt::Popup) - && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); -} - -QVector<Atom> QXlibWindow::getNetWmState() const -{ - QVector<Atom> returnValue; - - // Don't read anything, just get the size of the property data - Atom actualType; - int actualFormat; - ulong propertyLength; - ulong bytesLeft; - uchar *propertyData = 0; - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, - False, XA_ATOM, &actualType, &actualFormat, - &propertyLength, &bytesLeft, &propertyData) == Success - && actualType == XA_ATOM && actualFormat == 32) { - returnValue.resize(bytesLeft / 4); - XFree((char*) propertyData); - - // fetch all data - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, - returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, - &propertyLength, &bytesLeft, &propertyData) != Success) { - returnValue.clear(); - } else if (propertyLength != (ulong)returnValue.size()) { - returnValue.resize(propertyLength); - } - - // put it into netWmState - if (!returnValue.isEmpty()) { - memcpy(returnValue.data(), propertyData, returnValue.size() * sizeof(Atom)); - } - XFree((char*) propertyData); - } - - return returnValue; -} - -Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) -{ -// Q_ASSERT(flags & Qt::Window); - mWindowFlags = flags; - -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; -#endif - Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); - - if (type == Qt::ToolTip) - flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; - if (type == Qt::Popup) - flags |= Qt::X11BypassWindowManagerHint; - - bool topLevel = (flags & Qt::Window); - bool popup = (type == Qt::Popup); - bool dialog = (type == Qt::Dialog - || type == Qt::Sheet); - bool desktop = (type == Qt::Desktop); - bool tool = (type == Qt::Tool || type == Qt::SplashScreen - || type == Qt::ToolTip || type == Qt::Drawer); - - Q_UNUSED(topLevel); - Q_UNUSED(dialog); - Q_UNUSED(desktop); - - bool tooltip = (type == Qt::ToolTip); - - XSetWindowAttributes wsa; - - QXlibMWMHints mwmhints; - mwmhints.flags = 0L; - mwmhints.functions = 0L; - mwmhints.decorations = 0; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - - - ulong wsa_mask = 0; - if (type != Qt::SplashScreen) { // && customize) { - mwmhints.flags |= MWM_HINTS_DECORATIONS; - - bool customize = flags & Qt::CustomizeWindowHint; - if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { - mwmhints.decorations |= MWM_DECOR_BORDER; - mwmhints.decorations |= MWM_DECOR_RESIZEH; - - if (flags & Qt::WindowTitleHint) - mwmhints.decorations |= MWM_DECOR_TITLE; - - if (flags & Qt::WindowSystemMenuHint) - mwmhints.decorations |= MWM_DECOR_MENU; - - if (flags & Qt::WindowMinimizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MINIMIZE; - mwmhints.functions |= MWM_FUNC_MINIMIZE; - } - - if (flags & Qt::WindowMaximizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MAXIMIZE; - mwmhints.functions |= MWM_FUNC_MAXIMIZE; - } - - if (flags & Qt::WindowCloseButtonHint) - mwmhints.functions |= MWM_FUNC_CLOSE; - } - } else { - // if type == Qt::SplashScreen - mwmhints.decorations = MWM_DECOR_ALL; - } - - if (tool) { - wsa.save_under = True; - wsa_mask |= CWSaveUnder; - } - - if (flags & Qt::X11BypassWindowManagerHint) { - wsa.override_redirect = True; - wsa_mask |= CWOverrideRedirect; - } -#if 0 - if (wsa_mask && initializeWindow) { - Q_ASSERT(id); - XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); - } -#endif - if (mwmhints.functions != 0) { - mwmhints.flags |= MWM_HINTS_FUNCTIONS; - mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - } else { - mwmhints.functions = MWM_FUNC_ALL; - } - - if (!(flags & Qt::FramelessWindowHint) - && flags & Qt::CustomizeWindowHint - && flags & Qt::WindowTitleHint - && !(flags & - (Qt::WindowMinimizeButtonHint - | Qt::WindowMaximizeButtonHint - | Qt::WindowCloseButtonHint))) { - // a special case - only the titlebar without any button - mwmhints.flags = MWM_HINTS_FUNCTIONS; - mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - mwmhints.decorations = 0; - } - - if (widget()->windowModality() == Qt::WindowModal) { - mwmhints.input_mode = MWM_INPUT_PRIMARY_APPLICATION_MODAL; - } else if (widget()->windowModality() == Qt::ApplicationModal) { - mwmhints.input_mode = MWM_INPUT_FULL_APPLICATION_MODAL; - } - - setMWMHints(mwmhints); - - QVector<Atom> netWmState = getNetWmState(); - - if (flags & Qt::WindowStaysOnTopHint) { - if (flags & Qt::WindowStaysOnBottomHint) - qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE)); - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP)); - } else if (flags & Qt::WindowStaysOnBottomHint) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW)); - } - if (widget()->isFullScreen()) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN)); - } - if (widget()->isMaximized()) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT)); - } - if (widget()->windowModality() != Qt::NonModal) { - if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL))) - netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL)); - } - - if (!netWmState.isEmpty()) { - XChangeProperty(mScreen->display(), x_window, - QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, - (unsigned char *) netWmState.data(), netWmState.size()); - } else { - XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); - } - -//##### only if initializeWindow??? - - if (popup || tooltip) { // popup widget -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; -#endif - // set EWMH window types - // setNetWmWindowTypes(); - - wsa.override_redirect = True; - wsa.save_under = True; - XChangeWindowAttributes(mScreen->display(), x_window, CWOverrideRedirect | CWSaveUnder, - &wsa); - } else { -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for non-popup"; -#endif - } - - return flags; -} - -void QXlibWindow::setVisible(bool visible) -{ -#ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; -#endif - if (isTransient(widget())) { - Window parentXWindow = x_window; - if (widget()->parentWidget()) { - QWidget *widgetParent = widget()->parentWidget()->window(); - if (widgetParent && widgetParent->platformWindow()) { - QXlibWindow *parentWidnow = static_cast<QXlibWindow *>(widgetParent->platformWindow()); - parentXWindow = parentWidnow->x_window; - } - } - XSetTransientForHint(mScreen->display(),x_window,parentXWindow); - } - - if (visible) { - //ensure that the window is viewed in correct position. - doSizeHints(); - XMapWindow(mScreen->display(), x_window); - } else { - XUnmapWindow(mScreen->display(), x_window); - } -} - -void QXlibWindow::setCursor(const Cursor &cursor) -{ - XDefineCursor(mScreen->display(), x_window, cursor); - XFlush(mScreen->display()); -} - -QPlatformGLContext *QXlibWindow::glContext() const -{ - if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) - return 0; - if (!mGLContext) { - QXlibWindow *that = const_cast<QXlibWindow *>(this); -#if !defined(QT_NO_OPENGL) -#if !defined(QT_OPENGL_ES_2) - that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); -#else - EGLDisplay display = eglGetDisplay(mScreen->display()); - - QPlatformWindowFormat windowFormat = correctColorBuffers(widget()->platformWindowFormat()); - - EGLConfig config = q_configFromQPlatformWindowFormat(display,windowFormat); - QVector<EGLint> eglContextAttrs; - eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); - eglContextAttrs.append(2); - eglContextAttrs.append(EGL_NONE); - - EGLSurface eglSurface = eglCreateWindowSurface(display,config,(EGLNativeWindowType)x_window,0); - that->mGLContext = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); -#endif -#endif - } - return mGLContext; -} - -Window QXlibWindow::xWindow() const -{ - return x_window; -} - -GC QXlibWindow::graphicsContext() const -{ - return gc; -} - -void QXlibWindow::doSizeHints() -{ - Q_ASSERT(widget()->testAttribute(Qt::WA_WState_Created)); - XSizeHints s; - s.flags = 0; - QRect g = geometry(); - s.x = g.x(); - s.y = g.y(); - s.width = g.width(); - s.height = g.height(); - s.flags |= USPosition; - s.flags |= PPosition; - s.flags |= USSize; - s.flags |= PSize; - s.flags |= PWinGravity; - s.win_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity; - XSetWMNormalHints(mScreen->display(), x_window, &s); -} - -QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const -{ - // I have only tested this setup on a dodgy intel setup, where I didn't use standard libs, - // so this might be not what we want to do :) - if ( !(platformWindowFormat.redBufferSize() == -1 && - platformWindowFormat.greenBufferSize() == -1 && - platformWindowFormat.blueBufferSize() == -1)) - return platformWindowFormat; - - QPlatformWindowFormat windowFormat = platformWindowFormat; - if (mScreen->depth() == 16) { - windowFormat.setRedBufferSize(5); - windowFormat.setGreenBufferSize(6); - windowFormat.setBlueBufferSize(5); - } else { - windowFormat.setRedBufferSize(8); - windowFormat.setGreenBufferSize(8); - windowFormat.setBlueBufferSize(8); - } - - return windowFormat; -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitewindow.h b/src/plugins/platforms/xlib/qtestlitewindow.h deleted file mode 100644 index ccf6867..0000000 --- a/src/plugins/platforms/xlib/qtestlitewindow.h +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEWINDOW_H -#define QTESTLITEWINDOW_H - -#include "qtestliteintegration.h" - -#include <QPlatformWindow> -#include <QEvent> - -#include <QObject> -#include <QImage> - -struct QXlibMWMHints { - ulong flags, functions, decorations; - long input_mode; - ulong status; -}; - -enum { - MWM_HINTS_FUNCTIONS = (1L << 0), - - MWM_FUNC_ALL = (1L << 0), - MWM_FUNC_RESIZE = (1L << 1), - MWM_FUNC_MOVE = (1L << 2), - MWM_FUNC_MINIMIZE = (1L << 3), - MWM_FUNC_MAXIMIZE = (1L << 4), - MWM_FUNC_CLOSE = (1L << 5), - - MWM_HINTS_DECORATIONS = (1L << 1), - - MWM_DECOR_ALL = (1L << 0), - MWM_DECOR_BORDER = (1L << 1), - MWM_DECOR_RESIZEH = (1L << 2), - MWM_DECOR_TITLE = (1L << 3), - MWM_DECOR_MENU = (1L << 4), - MWM_DECOR_MINIMIZE = (1L << 5), - MWM_DECOR_MAXIMIZE = (1L << 6), - - MWM_HINTS_INPUT_MODE = (1L << 2), - - MWM_INPUT_MODELESS = 0L, - MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, - MWM_INPUT_FULL_APPLICATION_MODAL = 3L -}; - -class QXlibWindow : public QPlatformWindow -{ -public: - QXlibWindow(QWidget *window); - ~QXlibWindow(); - - - void mousePressEvent(XButtonEvent*); - void handleMouseEvent(QEvent::Type, XButtonEvent *ev); - - void handleCloseEvent(); - void handleEnterEvent(); - void handleLeaveEvent(); - void handleFocusInEvent(); - void handleFocusOutEvent(); - - void resizeEvent(XConfigureEvent *configure_event); - void paintEvent(); - - void requestActivateWindow(); - - void setGeometry(const QRect &rect); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - Qt::WindowFlags windowFlags() const; - void setVisible(bool visible); - WId winId() const; - void setParent(const QPlatformWindow *window); - void raise(); - void lower(); - void setWindowTitle(const QString &title); - - void setCursor(const Cursor &cursor); - - QPlatformGLContext *glContext() const; - - Window xWindow() const; - GC graphicsContext() const; - -protected: - QVector<Atom> getNetWmState() const; - void setMWMHints(const QXlibMWMHints &mwmhints); - QXlibMWMHints getMWMHints() const; - - void doSizeHints(); - -private: - QPlatformWindowFormat correctColorBuffers(const QPlatformWindowFormat &windowFormat)const; - - Window x_window; - GC gc; - - GC createGC(); - - QPlatformGLContext *mGLContext; - QXlibScreen *mScreen; - Qt::WindowFlags mWindowFlags; -}; - -#endif diff --git a/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp b/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp deleted file mode 100644 index 088730d..0000000 --- a/src/plugins/platforms/xlib/qtestlitewindowsurface.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtestlitewindowsurface.h" -#include "qtestliteintegration.h" - -#include <QtCore/qdebug.h> -#include <QWindowSystemInterface> - -#include "qtestlitewindow.h" -#include "qtestlitescreen.h" - -# include <sys/ipc.h> -# include <sys/shm.h> -# include <X11/extensions/XShm.h> - -QT_BEGIN_NAMESPACE - - -struct QXlibShmImageInfo { - QXlibShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~QXlibShmImageInfo() { destroy(); } - - void destroy(); - - XShmSegmentInfo shminfo; - XImage *image; - Display *display; -}; - - -#ifndef DONT_USE_MIT_SHM -void QXlibShmImageInfo::destroy() -{ - XShmDetach (display, &shminfo); - XDestroyImage (image); - shmdt (shminfo.shmaddr); - shmctl (shminfo.shmid, IPC_RMID, 0); -} -#endif - -void QXlibWindowSurface::resizeShmImage(int width, int height) -{ - -#ifdef DONT_USE_MIT_SHM - shm_img = QImage(width, height, QImage::Format_RGB32); -#else - - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window()); - if (image_info) - image_info->destroy(); - else - image_info = new QXlibShmImageInfo(screen->display()); - - Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); - - - XImage *image = XShmCreateImage (screen->display(), visual, 24, ZPixmap, 0, - &image_info->shminfo, width, height); - - - image_info->shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); - - image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); - image_info->shminfo.readOnly = False; - - image_info->image = image; - - Status shm_attach_status = XShmAttach(screen->display(), &image_info->shminfo); - - Q_ASSERT(shm_attach_status == True); - - shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); -#endif - painted = false; -} - - -void QXlibWindowSurface::resizeBuffer(QSize s) -{ - if (shm_img.size() != s) - resizeShmImage(s.width(), s.height()); -} - -QSize QXlibWindowSurface::bufferSize() const -{ - return shm_img.size(); -} - -QXlibWindowSurface::QXlibWindowSurface (QWidget *window) - : QWindowSurface(window), - painted(false), image_info(0) -{ - xw = static_cast<QXlibWindow*>(window->platformWindow()); -// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; -} - -QXlibWindowSurface::~QXlibWindowSurface() -{ - delete image_info; -} - -QPaintDevice *QXlibWindowSurface::paintDevice() -{ - return &shm_img; -} - - -void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - if (!painted) - return; - - QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); - GC gc = xw->graphicsContext(); - Window window = xw->xWindow(); -#ifdef DONT_USE_MIT_SHM - // just convert the image every time... - if (!shm_img.isNull()) { - Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); - - QImage image = shm_img; - //img.convertToFormat( - XImage *xi = XCreateImage(screen->display(), visual, 24, ZPixmap, - 0, (char *) image.scanLine(0), image.width(), image.height(), - 32, image.bytesPerLine()); - - int x = 0; - int y = 0; - - /*int r =*/ XPutImage(screen->display(), window, gc, xi, 0, 0, x, y, image.width(), image.height()); - - xi->data = 0; // QImage owns these bits - XDestroyImage(xi); - } -#else - // Use MIT_SHM - if (image_info && image_info->image) { - //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; - int x = 0; - int y = 0; - - // We could set send_event to true, and then use the ShmCompletion to synchronize, - // but let's do like Qt/11 and just use XSync - XShmPutImage (screen->display(), window, gc, image_info->image, 0, 0, - x, y, image_info->image->width, image_info->image->height, - /*send_event*/ False); - - XSync(screen->display(), False); - } -#endif -} - -// from qwindowsurface.cpp -extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); - -bool QXlibWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - if (shm_img.isNull()) - return false; - - const QVector<QRect> rects = area.rects(); - for (int i = 0; i < rects.size(); ++i) - qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); - - return true; -} - - -void QXlibWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - resizeBuffer(size()); -} - -void QXlibWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - painted = true; //there is content in the buffer -} -QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qtestlitewindowsurface.h b/src/plugins/platforms/xlib/qtestlitewindowsurface.h deleted file mode 100644 index 12b4c60..0000000 --- a/src/plugins/platforms/xlib/qtestlitewindowsurface.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_TESTLITE_H -#define QWINDOWSURFACE_TESTLITE_H - -#include <QtGui/private/qwindowsurface_p.h> - - -QT_BEGIN_NAMESPACE - -class QXlibWindow; -class QXlibIntegration; -class QXlibScreen; -class QXlibShmImageInfo; - -class QXlibWindowSurface : public QWindowSurface -{ -public: - QXlibWindowSurface (QWidget *window); - ~QXlibWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - bool painted; - void resizeBuffer(QSize); - QSize bufferSize() const; - - - void resizeShmImage(int width, int height); - - QImage shm_img; - QXlibShmImageInfo *image_info; - - QXlibWindow *xw; - -}; - - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/xlib/qxlibclipboard.cpp b/src/plugins/platforms/xlib/qxlibclipboard.cpp new file mode 100644 index 0000000..1264b5a --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibclipboard.cpp @@ -0,0 +1,676 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteclipboard.h" + +#include "qtestlitescreen.h" +#include "qtestlitemime.h" + +#include <private/qapplication_p.h> + +#include <QtCore/QDebug> + +class QXlibClipboardMime : public QXlibMime +{ + Q_OBJECT +public: + QXlibClipboardMime(QClipboard::Mode mode, QXlibClipboard *clipboard) + : QXlibMime() + , m_clipboard(clipboard) + { + switch (mode) { + case QClipboard::Selection: + modeAtom = XA_PRIMARY; + break; + + case QClipboard::Clipboard: + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + break; + + default: + qWarning("QTestLiteMime: Internal error: Unsupported clipboard mode"); + break; + } + } + +protected: + QStringList formats_sys() const + { + if (empty()) + return QStringList(); + + if (!formatList.count()) { + QXlibClipboardMime *that = const_cast<QXlibClipboardMime *>(this); + // get the list of targets from the current clipboard owner - we do this + // once so that multiple calls to this function don't require multiple + // server round trips... + that->format_atoms = m_clipboard->getDataInFormat(modeAtom,QXlibStatic::atom(QXlibStatic::TARGETS)); + + if (format_atoms.size() > 0) { + Atom *targets = (Atom *) format_atoms.data(); + int size = format_atoms.size() / sizeof(Atom); + + for (int i = 0; i < size; ++i) { + if (targets[i] == 0) + continue; + + QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display(),targets[i]); + for (int j = 0; j < formatsForAtom.size(); ++j) { + if (!formatList.contains(formatsForAtom.at(j))) + that->formatList.append(formatsForAtom.at(j)); + } + } + } + } + + return formatList; + } + + bool hasFormat_sys(const QString &format) const + { + QStringList list = formats(); + return list.contains(format); + } + + QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const + { + if (fmt.isEmpty() || empty()) + return QByteArray(); + + (void)formats(); // trigger update of format list + + QList<Atom> atoms; + Atom *targets = (Atom *) format_atoms.data(); + int size = format_atoms.size() / sizeof(Atom); + for (int i = 0; i < size; ++i) + atoms.append(targets[i]); + + QByteArray encoding; + Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display(),fmt, requestedType, atoms, &encoding); + + if (fmtatom == 0) + return QVariant(); + + return mimeConvertToFormat(m_clipboard->screen()->display(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); + } +private: + bool empty() const + { + Window win = XGetSelectionOwner(m_clipboard->screen()->display(), modeAtom); + + return win == XNone; + } + + + Atom modeAtom; + QXlibClipboard *m_clipboard; + QStringList formatList; + QByteArray format_atoms; +}; + +const int QXlibClipboard::clipboard_timeout = 5000; + +QXlibClipboard::QXlibClipboard(QXlibScreen *screen) + : QPlatformClipboard() + , m_screen(screen) + , m_xClipboard(0) + , m_clientClipboard(0) + , m_xSelection(0) + , m_clientSelection(0) + , m_requestor(XNone) + , m_owner(XNone) +{ +} + +const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const +{ + if (mode == QClipboard::Clipboard) { + if (!m_xClipboard) { + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + that->m_xClipboard = new QXlibClipboardMime(mode,that); + } + Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); + if (clipboardOwner == owner()) { + return m_clientClipboard; + } else { + return m_xClipboard; + } + } else if (mode == QClipboard::Selection) { + if (!m_xSelection) { + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + that->m_xSelection = new QXlibClipboardMime(mode,that); + } + Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); + if (clipboardOwner == owner()) { + return m_clientSelection; + } else { + return m_xSelection; + } + } + return 0; +} + +void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) +{ + Atom modeAtom; + QMimeData **d; + switch (mode) { + case QClipboard::Selection: + modeAtom = XA_PRIMARY; + d = &m_clientSelection; + break; + + case QClipboard::Clipboard: + modeAtom = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + d = &m_clientClipboard; + break; + + default: + qWarning("QClipboard::setMimeData: unsupported mode '%d'", mode); + return; + } + + Window newOwner; + + if (! data) { // no data, clear clipboard contents + newOwner = XNone; + } else { + newOwner = owner(); + + *d = data; + } + + XSetSelectionOwner(m_screen->display(), modeAtom, newOwner, CurrentTime); + + if (XGetSelectionOwner(m_screen->display(), modeAtom) != newOwner) { + qWarning("QClipboard::setData: Cannot set X11 selection owner"); + } + +} + +bool QXlibClipboard::supportsMode(QClipboard::Mode mode) const +{ + if (mode == QClipboard::Clipboard || mode == QClipboard::Selection) + return true; + return false; +} + + +QXlibScreen * QXlibClipboard::screen() const +{ + return m_screen; +} + +Window QXlibClipboard::requestor() const +{ + if (!m_requestor) { + int x = 0, y = 0, w = 3, h = 3; + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + m_screen->blackPixel(), m_screen->whitePixel()); + that->setRequestor(window); + } + return m_requestor; +} + +void QXlibClipboard::setRequestor(Window window) +{ + if (m_requestor != XNone) { + XDestroyWindow(m_screen->display(),m_requestor); + } + m_requestor = window; +} + +Window QXlibClipboard::owner() const +{ + if (!m_owner) { + int x = 0, y = 0, w = 3, h = 3; + QXlibClipboard *that = const_cast<QXlibClipboard *>(this); + Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + m_screen->blackPixel(), m_screen->whitePixel()); + that->setOwner(window); + } + return m_owner; +} + +void QXlibClipboard::setOwner(Window window) +{ + if (m_owner != XNone){ + XDestroyWindow(m_screen->display(),m_owner); + } + m_owner = window; +} + +Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom property) +{ + QVector<Atom> types; + QStringList formats = QInternalMimeData::formatsHelper(d); + for (int i = 0; i < formats.size(); ++i) { + QList<Atom> atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); + for (int j = 0; j < atoms.size(); ++j) { + if (!types.contains(atoms.at(j))) + types.append(atoms.at(j)); + } + } + types.append(QXlibStatic::atom(QXlibStatic::TARGETS)); + types.append(QXlibStatic::atom(QXlibStatic::MULTIPLE)); + types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); + types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); + + XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, + PropModeReplace, (uchar *) types.data(), types.size()); + return property; +} + +Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Atom property) +{ + Atom atomFormat = target; + int dataFormat = 0; + QByteArray data; + + QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); + if (fmt.isEmpty()) { // Not a MIME type we have + qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); + return XNone; + } + qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); + + if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { + + // don't allow INCR transfers when using MULTIPLE or to + // Motif clients (since Motif doesn't support INCR) + static Atom motif_clip_temporary = QXlibStatic::atom(QXlibStatic::CLIP_TEMPORARY); + bool allow_incr = property != motif_clip_temporary; + + // X_ChangeProperty protocol request is 24 bytes + const int increment = (XMaxRequestSize(screen()->display()) * 4) - 24; + if (data.size() > increment && allow_incr) { + long bytes = data.size(); + XChangeProperty(screen()->display(), window, property, + QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); + +// (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); + qDebug() << "not implemented INCRT just YET!"; + return property; + } + + // make sure we can perform the XChangeProperty in a single request + if (data.size() > increment) + return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend? + int dataSize = data.size() / (dataFormat / 8); + // use a single request to transfer data + XChangeProperty(screen()->display(), window, property, atomFormat, + dataFormat, PropModeReplace, (uchar *) data.data(), + dataSize); + } + return property; +} + +void QXlibClipboard::handleSelectionRequest(XEvent *xevent) +{ + XSelectionRequestEvent *req = &xevent->xselectionrequest; + + if (requestor() && req->requestor == requestor()) { + qDebug() << "This should be caught before"; + return; + } + + XEvent event; + event.xselection.type = SelectionNotify; + event.xselection.display = req->display; + event.xselection.requestor = req->requestor; + event.xselection.selection = req->selection; + event.xselection.target = req->target; + event.xselection.property = XNone; + event.xselection.time = req->time; + + QMimeData *d; + if (req->selection == XA_PRIMARY) { + d = m_clientSelection; + } else if (req->selection == QXlibStatic::atom(QXlibStatic::CLIPBOARD)) { + d = m_clientClipboard; + } else { + qWarning("QClipboard: Unknown selection '%lx'", req->selection); + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + + if (!d) { + qWarning("QClipboard: Cannot transfer data, no data available"); + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + + Atom xa_targets = QXlibStatic::atom(QXlibStatic::TARGETS); + Atom xa_multiple = QXlibStatic::atom(QXlibStatic::MULTIPLE); + Atom xa_timestamp = QXlibStatic::atom(QXlibStatic::TIMESTAMP); + + struct AtomPair { Atom target; Atom property; } *multi = 0; + Atom multi_type = XNone; + int multi_format = 0; + int nmulti = 0; + int imulti = -1; + bool multi_writeback = false; + + if (req->target == xa_multiple) { + QByteArray multi_data; + if (req->property == XNone + || !clipboardReadProperty(req->requestor, req->property, false, &multi_data, + 0, &multi_type, &multi_format) + || multi_format != 32) { + // MULTIPLE property not formatted correctly + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + return; + } + nmulti = multi_data.size()/sizeof(*multi); + multi = new AtomPair[nmulti]; + memcpy(multi,multi_data.data(),multi_data.size()); + imulti = 0; + } + + for (; imulti < nmulti; ++imulti) { + Atom target; + Atom property; + + if (multi) { + target = multi[imulti].target; + property = multi[imulti].property; + } else { + target = req->target; + property = req->property; + if (property == XNone) // obsolete client + property = target; + } + + Atom ret = XNone; + if (target == XNone || property == XNone) { + ; + } else if (target == xa_timestamp) { +// if (d->timestamp != CurrentTime) { +// XChangeProperty(screen()->display(), req->requestor, property, XA_INTEGER, 32, +// PropModeReplace, CurrentTime, 1); +// ret = property; +// } else { +// qWarning("QClipboard: Invalid data timestamp"); +// } + } else if (target == xa_targets) { + ret = sendTargetsSelection(d, req->requestor, property); + } else { + ret = sendSelection(d, target, req->requestor, property); + } + + if (nmulti > 0) { + if (ret == XNone) { + multi[imulti].property = XNone; + multi_writeback = true; + } + } else { + event.xselection.property = ret; + break; + } + } + + if (nmulti > 0) { + if (multi_writeback) { + // according to ICCCM 2.6.2 says to put None back + // into the original property on the requestor window + XChangeProperty(screen()->display(), req->requestor, req->property, multi_type, 32, + PropModeReplace, (uchar *) multi, nmulti * 2); + } + + delete [] multi; + event.xselection.property = req->property; + } + + // send selection notify to requestor + XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); +} + +static inline int maxSelectionIncr(Display *dpy) +{ return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; } + +bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const +{ + int maxsize = maxSelectionIncr(screen()->display()); + ulong bytes_left; // bytes_after + ulong length; // nitems + uchar *data; + Atom dummy_type; + int dummy_format; + int r; + + if (!type) // allow null args + type = &dummy_type; + if (!format) + format = &dummy_format; + + // Don't read anything, just get the size of the property data + r = XGetWindowProperty(screen()->display(), win, property, 0, 0, False, + AnyPropertyType, type, format, + &length, &bytes_left, &data); + if (r != Success || (type && *type == XNone)) { + buffer->resize(0); + return false; + } + XFree((char*)data); + + int offset = 0, buffer_offset = 0, format_inc = 1, proplen = bytes_left; + + switch (*format) { + case 8: + default: + format_inc = sizeof(char) / 1; + break; + + case 16: + format_inc = sizeof(short) / 2; + proplen *= sizeof(short) / 2; + break; + + case 32: + format_inc = sizeof(long) / 4; + proplen *= sizeof(long) / 4; + break; + } + + int newSize = proplen; + buffer->resize(newSize); + + bool ok = (buffer->size() == newSize); + + if (ok && newSize) { + // could allocate buffer + + while (bytes_left) { + // more to read... + + r = XGetWindowProperty(screen()->display(), win, property, offset, maxsize/4, + False, AnyPropertyType, type, format, + &length, &bytes_left, &data); + if (r != Success || (type && *type == XNone)) + break; + + offset += length / (32 / *format); + length *= format_inc * (*format) / 8; + + // Here we check if we get a buffer overflow and tries to + // recover -- this shouldn't normally happen, but it doesn't + // hurt to be defensive + if ((int)(buffer_offset + length) > buffer->size()) { + length = buffer->size() - buffer_offset; + + // escape loop + bytes_left = 0; + } + + memcpy(buffer->data() + buffer_offset, data, length); + buffer_offset += length; + + XFree((char*)data); + } + + if (*format == 8 && *type == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { + // convert COMPOUND_TEXT to a multibyte string + XTextProperty textprop; + textprop.encoding = *type; + textprop.format = *format; + textprop.nitems = buffer_offset; + textprop.value = (unsigned char *) buffer->data(); + + char **list_ret = 0; + int count; + if (XmbTextPropertyToTextList(screen()->display(), &textprop, &list_ret, + &count) == Success && count && list_ret) { + offset = buffer_offset = strlen(list_ret[0]); + buffer->resize(offset); + memcpy(buffer->data(), list_ret[0], offset); + } + if (list_ret) XFreeStringList(list_ret); + } + } + + // correct size, not 0-term. + if (size) + *size = buffer_offset; + + if (deleteProperty) + XDeleteProperty(screen()->display(), win, property); + + XFlush(screen()->display()); + + return ok; +} + +QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm) +{ + XEvent event; + + QByteArray buf; + QByteArray tmp_buf; + bool alloc_error = false; + int length; + int offset = 0; + + if (nbytes > 0) { + // Reserve buffer + zero-terminator (for text data) + // We want to complete the INCR transfer even if we cannot + // allocate more memory + buf.resize(nbytes+1); + alloc_error = buf.size() != nbytes+1; + } + + for (;;) { + XFlush(screen()->display()); + if (!screen()->waitForClipboardEvent(win,PropertyNotify,&event,clipboard_timeout)) + break; + if (event.xproperty.atom != property || + event.xproperty.state != PropertyNewValue) + continue; + if (clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0)) { + if (length == 0) { // no more data, we're done + if (nullterm) { + buf.resize(offset+1); + buf[offset] = '\0'; + } else { + buf.resize(offset); + } + return buf; + } else if (!alloc_error) { + if (offset+length > (int)buf.size()) { + buf.resize(offset+length+65535); + if (buf.size() != offset+length+65535) { + alloc_error = true; + length = buf.size() - offset; + } + } + memcpy(buf.data()+offset, tmp_buf.constData(), length); + tmp_buf.resize(0); + offset += length; + } + } else { + break; + } + } + + // timed out ... create a new requestor window, otherwise the requestor + // could consider next request to be still part of this timed out request + setRequestor(0); + + return QByteArray(); +} + +QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) +{ + QByteArray buf; + + Window win = requestor(); + + XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events + + XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); + XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); + XSync(screen()->display(), false); + + XEvent xevent; + if (!screen()->waitForClipboardEvent(win,SelectionNotify,&xevent,clipboard_timeout) || + xevent.xselection.property == XNone) { + return buf; + } + + Atom type; + XSelectInput(screen()->display(), win, PropertyChangeMask); + + if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { + if (type == QXlibStatic::atom(QXlibStatic::INCR)) { + int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0; + buf = clipboardReadIncrementalProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), nbytes, false); + } + } + + XSelectInput(screen()->display(), win, NoEventMask); + + + return buf; +} + +#include "qtestliteclipboard.moc" diff --git a/src/plugins/platforms/xlib/qxlibclipboard.h b/src/plugins/platforms/xlib/qxlibclipboard.h new file mode 100644 index 0000000..109714c --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibclipboard.h @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITECLIPBOARD_H +#define QTESTLITECLIPBOARD_H + +#include <QPlatformClipboard> +#include "qtestlitestaticinfo.h" + +class QXlibScreen; +class QXlibClipboard : public QPlatformClipboard +{ +public: + QXlibClipboard(QXlibScreen *screen); + + const QMimeData *mimeData(QClipboard::Mode mode) const; + void setMimeData(QMimeData *data, QClipboard::Mode mode); + + bool supportsMode(QClipboard::Mode mode) const; + + QXlibScreen *screen() const; + + Window requestor() const; + void setRequestor(Window window); + + Window owner() const; + + void handleSelectionRequest(XEvent *event); + + bool clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const; + QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm); + + QByteArray getDataInFormat(Atom modeAtom, Atom fmtatom); + +private: + void setOwner(Window window); + + Atom sendTargetsSelection(QMimeData *d, Window window, Atom property); + Atom sendSelection(QMimeData *d, Atom target, Window window, Atom property); + + QXlibScreen *m_screen; + + QMimeData *m_xClipboard; + QMimeData *m_clientClipboard; + + QMimeData *m_xSelection; + QMimeData *m_clientSelection; + + Window m_requestor; + Window m_owner; + + static const int clipboard_timeout; + +}; + +#endif // QTESTLITECLIPBOARD_H diff --git a/src/plugins/platforms/xlib/qxlibcursor.cpp b/src/plugins/platforms/xlib/qxlibcursor.cpp new file mode 100644 index 0000000..2f7cfbf --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibcursor.cpp @@ -0,0 +1,199 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitecursor.h" + +#include "qtestliteintegration.h" +#include "qtestlitescreen.h" +#include "qtestlitewindow.h" + +#include <QtGui/QBitmap> + +#include <X11/cursorfont.h> + +QT_BEGIN_NAMESPACE + +QXlibCursor::QXlibCursor(QXlibScreen *screen) + : QPlatformCursor(screen) +{ +} + +void QXlibCursor::changeCursor(QCursor *cursor, QWidget *widget) +{ + QXlibWindow *w = 0; + if (widget) { + QWidget *window = widget->window(); + w = static_cast<QXlibWindow*>(window->platformWindow()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; + } + + if (!w) + return; + + int id = cursor->handle(); + + Cursor c; + if (!cursorMap.contains(id)) { + if (cursor->shape() == Qt::BitmapCursor) + c = createCursorBitmap(cursor); + else + c = createCursorShape(cursor->shape()); + if (!c) { + return; + } + cursorMap.insert(id, c); + } else { + c = cursorMap.value(id); + } + + w->setCursor(c); +} + +Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) +{ + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + QPoint spot = cursor->hotSpot(); + Window rootwin = testLiteScreen()->rootWindow(); + + QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); + QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); + + int width = cursor->bitmap()->width(); + int height = cursor->bitmap()->height(); + int bytesPerLine = mapImage.bytesPerLine(); + int destLineSize = width / 8; + if (width % 8) + destLineSize++; + + const uchar * map = mapImage.bits(); + const uchar * mask = maskImage.bits(); + + char * mapBits = new char[height * destLineSize]; + char * maskBits = new char[height * destLineSize]; + for (int i = 0; i < height; i++) { + memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); + memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); + } + + Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, maskBits, width, height); + Cursor c = XCreatePixmapCursor(testLiteScreen()->display(), cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(testLiteScreen()->display(), cp); + XFreePixmap(testLiteScreen()->display(), mp); + delete[] mapBits; + delete[] maskBits; + + return c; +} + +Cursor QXlibCursor::createCursorShape(int cshape) +{ + Cursor cursor = 0; + + if (cshape < 0 || cshape > Qt::LastCursor) + return 0; + + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + break; + + default: //default cursor for all the rest + break; + } + return cursor; +} + +QXlibScreen * QXlibCursor::testLiteScreen() const +{ + return static_cast<QXlibScreen *>(screen); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibcursor.h b/src/plugins/platforms/xlib/qxlibcursor.h new file mode 100644 index 0000000..db9f9e2 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibcursor.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITECURSOR_H +#define QTESTLITECURSOR_H + +#include <QtGui/QPlatformCursor> + +#include "qtestliteintegration.h" + +QT_BEGIN_NAMESPACE + +class QXlibCursor : QPlatformCursor +{ +public: + QXlibCursor(QXlibScreen *screen); + + void changeCursor(QCursor * cursor, QWidget * widget); +private: + + Cursor createCursorBitmap(QCursor * cursor); + Cursor createCursorShape(int cshape); + + QXlibScreen *testLiteScreen() const; + QMap<int, Cursor> cursorMap; +}; + +QT_END_NAMESPACE + +#endif // QTESTLITECURSOR_H diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.cpp b/src/plugins/platforms/xlib/qxlibeglintegration.cpp new file mode 100644 index 0000000..9bbe0ca --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibeglintegration.cpp @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteeglintegration.h" + +static int countBits(unsigned long mask) +{ + int count = 0; + while (mask != 0) { + if (mask & 1) + ++count; + mask >>= 1; + } + return count; +} + +VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) +{ + VisualID visualId = 0; + EGLint eglValue = 0; + + EGLDisplay eglDisplay = eglGetDisplay(display); + + EGLint configRedSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); + + EGLint configGreenSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); + + EGLint configBlueSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); + + EGLint configAlphaSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); + + eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); + int configId = eglValue; + + // See if EGL provided a valid VisualID: + eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); + visualId = (VisualID)eglValue; + if (visualId) { + // EGL has suggested a visual id, so get the rest of the visual info for that id: + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = visualId; + + XVisualInfo *chosenVisualInfo; + int matchingCount = 0; + chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); + if (chosenVisualInfo) { + // Skip size checks if implementation supports non-matching visual + // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). + if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { + XFree(chosenVisualInfo); + return visualId; + } + + int visualRedSize = countBits(chosenVisualInfo->red_mask); + int visualGreenSize = countBits(chosenVisualInfo->green_mask); + int visualBlueSize = countBits(chosenVisualInfo->blue_mask); + int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size + + bool visualMatchesConfig = false; + if ( visualRedSize == configRedSize && + visualGreenSize == configGreenSize && + visualBlueSize == configBlueSize ) + { + // We need XRender to check the alpha channel size of the visual. If we don't have + // the alpha size, we don't check it against the EGL config's alpha size. + if (visualAlphaSize >= 0) + visualMatchesConfig = visualAlphaSize == configAlphaSize; + else + visualMatchesConfig = true; + } + + if (!visualMatchesConfig) { + if (visualAlphaSize >= 0) { + qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", + (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, + configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); + } else { + qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", + (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, + configId, configRedSize, configGreenSize, configBlueSize); + } + visualId = 0; + } + } else { + qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", + (int)visualId, configId); + visualId = 0; + } + XFree(chosenVisualInfo); + } +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + else + qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); +#endif + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + if (configAlphaSize > 0) + qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); + else + qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); +#endif + return visualId; + } + + // Finally, try to + // use XGetVisualInfo and only use the bit depths to match on: + if (!visualId) { + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + XVisualInfo *matchingVisuals; + int matchingCount = 0; + + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + if (!matchingVisuals) { + // Try again without taking the alpha channel into account: + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + } + + if (matchingVisuals) { + visualId = matchingVisuals[0].visualid; + XFree(matchingVisuals); + } + } + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); +#endif + return visualId; + } + + qWarning("Unable to find an X11 visual which matches EGL config %d", configId); + return (VisualID)0; +} diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.h b/src/plugins/platforms/xlib/qxlibeglintegration.h new file mode 100644 index 0000000..4c2e50d --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibeglintegration.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEEGLINTEGRATION_H +#define QTESTLITEEGLINTEGRATION_H + +#include "qtestlitestaticinfo.h" +#include "../eglconvenience/qeglconvenience.h" + +class QXlibEglIntegration +{ +public: + static VisualID getCompatibleVisualId(Display *display, EGLConfig config); +}; + +#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp new file mode 100644 index 0000000..cdc5c29 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibintegration.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestliteintegration.h" +#include "qtestlitewindowsurface.h" +#include <QtGui/private/qpixmap_raster_p.h> +#include <QtCore/qdebug.h> + +#include "qtestlitewindow.h" +#include "qgenericunixfontdatabase.h" +#include "qtestlitescreen.h" +#include "qtestliteclipboard.h" + +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) +#include <GL/glx.h> +#else +#include <EGL/egl.h> +#endif //!defined(QT_OPENGL_ES_2) +#include <private/qwindowsurface_gl_p.h> +#include <private/qpixmapdata_gl_p.h> +#endif //QT_NO_OPENGL + +QT_BEGIN_NAMESPACE + +QXlibIntegration::QXlibIntegration(bool useOpenGL) + : mUseOpenGL(useOpenGL) + , mFontDb(new QGenericUnixFontDatabase()) + , mClipboard(0) +{ + mPrimaryScreen = new QXlibScreen(); + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QXlibIntegration::createPixmapData(QPixmapData::PixelType type) const +{ +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLPixmapData(type); +#endif + return new QRasterPixmapData(type); +} + +QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const +{ +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLWindowSurface(widget); +#endif + return new QXlibWindowSurface(widget); +} + + +QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + return new QXlibWindow(widget); +} + + + +QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + QImage image; + QWidget *widget = QWidget::find(window); + if (widget) { + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); + image = screen->grabWindow(window,x,y,width,height); + } else { + for (int i = 0; i < mScreens.size(); i++) { + QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens[i]); + if (screen->rootWindow() == window) { + image = screen->grabWindow(window,x,y,width,height); + } + } + } + return QPixmap::fromImage(image); +} + +QPlatformFontDatabase *QXlibIntegration::fontDatabase() const +{ + return mFontDb; +} + +QPlatformClipboard * QXlibIntegration::clipboard() const +{ + //Use lazy init since clipboard needs QTestliteScreen + if (!mClipboard) { + QXlibIntegration *that = const_cast<QXlibIntegration *>(this); + that->mClipboard = new QXlibClipboard(mPrimaryScreen); + } + return mClipboard; +} + +bool QXlibIntegration::hasOpenGL() const +{ +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); + return glXQueryExtension(screen->display(), 0, 0) != 0; +#else + static bool eglHasbeenInitialized = false; + static bool wasEglInitialized = false; + if (!eglHasbeenInitialized) { + eglHasbeenInitialized = true; + const QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); + EGLint major, minor; + eglBindAPI(EGL_OPENGL_ES_API); + EGLDisplay disp = eglGetDisplay(screen->display()); + wasEglInitialized = eglInitialize(disp,&major,&minor); + } + return wasEglInitialized; +#endif +#endif + return false; +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibintegration.h b/src/plugins/platforms/xlib/qxlibintegration.h new file mode 100644 index 0000000..c3125b8 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibintegration.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +//make sure textstream is included before any X11 headers +#include <QtCore/QTextStream> + +#include <QtGui/QPlatformIntegration> +#include <QtGui/QPlatformScreen> + +#include "qtestlitestaticinfo.h" + +QT_BEGIN_NAMESPACE + +class QXlibScreen; + +class QXlibIntegration : public QPlatformIntegration +{ +public: + QXlibIntegration(bool useOpenGL = false); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QList<QPlatformScreen *> screens() const { return mScreens; } + + QPlatformFontDatabase *fontDatabase() const; + QPlatformClipboard *clipboard() const; + + bool hasOpenGL() const; + +private: + bool mUseOpenGL; + QXlibScreen *mPrimaryScreen; + QList<QPlatformScreen *> mScreens; + QPlatformFontDatabase *mFontDb; + QPlatformClipboard *mClipboard; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.cpp b/src/plugins/platforms/xlib/qxlibkeyboard.cpp new file mode 100644 index 0000000..fb0cf2e --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibkeyboard.cpp @@ -0,0 +1,1000 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitekeyboard.h" + +#include "qtestlitescreen.h" + +#include <QtGui/QWindowSystemInterface> + +#include <QtCore/QTextCodec> + +#ifndef XK_ISO_Left_Tab +#define XK_ISO_Left_Tab 0xFE20 +#endif + +#ifndef XK_dead_hook +#define XK_dead_hook 0xFE61 +#endif + +#ifndef XK_dead_horn +#define XK_dead_horn 0xFE62 +#endif + +#ifndef XK_Codeinput +#define XK_Codeinput 0xFF37 +#endif + +#ifndef XK_Kanji_Bangou +#define XK_Kanji_Bangou 0xFF37 /* same as codeinput */ +#endif + +// Fix old X libraries +#ifndef XK_KP_Home +#define XK_KP_Home 0xFF95 +#endif +#ifndef XK_KP_Left +#define XK_KP_Left 0xFF96 +#endif +#ifndef XK_KP_Up +#define XK_KP_Up 0xFF97 +#endif +#ifndef XK_KP_Right +#define XK_KP_Right 0xFF98 +#endif +#ifndef XK_KP_Down +#define XK_KP_Down 0xFF99 +#endif +#ifndef XK_KP_Prior +#define XK_KP_Prior 0xFF9A +#endif +#ifndef XK_KP_Next +#define XK_KP_Next 0xFF9B +#endif +#ifndef XK_KP_End +#define XK_KP_End 0xFF9C +#endif +#ifndef XK_KP_Insert +#define XK_KP_Insert 0xFF9E +#endif +#ifndef XK_KP_Delete +#define XK_KP_Delete 0xFF9F +#endif + +// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special +// multimedia keys. They are included here as not every system has them. +#define XF86XK_MonBrightnessUp 0x1008FF02 +#define XF86XK_MonBrightnessDown 0x1008FF03 +#define XF86XK_KbdLightOnOff 0x1008FF04 +#define XF86XK_KbdBrightnessUp 0x1008FF05 +#define XF86XK_KbdBrightnessDown 0x1008FF06 +#define XF86XK_Standby 0x1008FF10 +#define XF86XK_AudioLowerVolume 0x1008FF11 +#define XF86XK_AudioMute 0x1008FF12 +#define XF86XK_AudioRaiseVolume 0x1008FF13 +#define XF86XK_AudioPlay 0x1008FF14 +#define XF86XK_AudioStop 0x1008FF15 +#define XF86XK_AudioPrev 0x1008FF16 +#define XF86XK_AudioNext 0x1008FF17 +#define XF86XK_HomePage 0x1008FF18 +#define XF86XK_Mail 0x1008FF19 +#define XF86XK_Start 0x1008FF1A +#define XF86XK_Search 0x1008FF1B +#define XF86XK_AudioRecord 0x1008FF1C +#define XF86XK_Calculator 0x1008FF1D +#define XF86XK_Memo 0x1008FF1E +#define XF86XK_ToDoList 0x1008FF1F +#define XF86XK_Calendar 0x1008FF20 +#define XF86XK_PowerDown 0x1008FF21 +#define XF86XK_ContrastAdjust 0x1008FF22 +#define XF86XK_Back 0x1008FF26 +#define XF86XK_Forward 0x1008FF27 +#define XF86XK_Stop 0x1008FF28 +#define XF86XK_Refresh 0x1008FF29 +#define XF86XK_PowerOff 0x1008FF2A +#define XF86XK_WakeUp 0x1008FF2B +#define XF86XK_Eject 0x1008FF2C +#define XF86XK_ScreenSaver 0x1008FF2D +#define XF86XK_WWW 0x1008FF2E +#define XF86XK_Sleep 0x1008FF2F +#define XF86XK_Favorites 0x1008FF30 +#define XF86XK_AudioPause 0x1008FF31 +#define XF86XK_AudioMedia 0x1008FF32 +#define XF86XK_MyComputer 0x1008FF33 +#define XF86XK_LightBulb 0x1008FF35 +#define XF86XK_Shop 0x1008FF36 +#define XF86XK_History 0x1008FF37 +#define XF86XK_OpenURL 0x1008FF38 +#define XF86XK_AddFavorite 0x1008FF39 +#define XF86XK_HotLinks 0x1008FF3A +#define XF86XK_BrightnessAdjust 0x1008FF3B +#define XF86XK_Finance 0x1008FF3C +#define XF86XK_Community 0x1008FF3D +#define XF86XK_AudioRewind 0x1008FF3E +#define XF86XK_BackForward 0x1008FF3F +#define XF86XK_Launch0 0x1008FF40 +#define XF86XK_Launch1 0x1008FF41 +#define XF86XK_Launch2 0x1008FF42 +#define XF86XK_Launch3 0x1008FF43 +#define XF86XK_Launch4 0x1008FF44 +#define XF86XK_Launch5 0x1008FF45 +#define XF86XK_Launch6 0x1008FF46 +#define XF86XK_Launch7 0x1008FF47 +#define XF86XK_Launch8 0x1008FF48 +#define XF86XK_Launch9 0x1008FF49 +#define XF86XK_LaunchA 0x1008FF4A +#define XF86XK_LaunchB 0x1008FF4B +#define XF86XK_LaunchC 0x1008FF4C +#define XF86XK_LaunchD 0x1008FF4D +#define XF86XK_LaunchE 0x1008FF4E +#define XF86XK_LaunchF 0x1008FF4F +#define XF86XK_ApplicationLeft 0x1008FF50 +#define XF86XK_ApplicationRight 0x1008FF51 +#define XF86XK_Book 0x1008FF52 +#define XF86XK_CD 0x1008FF53 +#define XF86XK_Calculater 0x1008FF54 +#define XF86XK_Clear 0x1008FF55 +#define XF86XK_ClearGrab 0x1008FE21 +#define XF86XK_Close 0x1008FF56 +#define XF86XK_Copy 0x1008FF57 +#define XF86XK_Cut 0x1008FF58 +#define XF86XK_Display 0x1008FF59 +#define XF86XK_DOS 0x1008FF5A +#define XF86XK_Documents 0x1008FF5B +#define XF86XK_Excel 0x1008FF5C +#define XF86XK_Explorer 0x1008FF5D +#define XF86XK_Game 0x1008FF5E +#define XF86XK_Go 0x1008FF5F +#define XF86XK_iTouch 0x1008FF60 +#define XF86XK_LogOff 0x1008FF61 +#define XF86XK_Market 0x1008FF62 +#define XF86XK_Meeting 0x1008FF63 +#define XF86XK_MenuKB 0x1008FF65 +#define XF86XK_MenuPB 0x1008FF66 +#define XF86XK_MySites 0x1008FF67 +#define XF86XK_News 0x1008FF69 +#define XF86XK_OfficeHome 0x1008FF6A +#define XF86XK_Option 0x1008FF6C +#define XF86XK_Paste 0x1008FF6D +#define XF86XK_Phone 0x1008FF6E +#define XF86XK_Reply 0x1008FF72 +#define XF86XK_Reload 0x1008FF73 +#define XF86XK_RotateWindows 0x1008FF74 +#define XF86XK_RotationPB 0x1008FF75 +#define XF86XK_RotationKB 0x1008FF76 +#define XF86XK_Save 0x1008FF77 +#define XF86XK_Send 0x1008FF7B +#define XF86XK_Spell 0x1008FF7C +#define XF86XK_SplitScreen 0x1008FF7D +#define XF86XK_Support 0x1008FF7E +#define XF86XK_TaskPane 0x1008FF7F +#define XF86XK_Terminal 0x1008FF80 +#define XF86XK_Tools 0x1008FF81 +#define XF86XK_Travel 0x1008FF82 +#define XF86XK_Video 0x1008FF87 +#define XF86XK_Word 0x1008FF89 +#define XF86XK_Xfer 0x1008FF8A +#define XF86XK_ZoomIn 0x1008FF8B +#define XF86XK_ZoomOut 0x1008FF8C +#define XF86XK_Away 0x1008FF8D +#define XF86XK_Messenger 0x1008FF8E +#define XF86XK_WebCam 0x1008FF8F +#define XF86XK_MailForward 0x1008FF90 +#define XF86XK_Pictures 0x1008FF91 +#define XF86XK_Music 0x1008FF92 +#define XF86XK_Battery 0x1008FF93 +#define XF86XK_Bluetooth 0x1008FF94 +#define XF86XK_WLAN 0x1008FF95 +#define XF86XK_UWB 0x1008FF96 +#define XF86XK_AudioForward 0x1008FF97 +#define XF86XK_AudioRepeat 0x1008FF98 +#define XF86XK_AudioRandomPlay 0x1008FF99 +#define XF86XK_Subtitle 0x1008FF9A +#define XF86XK_AudioCycleTrack 0x1008FF9B +#define XF86XK_Time 0x1008FF9F +#define XF86XK_Select 0x1008FFA0 +#define XF86XK_View 0x1008FFA1 +#define XF86XK_TopMenu 0x1008FFA2 +#define XF86XK_Suspend 0x1008FFA7 +#define XF86XK_Hibernate 0x1008FFA8 + + +// end of XF86keysyms.h + +// Special keys used by Qtopia, mapped into the X11 private keypad range. +#define QTOPIAXK_Select 0x11000601 +#define QTOPIAXK_Yes 0x11000602 +#define QTOPIAXK_No 0x11000603 +#define QTOPIAXK_Cancel 0x11000604 +#define QTOPIAXK_Printer 0x11000605 +#define QTOPIAXK_Execute 0x11000606 +#define QTOPIAXK_Sleep 0x11000607 +#define QTOPIAXK_Play 0x11000608 +#define QTOPIAXK_Zoom 0x11000609 +#define QTOPIAXK_Context1 0x1100060A +#define QTOPIAXK_Context2 0x1100060B +#define QTOPIAXK_Context3 0x1100060C +#define QTOPIAXK_Context4 0x1100060D +#define QTOPIAXK_Call 0x1100060E +#define QTOPIAXK_Hangup 0x1100060F +#define QTOPIAXK_Flip 0x11000610 + +// keyboard mapping table +static const unsigned int KeyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + 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_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 keys from X.org - This include multimedia keys, + // wireless/bluetooth/uwb keys, special launcher keys, etc. + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Memo, Qt::Key_Memo, + XF86XK_ToDoList, Qt::Key_ToDoList, + XF86XK_Calendar, Qt::Key_Calendar, + XF86XK_PowerDown, Qt::Key_PowerDown, + XF86XK_ContrastAdjust, Qt::Key_ContrastAdjust, + XF86XK_Standby, Qt::Key_Standby, + XF86XK_MonBrightnessUp, Qt::Key_MonBrightnessUp, + XF86XK_MonBrightnessDown, Qt::Key_MonBrightnessDown, + XF86XK_KbdLightOnOff, Qt::Key_KeyboardLightOnOff, + XF86XK_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp, + XF86XK_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown, + XF86XK_PowerOff, Qt::Key_PowerOff, + XF86XK_WakeUp, Qt::Key_WakeUp, + XF86XK_Eject, Qt::Key_Eject, + XF86XK_ScreenSaver, Qt::Key_ScreenSaver, + XF86XK_WWW, Qt::Key_WWW, + XF86XK_Sleep, Qt::Key_Sleep, + XF86XK_LightBulb, Qt::Key_LightBulb, + XF86XK_Shop, Qt::Key_Shop, + XF86XK_History, Qt::Key_History, + XF86XK_AddFavorite, Qt::Key_AddFavorite, + XF86XK_HotLinks, Qt::Key_HotLinks, + XF86XK_BrightnessAdjust, Qt::Key_BrightnessAdjust, + XF86XK_Finance, Qt::Key_Finance, + XF86XK_Community, Qt::Key_Community, + XF86XK_AudioRewind, Qt::Key_AudioRewind, + XF86XK_BackForward, Qt::Key_BackForward, + XF86XK_ApplicationLeft, Qt::Key_ApplicationLeft, + XF86XK_ApplicationRight, Qt::Key_ApplicationRight, + XF86XK_Book, Qt::Key_Book, + XF86XK_CD, Qt::Key_CD, + XF86XK_Calculater, Qt::Key_Calculator, + XF86XK_Clear, Qt::Key_Clear, + XF86XK_ClearGrab, Qt::Key_ClearGrab, + XF86XK_Close, Qt::Key_Close, + XF86XK_Copy, Qt::Key_Copy, + XF86XK_Cut, Qt::Key_Cut, + XF86XK_Display, Qt::Key_Display, + XF86XK_DOS, Qt::Key_DOS, + XF86XK_Documents, Qt::Key_Documents, + XF86XK_Excel, Qt::Key_Excel, + XF86XK_Explorer, Qt::Key_Explorer, + XF86XK_Game, Qt::Key_Game, + XF86XK_Go, Qt::Key_Go, + XF86XK_iTouch, Qt::Key_iTouch, + XF86XK_LogOff, Qt::Key_LogOff, + XF86XK_Market, Qt::Key_Market, + XF86XK_Meeting, Qt::Key_Meeting, + XF86XK_MenuKB, Qt::Key_MenuKB, + XF86XK_MenuPB, Qt::Key_MenuPB, + XF86XK_MySites, Qt::Key_MySites, + XF86XK_News, Qt::Key_News, + XF86XK_OfficeHome, Qt::Key_OfficeHome, + XF86XK_Option, Qt::Key_Option, + XF86XK_Paste, Qt::Key_Paste, + XF86XK_Phone, Qt::Key_Phone, + XF86XK_Reply, Qt::Key_Reply, + XF86XK_Reload, Qt::Key_Reload, + XF86XK_RotateWindows, Qt::Key_RotateWindows, + XF86XK_RotationPB, Qt::Key_RotationPB, + XF86XK_RotationKB, Qt::Key_RotationKB, + XF86XK_Save, Qt::Key_Save, + XF86XK_Send, Qt::Key_Send, + XF86XK_Spell, Qt::Key_Spell, + XF86XK_SplitScreen, Qt::Key_SplitScreen, + XF86XK_Support, Qt::Key_Support, + XF86XK_TaskPane, Qt::Key_TaskPane, + XF86XK_Terminal, Qt::Key_Terminal, + XF86XK_Tools, Qt::Key_Tools, + XF86XK_Travel, Qt::Key_Travel, + XF86XK_Video, Qt::Key_Video, + XF86XK_Word, Qt::Key_Word, + XF86XK_Xfer, Qt::Key_Xfer, + XF86XK_ZoomIn, Qt::Key_ZoomIn, + XF86XK_ZoomOut, Qt::Key_ZoomOut, + XF86XK_Away, Qt::Key_Away, + XF86XK_Messenger, Qt::Key_Messenger, + XF86XK_WebCam, Qt::Key_WebCam, + XF86XK_MailForward, Qt::Key_MailForward, + XF86XK_Pictures, Qt::Key_Pictures, + XF86XK_Music, Qt::Key_Music, + XF86XK_Battery, Qt::Key_Battery, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_WLAN, Qt::Key_WLAN, + XF86XK_UWB, Qt::Key_UWB, + XF86XK_AudioForward, Qt::Key_AudioForward, + XF86XK_AudioRepeat, Qt::Key_AudioRepeat, + XF86XK_AudioRandomPlay, Qt::Key_AudioRandomPlay, + XF86XK_Subtitle, Qt::Key_Subtitle, + XF86XK_AudioCycleTrack, Qt::Key_AudioCycleTrack, + XF86XK_Time, Qt::Key_Time, + XF86XK_Select, Qt::Key_Select, + XF86XK_View, Qt::Key_View, + XF86XK_TopMenu, Qt::Key_TopMenu, + XF86XK_Bluetooth, Qt::Key_Bluetooth, + XF86XK_Suspend, Qt::Key_Suspend, + XF86XK_Hibernate, Qt::Key_Hibernate, + XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, + XF86XK_LaunchE, Qt::Key_LaunchG, + XF86XK_LaunchF, Qt::Key_LaunchH, + + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, + + 0, 0 +}; + +static const unsigned short katakanaKeysymsToUnicode[] = { + 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, + 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, + 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, + 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, + 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, + 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, + 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, + 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C +}; + +static const unsigned short cyrillicKeysymsToUnicode[] = { + 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, + 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a +}; + +static const unsigned short greekKeysymsToUnicode[] = { + 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, + 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, + 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, + 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short technicalKeysymsToUnicode[] = { + 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1, + 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8, + 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B, + 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, + 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000, + 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000 +}; + +static const unsigned short specialKeysymsToUnicode[] = { + 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000, + 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA, + 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C, + 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short publishingKeysymsToUnicode[] = { + 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, + 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, + 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, + 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, + 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, + 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, + 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, + 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, + 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, + 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, + 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000 +}; + +static const unsigned short aplKeysymsToUnicode[] = { + 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, + 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, + 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, + 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, + 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000 +}; + +static const unsigned short koreanKeysymsToUnicode[] = { + 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, + 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, + 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, + 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, + 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, + 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, + 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, + 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, + 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, + 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, + 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, + 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 +}; + +static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4) +{ + switch (byte3) { + case 0x04: + // katakana + if (byte4 > 0xa0 && byte4 < 0xe0) + return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]); + else if (byte4 == 0x7e) + return QChar(0x203e); // Overline + break; + case 0x06: + // russian, use lookup table + if (byte4 > 0xa0) + return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x07: + // greek + if (byte4 > 0xa0) + return QChar(greekKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x08: + // technical + if (byte4 > 0xa0) + return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x09: + // special + if (byte4 >= 0xe0) + return QChar(specialKeysymsToUnicode[byte4 - 0xe0]); + break; + case 0x0a: + // publishing + if (byte4 > 0xa0) + return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0b: + // APL + if (byte4 > 0xa0) + return QChar(aplKeysymsToUnicode[byte4 - 0xa0]); + break; + case 0x0e: + // Korean + if (byte4 > 0xa0) + return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]); + break; + default: + break; + } + return QChar(0x0); +} + +Qt::KeyboardModifiers QXlibKeyboard::translateModifiers(int s) +{ + Qt::KeyboardModifiers ret = 0; + if (s & ShiftMask) + ret |= Qt::ShiftModifier; + if (s & ControlMask) + ret |= Qt::ControlModifier; + if (s & m_alt_mask) + ret |= Qt::AltModifier; + if (s & m_meta_mask) + ret |= Qt::MetaModifier; +// if (s & m_mode_switch_mask) //doesn't seem to work correctly +// ret |= Qt::GroupSwitchModifier; + return ret; +} + +void QXlibKeyboard::setMask(KeySym sym, uint mask) +{ + if (m_alt_mask == 0 + && m_meta_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && (sym == XK_Alt_L || sym == XK_Alt_R)) { + m_alt_mask = mask; + } + if (m_meta_mask == 0 + && m_alt_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && (sym == XK_Meta_L || sym == XK_Meta_R)) { + m_meta_mask = mask; + } + if (m_super_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_hyper_mask != mask + && (sym == XK_Super_L || sym == XK_Super_R)) { + m_super_mask = mask; + } + if (m_hyper_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_super_mask != mask + && (sym == XK_Hyper_L || sym == XK_Hyper_R)) { + m_hyper_mask = mask; + } + if (m_mode_switch_mask == 0 + && m_alt_mask != mask + && m_meta_mask != mask + && m_super_mask != mask + && m_hyper_mask != mask + && sym == XK_Mode_switch) { + m_mode_switch_mask = mask; + } + if (m_num_lock_mask == 0 + && sym == XK_Num_Lock) { + m_num_lock_mask = mask; + } +} + +int QXlibKeyboard::translateKeySym(uint key) const +{ + int code = -1; + int i = 0; // any other keys + while (KeyTbl[i]) { + if (key == KeyTbl[i]) { + code = (int)KeyTbl[i+1]; + break; + } + i += 2; + } + if (m_meta_mask) { + // translate Super/Hyper keys to Meta if we're using them as the MetaModifier + if (m_meta_mask == m_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) { + code = Qt::Key_Meta; + } else if (m_meta_mask == m_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) { + code = Qt::Key_Meta; + } + } + return code; +} + +QString QXlibKeyboard::translateKeySym(KeySym keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count) +{ + // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars + + QTextCodec *mapper = QTextCodec::codecForLocale(); + QChar converted; + + if (/*count == 0 &&*/ keysym < 0xff00) { + unsigned char byte3 = (unsigned char)(keysym >> 8); + int mib = -1; + switch(byte3) { + case 0: // Latin 1 + case 1: // Latin 2 + case 2: //latin 3 + case 3: // latin4 + mib = byte3 + 4; break; + case 5: // arabic + mib = 82; break; + case 12: // Hebrew + mib = 85; break; + case 13: // Thai + mib = 2259; break; + case 4: // kana + case 6: // cyrillic + case 7: // greek + case 8: // technical, no mapping here at the moment + case 9: // Special + case 10: // Publishing + case 11: // APL + case 14: // Korean, no mapping + mib = -1; // manual conversion + mapper= 0; +#if !defined(QT_NO_XIM) + converted = keysymToUnicode(byte3, keysym & 0xff); +#endif + case 0x20: + // currency symbols + if (keysym >= 0x20a0 && keysym <= 0x20ac) { + mib = -1; // manual conversion + mapper = 0; + converted = (uint)keysym; + } + break; + default: + break; + } + if (mib != -1) { + mapper = QTextCodec::codecForMib(mib); + if (chars.isEmpty()) + chars.resize(1); + chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later + count = 1; + } + } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) { + converted = (ushort) (keysym - 0x1000000); + mapper = 0; + } + if (count < (int)chars.size()-1) + chars[count] = '\0'; + + QString text; + if (!mapper && converted.unicode() != 0x0) { + text = converted; + } else if (!chars.isEmpty()) { + // convert chars (8bit) to text (unicode). + if (mapper) + text = mapper->toUnicode(chars.data(), count, 0); + if (text.isEmpty()) { + // no mapper, or codec couldn't convert to unicode (this + // can happen when running in the C locale or with no LANG + // set). try converting from latin-1 + text = QString::fromLatin1(chars); + } + } + + modifiers = translateModifiers(xmodifiers); + + // Commentary in X11/keysymdef says that X codes match ASCII, so it + // is safe to use the locale functions to process X codes in ISO8859-1. + // + // This is mainly for compatibility - applications should not use the + // Qt keycodes between 128 and 255, but should rather use the + // QKeyEvent::text(). + // + if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) { + // upper-case key, if known + code = isprint((int)keysym) ? toupper((int)keysym) : 0; + } else if (keysym >= XK_F1 && keysym <= XK_F35) { + // function keys + code = Qt::Key_F1 + ((int)keysym - XK_F1); + } else if (keysym >= XK_KP_Space && keysym <= XK_KP_9) { + if (keysym >= XK_KP_0) { + // numeric keypad keys + code = Qt::Key_0 + ((int)keysym - XK_KP_0); + } else { + code = translateKeySym(keysym); + } + modifiers |= Qt::KeypadModifier; + } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) { + code = text.unicode()->toUpper().unicode(); + } else { + // any other keys + code = translateKeySym(keysym); + + if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) { + // map shift+tab to shift+backtab, QShortcutMap knows about it + // and will handle it. + code = Qt::Key_Backtab; + text = QString(); + } + } + + return text; +} + +QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) + : m_screen(screen) + , m_alt_mask(0) + , m_super_mask(0) + , m_hyper_mask(0) + , m_meta_mask(0) +{ + changeLayout(); +} + +void QXlibKeyboard::changeLayout() +{ + XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); + for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { + const uint mask = xkbDesc->map->modmap ? xkbDesc->map->modmap[i] : 0; + if (mask == 0) { + // key is not bound to a modifier + continue; + } + + for (int j = 0; j < XkbKeyGroupsWidth(xkbDesc, i); ++j) { + KeySym keySym = XkbKeySym(xkbDesc, i, j); + if (keySym == NoSymbol) + continue; + setMask(keySym, mask); + } + } + XkbFreeKeyboard(xkbDesc, XkbAllComponentsMask, true); + +} + +static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) +{ + switch (qtcode) { + case Qt::Key_Control: + return Qt::ControlModifier; + case Qt::Key_Alt: + return Qt::AltModifier; + case Qt::Key_Shift: + return Qt::ShiftModifier; + case Qt::Key_Meta: + return Qt::MetaModifier; + default: + return Qt::NoModifier; + } +} + +void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev) +{ + int qtcode = 0; + Qt::KeyboardModifiers modifiers = translateModifiers(ev->state); + QByteArray chars; + chars.resize(513); + int count = 0; + KeySym keySym; + count = XLookupString(ev,chars.data(),chars.size(),&keySym,0); + QString text = translateKeySym(keySym,ev->state,qtcode,modifiers,chars,count); + QWindowSystemInterface::handleKeyEvent(widget,ev->time,type,qtcode,modifiers,text.left(count)); +} diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.h b/src/plugins/platforms/xlib/qxlibkeyboard.h new file mode 100644 index 0000000..98df4e1 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibkeyboard.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEKEYBOARD_H +#define QTESTLITEKEYBOARD_H + +#include "qtestliteintegration.h" + +class QXlibKeyboard +{ +public: + QXlibKeyboard(QXlibScreen *screen); + + void changeLayout(); + + void handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent *ev); + + Qt::KeyboardModifiers translateModifiers(int s); + +private: + + void setMask(KeySym sym, uint mask); + int translateKeySym(uint key) const; + QString translateKeySym(KeySym keysym, uint xmodifiers, + int &code, Qt::KeyboardModifiers &modifiers, + QByteArray &chars, int &count); + + QXlibScreen *m_screen; + + uint m_alt_mask; + uint m_super_mask; + uint m_hyper_mask; + uint m_meta_mask; + uint m_mode_switch_mask; + uint m_num_lock_mask; +}; + +#endif // QTESTLITEKEYBOARD_H diff --git a/src/plugins/platforms/xlib/qxlibmime.cpp b/src/plugins/platforms/xlib/qxlibmime.cpp new file mode 100644 index 0000000..5335ae9 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibmime.cpp @@ -0,0 +1,322 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitemime.h" + +#include "qtestlitestaticinfo.h" +#include "qtestlitescreen.h" + +#include <QtCore/QTextCodec> +#include <QtGui/QImageWriter> +#include <QtCore/QBuffer> + +QXlibMime::QXlibMime() + : QInternalMimeData() +{ } + +QXlibMime::~QXlibMime() +{} + + + + + +QString QXlibMime::mimeAtomToString(Display *display, Atom a) +{ + if (!a) return 0; + + if (a == XA_STRING || a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) { + return "text/plain"; // some Xdnd clients are dumb + } + char *atom = XGetAtomName(display, a); + QString result = QString::fromLatin1(atom); + XFree(atom); + return result; +} + +Atom QXlibMime::mimeStringToAtom(Display *display, const QString &mimeType) +{ + if (mimeType.isEmpty()) + return 0; + return XInternAtom(display, mimeType.toLatin1().constData(), False); +} + +QStringList QXlibMime::mimeFormatsForAtom(Display *display, Atom a) +{ + QStringList formats; + if (a) { + QString atomName = mimeAtomToString(display, a); + formats.append(atomName); + + // special cases for string type + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) + || a == XA_STRING + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + formats.append(QLatin1String("text/plain")); + + // special cases for uris + if (atomName == QLatin1String("text/x-moz-url")) + formats.append(QLatin1String("text/uri-list")); + + // special case for images + if (a == XA_PIXMAP) + formats.append(QLatin1String("image/ppm")); + } + return formats; +} + +bool QXlibMime::mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat) +{ + bool ret = false; + *atomFormat = a; + *dataFormat = 8; + QString atomName = mimeAtomToString(display, a); + if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) { + *data = QInternalMimeData::renderDataHelper(atomName, mimeData); + if (atomName == QLatin1String("application/x-color")) + *dataFormat = 16; + ret = true; + } else { + if ((a == QXlibStatic::atom(QXlibStatic::UTF8_STRING) + || a == XA_STRING + || a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + && QInternalMimeData::hasFormatHelper(QLatin1String("text/plain"), mimeData)) { + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)){ + *data = QInternalMimeData::renderDataHelper(QLatin1String("text/plain"), mimeData); + ret = true; + } else if (a == XA_STRING) { + *data = QString::fromUtf8(QInternalMimeData::renderDataHelper( + QLatin1String("text/plain"), mimeData)).toLocal8Bit(); + ret = true; + } else if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) { + // the ICCCM states that TEXT and COMPOUND_TEXT are in the + // encoding of choice, so we choose the encoding of the locale + QByteArray strData = QString::fromUtf8(QInternalMimeData::renderDataHelper( + QLatin1String("text/plain"), mimeData)).toLocal8Bit(); + char *list[] = { strData.data(), NULL }; + + XICCEncodingStyle style = (a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + ? XCompoundTextStyle : XStdICCTextStyle; + XTextProperty textprop; + if (list[0] != NULL + && XmbTextListToTextProperty(display, list, 1, style, + &textprop) == Success) { + *atomFormat = textprop.encoding; + *dataFormat = textprop.format; + *data = QByteArray((const char *) textprop.value, textprop.nitems * textprop.format / 8); + ret = true; + + XFree(textprop.value); + } + } + } else if (atomName == QLatin1String("text/x-moz-url") && + QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) { + QByteArray uri = QInternalMimeData::renderDataHelper( + QLatin1String("text/uri-list"), mimeData).split('\n').first(); + QString mozUri = QString::fromLatin1(uri, uri.size()); + mozUri += QLatin1Char('\n'); + *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), mozUri.length() * 2); + ret = true; + } else if ((a == XA_PIXMAP || a == XA_BITMAP) && mimeData->hasImage()) { + ret = true; + } + } + return ret && data != 0; +} + +QList<Atom> QXlibMime::mimeAtomsForFormat(Display *display, const QString &format) +{ + QList<Atom> atoms; + atoms.append(mimeStringToAtom(display, format)); + + // special cases for strings + if (format == QLatin1String("text/plain")) { + atoms.append(QXlibStatic::atom(QXlibStatic::UTF8_STRING)); + atoms.append(XA_STRING); + atoms.append(QXlibStatic::atom(QXlibStatic::TEXT)); + atoms.append(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)); + } + + // special cases for uris + if (format == QLatin1String("text/uri-list")) { + atoms.append(mimeStringToAtom(display,QLatin1String("text/x-moz-url"))); + } + + //special cases for images + if (format == QLatin1String("image/ppm")) + atoms.append(XA_PIXMAP); + if (format == QLatin1String("image/pbm")) + atoms.append(XA_BITMAP); + + return atoms; +} + +QVariant QXlibMime::mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding) +{ + QString atomName = mimeAtomToString(display,a); + if (atomName == format) + return data; + + if (!encoding.isEmpty() + && atomName == format + QLatin1String(";charset=") + QString::fromLatin1(encoding)) { + + if (requestedType == QVariant::String) { + QTextCodec *codec = QTextCodec::codecForName(encoding); + if (codec) + return codec->toUnicode(data); + } + + return data; + } + + // special cases for string types + if (format == QLatin1String("text/plain")) { + if (a == QXlibStatic::atom(QXlibStatic::UTF8_STRING)) + return QString::fromUtf8(data); + if (a == XA_STRING) + return QString::fromLatin1(data); + if (a == QXlibStatic::atom(QXlibStatic::TEXT) + || a == QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT)) + // #### might be wrong for COMPUND_TEXT + return QString::fromLocal8Bit(data, data.size()); + } + + // special case for uri types + if (format == QLatin1String("text/uri-list")) { + if (atomName == QLatin1String("text/x-moz-url")) { + // we expect this as utf16 <url><space><title> + // the first part is a url that should only contain ascci char + // so it should be safe to check that the second char is 0 + // to verify that it is utf16 + if (data.size() > 1 && data.at(1) == 0) + return QString::fromRawData((const QChar *)data.constData(), + data.size() / 2).split(QLatin1Char('\n')).first().toLatin1(); + } + } + + // special cas for images + if (format == QLatin1String("image/ppm")) { + if (a == XA_PIXMAP && data.size() == sizeof(Pixmap)) { + Pixmap xpm = *((Pixmap*)data.data()); + if (!xpm) + return QByteArray(); + Window root; + int x; + int y; + uint width; + uint height; + uint border_width; + uint depth; + + XGetGeometry(display, xpm, &root, &x, &y, &width, &height, &border_width, &depth); + XImage *ximg = XGetImage(display,xpm,x,y,width,height,AllPlanes,depth==1 ? XYPixmap : ZPixmap); + QImage qimg = QXlibStatic::qimageFromXImage(ximg); + XDestroyImage(ximg); + + QImageWriter imageWriter; + imageWriter.setFormat("PPMRAW"); + QBuffer buf; + buf.open(QIODevice::WriteOnly); + imageWriter.setDevice(&buf); + imageWriter.write(qimg); + return buf.buffer(); + } + } + return QVariant(); +} + +Atom QXlibMime::mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding) +{ + requestedEncoding->clear(); + + // find matches for string types + if (format == QLatin1String("text/plain")) { + if (atoms.contains(QXlibStatic::atom(QXlibStatic::UTF8_STRING))) + return QXlibStatic::atom(QXlibStatic::UTF8_STRING); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT))) + return QXlibStatic::atom(QXlibStatic::COMPOUND_TEXT); + if (atoms.contains(QXlibStatic::atom(QXlibStatic::TEXT))) + return QXlibStatic::atom(QXlibStatic::TEXT); + if (atoms.contains(XA_STRING)) + return XA_STRING; + } + + // find matches for uri types + if (format == QLatin1String("text/uri-list")) { + Atom a = mimeStringToAtom(display,format); + if (a && atoms.contains(a)) + return a; + a = mimeStringToAtom(display,QLatin1String("text/x-moz-url")); + if (a && atoms.contains(a)) + return a; + } + + // find match for image + if (format == QLatin1String("image/ppm")) { + if (atoms.contains(XA_PIXMAP)) + return XA_PIXMAP; + } + + // for string/text requests try to use a format with a well-defined charset + // first to avoid encoding problems + if (requestedType == QVariant::String + && format.startsWith(QLatin1String("text/")) + && !format.contains(QLatin1String("charset="))) { + + QString formatWithCharset = format; + formatWithCharset.append(QLatin1String(";charset=utf-8")); + + Atom a = mimeStringToAtom(display,formatWithCharset); + if (a && atoms.contains(a)) { + *requestedEncoding = "utf-8"; + return a; + } + } + + Atom a = mimeStringToAtom(display,format); + if (a && atoms.contains(a)) + return a; + + return 0; +} diff --git a/src/plugins/platforms/xlib/qxlibmime.h b/src/plugins/platforms/xlib/qxlibmime.h new file mode 100644 index 0000000..6a70ea4 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibmime.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEMIME_H +#define QTESTLITEMIME_H + +#include <private/qdnd_p.h> + +#include <QtGui/QClipboard> + +#include "qtestliteintegration.h" +#include "qtestliteclipboard.h" + +class QXlibMime : public QInternalMimeData { + Q_OBJECT +public: + QXlibMime(); + ~QXlibMime(); + + static QList<Atom> mimeAtomsForFormat(Display *display, const QString &format); + static QString mimeAtomToString(Display *display, Atom a); + static bool mimeDataForAtom(Display *display, Atom a, QMimeData *mimeData, QByteArray *data, Atom *atomFormat, int *dataFormat); + static QStringList mimeFormatsForAtom(Display *display, Atom a); + static Atom mimeStringToAtom(Display *display, const QString &mimeType); + static QVariant mimeConvertToFormat(Display *display, Atom a, const QByteArray &data, const QString &format, QVariant::Type requestedType, const QByteArray &encoding); + static Atom mimeAtomForFormat(Display *display, const QString &format, QVariant::Type requestedType, const QList<Atom> &atoms, QByteArray *requestedEncoding); +}; + +#endif // QTESTLITEMIME_H diff --git a/src/plugins/platforms/xlib/qxlibscreen.cpp b/src/plugins/platforms/xlib/qxlibscreen.cpp new file mode 100644 index 0000000..714c17b --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibscreen.cpp @@ -0,0 +1,468 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitescreen.h" + +#include "qtestlitecursor.h" +#include "qtestlitewindow.h" +#include "qtestlitekeyboard.h" +#include "qtestlitestaticinfo.h" +#include "qtestliteclipboard.h" + +#include <QtCore/QDebug> +#include <QtCore/QSocketNotifier> +#include <QtCore/QElapsedTimer> + +#include <private/qapplication_p.h> + +#include <X11/extensions/Xfixes.h> + +QT_BEGIN_NAMESPACE + +static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); +static bool seen_badwindow; + +static int qt_x_errhandler(Display *dpy, XErrorEvent *err) +{ + +qDebug() << "qt_x_errhandler" << err->error_code; + + switch (err->error_code) { + case BadAtom: +#if 0 + if (err->request_code == 20 /* X_GetProperty */ + && (err->resourceid == XA_RESOURCE_MANAGER + || err->resourceid == XA_RGB_DEFAULT_MAP + || err->resourceid == ATOM(_NET_SUPPORTED) + || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) + || err->resourceid == ATOM(KDE_FULL_SESSION) + || err->resourceid == ATOM(KWIN_RUNNING) + || err->resourceid == ATOM(XdndProxy) + || err->resourceid == ATOM(XdndAware)) + + + ) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } +#endif + qDebug() << "BadAtom"; + break; + + case BadWindow: + if (err->request_code == 2 /* X_ChangeWindowAttributes */ + || err->request_code == 38 /* X_QueryPointer */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } + } + seen_badwindow = true; + if (err->request_code == 25 /* X_SendEvent */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } +#if 0 + if (X11->xdndHandleBadwindow()) { + qDebug("xdndHandleBadwindow returned true"); + return 0; + } +#endif + } +#if 0 + if (X11->ignore_badwindow) + return 0; +#endif + break; + + case BadMatch: + if (err->request_code == 42 /* X_SetInputFocus */) + return 0; + break; + + default: +#if 0 //!defined(QT_NO_XINPUT) + if (err->request_code == X11->xinput_major + && err->error_code == (X11->xinput_errorbase + XI_BadDevice) + && err->minor_code == 3 /* X_OpenDevice */) { + return 0; + } +#endif + break; + } + + char errstr[256]; + XGetErrorText( dpy, err->error_code, errstr, 256 ); + char buffer[256]; + char request_str[256]; + qsnprintf(buffer, 256, "%d", err->request_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); + if (err->request_code < 128) { + // X error for a normal protocol request + qWarning( "X Error: %s %d\n" + " Major opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + request_str, + err->resourceid ); + } else { + // X error for an extension request + const char *extensionName = 0; +#if 0 + if (err->request_code == X11->xrender_major) + extensionName = "RENDER"; + else if (err->request_code == X11->xrandr_major) + extensionName = "RANDR"; + else if (err->request_code == X11->xinput_major) + extensionName = "XInputExtension"; + else if (err->request_code == X11->mitshm_major) + extensionName = "MIT-SHM"; +#endif + char minor_str[256]; + if (extensionName) { + qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); + } else { + extensionName = "Uknown extension"; + qsnprintf(minor_str, 256, "Unknown request"); + } + qWarning( "X Error: %s %d\n" + " Extension: %d (%s)\n" + " Minor opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + extensionName, + err->minor_code, + minor_str, + err->resourceid ); + } + + // ### we really should distinguish between severe, non-severe and + // ### application specific errors + + return 0; +} + +QXlibScreen::QXlibScreen() + : mFormat(QImage::Format_RGB32) +{ + char *display_name = getenv("DISPLAY"); + mDisplay = XOpenDisplay(display_name); + mDisplayName = QString::fromLocal8Bit(display_name); + if (!mDisplay) { + fprintf(stderr, "Cannot connect to X server: %s\n", + display_name); + exit(1); + } + +#ifndef DONT_USE_MIT_SHM + Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay); + Q_ASSERT(MIT_SHM_extension_supported == True); +#endif + original_x_errhandler = XSetErrorHandler(qt_x_errhandler); + + if (qgetenv("DO_X_SYNCHRONIZE").toInt()) + XSynchronize(mDisplay, true); + + mScreen = DefaultScreen(mDisplay); + XSelectInput(mDisplay,rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); + int width = DisplayWidth(mDisplay, mScreen); + int height = DisplayHeight(mDisplay, mScreen); + mGeometry = QRect(0,0,width,height); + + int physicalWidth = DisplayWidthMM(mDisplay, mScreen); + int physicalHeight = DisplayHeightMM(mDisplay, mScreen); + mPhysicalSize = QSize(physicalWidth,physicalHeight); + + int xSocketNumber = XConnectionNumber(mDisplay); + + mDepth = DefaultDepth(mDisplay,mScreen); +#ifdef MYX11_DEBUG + qDebug() << "X socket:"<< xSocketNumber; +#endif + QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); + connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + mCursor = new QXlibCursor(this); + mKeyboard = new QXlibKeyboard(this); +} + +QXlibScreen::~QXlibScreen() +{ + delete mCursor; + XCloseDisplay(mDisplay); +} + +#ifdef KeyPress +#undef KeyPress +#endif +#ifdef KeyRelease +#undef KeyRelease +#endif + +bool QXlibScreen::handleEvent(XEvent *xe) +{ + int quit = false; + QXlibWindow *platformWindow = 0; + QWidget *widget = QWidget::find(xe->xany.window); + if (widget) { + platformWindow = static_cast<QXlibWindow *>(widget->platformWindow()); + } + + Atom wmProtocolsAtom = QXlibStatic::atom(QXlibStatic::WM_PROTOCOLS); + Atom wmDeleteWindowAtom = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); + switch (xe->type) { + + case ClientMessage: + if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { + Atom a = xe->xclient.data.l[0]; + if (a == wmDeleteWindowAtom) + platformWindow->handleCloseEvent(); + } + break; + + case Expose: + if (platformWindow) + if (xe->xexpose.count == 0) + platformWindow->paintEvent(); + break; + case ConfigureNotify: + if (platformWindow) + platformWindow->resizeEvent(&xe->xconfigure); + break; + + case ButtonPress: + if (platformWindow) + platformWindow->mousePressEvent(&xe->xbutton); + break; + + case ButtonRelease: + if (platformWindow) + platformWindow->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton); + break; + + case MotionNotify: + if (platformWindow) + platformWindow->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); + break; + + case XKeyPress: + mKeyboard->handleKeyEvent(widget,QEvent::KeyPress, &xe->xkey); + break; + + case XKeyRelease: + mKeyboard->handleKeyEvent(widget,QEvent::KeyRelease, &xe->xkey); + break; + + case EnterNotify: + if (platformWindow) + platformWindow->handleEnterEvent(); + break; + + case LeaveNotify: + if (platformWindow) + platformWindow->handleLeaveEvent(); + break; + + case XFocusIn: + if (platformWindow) + platformWindow->handleFocusInEvent(); + break; + + case XFocusOut: + if (platformWindow) + platformWindow->handleFocusOutEvent(); + break; + + case PropertyNotify: + break; + + case SelectionClear: + qDebug() << "Selection Clear!!!"; + break; + case SelectionRequest: + handleSelectionRequest(xe); + break; + case SelectionNotify: + qDebug() << "Selection Notify!!!!"; + + break; + + + default: +#ifdef MYX11_DEBUG + qDebug() << hex << xe->xany.window << "Other X event" << xe->type; +#endif + break; + } + + return quit; +} + +static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer) +{ + Atom clipboard = QXlibStatic::atom(QXlibStatic::CLIPBOARD); + return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY + || e->xselectionrequest.selection == clipboard)) + || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY + || e->xselectionclear.selection == clipboard))); +} + +bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int timeout) +{ + QElapsedTimer timer; + timer.start(); + do { + if (XCheckTypedWindowEvent(mDisplay,win,type,event)) + return true; + + // process other clipboard events, since someone is probably requesting data from us + XEvent e; + if (XCheckIfEvent(mDisplay, &e, checkForClipboardEvents, 0)) + handleEvent(&e); + + XFlush(mDisplay); + + // sleep 50 ms, so we don't use up CPU cycles all the time. + struct timeval usleep_tv; + usleep_tv.tv_sec = 0; + usleep_tv.tv_usec = 50000; + select(0, 0, 0, 0, &usleep_tv); + } while (timer.elapsed() < timeout); + return false; +} + +void QXlibScreen::eventDispatcher() +{ + ulong marker = XNextRequest(mDisplay); + // int i = 0; + while (XPending(mDisplay)) { + XEvent event; + XNextEvent(mDisplay, &event); + /* done = */ + handleEvent(&event); + + if (event.xany.serial >= marker) { + #ifdef MYX11_DEBUG + qDebug() << "potential livelock averted"; + #endif + #if 0 + if (XEventsQueued(mDisplay, QueuedAfterFlush)) { + qDebug() << " with events queued"; + QTimer::singleShot(0, this, SLOT(eventDispatcher())); + } + #endif + break; + } + } +} + +QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) +{ + if (w == 0 || h ==0) + return QImage(); + + //WinId 0 means the desktop widget + if (!window) + window = rootWindow(); + + XWindowAttributes window_attr; + if (!XGetWindowAttributes(mDisplay, window, &window_attr)) + return QImage(); + + if (w < 0) + w = window_attr.width - x; + if (h < 0) + h = window_attr.height - y; + + // Ideally, we should also limit ourselves to the screen area, but the Qt docs say + // that it's "unsafe" to go outside the screen, so we can ignore that problem. + + //We're definitely not optimizing for speed... + XImage *xi = XGetImage(mDisplay, window, x, y, w, h, AllPlanes, ZPixmap); + + if (!xi) + return QImage(); + + //taking a copy to make sure we have ownership -- not fast + QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); + + XDestroyImage(xi); + + return result; +} + +QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) +{ + QPlatformScreen *platformScreen = platformScreenForWidget(widget); + return static_cast<QXlibScreen *>(platformScreen); +} + +Display * QXlibScreen::display() const +{ + return mDisplay; +} + +int QXlibScreen::xScreenNumber() const +{ + return mScreen; +} + +QXlibKeyboard * QXlibScreen::keyboard() const +{ + return mKeyboard; +} + +void QXlibScreen::handleSelectionRequest(XEvent *event) +{ + QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); + QXlibClipboard *clipboard = static_cast<QXlibClipboard *>(integration->clipboard()); + clipboard->handleSelectionRequest(event); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibscreen.h b/src/plugins/platforms/xlib/qxlibscreen.h new file mode 100644 index 0000000..7e59a59 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibscreen.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITESCREEN_H +#define QTESTLITESCREEN_H + +#include <QtGui/QPlatformScreen> +#include "qtestliteintegration.h" + +QT_BEGIN_NAMESPACE + +class QXlibCursor; +class QXlibKeyboard; + +class QXlibScreen : public QPlatformScreen +{ + Q_OBJECT +public: + QXlibScreen(); + + ~QXlibScreen(); + + QString displayName() const { return mDisplayName; } + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + + Window rootWindow() { return RootWindow(mDisplay, mScreen); } + unsigned long blackPixel() { return BlackPixel(mDisplay, mScreen); } + unsigned long whitePixel() { return WhitePixel(mDisplay, mScreen); } + + bool handleEvent(XEvent *xe); + bool waitForClipboardEvent(Window win, int type, XEvent *event, int timeout); + + QImage grabWindow(Window window, int x, int y, int w, int h); + + static QXlibScreen *testLiteScreenForWidget(QWidget *widget); + + Display *display() const; + int xScreenNumber() const; + + QXlibKeyboard *keyboard() const; + +public slots: + void eventDispatcher(); + +private: + + void handleSelectionRequest(XEvent *event); + QString mDisplayName; + QRect mGeometry; + QSize mPhysicalSize; + int mDepth; + QImage::Format mFormat; + QXlibCursor *mCursor; + QXlibKeyboard *mKeyboard; + + Display * mDisplay; + int mScreen; +}; + +QT_END_NAMESPACE + +#endif // QTESTLITESCREEN_H diff --git a/src/plugins/platforms/xlib/qxlibstatic.cpp b/src/plugins/platforms/xlib/qxlibstatic.cpp new file mode 100644 index 0000000..837636c --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibstatic.cpp @@ -0,0 +1,511 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitestaticinfo.h" +#include "qtestlitescreen.h" + +#include <qplatformdefs.h> + +#include <QtGui/private/qapplication_p.h> +#include <QtCore/QBuffer> +#include <QtCore/QLibrary> + +#include <QDebug> + +#ifndef QT_NO_XFIXES +#include <X11/extensions/Xfixes.h> +#endif // QT_NO_XFIXES + +static const char * x11_atomnames = { + // window-manager <-> client protocols + "WM_PROTOCOLS\0" + "WM_DELETE_WINDOW\0" + "WM_TAKE_FOCUS\0" + "_NET_WM_PING\0" + "_NET_WM_CONTEXT_HELP\0" + "_NET_WM_SYNC_REQUEST\0" + "_NET_WM_SYNC_REQUEST_COUNTER\0" + + // ICCCM window state + "WM_STATE\0" + "WM_CHANGE_STATE\0" + + // Session management + "WM_CLIENT_LEADER\0" + "WM_WINDOW_ROLE\0" + "SM_CLIENT_ID\0" + + // Clipboard + "CLIPBOARD\0" + "INCR\0" + "TARGETS\0" + "MULTIPLE\0" + "TIMESTAMP\0" + "SAVE_TARGETS\0" + "CLIP_TEMPORARY\0" + "_QT_SELECTION\0" + "_QT_CLIPBOARD_SENTINEL\0" + "_QT_SELECTION_SENTINEL\0" + "CLIPBOARD_MANAGER\0" + + "RESOURCE_MANAGER\0" + + "_XSETROOT_ID\0" + + "_QT_SCROLL_DONE\0" + "_QT_INPUT_ENCODING\0" + + "_MOTIF_WM_HINTS\0" + + "DTWM_IS_RUNNING\0" + "ENLIGHTENMENT_DESKTOP\0" + "_DT_SAVE_MODE\0" + "_SGI_DESKS_MANAGER\0" + + // EWMH (aka NETWM) + "_NET_SUPPORTED\0" + "_NET_VIRTUAL_ROOTS\0" + "_NET_WORKAREA\0" + + "_NET_MOVERESIZE_WINDOW\0" + "_NET_WM_MOVERESIZE\0" + + "_NET_WM_NAME\0" + "_NET_WM_ICON_NAME\0" + "_NET_WM_ICON\0" + + "_NET_WM_PID\0" + + "_NET_WM_WINDOW_OPACITY\0" + + "_NET_WM_STATE\0" + "_NET_WM_STATE_ABOVE\0" + "_NET_WM_STATE_BELOW\0" + "_NET_WM_STATE_FULLSCREEN\0" + "_NET_WM_STATE_MAXIMIZED_HORZ\0" + "_NET_WM_STATE_MAXIMIZED_VERT\0" + "_NET_WM_STATE_MODAL\0" + "_NET_WM_STATE_STAYS_ON_TOP\0" + "_NET_WM_STATE_DEMANDS_ATTENTION\0" + + "_NET_WM_USER_TIME\0" + "_NET_WM_USER_TIME_WINDOW\0" + "_NET_WM_FULL_PLACEMENT\0" + + "_NET_WM_WINDOW_TYPE\0" + "_NET_WM_WINDOW_TYPE_DESKTOP\0" + "_NET_WM_WINDOW_TYPE_DOCK\0" + "_NET_WM_WINDOW_TYPE_TOOLBAR\0" + "_NET_WM_WINDOW_TYPE_MENU\0" + "_NET_WM_WINDOW_TYPE_UTILITY\0" + "_NET_WM_WINDOW_TYPE_SPLASH\0" + "_NET_WM_WINDOW_TYPE_DIALOG\0" + "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0" + "_NET_WM_WINDOW_TYPE_POPUP_MENU\0" + "_NET_WM_WINDOW_TYPE_TOOLTIP\0" + "_NET_WM_WINDOW_TYPE_NOTIFICATION\0" + "_NET_WM_WINDOW_TYPE_COMBO\0" + "_NET_WM_WINDOW_TYPE_DND\0" + "_NET_WM_WINDOW_TYPE_NORMAL\0" + "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0" + + "_KDE_NET_WM_FRAME_STRUT\0" + + "_NET_STARTUP_INFO\0" + "_NET_STARTUP_INFO_BEGIN\0" + + "_NET_SUPPORTING_WM_CHECK\0" + + "_NET_WM_CM_S0\0" + + "_NET_SYSTEM_TRAY_VISUAL\0" + + "_NET_ACTIVE_WINDOW\0" + + // Property formats + "COMPOUND_TEXT\0" + "TEXT\0" + "UTF8_STRING\0" + + // xdnd + "XdndEnter\0" + "XdndPosition\0" + "XdndStatus\0" + "XdndLeave\0" + "XdndDrop\0" + "XdndFinished\0" + "XdndTypeList\0" + "XdndActionList\0" + + "XdndSelection\0" + + "XdndAware\0" + "XdndProxy\0" + + "XdndActionCopy\0" + "XdndActionLink\0" + "XdndActionMove\0" + "XdndActionPrivate\0" + + // Motif DND + "_MOTIF_DRAG_AND_DROP_MESSAGE\0" + "_MOTIF_DRAG_INITIATOR_INFO\0" + "_MOTIF_DRAG_RECEIVER_INFO\0" + "_MOTIF_DRAG_WINDOW\0" + "_MOTIF_DRAG_TARGETS\0" + + "XmTRANSFER_SUCCESS\0" + "XmTRANSFER_FAILURE\0" + + // Xkb + "_XKB_RULES_NAMES\0" + + // XEMBED + "_XEMBED\0" + "_XEMBED_INFO\0" + + // Wacom old. (before version 0.10) + "Wacom Stylus\0" + "Wacom Cursor\0" + "Wacom Eraser\0" + + // Tablet + "STYLUS\0" + "ERASER\0" +}; + +/*! + \internal + Try to resolve a \a symbol from \a library with the version specified + by \a vernum. + + Note that, in the case of the Xfixes library, \a vernum is not the same as + \c XFIXES_MAJOR - it is a part of soname and may differ from the Xfixes + version. +*/ +static void* qt_load_library_runtime(const char *library, int vernum, + int highestVernum, const char *symbol) +{ + QList<int> versions; + // we try to load in the following order: + // explicit version -> the default one -> (from the highest (highestVernum) to the lowest (vernum) ) + if (vernum != -1) + versions << vernum; + versions << -1; + if (vernum != -1) { + for(int i = highestVernum; i > vernum; --i) + versions << i; + } + Q_FOREACH(int version, versions) { + QLatin1String libName(library); + QLibrary xfixesLib(libName, version); + void *ptr = xfixesLib.resolve(symbol); + if (ptr) + return ptr; + } + return 0; +} + +# define XFIXES_LOAD_RUNTIME(vernum, symbol, symbol_type) \ + (symbol_type)qt_load_library_runtime("libXfixes", vernum, 4, #symbol); +# define XFIXES_LOAD_V1(symbol) \ + XFIXES_LOAD_RUNTIME(1, symbol, Ptr##symbol) +# define XFIXES_LOAD_V2(symbol) \ + XFIXES_LOAD_RUNTIME(2, symbol, Ptr##symbol) + + +class QTestLiteStaticInfoPrivate +{ +public: + QTestLiteStaticInfoPrivate() + : use_xfixes(false) + , xfixes_major(0) + , xfixes_eventbase(0) + , xfixes_errorbase(0) + { + QXlibScreen *screen = qobject_cast<QXlibScreen *> (QApplicationPrivate::platformIntegration()->screens().at(0)); + Q_ASSERT(screen); + + initializeAllAtoms(screen); + initializeSupportedAtoms(screen); + + resolveXFixes(screen); + } + + bool isSupportedByWM(Atom atom) + { + if (!m_supportedAtoms) + return false; + + bool supported = false; + int i = 0; + while (m_supportedAtoms[i] != 0) { + if (m_supportedAtoms[i++] == atom) { + supported = true; + break; + } + } + + return supported; + } + + Atom atom(QXlibStatic::X11Atom atom) + { + return m_allAtoms[atom]; + } + + bool useXFixes() const { return use_xfixes; } + + int xFixesEventBase() const {return xfixes_eventbase; } + + PtrXFixesSelectSelectionInput xFixesSelectSelectionInput() const + { + return ptrXFixesSelectSelectionInput; + } + + QImage qimageFromXImage(XImage *xi) + { + QImage::Format format = QImage::Format_ARGB32_Premultiplied; + if (xi->depth == 24) + format = QImage::Format_RGB32; + else if (xi->depth == 16) + format = QImage::Format_RGB16; + + QImage image = QImage((uchar *)xi->data, xi->width, xi->height, xi->bytes_per_line, format).copy(); + + // we may have to swap the byte order + if ((QSysInfo::ByteOrder == QSysInfo::LittleEndian && xi->byte_order == MSBFirst) + || (QSysInfo::ByteOrder == QSysInfo::BigEndian && xi->byte_order == LSBFirst)) + { + for (int i=0; i < image.height(); i++) { + if (xi->depth == 16) { + ushort *p = (ushort*)image.scanLine(i); + ushort *end = p + image.width(); + while (p < end) { + *p = ((*p << 8) & 0xff00) | ((*p >> 8) & 0x00ff); + p++; + } + } else { + uint *p = (uint*)image.scanLine(i); + uint *end = p + image.width(); + while (p < end) { + *p = ((*p << 24) & 0xff000000) | ((*p << 8) & 0x00ff0000) + | ((*p >> 8) & 0x0000ff00) | ((*p >> 24) & 0x000000ff); + p++; + } + } + } + } + + // fix-up alpha channel + if (format == QImage::Format_RGB32) { + QRgb *p = (QRgb *)image.bits(); + for (int y = 0; y < xi->height; ++y) { + for (int x = 0; x < xi->width; ++x) + p[x] |= 0xff000000; + p += xi->bytes_per_line / 4; + } + } + + return image; + } + + +private: + + void initializeAllAtoms(QXlibScreen *screen) { + const char *names[QXlibStatic::NAtoms]; + const char *ptr = x11_atomnames; + + int i = 0; + while (*ptr) { + names[i++] = ptr; + while (*ptr) + ++ptr; + ++ptr; + } + + Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); + + QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); + settings_atom_name += XDisplayName(qPrintable(screen->displayName())); + names[i++] = settings_atom_name; + + Q_ASSERT(i == QXlibStatic::NAtoms); + #if 0//defined(XlibSpecificationRelease) && (XlibSpecificationRelease >= 6) + XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); + #else + for (i = 0; i < QXlibStatic::NAtoms; ++i) + m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); + #endif + } + + void initializeSupportedAtoms(QXlibScreen *screen) + { + Atom type; + int format; + long offset = 0; + unsigned long nitems, after; + unsigned char *data = 0; + + int e = XGetWindowProperty(screen->display(), screen->rootWindow(), + this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, + False, XA_ATOM, &type, &format, &nitems, &after, &data); + if (data) + XFree(data); + + if (e == Success && type == XA_ATOM && format == 32) { + QBuffer ts; + ts.open(QIODevice::WriteOnly); + + while (after > 0) { + XGetWindowProperty(screen->display(), screen->rootWindow(), + this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, + False, XA_ATOM, &type, &format, &nitems, &after, &data); + + if (type == XA_ATOM && format == 32) { + ts.write(reinterpret_cast<char *>(data), nitems * sizeof(long)); + offset += nitems; + } else + after = 0; + if (data) + XFree(data); + } + + // compute nitems + QByteArray buffer(ts.buffer()); + nitems = buffer.size() / sizeof(Atom); + m_supportedAtoms = new Atom[nitems + 1]; + Atom *a = (Atom *) buffer.data(); + uint i; + for (i = 0; i < nitems; i++) + m_supportedAtoms[i] = a[i]; + m_supportedAtoms[nitems] = 0; + + } + } + + void resolveXFixes(QXlibScreen *screen) + { +#ifndef QT_NO_XFIXES + // See if Xfixes is supported on the connected display + if (XQueryExtension(screen->display(), "XFIXES", &xfixes_major, + &xfixes_eventbase, &xfixes_errorbase)) { + ptrXFixesQueryExtension = XFIXES_LOAD_V1(XFixesQueryExtension); + ptrXFixesQueryVersion = XFIXES_LOAD_V1(XFixesQueryVersion); + ptrXFixesSetCursorName = XFIXES_LOAD_V2(XFixesSetCursorName); + ptrXFixesSelectSelectionInput = XFIXES_LOAD_V2(XFixesSelectSelectionInput); + + if(ptrXFixesQueryExtension && ptrXFixesQueryVersion + && ptrXFixesQueryExtension(screen->display(), &xfixes_eventbase, + &xfixes_errorbase)) { + // Xfixes is supported. + // Note: the XFixes protocol version is negotiated using QueryVersion. + // We supply the highest version we support, the X server replies with + // the highest version it supports, but no higher than the version we + // asked for. The version sent back is the protocol version the X server + // will use to talk us. If this call is removed, the behavior of the + // X server when it receives an XFixes request is undefined. + int major = 3; + int minor = 0; + ptrXFixesQueryVersion(screen->display(), &major, &minor); + use_xfixes = (major >= 1); + xfixes_major = major; + } + } +#endif // QT_NO_XFIXES + + } + + Atom *m_supportedAtoms; + Atom m_allAtoms[QXlibStatic::NAtoms]; + +#ifndef QT_NO_XFIXES + PtrXFixesQueryExtension ptrXFixesQueryExtension; + PtrXFixesQueryVersion ptrXFixesQueryVersion; + PtrXFixesSetCursorName ptrXFixesSetCursorName; + PtrXFixesSelectSelectionInput ptrXFixesSelectSelectionInput; +#endif + + bool use_xfixes; + int xfixes_major; + int xfixes_eventbase; + int xfixes_errorbase; + +}; +Q_GLOBAL_STATIC(QTestLiteStaticInfoPrivate, qTestLiteStaticInfoPrivate); + + +Atom QXlibStatic::atom(QXlibStatic::X11Atom atom) +{ + return qTestLiteStaticInfoPrivate()->atom(atom); +} + +bool QXlibStatic::isSupportedByWM(Atom atom) +{ + return qTestLiteStaticInfoPrivate()->isSupportedByWM(atom); +} + +bool QXlibStatic::useXFixes() +{ + return qTestLiteStaticInfoPrivate()->useXFixes(); +} + +int QXlibStatic::xFixesEventBase() +{ + return qTestLiteStaticInfoPrivate()->xFixesEventBase(); +} + +#ifndef QT_NO_XFIXES +PtrXFixesSelectSelectionInput QXlibStatic::xFixesSelectSelectionInput() +{ + qDebug() << qTestLiteStaticInfoPrivate()->useXFixes(); + if (!qTestLiteStaticInfoPrivate()->useXFixes()) + return 0; + + return qTestLiteStaticInfoPrivate()->xFixesSelectSelectionInput(); +} + +QImage QXlibStatic::qimageFromXImage(XImage *xi) +{ + return qTestLiteStaticInfoPrivate()->qimageFromXImage(xi); +} +#endif //QT_NO_XFIXES diff --git a/src/plugins/platforms/xlib/qxlibstatic.h b/src/plugins/platforms/xlib/qxlibstatic.h new file mode 100644 index 0000000..8473ee9 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibstatic.h @@ -0,0 +1,413 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITESTATICINFO_H +#define QTESTLITESTATICINFO_H + +#include <QtCore/QTextStream> +#include <QtCore/QDataStream> +#include <QtCore/QMetaType> +#include <QtCore/QVariant> + +#if defined(_XLIB_H_) // crude hack, but... +#error "cannot include <X11/Xlib.h> before this file" +#endif +#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback +#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback +#define XSetIMValues qt_XSetIMValues +#include <X11/Xlib.h> +#undef XRegisterIMInstantiateCallback +#undef XUnregisterIMInstantiateCallback +#undef XSetIMValues + +#include <X11/Xutil.h> +#include <X11/Xos.h> +#ifdef index +# undef index +#endif +#ifdef rindex +# undef rindex +#endif +#ifdef Q_OS_VXWORS +# ifdef open +# undef open +# endif +# ifdef getpid +# undef getpid +# endif +#endif // Q_OS_VXWORKS +#include <X11/Xatom.h> + +//#define QT_NO_SHAPE +#ifdef QT_NO_SHAPE +# define XShapeCombineRegion(a,b,c,d,e,f,g) +# define XShapeCombineMask(a,b,c,d,e,f,g) +#else +# include <X11/extensions/shape.h> +#endif // QT_NO_SHAPE + + +#if !defined (QT_NO_TABLET) +# include <X11/extensions/XInput.h> +#if defined (Q_OS_IRIX) +# include <X11/extensions/SGIMisc.h> +# include <wacom.h> +#endif +#endif // QT_NO_TABLET + + +// #define QT_NO_XINERAMA +#ifndef QT_NO_XINERAMA +// XFree86 does not C++ify Xinerama (at least up to XFree86 4.0.3). +extern "C" { +# include <X11/extensions/Xinerama.h> +} +#endif // QT_NO_XINERAMA + +// #define QT_NO_XRANDR +#ifndef QT_NO_XRANDR +# include <X11/extensions/Xrandr.h> +#endif // QT_NO_XRANDR + +// #define QT_NO_XRENDER +#ifndef QT_NO_XRENDER +# include <X11/extensions/Xrender.h> +#endif // QT_NO_XRENDER + +#ifndef QT_NO_XSYNC +extern "C" { +# include "X11/extensions/sync.h" +} +#endif + +// #define QT_NO_XKB +#ifndef QT_NO_XKB +# include <X11/XKBlib.h> +#endif // QT_NO_XKB + + +#if !defined(XlibSpecificationRelease) +# define X11R4 +typedef char *XPointer; +#else +# undef X11R4 +#endif + +#ifndef QT_NO_XFIXES +typedef Bool (*PtrXFixesQueryExtension)(Display *, int *, int *); +typedef Status (*PtrXFixesQueryVersion)(Display *, int *, int *); +typedef void (*PtrXFixesSetCursorName)(Display *dpy, Cursor cursor, const char *name); +typedef void (*PtrXFixesSelectSelectionInput)(Display *dpy, Window win, Atom selection, unsigned long eventMask); +#endif // QT_NO_XFIXES + +#ifndef QT_NO_XCURSOR +#include <X11/Xcursor/Xcursor.h> +typedef Cursor (*PtrXcursorLibraryLoadCursor)(Display *, const char *); +#endif // QT_NO_XCURSOR + +#ifndef QT_NO_XINERAMA +typedef Bool (*PtrXineramaQueryExtension)(Display *dpy, int *event_base, int *error_base); +typedef Bool (*PtrXineramaIsActive)(Display *dpy); +typedef XineramaScreenInfo *(*PtrXineramaQueryScreens)(Display *dpy, int *number); +#endif // QT_NO_XINERAMA + +#ifndef QT_NO_XRANDR +typedef void (*PtrXRRSelectInput)(Display *, Window, int); +typedef int (*PtrXRRUpdateConfiguration)(XEvent *); +typedef int (*PtrXRRRootToScreen)(Display *, Window); +typedef Bool (*PtrXRRQueryExtension)(Display *, int *, int *); +#endif // QT_NO_XRANDR + +#ifndef QT_NO_XINPUT +typedef int (*PtrXCloseDevice)(Display *, XDevice *); +typedef XDeviceInfo* (*PtrXListInputDevices)(Display *, int *); +typedef XDevice* (*PtrXOpenDevice)(Display *, XID); +typedef void (*PtrXFreeDeviceList)(XDeviceInfo *); +typedef int (*PtrXSelectExtensionEvent)(Display *, Window, XEventClass *, int); +#endif // QT_NO_XINPUT + +/* + * Solaris patch 108652-47 and higher fixes crases in + * XRegisterIMInstantiateCallback, but the function doesn't seem to + * work. + * + * Instead, we disabled R6 input, and open the input method + * immediately at application start. + */ + +//######### XFree86 has wrong declarations for XRegisterIMInstantiateCallback +//######### and XUnregisterIMInstantiateCallback in at least version 3.3.2. +//######### Many old X11R6 header files lack XSetIMValues. +//######### Therefore, we have to declare these functions ourselves. + +extern "C" Bool XRegisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +extern "C" Bool XUnregisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +#ifndef X11R4 +# include <X11/Xlocale.h> +#endif // X11R4 + + +#ifndef QT_NO_MITSHM +# include <X11/extensions/XShm.h> +#endif // QT_NO_MITSHM + +// rename a couple of X defines to get rid of name clashes +// resolve the conflict between X11's FocusIn and QEvent::FocusIn +enum { + XFocusOut = FocusOut, + XFocusIn = FocusIn, + XKeyPress = KeyPress, + XKeyRelease = KeyRelease, + XNone = None, + XRevertToParent = RevertToParent, + XGrayScale = GrayScale, + XCursorShape = CursorShape +}; +#undef FocusOut +#undef FocusIn +#undef KeyPress +#undef KeyRelease +#undef None +#undef RevertToParent +#undef GrayScale +#undef CursorShape + +#ifdef FontChange +#undef FontChange +#endif + + +class QXlibStatic +{ +public: + enum X11Atom { + // window-manager <-> client protocols + WM_PROTOCOLS, + WM_DELETE_WINDOW, + WM_TAKE_FOCUS, + _NET_WM_PING, + _NET_WM_CONTEXT_HELP, + _NET_WM_SYNC_REQUEST, + _NET_WM_SYNC_REQUEST_COUNTER, + + // ICCCM window state + WM_STATE, + WM_CHANGE_STATE, + + // Session management + WM_CLIENT_LEADER, + WM_WINDOW_ROLE, + SM_CLIENT_ID, + + // Clipboard + CLIPBOARD, + INCR, + TARGETS, + MULTIPLE, + TIMESTAMP, + SAVE_TARGETS, + CLIP_TEMPORARY, + _QT_SELECTION, + _QT_CLIPBOARD_SENTINEL, + _QT_SELECTION_SENTINEL, + CLIPBOARD_MANAGER, + + RESOURCE_MANAGER, + + _XSETROOT_ID, + + _QT_SCROLL_DONE, + _QT_INPUT_ENCODING, + + _MOTIF_WM_HINTS, + + DTWM_IS_RUNNING, + ENLIGHTENMENT_DESKTOP, + _DT_SAVE_MODE, + _SGI_DESKS_MANAGER, + + // EWMH (aka NETWM) + _NET_SUPPORTED, + _NET_VIRTUAL_ROOTS, + _NET_WORKAREA, + + _NET_MOVERESIZE_WINDOW, + _NET_WM_MOVERESIZE, + + _NET_WM_NAME, + _NET_WM_ICON_NAME, + _NET_WM_ICON, + + _NET_WM_PID, + + _NET_WM_WINDOW_OPACITY, + + _NET_WM_STATE, + _NET_WM_STATE_ABOVE, + _NET_WM_STATE_BELOW, + _NET_WM_STATE_FULLSCREEN, + _NET_WM_STATE_MAXIMIZED_HORZ, + _NET_WM_STATE_MAXIMIZED_VERT, + _NET_WM_STATE_MODAL, + _NET_WM_STATE_STAYS_ON_TOP, + _NET_WM_STATE_DEMANDS_ATTENTION, + + _NET_WM_USER_TIME, + _NET_WM_USER_TIME_WINDOW, + _NET_WM_FULL_PLACEMENT, + + _NET_WM_WINDOW_TYPE, + _NET_WM_WINDOW_TYPE_DESKTOP, + _NET_WM_WINDOW_TYPE_DOCK, + _NET_WM_WINDOW_TYPE_TOOLBAR, + _NET_WM_WINDOW_TYPE_MENU, + _NET_WM_WINDOW_TYPE_UTILITY, + _NET_WM_WINDOW_TYPE_SPLASH, + _NET_WM_WINDOW_TYPE_DIALOG, + _NET_WM_WINDOW_TYPE_DROPDOWN_MENU, + _NET_WM_WINDOW_TYPE_POPUP_MENU, + _NET_WM_WINDOW_TYPE_TOOLTIP, + _NET_WM_WINDOW_TYPE_NOTIFICATION, + _NET_WM_WINDOW_TYPE_COMBO, + _NET_WM_WINDOW_TYPE_DND, + _NET_WM_WINDOW_TYPE_NORMAL, + _KDE_NET_WM_WINDOW_TYPE_OVERRIDE, + + _KDE_NET_WM_FRAME_STRUT, + + _NET_STARTUP_INFO, + _NET_STARTUP_INFO_BEGIN, + + _NET_SUPPORTING_WM_CHECK, + + _NET_WM_CM_S0, + + _NET_SYSTEM_TRAY_VISUAL, + + _NET_ACTIVE_WINDOW, + + // Property formats + COMPOUND_TEXT, + TEXT, + UTF8_STRING, + + // Xdnd + XdndEnter, + XdndPosition, + XdndStatus, + XdndLeave, + XdndDrop, + XdndFinished, + XdndTypelist, + XdndActionList, + + XdndSelection, + + XdndAware, + XdndProxy, + + XdndActionCopy, + XdndActionLink, + XdndActionMove, + XdndActionPrivate, + + // Motif DND + _MOTIF_DRAG_AND_DROP_MESSAGE, + _MOTIF_DRAG_INITIATOR_INFO, + _MOTIF_DRAG_RECEIVER_INFO, + _MOTIF_DRAG_WINDOW, + _MOTIF_DRAG_TARGETS, + + XmTRANSFER_SUCCESS, + XmTRANSFER_FAILURE, + + // Xkb + _XKB_RULES_NAMES, + + // XEMBED + _XEMBED, + _XEMBED_INFO, + + XWacomStylus, + XWacomCursor, + XWacomEraser, + + XTabletStylus, + XTabletEraser, + + NPredefinedAtoms, + + _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, + NAtoms + }; + + static Atom atom(X11Atom atom); + static bool isSupportedByWM(Atom atom); + + static bool useXFixes(); + static int xFixesEventBase(); + + #ifndef QT_NO_XFIXES + static PtrXFixesSelectSelectionInput xFixesSelectSelectionInput(); + #endif //QT_NO_XFIXES + + static QImage qimageFromXImage(XImage *xi); + + +}; + +#endif // QTESTLITESTATICINFO_H diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp new file mode 100644 index 0000000..0f11a81 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibwindow.cpp @@ -0,0 +1,735 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitewindow.h" + +#include "qtestliteintegration.h" +#include "qtestlitescreen.h" +#include "qtestlitekeyboard.h" +#include "qtestlitestaticinfo.h" + +#include <QtGui/QWindowSystemInterface> +#include <QSocketNotifier> +#include <QApplication> +#include <QDebug> + +#include <QtGui/private/qwindowsurface_p.h> +#include <QtGui/private/qapplication_p.h> + +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) +#include "qglxintegration.h" +#else +#include "../eglconvenience/qeglconvenience.h" +#include "../eglconvenience/qeglplatformcontext.h" +#include "qtestliteeglintegration.h" +#endif //QT_OPENGL_ES_2 +#endif //QT_NO_OPENGL + +//#define MYX11_DEBUG + +QT_BEGIN_NAMESPACE + +QXlibWindow::QXlibWindow(QWidget *window) + : QPlatformWindow(window) + , mGLContext(0) + , mScreen(QXlibScreen::testLiteScreenForWidget(window)) +{ + int x = window->x(); + int y = window->y(); + int w = window->width(); + int h = window->height(); + + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + XVisualInfo *visualInfo = QGLXContext::findVisualInfo(mScreen,window->platformWindowFormat()); +#else + QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); + + EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); + EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); + VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); + + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = id; + + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); +#endif //!defined(QT_OPENGL_ES_2) + if (visualInfo) { + Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + } else { + qFatal("no window!"); + } +#endif //!defined(QT_NO_OPENGL) + } else { + x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), + x, y, w, h, 0 /*border_width*/, + mScreen->blackPixel(), mScreen->whitePixel()); + } + +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; +#endif + + XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); + + XSelectInput(mScreen->display(), x_window, + ExposureMask | KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | FocusChangeMask | + PointerMotionMask | ButtonPressMask | ButtonReleaseMask | + ButtonMotionMask | PropertyChangeMask | + StructureNotifyMask); + + gc = createGC(); + + Atom protocols[5]; + int n = 0; + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_DELETE_WINDOW); // support del window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::WM_TAKE_FOCUS); // support take focus window protocol + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_PING); // support _NET_WM_PING protocol +#ifndef QT_NO_XSYNC + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_SYNC_REQUEST); // support _NET_WM_SYNC_REQUEST protocol +#endif // QT_NO_XSYNC + if (window->windowFlags() & Qt::WindowContextHelpButtonHint) + protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); + XSetWMProtocols(mScreen->display(), x_window, protocols, n); +} + + + +QXlibWindow::~QXlibWindow() +{ +#ifdef MYX11_DEBUG + qDebug() << "~QTestLiteWindow" << hex << x_window; +#endif + delete mGLContext; + XFreeGC(mScreen->display(), gc); + XDestroyWindow(mScreen->display(), x_window); +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Mouse event stuff +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & Button1Mask) + ret |= Qt::LeftButton; + if (s & Button2Mask) + ret |= Qt::MidButton; + if (s & Button3Mask) + ret |= Qt::RightButton; + return ret; +} + + + +void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) +{ + static QPoint mousePoint; + + Qt::MouseButton button = Qt::NoButton; + Qt::MouseButtons buttons = translateMouseButtons(e->state); + Qt::KeyboardModifiers modifiers = mScreen->keyboard()->translateModifiers(e->state); + if (type != QEvent::MouseMove) { + switch (e->button) { + case Button1: button = Qt::LeftButton; break; + case Button2: button = Qt::MidButton; break; + case Button3: button = Qt::RightButton; break; + case Button4: + case Button5: + case 6: + case 7: { + //mouse wheel + if (type == QEvent::MouseButtonPress) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); + bool hor = (((e->button == Button4 || e->button == Button5) + && (modifiers & Qt::AltModifier)) + || (e->button == 6 || e->button == 7)); + QWindowSystemInterface::handleWheelEvent(widget(), e->time, + QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + delta, hor ? Qt::Horizontal : Qt::Vertical); + } + return; + } + default: break; + } + } + + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + buttons); + + mousePoint = QPoint(e->x_root, e->y_root); +} + +void QXlibWindow::handleCloseEvent() +{ + QWindowSystemInterface::handleCloseEvent(widget()); +} + + +void QXlibWindow::handleEnterEvent() +{ + QWindowSystemInterface::handleEnterEvent(widget()); +} + +void QXlibWindow::handleLeaveEvent() +{ + QWindowSystemInterface::handleLeaveEvent(widget()); +} + +void QXlibWindow::handleFocusInEvent() +{ + QWindowSystemInterface::handleWindowActivated(widget()); +} + +void QXlibWindow::handleFocusOutEvent() +{ + QWindowSystemInterface::handleWindowActivated(0); +} + + + +void QXlibWindow::setGeometry(const QRect &rect) +{ + XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); + QPlatformWindow::setGeometry(rect); +} + + +Qt::WindowFlags QXlibWindow::windowFlags() const +{ + return mWindowFlags; +} + +WId QXlibWindow::winId() const +{ + return x_window; +} + +void QXlibWindow::setParent(const QPlatformWindow *window) +{ + QPoint topLeft = geometry().topLeft(); + XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); +} + +void QXlibWindow::raise() +{ + XRaiseWindow(mScreen->display(), x_window); +} + +void QXlibWindow::lower() +{ + XLowerWindow(mScreen->display(), x_window); +} + +void QXlibWindow::setWindowTitle(const QString &title) +{ + QByteArray ba = title.toLatin1(); //We're not making a general solution here... + XTextProperty windowName; + windowName.value = (unsigned char *)ba.constData(); + windowName.encoding = XA_STRING; + windowName.format = 8; + windowName.nitems = ba.length(); + + XSetWMName(mScreen->display(), x_window, &windowName); +} + +GC QXlibWindow::createGC() +{ + GC gc; + + gc = XCreateGC(mScreen->display(), x_window, 0, 0); + if (gc < 0) { + qWarning("QTestLiteWindow::createGC() could not create GC"); + } + return gc; +} + +void QXlibWindow::paintEvent() +{ +#ifdef MYX11_DEBUG +// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; +#endif + + if (QWindowSurface *surface = widget()->windowSurface()) + surface->flush(widget(), widget()->geometry(), QPoint()); +} + +void QXlibWindow::requestActivateWindow() +{ + XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); +} + +void QXlibWindow::resizeEvent(XConfigureEvent *e) +{ + int xpos = geometry().x(); + int ypos = geometry().y(); + if ((e->width != geometry().width() || e->height != geometry().height()) && e->x == 0 && e->y == 0) { + //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; + } else { + //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; + xpos = e->x; + ypos = e->y; + } +#ifdef MYX11_DEBUG + qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; +#endif + + QRect newRect(xpos, ypos, e->width, e->height); + QWindowSystemInterface::handleGeometryChange(widget(), newRect); +} + +void QXlibWindow::mousePressEvent(XButtonEvent *e) +{ + static long prevTime = 0; + static Window prevWindow; + static int prevX = -999; + static int prevY = -999; + + QEvent::Type type = QEvent::MouseButtonPress; + + if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() + && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = e->time; + } + prevWindow = e->window; + prevX = e->x; + prevY = e->y; + + handleMouseEvent(type, e); +} + +QXlibMWMHints QXlibWindow::getMWMHints() const +{ + QXlibMWMHints mwmhints; + + Atom type; + int format; + ulong nitems, bytesLeft; + uchar *data = 0; + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); + if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, + atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, + &data) == Success) + && (type == atomForMotifWmHints + && format == 32 + && nitems >= 5)) { + mwmhints = *(reinterpret_cast<QXlibMWMHints *>(data)); + } else { + mwmhints.flags = 0L; + mwmhints.functions = MWM_FUNC_ALL; + mwmhints.decorations = MWM_DECOR_ALL; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + } + + if (data) + XFree(data); + + return mwmhints; +} + +void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) +{ + Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); + if (mwmhints.flags != 0l) { + XChangeProperty(mScreen->display(), x_window, + atomForMotifWmHints, atomForMotifWmHints, 32, + PropModeReplace, (unsigned char *) &mwmhints, 5); + } else { + XDeleteProperty(mScreen->display(), x_window, atomForMotifWmHints); + } +} + +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + +QVector<Atom> QXlibWindow::getNetWmState() const +{ + QVector<Atom> returnValue; + + // Don't read anything, just get the size of the property data + Atom actualType; + int actualFormat; + ulong propertyLength; + ulong bytesLeft; + uchar *propertyData = 0; + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, + False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) == Success + && actualType == XA_ATOM && actualFormat == 32) { + returnValue.resize(bytesLeft / 4); + XFree((char*) propertyData); + + // fetch all data + if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, + returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, + &propertyLength, &bytesLeft, &propertyData) != Success) { + returnValue.clear(); + } else if (propertyLength != (ulong)returnValue.size()) { + returnValue.resize(propertyLength); + } + + // put it into netWmState + if (!returnValue.isEmpty()) { + memcpy(returnValue.data(), propertyData, returnValue.size() * sizeof(Atom)); + } + XFree((char*) propertyData); + } + + return returnValue; +} + +Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) +{ +// Q_ASSERT(flags & Qt::Window); + mWindowFlags = flags; + +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; +#endif + Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + Q_UNUSED(topLevel); + Q_UNUSED(dialog); + Q_UNUSED(desktop); + + bool tooltip = (type == Qt::ToolTip); + + XSetWindowAttributes wsa; + + QXlibMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + + ulong wsa_mask = 0; + if (type != Qt::SplashScreen) { // && customize) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } + + if (tool) { + wsa.save_under = True; + wsa_mask |= CWSaveUnder; + } + + if (flags & Qt::X11BypassWindowManagerHint) { + wsa.override_redirect = True; + wsa_mask |= CWOverrideRedirect; + } +#if 0 + if (wsa_mask && initializeWindow) { + Q_ASSERT(id); + XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); + } +#endif + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + if (widget()->windowModality() == Qt::WindowModal) { + mwmhints.input_mode = MWM_INPUT_PRIMARY_APPLICATION_MODAL; + } else if (widget()->windowModality() == Qt::ApplicationModal) { + mwmhints.input_mode = MWM_INPUT_FULL_APPLICATION_MODAL; + } + + setMWMHints(mwmhints); + + QVector<Atom> netWmState = getNetWmState(); + + if (flags & Qt::WindowStaysOnTopHint) { + if (flags & Qt::WindowStaysOnBottomHint) + qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time"; + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_ABOVE)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_STAYS_ON_TOP)); + } else if (flags & Qt::WindowStaysOnBottomHint) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_BELOW)); + } + if (widget()->isFullScreen()) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_FULLSCREEN)); + } + if (widget()->isMaximized()) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_HORZ)); + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MAXIMIZED_VERT)); + } + if (widget()->windowModality() != Qt::NonModal) { + if (!netWmState.contains(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL))) + netWmState.append(QXlibStatic::atom(QXlibStatic::_NET_WM_STATE_MODAL)); + } + + if (!netWmState.isEmpty()) { + XChangeProperty(mScreen->display(), x_window, + QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, + (unsigned char *) netWmState.data(), netWmState.size()); + } else { + XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); + } + +//##### only if initializeWindow??? + + if (popup || tooltip) { // popup widget +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; +#endif + // set EWMH window types + // setNetWmWindowTypes(); + + wsa.override_redirect = True; + wsa.save_under = True; + XChangeWindowAttributes(mScreen->display(), x_window, CWOverrideRedirect | CWSaveUnder, + &wsa); + } else { +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for non-popup"; +#endif + } + + return flags; +} + +void QXlibWindow::setVisible(bool visible) +{ +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; +#endif + if (isTransient(widget())) { + Window parentXWindow = x_window; + if (widget()->parentWidget()) { + QWidget *widgetParent = widget()->parentWidget()->window(); + if (widgetParent && widgetParent->platformWindow()) { + QXlibWindow *parentWidnow = static_cast<QXlibWindow *>(widgetParent->platformWindow()); + parentXWindow = parentWidnow->x_window; + } + } + XSetTransientForHint(mScreen->display(),x_window,parentXWindow); + } + + if (visible) { + //ensure that the window is viewed in correct position. + doSizeHints(); + XMapWindow(mScreen->display(), x_window); + } else { + XUnmapWindow(mScreen->display(), x_window); + } +} + +void QXlibWindow::setCursor(const Cursor &cursor) +{ + XDefineCursor(mScreen->display(), x_window, cursor); + XFlush(mScreen->display()); +} + +QPlatformGLContext *QXlibWindow::glContext() const +{ + if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) + return 0; + if (!mGLContext) { + QXlibWindow *that = const_cast<QXlibWindow *>(this); +#if !defined(QT_NO_OPENGL) +#if !defined(QT_OPENGL_ES_2) + that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); +#else + EGLDisplay display = eglGetDisplay(mScreen->display()); + + QPlatformWindowFormat windowFormat = correctColorBuffers(widget()->platformWindowFormat()); + + EGLConfig config = q_configFromQPlatformWindowFormat(display,windowFormat); + QVector<EGLint> eglContextAttrs; + eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + eglContextAttrs.append(2); + eglContextAttrs.append(EGL_NONE); + + EGLSurface eglSurface = eglCreateWindowSurface(display,config,(EGLNativeWindowType)x_window,0); + that->mGLContext = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); +#endif +#endif + } + return mGLContext; +} + +Window QXlibWindow::xWindow() const +{ + return x_window; +} + +GC QXlibWindow::graphicsContext() const +{ + return gc; +} + +void QXlibWindow::doSizeHints() +{ + Q_ASSERT(widget()->testAttribute(Qt::WA_WState_Created)); + XSizeHints s; + s.flags = 0; + QRect g = geometry(); + s.x = g.x(); + s.y = g.y(); + s.width = g.width(); + s.height = g.height(); + s.flags |= USPosition; + s.flags |= PPosition; + s.flags |= USSize; + s.flags |= PSize; + s.flags |= PWinGravity; + s.win_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity; + XSetWMNormalHints(mScreen->display(), x_window, &s); +} + +QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const +{ + // I have only tested this setup on a dodgy intel setup, where I didn't use standard libs, + // so this might be not what we want to do :) + if ( !(platformWindowFormat.redBufferSize() == -1 && + platformWindowFormat.greenBufferSize() == -1 && + platformWindowFormat.blueBufferSize() == -1)) + return platformWindowFormat; + + QPlatformWindowFormat windowFormat = platformWindowFormat; + if (mScreen->depth() == 16) { + windowFormat.setRedBufferSize(5); + windowFormat.setGreenBufferSize(6); + windowFormat.setBlueBufferSize(5); + } else { + windowFormat.setRedBufferSize(8); + windowFormat.setGreenBufferSize(8); + windowFormat.setBlueBufferSize(8); + } + + return windowFormat; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibwindow.h b/src/plugins/platforms/xlib/qxlibwindow.h new file mode 100644 index 0000000..ccf6867 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibwindow.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEWINDOW_H +#define QTESTLITEWINDOW_H + +#include "qtestliteintegration.h" + +#include <QPlatformWindow> +#include <QEvent> + +#include <QObject> +#include <QImage> + +struct QXlibMWMHints { + ulong flags, functions, decorations; + long input_mode; + ulong status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + +class QXlibWindow : public QPlatformWindow +{ +public: + QXlibWindow(QWidget *window); + ~QXlibWindow(); + + + void mousePressEvent(XButtonEvent*); + void handleMouseEvent(QEvent::Type, XButtonEvent *ev); + + void handleCloseEvent(); + void handleEnterEvent(); + void handleLeaveEvent(); + void handleFocusInEvent(); + void handleFocusOutEvent(); + + void resizeEvent(XConfigureEvent *configure_event); + void paintEvent(); + + void requestActivateWindow(); + + void setGeometry(const QRect &rect); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + Qt::WindowFlags windowFlags() const; + void setVisible(bool visible); + WId winId() const; + void setParent(const QPlatformWindow *window); + void raise(); + void lower(); + void setWindowTitle(const QString &title); + + void setCursor(const Cursor &cursor); + + QPlatformGLContext *glContext() const; + + Window xWindow() const; + GC graphicsContext() const; + +protected: + QVector<Atom> getNetWmState() const; + void setMWMHints(const QXlibMWMHints &mwmhints); + QXlibMWMHints getMWMHints() const; + + void doSizeHints(); + +private: + QPlatformWindowFormat correctColorBuffers(const QPlatformWindowFormat &windowFormat)const; + + Window x_window; + GC gc; + + GC createGC(); + + QPlatformGLContext *mGLContext; + QXlibScreen *mScreen; + Qt::WindowFlags mWindowFlags; +}; + +#endif diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp new file mode 100644 index 0000000..088730d --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitewindowsurface.h" +#include "qtestliteintegration.h" + +#include <QtCore/qdebug.h> +#include <QWindowSystemInterface> + +#include "qtestlitewindow.h" +#include "qtestlitescreen.h" + +# include <sys/ipc.h> +# include <sys/shm.h> +# include <X11/extensions/XShm.h> + +QT_BEGIN_NAMESPACE + + +struct QXlibShmImageInfo { + QXlibShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~QXlibShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; + + +#ifndef DONT_USE_MIT_SHM +void QXlibShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void QXlibWindowSurface::resizeShmImage(int width, int height) +{ + +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(window()); + if (image_info) + image_info->destroy(); + else + image_info = new QXlibShmImageInfo(screen->display()); + + Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); + + + XImage *image = XShmCreateImage (screen->display(), visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + + image_info->image = image; + + Status shm_attach_status = XShmAttach(screen->display(), &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif + painted = false; +} + + +void QXlibWindowSurface::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); +} + +QSize QXlibWindowSurface::bufferSize() const +{ + return shm_img.size(); +} + +QXlibWindowSurface::QXlibWindowSurface (QWidget *window) + : QWindowSurface(window), + painted(false), image_info(0) +{ + xw = static_cast<QXlibWindow*>(window->platformWindow()); +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; +} + +QXlibWindowSurface::~QXlibWindowSurface() +{ + delete image_info; +} + +QPaintDevice *QXlibWindowSurface::paintDevice() +{ + return &shm_img; +} + + +void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + if (!painted) + return; + + QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget); + GC gc = xw->graphicsContext(); + Window window = xw->xWindow(); +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); + + QImage image = shm_img; + //img.convertToFormat( + XImage *xi = XCreateImage(screen->display(), visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); + + int x = 0; + int y = 0; + + /*int r =*/ XPutImage(screen->display(), window, gc, xi, 0, 0, x, y, image.width(), image.height()); + + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +#else + // Use MIT_SHM + if (image_info && image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync + XShmPutImage (screen->display(), window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ False); + + XSync(screen->display(), False); + } +#endif +} + +// from qwindowsurface.cpp +extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); + +bool QXlibWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + if (shm_img.isNull()) + return false; + + const QVector<QRect> rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); + + return true; +} + + +void QXlibWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + resizeBuffer(size()); +} + +void QXlibWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + painted = true; //there is content in the buffer +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.h b/src/plugins/platforms/xlib/qxlibwindowsurface.h new file mode 100644 index 0000000..12b4c60 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include <QtGui/private/qwindowsurface_p.h> + + +QT_BEGIN_NAMESPACE + +class QXlibWindow; +class QXlibIntegration; +class QXlibScreen; +class QXlibShmImageInfo; + +class QXlibWindowSurface : public QWindowSurface +{ +public: + QXlibWindowSurface (QWidget *window); + ~QXlibWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; + + + void resizeShmImage(int width, int height); + + QImage shm_img; + QXlibShmImageInfo *image_info; + + QXlibWindow *xw; + +}; + + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/xlib/testlite.pro b/src/plugins/platforms/xlib/testlite.pro deleted file mode 100644 index 7fb3304..0000000 --- a/src/plugins/platforms/xlib/testlite.pro +++ /dev/null @@ -1,57 +0,0 @@ -TARGET = qtestlite - -include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms - -SOURCES = \ - main.cpp \ - qtestliteintegration.cpp \ - qtestlitewindowsurface.cpp \ - qtestlitewindow.cpp \ - qtestlitecursor.cpp \ - qtestlitescreen.cpp \ - qtestlitekeyboard.cpp \ - qtestliteclipboard.cpp \ - qtestlitemime.cpp \ - qtestlitestaticinfo.cpp - -HEADERS = \ - qtestliteintegration.h \ - qtestlitewindowsurface.h \ - qtestlitewindow.h \ - qtestlitecursor.h \ - qtestlitescreen.h \ - qtestlitekeyboard.h \ - qtestliteclipboard.h \ - qtestlitemime.h \ - qtestlitestaticinfo.h - -LIBS += -lX11 -lXext - -mac { - LIBS += -L/usr/X11/lib -lz -framework Carbon -} - -include (../fontdatabases/genericunix/genericunix.pri) - -contains(QT_CONFIG, opengl) { - QT += opengl - !contains(QT_CONFIG, opengles2) { - HEADERS += qglxintegration.h - SOURCES += qglxintegration.cpp - } else { # There is no easy way to detect if we'r suppose to use glx or not - HEADERS += \ - ../eglconvenience/qeglplatformcontext.h \ - ../eglconvenience/qeglconvenience.h \ - qtestliteeglintegration.h - - SOURCES += \ - ../eglconvenience/qeglplatformcontext.cpp \ - ../eglconvenience/qeglconvenience.cpp \ - qtestliteeglintegration.cpp - LIBS += -lEGL - } -} - -target.path += $$[QT_INSTALL_PLUGINS]/platforms -INSTALLS += target diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro new file mode 100644 index 0000000..7fb3304 --- /dev/null +++ b/src/plugins/platforms/xlib/xlib.pro @@ -0,0 +1,57 @@ +TARGET = qtestlite + +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +SOURCES = \ + main.cpp \ + qtestliteintegration.cpp \ + qtestlitewindowsurface.cpp \ + qtestlitewindow.cpp \ + qtestlitecursor.cpp \ + qtestlitescreen.cpp \ + qtestlitekeyboard.cpp \ + qtestliteclipboard.cpp \ + qtestlitemime.cpp \ + qtestlitestaticinfo.cpp + +HEADERS = \ + qtestliteintegration.h \ + qtestlitewindowsurface.h \ + qtestlitewindow.h \ + qtestlitecursor.h \ + qtestlitescreen.h \ + qtestlitekeyboard.h \ + qtestliteclipboard.h \ + qtestlitemime.h \ + qtestlitestaticinfo.h + +LIBS += -lX11 -lXext + +mac { + LIBS += -L/usr/X11/lib -lz -framework Carbon +} + +include (../fontdatabases/genericunix/genericunix.pri) + +contains(QT_CONFIG, opengl) { + QT += opengl + !contains(QT_CONFIG, opengles2) { + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp + } else { # There is no easy way to detect if we'r suppose to use glx or not + HEADERS += \ + ../eglconvenience/qeglplatformcontext.h \ + ../eglconvenience/qeglconvenience.h \ + qtestliteeglintegration.h + + SOURCES += \ + ../eglconvenience/qeglplatformcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + qtestliteeglintegration.cpp + LIBS += -lEGL + } +} + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target -- cgit v0.12 From 5cda0ff17d82197de987b1c09959549995737b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Mon, 14 Feb 2011 14:00:14 +0100 Subject: Lighthouse: fix qxlib include files after file-rename --- src/plugins/platforms/xlib/main.cpp | 2 +- src/plugins/platforms/xlib/qglxintegration.cpp | 4 +-- src/plugins/platforms/xlib/qglxintegration.h | 2 +- src/plugins/platforms/xlib/qxlibclipboard.cpp | 8 ++--- src/plugins/platforms/xlib/qxlibclipboard.h | 2 +- src/plugins/platforms/xlib/qxlibcursor.cpp | 8 ++--- src/plugins/platforms/xlib/qxlibcursor.h | 2 +- src/plugins/platforms/xlib/qxlibeglintegration.cpp | 2 +- src/plugins/platforms/xlib/qxlibeglintegration.h | 2 +- src/plugins/platforms/xlib/qxlibintegration.cpp | 10 +++--- src/plugins/platforms/xlib/qxlibintegration.h | 2 +- src/plugins/platforms/xlib/qxlibkeyboard.cpp | 4 +-- src/plugins/platforms/xlib/qxlibkeyboard.h | 2 +- src/plugins/platforms/xlib/qxlibmime.cpp | 6 ++-- src/plugins/platforms/xlib/qxlibmime.h | 4 +-- src/plugins/platforms/xlib/qxlibscreen.cpp | 12 +++---- src/plugins/platforms/xlib/qxlibscreen.h | 2 +- src/plugins/platforms/xlib/qxlibstatic.cpp | 4 +-- src/plugins/platforms/xlib/qxlibwindow.cpp | 12 +++---- src/plugins/platforms/xlib/qxlibwindow.h | 2 +- src/plugins/platforms/xlib/qxlibwindowsurface.cpp | 8 ++--- src/plugins/platforms/xlib/xlib.pro | 42 +++++++++++----------- 22 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/plugins/platforms/xlib/main.cpp b/src/plugins/platforms/xlib/main.cpp index 131d399..3e2a6b9 100644 --- a/src/plugins/platforms/xlib/main.cpp +++ b/src/plugins/platforms/xlib/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include <QtGui/QPlatformIntegrationPlugin> -#include "qtestliteintegration.h" +#include "qxlibintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xlib/qglxintegration.cpp b/src/plugins/platforms/xlib/qglxintegration.cpp index 46dfef9..5ba4f0d 100644 --- a/src/plugins/platforms/xlib/qglxintegration.cpp +++ b/src/plugins/platforms/xlib/qglxintegration.cpp @@ -43,8 +43,8 @@ #include <QLibrary> #include <QGLFormat> -#include "qtestlitewindow.h" -#include "qtestlitescreen.h" +#include "qxlibwindow.h" +#include "qxlibscreen.h" #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) #include <X11/Xlib.h> diff --git a/src/plugins/platforms/xlib/qglxintegration.h b/src/plugins/platforms/xlib/qglxintegration.h index f982708..81b48c9 100644 --- a/src/plugins/platforms/xlib/qglxintegration.h +++ b/src/plugins/platforms/xlib/qglxintegration.h @@ -42,7 +42,7 @@ #ifndef Q_GLX_CONTEXT_H #define Q_GLX_CONTEXT_H -#include "qtestlitewindow.h" +#include "qxlibwindow.h" #include <QtGui/QPlatformGLContext> #include <QtGui/QPlatformWindowFormat> diff --git a/src/plugins/platforms/xlib/qxlibclipboard.cpp b/src/plugins/platforms/xlib/qxlibclipboard.cpp index 1264b5a..7930fcb 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.cpp +++ b/src/plugins/platforms/xlib/qxlibclipboard.cpp @@ -39,10 +39,10 @@ ** ****************************************************************************/ -#include "qtestliteclipboard.h" +#include "qxlibclipboard.h" -#include "qtestlitescreen.h" -#include "qtestlitemime.h" +#include "qxlibscreen.h" +#include "qxlibmime.h" #include <private/qapplication_p.h> @@ -673,4 +673,4 @@ QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) return buf; } -#include "qtestliteclipboard.moc" +#include "qxlibclipboard.moc" diff --git a/src/plugins/platforms/xlib/qxlibclipboard.h b/src/plugins/platforms/xlib/qxlibclipboard.h index 109714c..ec1d728 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.h +++ b/src/plugins/platforms/xlib/qxlibclipboard.h @@ -43,7 +43,7 @@ #define QTESTLITECLIPBOARD_H #include <QPlatformClipboard> -#include "qtestlitestaticinfo.h" +#include "qxlibstatic.h" class QXlibScreen; class QXlibClipboard : public QPlatformClipboard diff --git a/src/plugins/platforms/xlib/qxlibcursor.cpp b/src/plugins/platforms/xlib/qxlibcursor.cpp index 2f7cfbf..e4d248c 100644 --- a/src/plugins/platforms/xlib/qxlibcursor.cpp +++ b/src/plugins/platforms/xlib/qxlibcursor.cpp @@ -39,11 +39,11 @@ ** ****************************************************************************/ -#include "qtestlitecursor.h" +#include "qxlibcursor.h" -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitewindow.h" +#include "qxlibintegration.h" +#include "qxlibscreen.h" +#include "qxlibwindow.h" #include <QtGui/QBitmap> diff --git a/src/plugins/platforms/xlib/qxlibcursor.h b/src/plugins/platforms/xlib/qxlibcursor.h index db9f9e2..77c66bf 100644 --- a/src/plugins/platforms/xlib/qxlibcursor.h +++ b/src/plugins/platforms/xlib/qxlibcursor.h @@ -44,7 +44,7 @@ #include <QtGui/QPlatformCursor> -#include "qtestliteintegration.h" +#include "qxlibintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.cpp b/src/plugins/platforms/xlib/qxlibeglintegration.cpp index 9bbe0ca..1135d2f 100644 --- a/src/plugins/platforms/xlib/qxlibeglintegration.cpp +++ b/src/plugins/platforms/xlib/qxlibeglintegration.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "qtestliteeglintegration.h" +#include "qxlibeglintegration.h" static int countBits(unsigned long mask) { diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.h b/src/plugins/platforms/xlib/qxlibeglintegration.h index 4c2e50d..6a94b8e 100644 --- a/src/plugins/platforms/xlib/qxlibeglintegration.h +++ b/src/plugins/platforms/xlib/qxlibeglintegration.h @@ -42,7 +42,7 @@ #ifndef QTESTLITEEGLINTEGRATION_H #define QTESTLITEEGLINTEGRATION_H -#include "qtestlitestaticinfo.h" +#include "qxlibstatic.h" #include "../eglconvenience/qeglconvenience.h" class QXlibEglIntegration diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp index cdc5c29..46eabbf 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.cpp +++ b/src/plugins/platforms/xlib/qxlibintegration.cpp @@ -39,15 +39,15 @@ ** ****************************************************************************/ -#include "qtestliteintegration.h" -#include "qtestlitewindowsurface.h" +#include "qxlibintegration.h" +#include "qxlibwindowsurface.h" #include <QtGui/private/qpixmap_raster_p.h> #include <QtCore/qdebug.h> -#include "qtestlitewindow.h" +#include "qxlibwindow.h" #include "qgenericunixfontdatabase.h" -#include "qtestlitescreen.h" -#include "qtestliteclipboard.h" +#include "qxlibscreen.h" +#include "qxlibclipboard.h" #if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) diff --git a/src/plugins/platforms/xlib/qxlibintegration.h b/src/plugins/platforms/xlib/qxlibintegration.h index c3125b8..dd8cdec 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.h +++ b/src/plugins/platforms/xlib/qxlibintegration.h @@ -48,7 +48,7 @@ #include <QtGui/QPlatformIntegration> #include <QtGui/QPlatformScreen> -#include "qtestlitestaticinfo.h" +#include "qxlibstatic.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.cpp b/src/plugins/platforms/xlib/qxlibkeyboard.cpp index fb0cf2e..65727a4 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.cpp +++ b/src/plugins/platforms/xlib/qxlibkeyboard.cpp @@ -39,9 +39,9 @@ ** ****************************************************************************/ -#include "qtestlitekeyboard.h" +#include "qxlibkeyboard.h" -#include "qtestlitescreen.h" +#include "qxlibscreen.h" #include <QtGui/QWindowSystemInterface> diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.h b/src/plugins/platforms/xlib/qxlibkeyboard.h index 98df4e1..02fc290 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.h +++ b/src/plugins/platforms/xlib/qxlibkeyboard.h @@ -42,7 +42,7 @@ #ifndef QTESTLITEKEYBOARD_H #define QTESTLITEKEYBOARD_H -#include "qtestliteintegration.h" +#include "qxlibintegration.h" class QXlibKeyboard { diff --git a/src/plugins/platforms/xlib/qxlibmime.cpp b/src/plugins/platforms/xlib/qxlibmime.cpp index 5335ae9..61a0735 100644 --- a/src/plugins/platforms/xlib/qxlibmime.cpp +++ b/src/plugins/platforms/xlib/qxlibmime.cpp @@ -39,10 +39,10 @@ ** ****************************************************************************/ -#include "qtestlitemime.h" +#include "qxlibmime.h" -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" +#include "qxlibstatic.h" +#include "qxlibscreen.h" #include <QtCore/QTextCodec> #include <QtGui/QImageWriter> diff --git a/src/plugins/platforms/xlib/qxlibmime.h b/src/plugins/platforms/xlib/qxlibmime.h index 6a70ea4..316d423 100644 --- a/src/plugins/platforms/xlib/qxlibmime.h +++ b/src/plugins/platforms/xlib/qxlibmime.h @@ -46,8 +46,8 @@ #include <QtGui/QClipboard> -#include "qtestliteintegration.h" -#include "qtestliteclipboard.h" +#include "qxlibintegration.h" +#include "qxlibclipboard.h" class QXlibMime : public QInternalMimeData { Q_OBJECT diff --git a/src/plugins/platforms/xlib/qxlibscreen.cpp b/src/plugins/platforms/xlib/qxlibscreen.cpp index 714c17b..ef04fb2 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.cpp +++ b/src/plugins/platforms/xlib/qxlibscreen.cpp @@ -39,13 +39,13 @@ ** ****************************************************************************/ -#include "qtestlitescreen.h" +#include "qxlibscreen.h" -#include "qtestlitecursor.h" -#include "qtestlitewindow.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" -#include "qtestliteclipboard.h" +#include "qxlibcursor.h" +#include "qxlibwindow.h" +#include "qxlibkeyboard.h" +#include "qxlibstatic.h" +#include "qxlibclipboard.h" #include <QtCore/QDebug> #include <QtCore/QSocketNotifier> diff --git a/src/plugins/platforms/xlib/qxlibscreen.h b/src/plugins/platforms/xlib/qxlibscreen.h index 7e59a59..c8043fb 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.h +++ b/src/plugins/platforms/xlib/qxlibscreen.h @@ -43,7 +43,7 @@ #define QTESTLITESCREEN_H #include <QtGui/QPlatformScreen> -#include "qtestliteintegration.h" +#include "qxlibintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xlib/qxlibstatic.cpp b/src/plugins/platforms/xlib/qxlibstatic.cpp index 837636c..3ce5768 100644 --- a/src/plugins/platforms/xlib/qxlibstatic.cpp +++ b/src/plugins/platforms/xlib/qxlibstatic.cpp @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#include "qtestlitestaticinfo.h" -#include "qtestlitescreen.h" +#include "qxlibstatic.h" +#include "qxlibscreen.h" #include <qplatformdefs.h> diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp index 0f11a81..ddd4002 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.cpp +++ b/src/plugins/platforms/xlib/qxlibwindow.cpp @@ -39,12 +39,12 @@ ** ****************************************************************************/ -#include "qtestlitewindow.h" +#include "qxlibwindow.h" -#include "qtestliteintegration.h" -#include "qtestlitescreen.h" -#include "qtestlitekeyboard.h" -#include "qtestlitestaticinfo.h" +#include "qxlibintegration.h" +#include "qxlibscreen.h" +#include "qxlibkeyboard.h" +#include "qxlibstatic.h" #include <QtGui/QWindowSystemInterface> #include <QSocketNotifier> @@ -60,7 +60,7 @@ #else #include "../eglconvenience/qeglconvenience.h" #include "../eglconvenience/qeglplatformcontext.h" -#include "qtestliteeglintegration.h" +#include "qxlibeglintegration.h" #endif //QT_OPENGL_ES_2 #endif //QT_NO_OPENGL diff --git a/src/plugins/platforms/xlib/qxlibwindow.h b/src/plugins/platforms/xlib/qxlibwindow.h index ccf6867..be98032 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.h +++ b/src/plugins/platforms/xlib/qxlibwindow.h @@ -42,7 +42,7 @@ #ifndef QTESTLITEWINDOW_H #define QTESTLITEWINDOW_H -#include "qtestliteintegration.h" +#include "qxlibintegration.h" #include <QPlatformWindow> #include <QEvent> diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp index 088730d..92e1793 100644 --- a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp @@ -39,14 +39,14 @@ ** ****************************************************************************/ -#include "qtestlitewindowsurface.h" -#include "qtestliteintegration.h" +#include "qxlibwindowsurface.h" +#include "qxlibintegration.h" #include <QtCore/qdebug.h> #include <QWindowSystemInterface> -#include "qtestlitewindow.h" -#include "qtestlitescreen.h" +#include "qxlibwindow.h" +#include "qxlibscreen.h" # include <sys/ipc.h> # include <sys/shm.h> diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro index 7fb3304..999621b 100644 --- a/src/plugins/platforms/xlib/xlib.pro +++ b/src/plugins/platforms/xlib/xlib.pro @@ -1,30 +1,30 @@ -TARGET = qtestlite +TARGET = qxlib include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = \ main.cpp \ - qtestliteintegration.cpp \ - qtestlitewindowsurface.cpp \ - qtestlitewindow.cpp \ - qtestlitecursor.cpp \ - qtestlitescreen.cpp \ - qtestlitekeyboard.cpp \ - qtestliteclipboard.cpp \ - qtestlitemime.cpp \ - qtestlitestaticinfo.cpp + qxlibintegration.cpp \ + qxlibwindowsurface.cpp \ + qxlibwindow.cpp \ + qxlibcursor.cpp \ + qxlibscreen.cpp \ + qxlibkeyboard.cpp \ + qxlibclipboard.cpp \ + qxlibmime.cpp \ + qxlibstatic.cpp HEADERS = \ - qtestliteintegration.h \ - qtestlitewindowsurface.h \ - qtestlitewindow.h \ - qtestlitecursor.h \ - qtestlitescreen.h \ - qtestlitekeyboard.h \ - qtestliteclipboard.h \ - qtestlitemime.h \ - qtestlitestaticinfo.h + qxlibintegration.h \ + qxlibwindowsurface.h \ + qxlibwindow.h \ + qxlibcursor.h \ + qxlibscreen.h \ + qxlibkeyboard.h \ + qxlibclipboard.h \ + qxlibmime.h \ + qxlibstatic.h LIBS += -lX11 -lXext @@ -43,12 +43,12 @@ contains(QT_CONFIG, opengl) { HEADERS += \ ../eglconvenience/qeglplatformcontext.h \ ../eglconvenience/qeglconvenience.h \ - qtestliteeglintegration.h + qxlibeglintegration.h SOURCES += \ ../eglconvenience/qeglplatformcontext.cpp \ ../eglconvenience/qeglconvenience.cpp \ - qtestliteeglintegration.cpp + qxlibeglintegration.cpp LIBS += -lEGL } } -- cgit v0.12 From 7da16ed9888133039c6d7a261fc7c4b61d9b6114 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Mon, 14 Feb 2011 15:29:07 +0100 Subject: Remove useless statements. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Rødal --- src/gui/kernel/qt_cocoa_helpers_mac.mm | 2 -- src/gui/painting/qwindowsurface_raster.cpp | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 71f59e3..f3e1c9a 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1587,14 +1587,12 @@ void qt_mac_display(QWidget *widget) { NSView *theNSView = qt_mac_nativeview_for(widget); [theNSView display]; - return; } void qt_mac_setNeedsDisplay(QWidget *widget) { NSView *theNSView = qt_mac_nativeview_for(widget); [theNSView setNeedsDisplay:YES]; - return; } void qt_mac_setNeedsDisplayInRect(QWidget *widget, QRegion region) diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 8e09c58..45111dc 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -256,8 +256,6 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi #ifdef Q_WS_MAC - Q_UNUSED(offset); - // This is mainly done for native components like native "open file" dialog. if (widget->testAttribute(Qt::WA_DontShowOnScreen)) { return; -- cgit v0.12 From b428301a2af0a68ff40d75003ed85aafb19f03f7 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 14 Feb 2011 17:42:03 +1000 Subject: Add support for anchor mirroring Task-number: QTBUG-15879 Reviewed-by: Michael Brasser Change-Id: I833132153ba95437a86bb840a96d5507612d3fa8 --- .../graphicsitems/qdeclarativeanchors.cpp | 111 +- .../graphicsitems/qdeclarativeanchors_p.h | 5 + .../graphicsitems/qdeclarativeanchors_p_p.h | 5 +- .../declarative/qdeclarativeanchors/data/fill.qml | 8 +- .../qdeclarativeanchors/data/margins.qml | 6 +- .../tst_qdeclarativeanchors.cpp | 201 ++- .../qdeclarativestates/tst_qdeclarativestates.cpp | 122 ++ .../animation/reanchorRTL/data/reanchor.0.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.1.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.10.png | Bin 0 -> 647 bytes .../animation/reanchorRTL/data/reanchor.11.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.12.png | Bin 0 -> 636 bytes .../animation/reanchorRTL/data/reanchor.2.png | Bin 0 -> 636 bytes .../animation/reanchorRTL/data/reanchor.3.png | Bin 0 -> 647 bytes .../animation/reanchorRTL/data/reanchor.4.png | Bin 0 -> 641 bytes .../animation/reanchorRTL/data/reanchor.5.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.6.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.7.png | Bin 0 -> 636 bytes .../animation/reanchorRTL/data/reanchor.8.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.9.png | Bin 0 -> 637 bytes .../animation/reanchorRTL/data/reanchor.qml | 1499 ++++++++++++++++++++ .../qmlvisual/animation/reanchorRTL/reanchor.qml | 69 + 22 files changed, 1988 insertions(+), 38 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.10.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.11.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.12.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.5.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.6.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.7.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.8.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.9.png create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/reanchorRTL/reanchor.qml diff --git a/src/declarative/graphicsitems/qdeclarativeanchors.cpp b/src/declarative/graphicsitems/qdeclarativeanchors.cpp index 444bbd4..a2d6261 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanchors.cpp @@ -181,10 +181,12 @@ void QDeclarativeAnchorsPrivate::fillChanged() if (updatingFill < 2) { ++updatingFill; + qreal horizontalMargin = isMirrored() ? rightMargin : leftMargin; + if (fill == item->parentItem()) { //child-parent - setItemPos(QPointF(leftMargin, topMargin)); + setItemPos(QPointF(horizontalMargin, topMargin)); } else if (fill->parentItem() == item->parentItem()) { //siblings - setItemPos(QPointF(fill->x()+leftMargin, fill->y()+topMargin)); + setItemPos(QPointF(fill->x()+horizontalMargin, fill->y()+topMargin)); } QGraphicsItemPrivate *fillPrivate = QGraphicsItemPrivate::get(fill); setItemSize(QSizeF(fillPrivate->width()-leftMargin-rightMargin, fillPrivate->height()-topMargin-bottomMargin)); @@ -204,13 +206,15 @@ void QDeclarativeAnchorsPrivate::centerInChanged() if (updatingCenterIn < 2) { ++updatingCenterIn; + + qreal effectiveHCenterOffset = isMirrored() ? -hCenterOffset : hCenterOffset; if (centerIn == item->parentItem()) { - QPointF p(hcenter(item->parentItem()) - hcenter(item) + hCenterOffset, + QPointF p(hcenter(item->parentItem()) - hcenter(item) + effectiveHCenterOffset, vcenter(item->parentItem()) - vcenter(item) + vCenterOffset); setItemPos(p); } else if (centerIn->parentItem() == item->parentItem()) { - QPointF p(centerIn->x() + hcenter(centerIn) - hcenter(item) + hCenterOffset, + QPointF p(centerIn->x() + hcenter(centerIn) - hcenter(item) + effectiveHCenterOffset, centerIn->y() + vcenter(centerIn) - vcenter(item) + vCenterOffset); setItemPos(p); } @@ -498,6 +502,11 @@ bool QDeclarativeAnchorsPrivate::calcStretch(const QDeclarativeAnchorLine &edge1 return invalid; } +bool QDeclarativeAnchorsPrivate::isMirrored() const +{ + return layoutDirection == Qt::RightToLeft; +} + void QDeclarativeAnchorsPrivate::updateVerticalAnchors() { if (fill || centerIn || !isItemComplete()) @@ -570,58 +579,93 @@ void QDeclarativeAnchorsPrivate::updateVerticalAnchors() } } +inline QDeclarativeAnchorLine::AnchorLine reverseAnchorLine(QDeclarativeAnchorLine::AnchorLine anchorLine) { + if (anchorLine == QDeclarativeAnchorLine::Left) { + return QDeclarativeAnchorLine::Right; + } else if (anchorLine == QDeclarativeAnchorLine::Right) { + return QDeclarativeAnchorLine::Left; + } else { + return anchorLine; + } +} + void QDeclarativeAnchorsPrivate::updateHorizontalAnchors() { if (fill || centerIn || !isItemComplete()) return; - if (updatingHorizontalAnchor < 2) { + if (updatingHorizontalAnchor < 3) { ++updatingHorizontalAnchor; + qreal effectiveRightMargin, effectiveLeftMargin, effectiveHorizontalCenterOffset; + QDeclarativeAnchorLine effectiveLeft, effectiveRight, effectiveHorizontalCenter; + QDeclarativeAnchors::Anchor effectiveLeftAnchor, effectiveRightAnchor; + if (isMirrored()) { + effectiveLeftAnchor = QDeclarativeAnchors::RightAnchor; + effectiveRightAnchor = QDeclarativeAnchors::LeftAnchor; + effectiveLeft.item = right.item; + effectiveLeft.anchorLine = reverseAnchorLine(right.anchorLine); + effectiveRight.item = left.item; + effectiveRight.anchorLine = reverseAnchorLine(left.anchorLine); + effectiveHorizontalCenter.item = hCenter.item; + effectiveHorizontalCenter.anchorLine = reverseAnchorLine(hCenter.anchorLine); + effectiveLeftMargin = rightMargin; + effectiveRightMargin = leftMargin; + effectiveHorizontalCenterOffset = -hCenterOffset; + } else { + effectiveLeftAnchor = QDeclarativeAnchors::LeftAnchor; + effectiveRightAnchor = QDeclarativeAnchors::RightAnchor; + effectiveLeft = left; + effectiveRight = right; + effectiveHorizontalCenter = hCenter; + effectiveLeftMargin = leftMargin; + effectiveRightMargin = rightMargin; + effectiveHorizontalCenterOffset = hCenterOffset; + } + QGraphicsItemPrivate *itemPrivate = QGraphicsItemPrivate::get(item); - if (usedAnchors & QDeclarativeAnchors::LeftAnchor) { + if (usedAnchors & effectiveLeftAnchor) { //Handle stretching bool invalid = true; qreal width = 0.0; - if (usedAnchors & QDeclarativeAnchors::RightAnchor) { - invalid = calcStretch(left, right, leftMargin, -rightMargin, QDeclarativeAnchorLine::Left, width); + if (usedAnchors & effectiveRightAnchor) { + invalid = calcStretch(effectiveLeft, effectiveRight, effectiveLeftMargin, -effectiveRightMargin, QDeclarativeAnchorLine::Left, width); } else if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) { - invalid = calcStretch(left, hCenter, leftMargin, hCenterOffset, QDeclarativeAnchorLine::Left, width); + invalid = calcStretch(effectiveLeft, effectiveHorizontalCenter, effectiveLeftMargin, effectiveHorizontalCenterOffset, QDeclarativeAnchorLine::Left, width); width *= 2; } if (!invalid) setItemWidth(width); //Handle left - if (left.item == item->parentItem()) { - setItemX(adjustedPosition(left.item, left.anchorLine) + leftMargin); - } else if (left.item->parentItem() == item->parentItem()) { - setItemX(position(left.item, left.anchorLine) + leftMargin); + if (effectiveLeft.item == item->parentItem()) { + setItemX(adjustedPosition(effectiveLeft.item, effectiveLeft.anchorLine) + effectiveLeftMargin); + } else if (effectiveLeft.item->parentItem() == item->parentItem()) { + setItemX(position(effectiveLeft.item, effectiveLeft.anchorLine) + effectiveLeftMargin); } - } else if (usedAnchors & QDeclarativeAnchors::RightAnchor) { + } else if (usedAnchors & effectiveRightAnchor) { //Handle stretching (left + right case is handled in updateLeftAnchor) if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) { qreal width = 0.0; - bool invalid = calcStretch(hCenter, right, hCenterOffset, -rightMargin, + bool invalid = calcStretch(effectiveHorizontalCenter, effectiveRight, effectiveHorizontalCenterOffset, -effectiveRightMargin, QDeclarativeAnchorLine::Left, width); if (!invalid) setItemWidth(width*2); } //Handle right - if (right.item == item->parentItem()) { - setItemX(adjustedPosition(right.item, right.anchorLine) - itemPrivate->width() - rightMargin); - } else if (right.item->parentItem() == item->parentItem()) { - setItemX(position(right.item, right.anchorLine) - itemPrivate->width() - rightMargin); + if (effectiveRight.item == item->parentItem()) { + setItemX(adjustedPosition(effectiveRight.item, effectiveRight.anchorLine) - itemPrivate->width() - effectiveRightMargin); + } else if (effectiveRight.item->parentItem() == item->parentItem()) { + setItemX(position(effectiveRight.item, effectiveRight.anchorLine) - itemPrivate->width() - effectiveRightMargin); } } else if (usedAnchors & QDeclarativeAnchors::HCenterAnchor) { //Handle hCenter - if (hCenter.item == item->parentItem()) { - setItemX(adjustedPosition(hCenter.item, hCenter.anchorLine) - hcenter(item) + hCenterOffset); - } else if (hCenter.item->parentItem() == item->parentItem()) { - setItemX(position(hCenter.item, hCenter.anchorLine) - hcenter(item) + hCenterOffset); + if (effectiveHorizontalCenter.item == item->parentItem()) { + setItemX(adjustedPosition(effectiveHorizontalCenter.item, effectiveHorizontalCenter.anchorLine) - hcenter(item) + effectiveHorizontalCenterOffset); + } else if (effectiveHorizontalCenter.item->parentItem() == item->parentItem()) { + setItemX(position(effectiveHorizontalCenter.item, effectiveHorizontalCenter.anchorLine) - hcenter(item) + effectiveHorizontalCenterOffset); } } - --updatingHorizontalAnchor; } else { // ### Make this certain :) @@ -1042,6 +1086,25 @@ QDeclarativeAnchors::Anchors QDeclarativeAnchors::usedAnchors() const return d->usedAnchors; } + +Qt::LayoutDirection QDeclarativeAnchors::layoutDirection() const +{ + Q_D(const QDeclarativeAnchors); + return d->layoutDirection; +} + +void QDeclarativeAnchors::setLayoutDirection(Qt::LayoutDirection layoutDirection) +{ + Q_D(QDeclarativeAnchors); + if (d->layoutDirection != layoutDirection) { + d->layoutDirection = layoutDirection; + d->fillChanged(); + d->centerInChanged(); + d->updateHorizontalAnchors(); + emit layoutDirectionChanged(); + } +} + bool QDeclarativeAnchorsPrivate::checkHValid() const { if (usedAnchors & QDeclarativeAnchors::LeftAnchor && diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p.h index d2c0a89..90a3508 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors_p.h +++ b/src/declarative/graphicsitems/qdeclarativeanchors_p.h @@ -79,6 +79,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAnchors : public QObject Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged) Q_PROPERTY(QGraphicsObject *fill READ fill WRITE setFill RESET resetFill NOTIFY fillChanged) Q_PROPERTY(QGraphicsObject *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn NOTIFY centerInChanged) + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) public: QDeclarativeAnchors(QObject *parent=0); @@ -160,6 +161,9 @@ public: Anchors usedAnchors() const; + Qt::LayoutDirection layoutDirection() const; + void setLayoutDirection (Qt::LayoutDirection); + void classBegin(); void componentComplete(); @@ -181,6 +185,7 @@ Q_SIGNALS: void verticalCenterOffsetChanged(); void horizontalCenterOffsetChanged(); void baselineOffsetChanged(); + Q_REVISION(1) void layoutDirectionChanged(); private: friend class QDeclarativeItem; diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h index c4508e0..ec96582 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h @@ -94,7 +94,7 @@ public: : componentComplete(true), updatingMe(false), updatingHorizontalAnchor(0), updatingVerticalAnchor(0), updatingFill(0), updatingCenterIn(0), item(i), usedAnchors(0), fill(0), centerIn(0), leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0), - margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0) + margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0), layoutDirection(Qt::LeftToRight) { } @@ -133,6 +133,7 @@ public: bool checkVAnchorValid(QDeclarativeAnchorLine anchor) const; bool calcStretch(const QDeclarativeAnchorLine &edge1, const QDeclarativeAnchorLine &edge2, qreal offset1, qreal offset2, QDeclarativeAnchorLine::AnchorLine line, qreal &stretch); + bool isMirrored() const; void updateHorizontalAnchors(); void updateVerticalAnchors(); void fillChanged(); @@ -160,6 +161,8 @@ public: qreal vCenterOffset; qreal hCenterOffset; qreal baselineOffset; + + Qt::LayoutDirection layoutDirection; }; QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativeanchors/data/fill.qml b/tests/auto/declarative/qdeclarativeanchors/data/fill.qml index 50fbbe0..ff19675 100644 --- a/tests/auto/declarative/qdeclarativeanchors/data/fill.qml +++ b/tests/auto/declarative/qdeclarativeanchors/data/fill.qml @@ -6,9 +6,9 @@ Rectangle { objectName: "filler" width: 50; height: 50; color: "blue" anchors.fill: parent; - anchors.leftMargin: 10; - anchors.rightMargin: 20; - anchors.topMargin: 30; - anchors.bottomMargin: 40; + anchors.leftMargin: 10; + anchors.rightMargin: 20; + anchors.topMargin: 30; + anchors.bottomMargin: 40; } } diff --git a/tests/auto/declarative/qdeclarativeanchors/data/margins.qml b/tests/auto/declarative/qdeclarativeanchors/data/margins.qml index dace9c0..685346a 100644 --- a/tests/auto/declarative/qdeclarativeanchors/data/margins.qml +++ b/tests/auto/declarative/qdeclarativeanchors/data/margins.qml @@ -6,8 +6,8 @@ Rectangle { objectName: "filler" width: 50; height: 50; color: "blue" anchors.fill: parent; - anchors.margins: 10 - anchors.leftMargin: 5 - anchors.topMargin: 6 + anchors.margins: 10 + anchors.leftMargin: 5 + anchors.topMargin: 6 } } diff --git a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp index e880857..79e233b 100644 --- a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp +++ b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp @@ -65,13 +65,10 @@ class tst_qdeclarativeanchors : public QObject public: tst_qdeclarativeanchors() {} - template<typename T> - T *findItem(QGraphicsObject *parent, const QString &id); - QGraphicsObject *findObject(QGraphicsObject *parent, const QString &objectName); - private slots: void basicAnchors(); void basicAnchorsQGraphicsWidget(); + void basicAnchorsRTL(); void loops(); void illegalSets(); void illegalSets_data(); @@ -82,16 +79,20 @@ private slots: void nullItem_data(); void crash1(); void centerIn(); + void centerInRTL(); void hvCenter(); + void hvCenterRTL(); void fill(); + void fillRTL(); void margins(); + void marginsRTL(); }; /* Find an item with the specified id. */ template<typename T> -T *tst_qdeclarativeanchors::findItem(QGraphicsObject *parent, const QString &objectName) +T *findItem(QGraphicsObject *parent, const QString &objectName) { const QMetaObject &mo = T::staticMetaObject; QList<QGraphicsItem *> children = parent->childItems(); @@ -110,7 +111,7 @@ T *tst_qdeclarativeanchors::findItem(QGraphicsObject *parent, const QString &obj return 0; } -QGraphicsObject *tst_qdeclarativeanchors::findObject(QGraphicsObject *parent, const QString &objectName) +QGraphicsObject *findObject(QGraphicsObject *parent, const QString &objectName) { QList<QGraphicsItem *> children = parent->childItems(); for (int i = 0; i < children.count(); ++i) { @@ -263,6 +264,95 @@ void tst_qdeclarativeanchors::basicAnchorsQGraphicsWidget() delete view; } +QDeclarativeItem* childItem(QDeclarativeItem *parentItem, const char * itemString) { + return findItem<QDeclarativeItem>(parentItem, QLatin1String(itemString)); +} + +qreal offsetMasterRTL(QDeclarativeItem *rootItem, const char * itemString) { + QDeclarativeItem* masterItem = findItem<QDeclarativeItem>(rootItem, QLatin1String("masterRect")); + return masterItem->width()+2*masterItem->x()-findItem<QDeclarativeItem>(rootItem, QLatin1String(itemString))->width(); +} + +qreal offsetParentRTL(QDeclarativeItem *rootItem, const char * itemString) { + return rootItem->width()+2*rootItem->x()-findItem<QDeclarativeItem>(rootItem, QLatin1String(itemString))->width(); +} + +void mirrorAnchors(QDeclarativeItem *item) { + QDeclarativeItemPrivate *itemPrivate = QDeclarativeItemPrivate::get(item); + itemPrivate->anchors()->setLayoutDirection(Qt::RightToLeft); +} + +void tst_qdeclarativeanchors::basicAnchorsRTL() +{ + QDeclarativeView *view = new QDeclarativeView; + view->setSource(QUrl::fromLocalFile(SRCDIR "/data/anchors.qml")); + + qApp->processEvents(); + + QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(view->rootObject()); + foreach(QObject *child, rootItem->children()) + mirrorAnchors(qobject_cast<QDeclarativeItem*>(child)); + + //sibling horizontal + QCOMPARE(childItem(rootItem, "rect1")->x(), offsetMasterRTL(rootItem, "rect1")-26.0); + QCOMPARE(childItem(rootItem, "rect2")->x(), offsetMasterRTL(rootItem, "rect2")-122.0); + QCOMPARE(childItem(rootItem, "rect3")->x(), offsetMasterRTL(rootItem, "rect3")-74.0); + QCOMPARE(childItem(rootItem, "rect4")->x(), offsetMasterRTL(rootItem, "rect4")-16.0); + QCOMPARE(childItem(rootItem, "rect5")->x(), offsetMasterRTL(rootItem, "rect5")-112.0); + QCOMPARE(childItem(rootItem, "rect6")->x(), offsetMasterRTL(rootItem, "rect6")-64.0); + + //parent horizontal + QCOMPARE(childItem(rootItem, "rect7")->x(), offsetParentRTL(rootItem, "rect7")-0.0); + QCOMPARE(childItem(rootItem, "rect8")->x(), offsetParentRTL(rootItem, "rect8")-240.0); + QCOMPARE(childItem(rootItem, "rect9")->x(), offsetParentRTL(rootItem, "rect9")-120.0); + QCOMPARE(childItem(rootItem, "rect10")->x(), offsetParentRTL(rootItem, "rect10")+10.0); + QCOMPARE(childItem(rootItem, "rect11")->x(), offsetParentRTL(rootItem, "rect11")-230.0); + QCOMPARE(childItem(rootItem, "rect12")->x(), offsetParentRTL(rootItem, "rect12")-110.0); + + //vertical + QCOMPARE(childItem(rootItem, "rect13")->y(), 20.0); + QCOMPARE(childItem(rootItem, "rect14")->y(), 155.0); + + //stretch + QCOMPARE(childItem(rootItem, "rect15")->x(), offsetMasterRTL(rootItem, "rect15")-26.0); + QCOMPARE(childItem(rootItem, "rect15")->width(), 96.0); + QCOMPARE(childItem(rootItem, "rect16")->x(), offsetMasterRTL(rootItem, "rect16")-26.0); + QCOMPARE(childItem(rootItem, "rect16")->width(), 192.0); + QCOMPARE(childItem(rootItem, "rect17")->x(), offsetMasterRTL(rootItem, "rect17")+70.0); + QCOMPARE(childItem(rootItem, "rect17")->width(), 192.0); + + //vertical stretch + QCOMPARE(childItem(rootItem, "rect18")->y(), 20.0); + QCOMPARE(childItem(rootItem, "rect18")->height(), 40.0); + + //more parent horizontal + QCOMPARE(childItem(rootItem, "rect19")->x(), offsetParentRTL(rootItem, "rect19")-115.0); + QCOMPARE(childItem(rootItem, "rect20")->x(), offsetParentRTL(rootItem, "rect20")-235.0); + QCOMPARE(childItem(rootItem, "rect21")->x(), offsetParentRTL(rootItem, "rect21")+5.0); + + //centerIn + QCOMPARE(childItem(rootItem, "rect22")->x(), offsetMasterRTL(rootItem, "rect22")-69.0); + QCOMPARE(childItem(rootItem, "rect22")->y(), 5.0); + + //margins + QCOMPARE(childItem(rootItem, "rect23")->x(), offsetMasterRTL(rootItem, "rect23")-31.0); + QCOMPARE(childItem(rootItem, "rect23")->y(), 5.0); + QCOMPARE(childItem(rootItem, "rect23")->width(), 86.0); + QCOMPARE(childItem(rootItem, "rect23")->height(), 10.0); + + // offsets + QCOMPARE(childItem(rootItem, "rect24")->x(), offsetMasterRTL(rootItem, "rect24")-26.0); + QCOMPARE(childItem(rootItem, "rect25")->y(), 60.0); + QCOMPARE(childItem(rootItem, "rect26")->y(), 5.0); + + //baseline + QDeclarativeText *text1 = findItem<QDeclarativeText>(rootItem, QLatin1String("text1")); + QDeclarativeText *text2 = findItem<QDeclarativeText>(rootItem, QLatin1String("text2")); + QCOMPARE(text1->y(), text2->y()); + + delete view; +} + // mostly testing that we don't crash void tst_qdeclarativeanchors::loops() { @@ -514,6 +604,31 @@ void tst_qdeclarativeanchors::fill() delete view; } +void tst_qdeclarativeanchors::fillRTL() +{ + QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/fill.qml")); + + qApp->processEvents(); + QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("filler")); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + mirrorAnchors(rect); + + QCOMPARE(rect->x(), 0.0 + 20.0); + QCOMPARE(rect->y(), 0.0 + 30.0); + QCOMPARE(rect->width(), 200.0 - 10.0 - 20.0); + QCOMPARE(rect->height(), 200.0 - 30.0 - 40.0); + //Alter Offsets (tests QTBUG-6631) + rectPrivate->anchors()->setLeftMargin(20.0); + rectPrivate->anchors()->setRightMargin(0.0); + rectPrivate->anchors()->setBottomMargin(0.0); + rectPrivate->anchors()->setTopMargin(10.0); + QCOMPARE(rect->x(), 0.0 + 0.0); + QCOMPARE(rect->y(), 0.0 + 10.0); + QCOMPARE(rect->width(), 200.0 - 20.0); + QCOMPARE(rect->height(), 200.0 - 10.0); + + delete view; +} void tst_qdeclarativeanchors::centerIn() { QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/centerin.qml")); @@ -521,6 +636,7 @@ void tst_qdeclarativeanchors::centerIn() qApp->processEvents(); QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("centered")); QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + QCOMPARE(rect->x(), 75.0 + 10); QCOMPARE(rect->y(), 75.0 + 30); //Alter Offsets (tests QTBUG-6631) @@ -532,6 +648,27 @@ void tst_qdeclarativeanchors::centerIn() delete view; } + +void tst_qdeclarativeanchors::centerInRTL() +{ + QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/centerin.qml")); + + qApp->processEvents(); + QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("centered")); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + mirrorAnchors(rect); + + QCOMPARE(rect->x(), 75.0 - 10); + QCOMPARE(rect->y(), 75.0 + 30); + //Alter Offsets (tests QTBUG-6631) + rectPrivate->anchors()->setHorizontalCenterOffset(-20.0); + rectPrivate->anchors()->setVerticalCenterOffset(-10.0); + QCOMPARE(rect->x(), 75.0 + 20.0); + QCOMPARE(rect->y(), 75.0 - 10.0); + + delete view; +} + void tst_qdeclarativeanchors::hvCenter() { QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/hvCenter.qml")); @@ -539,12 +676,39 @@ void tst_qdeclarativeanchors::hvCenter() qApp->processEvents(); QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("centered")); QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + // test QTBUG-10999 QCOMPARE(rect->x(), 10.0); QCOMPARE(rect->y(), 19.0); + + rectPrivate->anchors()->setHorizontalCenterOffset(-5.0); + rectPrivate->anchors()->setVerticalCenterOffset(5.0); + QCOMPARE(rect->x(), 10.0 - 5.0); + QCOMPARE(rect->y(), 19.0 + 5.0); + delete view; } +void tst_qdeclarativeanchors::hvCenterRTL() +{ + QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/hvCenter.qml")); + + qApp->processEvents(); + QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("centered")); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + mirrorAnchors(rect); + + // test QTBUG-10999 + QCOMPARE(rect->x(), 10.0); + QCOMPARE(rect->y(), 19.0); + + rectPrivate->anchors()->setHorizontalCenterOffset(-5.0); + rectPrivate->anchors()->setVerticalCenterOffset(5.0); + QCOMPARE(rect->x(), 10.0 + 5.0); + QCOMPARE(rect->y(), 19.0 + 5.0); + + delete view; +} void tst_qdeclarativeanchors::margins() { QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/margins.qml")); @@ -568,6 +732,31 @@ void tst_qdeclarativeanchors::margins() delete view; } +void tst_qdeclarativeanchors::marginsRTL() +{ + QDeclarativeView *view = new QDeclarativeView(QUrl::fromLocalFile(SRCDIR "/data/margins.qml")); + + QDeclarativeRectangle* rect = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("filler")); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + mirrorAnchors(rect); + + QCOMPARE(rect->x(), 10.0); + QCOMPARE(rect->y(), 6.0); + QCOMPARE(rect->width(), 200.0 - 5.0 - 10.0); + QCOMPARE(rect->height(), 200.0 - 6.0 - 10.0); + + rectPrivate->anchors()->setTopMargin(0.0); + rectPrivate->anchors()->setMargins(20.0); + + QCOMPARE(rect->x(), 20.0); + QCOMPARE(rect->y(), 20.0); + QCOMPARE(rect->width(), 200.0 - 5.0 - 20.0); + QCOMPARE(rect->height(), 200.0 - 20.0 - 20.0); + + delete view; +} + + QTEST_MAIN(tst_qdeclarativeanchors) #include "tst_qdeclarativeanchors.moc" diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 56bed30..2220b6d 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -120,6 +120,9 @@ private slots: void anchorChanges3(); void anchorChanges4(); void anchorChanges5(); + void anchorChangesRTL(); + void anchorChangesRTL2(); + void anchorChangesRTL3(); void anchorChangesCrash(); void anchorRewindBug(); void anchorRewindBug2(); @@ -813,6 +816,125 @@ void tst_qdeclarativestates::anchorChanges5() delete rect; } +void mirrorAnchors(QDeclarativeItem *item) { + QDeclarativeItemPrivate *itemPrivate = QDeclarativeItemPrivate::get(item); + itemPrivate->anchors()->setLayoutDirection(Qt::RightToLeft); +} + +qreal offsetRTL(QDeclarativeItem *anchorItem, QDeclarativeItem *item) { + return anchorItem->width()+2*anchorItem->x()-item->width(); +} + +void tst_qdeclarativestates::anchorChangesRTL() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/anchorChanges1.qml"); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + + QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + mirrorAnchors(innerRect); + + QDeclarativeListReference list(rect, "states"); + QDeclarativeState *state = qobject_cast<QDeclarativeState*>(list.at(0)); + QVERIFY(state != 0); + + qmlExecuteDeferred(state); + QDeclarativeAnchorChanges *aChanges = qobject_cast<QDeclarativeAnchorChanges*>(state->operationAt(0)); + QVERIFY(aChanges != 0); + + rectPrivate->setState("right"); + QCOMPARE(innerRect->x(), offsetRTL(rect, innerRect) - qreal(150)); + QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all) + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->right().item, rectPrivate->right().item); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->right().anchorLine, rectPrivate->right().anchorLine); + + rectPrivate->setState(""); + QCOMPARE(innerRect->x(), offsetRTL(rect, innerRect) -qreal(5)); + + delete rect; +} + +void tst_qdeclarativestates::anchorChangesRTL2() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/anchorChanges2.qml"); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + + QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + mirrorAnchors(innerRect); + + rectPrivate->setState("right"); + QCOMPARE(innerRect->x(), offsetRTL(rect, innerRect) - qreal(150)); + + rectPrivate->setState(""); + QCOMPARE(innerRect->x(), offsetRTL(rect, innerRect) - qreal(5)); + + delete rect; +} + +void tst_qdeclarativestates::anchorChangesRTL3() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/anchorChanges3.qml"); + QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + QDeclarativeItemPrivate *rectPrivate = QDeclarativeItemPrivate::get(rect); + + QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + mirrorAnchors(innerRect); + + QDeclarativeItem *leftGuideline = qobject_cast<QDeclarativeItem*>(rect->findChild<QDeclarativeItem*>("LeftGuideline")); + QVERIFY(leftGuideline != 0); + + QDeclarativeItem *bottomGuideline = qobject_cast<QDeclarativeItem*>(rect->findChild<QDeclarativeItem*>("BottomGuideline")); + QVERIFY(bottomGuideline != 0); + + QDeclarativeListReference list(rect, "states"); + QDeclarativeState *state = qobject_cast<QDeclarativeState*>(list.at(0)); + QVERIFY(state != 0); + + qmlExecuteDeferred(state); + QDeclarativeAnchorChanges *aChanges = qobject_cast<QDeclarativeAnchorChanges*>(state->operationAt(0)); + QVERIFY(aChanges != 0); + + rectPrivate->setState("reanchored"); + QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->left().item, QDeclarativeItemPrivate::get(leftGuideline)->left().item); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->left().anchorLine, QDeclarativeItemPrivate::get(leftGuideline)->left().anchorLine); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->right().item, rectPrivate->right().item); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->right().anchorLine, rectPrivate->right().anchorLine); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->top().item, rectPrivate->top().item); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->top().anchorLine, rectPrivate->top().anchorLine); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->bottom().item, QDeclarativeItemPrivate::get(bottomGuideline)->bottom().item); + QCOMPARE(QDeclarativeItemPrivate::get(aChanges->object())->anchors()->bottom().anchorLine, QDeclarativeItemPrivate::get(bottomGuideline)->bottom().anchorLine); + + QCOMPARE(innerRect->x(), offsetRTL(leftGuideline, innerRect) - qreal(10)); + QCOMPARE(innerRect->y(), qreal(0)); + // between left side of parent and leftGuideline.x: 10, which has width 0 + QCOMPARE(innerRect->width(), qreal(10)); + QCOMPARE(innerRect->height(), qreal(150)); + + rectPrivate->setState(""); + QCOMPARE(innerRect->x(), offsetRTL(rect, innerRect) - qreal(0)); + QCOMPARE(innerRect->y(), qreal(10)); + // between right side of parent and left side of rightGuideline.x: 150, which has width 0 + QCOMPARE(innerRect->width(), qreal(50)); + QCOMPARE(innerRect->height(), qreal(190)); + + delete rect; +} + //QTBUG-9609 void tst_qdeclarativestates::anchorChangesCrash() { diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.0.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.0.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.1.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.1.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.10.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.10.png new file mode 100644 index 0000000..1ccab41 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.10.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.11.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.11.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.11.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.12.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.12.png new file mode 100644 index 0000000..f25bd7c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.12.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.2.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.2.png new file mode 100644 index 0000000..f25bd7c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.2.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.3.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.3.png new file mode 100644 index 0000000..dad1de4 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.3.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.4.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.4.png new file mode 100644 index 0000000..cd4f23a Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.4.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.5.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.5.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.5.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.6.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.6.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.6.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.7.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.7.png new file mode 100644 index 0000000..f25bd7c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.7.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.8.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.8.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.8.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.9.png b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.9.png new file mode 100644 index 0000000..160155e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.9.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.qml b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.qml new file mode 100644 index 0000000..e858c11 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/data/reanchor.qml @@ -0,0 +1,1499 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "reanchor.0.png" + } + Frame { + msec: 32 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 48 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 64 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 80 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 96 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 112 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 128 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 144 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 160 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 176 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 192 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 208 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 224 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 240 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 256 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 272 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 288 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 304 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 320 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 336 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 352 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 368 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 384 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 400 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 416 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 432 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 448 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 464 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 480 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 496 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 512 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 528 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 544 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 560 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 576 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 592 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 608 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 624 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 640 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 656 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 672 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 688 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 704 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 720 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 736 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 752 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 768 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 784 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 800 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 816 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 832 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 848 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 864 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 880 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 896 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 912 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 928 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 944 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 960 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 976 + image: "reanchor.1.png" + } + Frame { + msec: 992 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1008 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1024 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1040 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1056 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 164; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1088 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1104 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1120 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1136 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 164; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1152 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 1168 + hash: "f7814217626627ce70ca0e9487354ba9" + } + Frame { + msec: 1184 + hash: "7825b2b77e441ca6f46dbca80c7fe602" + } + Frame { + msec: 1200 + hash: "0ac443a9946b0bcf8db768af7d16d51e" + } + Frame { + msec: 1216 + hash: "c943d5d46f0d527690f38a9c8bd7be51" + } + Frame { + msec: 1232 + hash: "38151db0c9964d33bcb2ff155ebd468c" + } + Frame { + msec: 1248 + hash: "0fb8c53587a95a12cced6d30018edec1" + } + Frame { + msec: 1264 + hash: "2c684a649652270a638aca41a80e327c" + } + Frame { + msec: 1280 + hash: "60dd5c448ef8b97ec13ad3140a584229" + } + Frame { + msec: 1296 + hash: "d564f28f9d528daca729db6fab163b6c" + } + Frame { + msec: 1312 + hash: "4c07b33632ec4f30ee31141099c15a88" + } + Frame { + msec: 1328 + hash: "9facfd27fa16ee9d493e7fb7bcfadbf8" + } + Frame { + msec: 1344 + hash: "fc0fbb8aac8f389841e615be1e7b06de" + } + Frame { + msec: 1360 + hash: "579c18fa201b5609276c761ffd42df33" + } + Frame { + msec: 1376 + hash: "5b3630c37acfc2599a5a8b2e11aaa34c" + } + Frame { + msec: 1392 + hash: "2c1ee8aca06dccf0d39287721bf76aa7" + } + Frame { + msec: 1408 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1424 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1440 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1456 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1472 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1488 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1504 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1520 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1536 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1552 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1568 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1584 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1600 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1616 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1632 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1648 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1664 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1680 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1696 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1712 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1728 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1744 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1760 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1776 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1792 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1808 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1824 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1840 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1856 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1872 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1888 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1904 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1920 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1936 + image: "reanchor.2.png" + } + Frame { + msec: 1952 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1968 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 1984 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2000 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2016 + hash: "c03bb338fff252a100b080366ac907b5" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 170; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2032 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2048 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2064 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2080 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2096 + hash: "c03bb338fff252a100b080366ac907b5" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 170; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2112 + hash: "c03bb338fff252a100b080366ac907b5" + } + Frame { + msec: 2128 + hash: "e9d7372c17ca1510eb15faff5d0794b2" + } + Frame { + msec: 2144 + hash: "60f897e2b9594c4b5c02ce2fbdf9ae3c" + } + Frame { + msec: 2160 + hash: "c35ead9a8e682e8f3c0a091d232310f7" + } + Frame { + msec: 2176 + hash: "272632b0568391022590edc09ea30e28" + } + Frame { + msec: 2192 + hash: "9d4cdb31b01e86a31627e3ff9bb64100" + } + Frame { + msec: 2208 + hash: "5ee65b0290721fe47508c6435c18554b" + } + Frame { + msec: 2224 + hash: "8dd65e1a9417318d793d2027de4fe6ae" + } + Frame { + msec: 2240 + hash: "bcce6d1fd7d2c1539ad9ac42c0552d5e" + } + Frame { + msec: 2256 + hash: "e01f5850113c178da3383406fe73d6e0" + } + Frame { + msec: 2272 + hash: "968fc6b2bf6b7d43e05254339cf6123f" + } + Frame { + msec: 2288 + hash: "30f25fdde31e13934e328fa1d2655ccb" + } + Frame { + msec: 2304 + hash: "f58a21e96037813c9dd7f933405c9b11" + } + Frame { + msec: 2320 + hash: "1fe42c887f2eaf7696fcf0b8b884d0fd" + } + Frame { + msec: 2336 + hash: "848a27b9e4f4c0bcc1a11d6dba7ce92b" + } + Frame { + msec: 2352 + hash: "ca92736257db83e39f54b04325201942" + } + Frame { + msec: 2368 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2384 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2416 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2432 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2448 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2464 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2480 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 2496 + hash: "9082504eee5e0c3cbef9fd9545f09dcb" + } + Frame { + msec: 2512 + hash: "dbe5169edb4400c74841a8af64e0949f" + } + Frame { + msec: 2528 + hash: "d588405fc5e2423cdb954c5624172209" + } + Frame { + msec: 2544 + hash: "ed2b273ea36fb7d8feaca4d5dae72f81" + } + Frame { + msec: 2560 + hash: "5249e4824eb169b5ee3f7fb52fe09aa7" + } + Frame { + msec: 2576 + hash: "2838eff2a1a299c9e47cf78be99172ca" + } + Frame { + msec: 2592 + hash: "c47f6a937a4a6ef045159d7ba04de8af" + } + Frame { + msec: 2608 + hash: "fd3bc1b9ba2629bccb0fec04deffcdad" + } + Frame { + msec: 2624 + hash: "54c9b8599a32ac95aff324977b34f7e6" + } + Frame { + msec: 2640 + hash: "cc5652a05828146cdc9c9b8430f5f59c" + } + Frame { + msec: 2656 + hash: "ce5815fb51a4bd697a2fde46084e118b" + } + Frame { + msec: 2672 + hash: "01dfd2604263f1fd24382ce876af10f9" + } + Frame { + msec: 2688 + hash: "45ea282d20ee9e345eb2cac8c22c42e0" + } + Frame { + msec: 2704 + hash: "afd26ac9776e57c94e4b52ebfeb7206c" + } + Frame { + msec: 2720 + hash: "97aeed321d4d92cb1ec236d2a98fbe9b" + } + Mouse { + type: 4 + button: 1 + buttons: 1 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2736 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 2752 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 2768 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 2784 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 2800 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2816 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 2832 + hash: "81b8228c6aeefe8072b7704f11e6707e" + } + Frame { + msec: 2848 + hash: "617e416bf117a51b756c90321ebb1449" + } + Frame { + msec: 2864 + hash: "656d8d5d54c9ee137aceb519aff72cce" + } + Frame { + msec: 2880 + hash: "94ba3b6f558c010cdd32f54cce436388" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2896 + image: "reanchor.3.png" + } + Frame { + msec: 2912 + hash: "0bc822fdd4caac17aab80e8601d3a523" + } + Frame { + msec: 2928 + hash: "886d0407ac76d7344f7a314f07b3efff" + } + Frame { + msec: 2944 + hash: "eb6c46af5037f24348edbe0dda48fb62" + } + Frame { + msec: 2960 + hash: "1c578a1eeb67c6833241bcb3214f06fb" + } + Frame { + msec: 2976 + hash: "55f1631ef567217a5945b2a23c59b549" + } + Frame { + msec: 2992 + hash: "25fdd4d54ddb035b082dc3a0d0816114" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 134; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3008 + hash: "25fdd4d54ddb035b082dc3a0d0816114" + } + Frame { + msec: 3024 + hash: "efd61e7c1aaffec77bd3d2de6645b2c0" + } + Frame { + msec: 3040 + hash: "02ac5ca0fa7d2ec3903fccd5dc556fa5" + } + Frame { + msec: 3056 + hash: "daf52e45b8fc68f74e424554074678cc" + } + Frame { + msec: 3072 + hash: "9e2def87e83b0c4b9f26684665aa1e51" + } + Frame { + msec: 3088 + hash: "0e72fc762cc9a061e91692376d65d292" + } + Frame { + msec: 3104 + hash: "c5ac37e4a5250b35a4976bcb31505cca" + } + Frame { + msec: 3120 + hash: "eefe6bb7963c580c68198ee6098a36f4" + } + Frame { + msec: 3136 + hash: "7b78d77ac11b72d1fb827ebb66a04c8e" + } + Frame { + msec: 3152 + hash: "ce5815fb51a4bd697a2fde46084e118b" + } + Frame { + msec: 3168 + hash: "94ba3b6f558c010cdd32f54cce436388" + } + Frame { + msec: 3184 + hash: "61a56140e5a6a2bfcee5c6322b37e130" + } + Frame { + msec: 3200 + hash: "a67b22c0a966fe3fbe869497dc00960f" + } + Frame { + msec: 3216 + hash: "4edd212676ac93ae761039e80f989349" + } + Frame { + msec: 3232 + hash: "fea5797441d65625c400238f73d94807" + } + Frame { + msec: 3248 + hash: "23e9209ff0257343016cffdf7ea6571c" + } + Frame { + msec: 3264 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3280 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3296 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3312 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3328 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3344 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3360 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3376 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3392 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3408 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3424 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3440 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3456 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3472 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3488 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3504 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3520 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3536 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3552 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3568 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3584 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3600 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3616 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3632 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3648 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3664 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3680 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3696 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3712 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3728 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3744 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3760 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3776 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3792 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3808 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3824 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3840 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3856 + image: "reanchor.4.png" + } + Frame { + msec: 3872 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3888 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3904 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3920 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3936 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3952 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3968 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 3984 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4000 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4016 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4032 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4048 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4064 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4080 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4096 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4112 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4128 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4144 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4160 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4176 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 124; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4208 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4224 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4240 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4256 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 124; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4272 + hash: "3a1fc9be558078e35a9828e411847c19" + } + Frame { + msec: 4288 + hash: "81b8228c6aeefe8072b7704f11e6707e" + } + Frame { + msec: 4304 + hash: "617e416bf117a51b756c90321ebb1449" + } + Frame { + msec: 4320 + hash: "656d8d5d54c9ee137aceb519aff72cce" + } + Frame { + msec: 4336 + hash: "94ba3b6f558c010cdd32f54cce436388" + } + Frame { + msec: 4352 + hash: "5b0679ff3730cba4ac026e89c7811fbe" + } + Frame { + msec: 4368 + hash: "0bc822fdd4caac17aab80e8601d3a523" + } + Frame { + msec: 4384 + hash: "886d0407ac76d7344f7a314f07b3efff" + } + Frame { + msec: 4400 + hash: "eb6c46af5037f24348edbe0dda48fb62" + } + Frame { + msec: 4416 + hash: "1c578a1eeb67c6833241bcb3214f06fb" + } + Frame { + msec: 4432 + hash: "55f1631ef567217a5945b2a23c59b549" + } + Frame { + msec: 4448 + hash: "25fdd4d54ddb035b082dc3a0d0816114" + } + Frame { + msec: 4464 + hash: "295ea6ff4d3c2c7de0cfbc29b2bd2c38" + } + Frame { + msec: 4480 + hash: "26b978ab645c04731703bcf15ac34a11" + } + Frame { + msec: 4496 + hash: "0db4c2515b89506df51732c4b9bf75dc" + } + Frame { + msec: 4512 + hash: "3cf30f3a06e325e195a4a7dec1e04c01" + } + Frame { + msec: 4528 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4544 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4560 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4576 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4592 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4608 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4624 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4640 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4656 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4672 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4688 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4704 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4720 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4736 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4752 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4768 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4784 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4800 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4816 + image: "reanchor.5.png" + } + Frame { + msec: 4832 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4848 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4864 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4880 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4896 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4912 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4928 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4944 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4960 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4976 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 4992 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5008 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5024 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5040 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5056 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5072 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5088 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5104 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5120 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5136 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5152 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5168 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5184 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5200 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5216 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5232 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5248 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5264 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5280 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5296 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5312 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5328 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5344 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5360 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5376 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5392 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5408 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5424 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5440 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5456 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5472 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5488 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5504 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5520 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5536 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5552 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5568 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } + Frame { + msec: 5584 + hash: "0009d8bfdfaed2a4f05aacb7a7992234" + } +} diff --git a/tests/auto/declarative/qmlvisual/animation/reanchorRTL/reanchor.qml b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/reanchor.qml new file mode 100644 index 0000000..ba37737 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/animation/reanchorRTL/reanchor.qml @@ -0,0 +1,69 @@ +import QtQuick 1.1 + +Rectangle { + id: container + width: 200; height: 200 + Rectangle { + id: myRect + anchors.layoutDirection: Qt.RightToLeft + objectName: "MyRect" + color: "green"; + anchors.left: parent.left + anchors.right: rightGuideline.left + anchors.top: topGuideline.top + anchors.bottom: container.bottom + } + Item { id: leftGuideline; x: 10 } + Item { id: rightGuideline; x: 150 } + Item { id: topGuideline; y: 10 } + Item { id: bottomGuideline; y: 150 } + Item { id: topGuideline2; y: 50 } + Item { id: bottomGuideline2; y: 175 } + MouseArea { + id: wholeArea + anchors.fill: parent + onClicked: { + if (container.state == "") { + container.state = "reanchored"; + } else if (container.state == "reanchored") { + container.state = "reanchored2"; + } else if (container.state == "reanchored2") + container.state = "reanchored"; + } + } + + states: [ State { + name: "reanchored" + AnchorChanges { + target: myRect; + anchors.left: leftGuideline.left + anchors.right: container.right + anchors.top: container.top + anchors.bottom: bottomGuideline.bottom + } + }, State { + name: "reanchored2" + AnchorChanges { + target: myRect; + anchors.left: undefined + anchors.right: undefined + anchors.top: topGuideline2.top + anchors.bottom: bottomGuideline2.bottom + } + }] + + transitions: Transition { + AnchorAnimation { } + } + + MouseArea { + width: 50; height: 50 + anchors.right: parent.right + anchors.bottom: parent.bottom + onClicked: { + container.state = ""; + } + } + + state: "reanchored" +} -- cgit v0.12 From 0b0358732cafc34d4b6794200752ac9cb99de569 Mon Sep 17 00:00:00 2001 From: Christopher Ham <christopher.ham@nokia.com> Date: Tue, 15 Feb 2011 16:22:46 +1000 Subject: Righ-to-left support for GridView and ListView GridView and ListView can now be laid out right-to-left. The behaviour should be identical and mirrored to the oridinary behaviour. Change-Id: I8e55c5f88358042caa5201712ef239cd67628172 Task-number: QTBUG-15877 Reviewed-by: Joona Petrell --- .../graphicsitems/qdeclarativegridview.cpp | 535 ++++++++++++++++----- .../graphicsitems/qdeclarativegridview_p.h | 12 +- .../graphicsitems/qdeclarativelistview.cpp | 385 +++++++++++---- .../graphicsitems/qdeclarativelistview_p.h | 11 +- .../data/gridview-enforcerange.qml | 2 + .../qdeclarativegridview/data/gridview1.qml | 3 +- .../tst_qdeclarativegridview.cpp | 324 +++++++++++++ .../tst_qdeclarativelistview.cpp | 42 ++ 8 files changed, 1102 insertions(+), 212 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 7e7889c..39fa8e8 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -68,19 +68,60 @@ public: } ~FxGridItem() {} - qreal rowPos() const { return (view->flow() == QDeclarativeGridView::LeftToRight ? item->y() : item->x()); } - qreal colPos() const { return (view->flow() == QDeclarativeGridView::LeftToRight ? item->x() : item->y()); } + qreal rowPos() const { + qreal rowPos = 0; + if (view->flow() == QDeclarativeGridView::LeftToRight) { + rowPos = item->y(); + } else { + if (view->layoutDirection() == Qt::LeftToRight) + rowPos = item->x(); + else + rowPos = -view->cellWidth()-item->x(); + } + return rowPos; + } + qreal colPos() const { + qreal colPos = 0; + if (view->flow() == QDeclarativeGridView::LeftToRight) { + if (view->layoutDirection() == Qt::LeftToRight) { + colPos = item->x(); + } else { + int colSize = view->cellWidth(); + int columns = view->width()/colSize; + colPos = colSize * (columns-1) - item->x(); + } + } else { + colPos = item->y(); + } + + return colPos; + } + qreal endRowPos() const { - return view->flow() == QDeclarativeGridView::LeftToRight - ? item->y() + view->cellHeight() - 1 - : item->x() + view->cellWidth() - 1; + if (view->flow() == QDeclarativeGridView::LeftToRight) { + return item->y() + view->cellHeight() - 1; + } else { + if (view->layoutDirection() == Qt::LeftToRight) + return item->x() + view->cellWidth() - 1; + else + return -item->x() - 1; + } } void setPosition(qreal col, qreal row) { - if (view->flow() == QDeclarativeGridView::LeftToRight) { - item->setPos(QPointF(col, row)); + if (view->layoutDirection() == Qt::LeftToRight) { + if (view->flow() == QDeclarativeGridView::LeftToRight) + item->setPos(QPointF(col, row)); + else + item->setPos(QPointF(row, col)); } else { - item->setPos(QPointF(row, col)); + if (view->flow() == QDeclarativeGridView::LeftToRight) { + int columns = view->width()/view->cellWidth(); + item->setPos(QPointF((view->cellWidth() * (columns-1) - col), row)); + } else { + item->setPos(QPointF(-view->cellWidth()-row, col)); + } } + } bool contains(int x, int y) const { return (x >= item->x() && x < item->x() + view->cellWidth() && @@ -101,10 +142,12 @@ class QDeclarativeGridViewPrivate : public QDeclarativeFlickablePrivate public: QDeclarativeGridViewPrivate() - : currentItem(0), flow(QDeclarativeGridView::LeftToRight) + : currentItem(0), layoutDirection(Qt::LeftToRight), flow(QDeclarativeGridView::LeftToRight) , visibleIndex(0) , currentIndex(-1) , cellWidth(100), cellHeight(100), columns(1), requestedIndex(-1), itemCount(0) - , highlightRangeStart(0), highlightRangeEnd(0), highlightRange(QDeclarativeGridView::NoHighlightRange) + , highlightRangeStart(0), highlightRangeEnd(0) + , highlightRangeStartValid(false), highlightRangeEndValid(false) + , highlightRange(QDeclarativeGridView::NoHighlightRange) , highlightComponent(0), highlight(0), trackedItem(0) , moveReason(Other), buffer(0), highlightXAnimator(0), highlightYAnimator(0) , highlightMoveDuration(150) @@ -144,35 +187,54 @@ public: return 0; } + bool isRightToLeftTopToBottom() const { + return flow == QDeclarativeGridView::TopToBottom && layoutDirection == Qt::RightToLeft; + } + qreal position() const { Q_Q(const QDeclarativeGridView); return flow == QDeclarativeGridView::LeftToRight ? q->contentY() : q->contentX(); } void setPosition(qreal pos) { Q_Q(QDeclarativeGridView); - if (flow == QDeclarativeGridView::LeftToRight) + if (flow == QDeclarativeGridView::LeftToRight) { q->QDeclarativeFlickable::setContentY(pos); - else - q->QDeclarativeFlickable::setContentX(pos); + q->QDeclarativeFlickable::setContentX(0); + } else { + if (layoutDirection == Qt::LeftToRight) + q->QDeclarativeFlickable::setContentX(pos); + else + q->QDeclarativeFlickable::setContentX(-pos-size()); + q->QDeclarativeFlickable::setContentY(0); + } } int size() const { Q_Q(const QDeclarativeGridView); return flow == QDeclarativeGridView::LeftToRight ? q->height() : q->width(); } - qreal startPosition() const { + qreal originPosition() const { qreal pos = 0; if (!visibleItems.isEmpty()) pos = visibleItems.first()->rowPos() - visibleIndex / columns * rowSize(); return pos; } - qreal endPosition() const { + qreal lastPosition() const { qreal pos = 0; if (model && model->count()) pos = rowPosAt(model->count() - 1) + rowSize(); return pos; } + qreal startPosition() const { + return isRightToLeftTopToBottom() ? -lastPosition()+1 : originPosition(); + } + + qreal endPosition() const { + return isRightToLeftTopToBottom() ? -originPosition()+1 : lastPosition(); + + } + bool isValid() const { return model && model->count() && model->isValid(); } @@ -227,7 +289,7 @@ public: } FxGridItem *firstVisibleItem() const { - const qreal pos = position(); + const qreal pos = isRightToLeftTopToBottom() ? -position()-size() : position(); for (int i = 0; i < visibleItems.count(); ++i) { FxGridItem *item = visibleItems.at(i); if (item->index != -1 && item->endRowPos() > pos) @@ -237,15 +299,12 @@ public: } int lastVisibleIndex() const { - int lastIndex = -1; - for (int i = visibleItems.count()-1; i >= 0; --i) { - FxGridItem *gridItem = visibleItems.at(i); - if (gridItem->index != -1) { - lastIndex = gridItem->index; - break; - } + for (int i = 0; i < visibleItems.count(); ++i) { + FxGridItem *item = visibleItems.at(i); + if (item->index != -1) + return item->index; } - return lastIndex; + return -1; } // Map a model index to visibleItems list index. @@ -271,8 +330,15 @@ public: pos += rowSize()/2; snapPos = visibleItems.first()->rowPos() - visibleIndex / columns * rowSize(); snapPos = pos - fmodf(pos - snapPos, qreal(rowSize())); - qreal maxExtent = flow == QDeclarativeGridView::LeftToRight ? -q->maxYExtent() : -q->maxXExtent(); - qreal minExtent = flow == QDeclarativeGridView::LeftToRight ? -q->minYExtent() : -q->minXExtent(); + qreal maxExtent; + qreal minExtent; + if (isRightToLeftTopToBottom()) { + maxExtent = q->minXExtent(); + minExtent = q->maxXExtent(); + } else { + maxExtent = flow == QDeclarativeGridView::LeftToRight ? -q->maxYExtent() : -q->maxXExtent(); + minExtent = flow == QDeclarativeGridView::LeftToRight ? -q->minYExtent() : -q->minXExtent(); + } if (snapPos > maxExtent) snapPos = maxExtent; if (snapPos < minExtent) @@ -363,6 +429,7 @@ public: QList<FxGridItem*> visibleItems; QHash<QDeclarativeItem*,int> unrequestedItems; FxGridItem *currentItem; + Qt::LayoutDirection layoutDirection; QDeclarativeGridView::Flow flow; int visibleIndex; int currentIndex; @@ -373,6 +440,8 @@ public: int itemCount; qreal highlightRangeStart; qreal highlightRangeEnd; + bool highlightRangeStartValid; + bool highlightRangeEndValid; QDeclarativeGridView::HighlightRangeMode highlightRange; QDeclarativeComponent *highlightComponent; FxGridItem *highlight; @@ -554,7 +623,7 @@ void QDeclarativeGridViewPrivate::refill(qreal from, qreal to, bool doBuffer) if (!lazyRelease || !changed || deferredRelease) { // avoid destroying items in the same frame that we create while (visibleItems.count() > 1 && (item = visibleItems.first()) - && item->endRowPos() < bufferFrom - rowSize()*(item->colPos()/colSize()+1)/(columns+1)) { + && item->rowPos()+rowSize()-1 < bufferFrom - rowSize()*(item->colPos()/colSize()+1)/(columns+1)) { if (item->attached->delayRemove()) break; // qDebug() << "refill: remove first" << visibleIndex << "top end pos" << item->endRowPos(); @@ -596,12 +665,14 @@ void QDeclarativeGridViewPrivate::refill(qreal from, qreal to, bool doBuffer) void QDeclarativeGridViewPrivate::updateGrid() { Q_Q(QDeclarativeGridView); + columns = (int)qMax((flow == QDeclarativeGridView::LeftToRight ? q->width() : q->height()) / colSize(), qreal(1.)); if (isValid()) { if (flow == QDeclarativeGridView::LeftToRight) q->setContentHeight(endPosition() - startPosition()); else - q->setContentWidth(endPosition() - startPosition()); + q->setContentWidth(lastPosition() - originPosition()); + setPosition(0); } } @@ -626,7 +697,7 @@ void QDeclarativeGridViewPrivate::layout() qreal rowPos = visibleItems.first()->rowPos(); qreal colPos = visibleItems.first()->colPos(); int col = visibleIndex % columns; - if (colPos != col * colSize()) { + if (colPos != col * colSize() || isRightToLeftTopToBottom()) { colPos = col * colSize(); visibleItems.first()->setPosition(colPos, rowPos); } @@ -669,10 +740,14 @@ void QDeclarativeGridViewPrivate::updateUnrequestedPositions() { QHash<QDeclarativeItem*,int>::const_iterator it; for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) { + QDeclarativeItem *item = it.key(); if (flow == QDeclarativeGridView::LeftToRight) { - it.key()->setPos(QPointF(colPosAt(*it), rowPosAt(*it))); + item->setPos(QPointF(colPosAt(*it), rowPosAt(*it))); } else { - it.key()->setPos(QPointF(rowPosAt(*it), colPosAt(*it))); + if (isRightToLeftTopToBottom()) + item->setPos(QPointF(-rowPosAt(*it)-item->width(), colPosAt(*it))); + else + item->setPos(QPointF(rowPosAt(*it), (columns-1)*colSize()-colPosAt(*it))); } } } @@ -837,23 +912,30 @@ void QDeclarativeGridViewPrivate::updateFooter() } } if (footer) { + qreal colOffset = 0; + qreal rowOffset; + if (isRightToLeftTopToBottom()) { + rowOffset = footer->item->width()-cellWidth; + } else { + rowOffset = 0; + if (layoutDirection == Qt::RightToLeft) + colOffset = footer->item->width()-cellWidth; + } if (visibleItems.count()) { - qreal endPos = endPosition(); + qreal endPos = lastPosition(); if (lastVisibleIndex() == model->count()-1) { - footer->setPosition(0, endPos); + footer->setPosition(colOffset, endPos + rowOffset); } else { - qreal visiblePos = position() + q->height(); - if (endPos <= visiblePos || footer->endRowPos() < endPos) - footer->setPosition(0, endPos); + qreal visiblePos = isRightToLeftTopToBottom() ? -position() : position() + size(); + if (endPos <= visiblePos || footer->endRowPos() < endPos + rowOffset) + footer->setPosition(colOffset, endPos + rowOffset); } } else { qreal endPos = 0; if (header) { - endPos += flow == QDeclarativeGridView::LeftToRight - ? header->item->height() - : header->item->width(); + endPos += flow == QDeclarativeGridView::LeftToRight ? header->item->height() : header->item->width(); } - footer->setPosition(0, endPos); + footer->setPosition(colOffset, endPos); } } } @@ -883,16 +965,27 @@ void QDeclarativeGridViewPrivate::updateHeader() } } if (header) { + qreal colOffset = 0; + qreal rowOffset; + if (isRightToLeftTopToBottom()) { + rowOffset = -cellWidth; + } else { + rowOffset = -headerSize(); + if (layoutDirection == Qt::RightToLeft) + colOffset = header->item->width()-cellWidth; + } if (visibleItems.count()) { - qreal startPos = startPosition(); + qreal startPos = originPosition(); if (visibleIndex == 0) { - header->setPosition(0, startPos - headerSize()); + header->setPosition(colOffset, startPos + rowOffset); } else { - if (position() <= startPos || header->rowPos() > startPos - headerSize()) - header->setPosition(0, startPos - headerSize()); + qreal tempPos = isRightToLeftTopToBottom() ? -position()-size() : position(); + qreal headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos(); + if (tempPos <= startPos || headerPos > startPos + rowOffset) + header->setPosition(colOffset, startPos + rowOffset); } } else { - header->setPosition(0, 0); + header->setPosition(colOffset, 0); } } } @@ -915,21 +1008,44 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m int oldDuration = fixupDuration; fixupDuration = moveReason == Mouse ? fixupDuration : 0; + qreal highlightStart; + qreal highlightEnd; + qreal viewPos; + if (isRightToLeftTopToBottom()) { + // Handle Right-To-Left exceptions + viewPos = -position()-size(); + highlightStart = highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart; + highlightEnd = highlightRangeEndValid ? size()-highlightRangeStart : highlightRangeEnd; + } else { + viewPos = position(); + highlightStart = highlightRangeStart; + highlightEnd = highlightRangeEnd; + } + if (snapMode != QDeclarativeGridView::NoSnap) { - FxGridItem *topItem = snapItemAt(position()+highlightRangeStart); - FxGridItem *bottomItem = snapItemAt(position()+highlightRangeEnd); + qreal tempPosition = isRightToLeftTopToBottom() ? -position()-size() : position(); + FxGridItem *topItem = snapItemAt(tempPosition+highlightStart); + FxGridItem *bottomItem = snapItemAt(tempPosition+highlightEnd); qreal pos; if (topItem && bottomItem && haveHighlightRange && highlightRange == QDeclarativeGridView::StrictlyEnforceRange) { - qreal topPos = qMin(topItem->rowPos() - highlightRangeStart, -maxExtent); - qreal bottomPos = qMax(bottomItem->rowPos() - highlightRangeEnd, -minExtent); + qreal topPos = qMin(topItem->rowPos() - highlightStart, -maxExtent); + qreal bottomPos = qMax(bottomItem->rowPos() - highlightEnd, -minExtent); pos = qAbs(data.move + topPos) < qAbs(data.move + bottomPos) ? topPos : bottomPos; } else if (topItem) { - if (topItem->index == 0 && header && position()+highlightRangeStart < header->rowPos()+headerSize()/2) - pos = header->rowPos() - highlightRangeStart; - else - pos = qMax(qMin(topItem->rowPos() - highlightRangeStart, -maxExtent), -minExtent); + qreal headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos(); + if (topItem->index == 0 && header && tempPosition+highlightStart < headerPos+headerSize()/2) { + pos = isRightToLeftTopToBottom() ? - headerPos + highlightStart - size() : headerPos - highlightStart; + } else { + if (isRightToLeftTopToBottom()) + pos = qMax(qMin(-topItem->rowPos() + highlightStart - size(), -maxExtent), -minExtent); + else + pos = qMax(qMin(topItem->rowPos() - highlightStart, -maxExtent), -minExtent); + } } else if (bottomItem) { - pos = qMax(qMin(bottomItem->rowPos() - highlightRangeStart, -maxExtent), -minExtent); + if (isRightToLeftTopToBottom()) + pos = qMax(qMin(-bottomItem->rowPos() + highlightStart - size(), -maxExtent), -minExtent); + else + pos = qMax(qMin(bottomItem->rowPos() - highlightStart, -maxExtent), -minExtent); } else { QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent); fixupDuration = oldDuration; @@ -938,12 +1054,15 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m if (currentItem && haveHighlightRange && highlightRange == QDeclarativeGridView::StrictlyEnforceRange) { updateHighlight(); qreal currPos = currentItem->rowPos(); - if (pos < currPos + rowSize() - highlightRangeEnd) - pos = currPos + rowSize() - highlightRangeEnd; - if (pos > currPos - highlightRangeStart) - pos = currPos - highlightRangeStart; + if (isRightToLeftTopToBottom()) + pos = -pos-size(); // Transform Pos if required + if (pos < currPos + rowSize() - highlightEnd) + pos = currPos + rowSize() - highlightEnd; + if (pos > currPos - highlightStart) + pos = currPos - highlightStart; + if (isRightToLeftTopToBottom()) + pos = -pos-size(); // Untransform } - qreal dist = qAbs(data.move + pos); if (dist > 0) { timeline.reset(data.move); @@ -957,12 +1076,12 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m if (currentItem) { updateHighlight(); qreal pos = currentItem->rowPos(); - qreal viewPos = position(); - if (viewPos < pos + rowSize() - highlightRangeEnd) - viewPos = pos + rowSize() - highlightRangeEnd; - if (viewPos > pos - highlightRangeStart) - viewPos = pos - highlightRangeStart; - + if (viewPos < pos + rowSize() - highlightEnd) + viewPos = pos + rowSize() - highlightEnd; + if (viewPos > pos - highlightStart) + viewPos = pos - highlightStart; + if (isRightToLeftTopToBottom()) + viewPos = -viewPos-size(); timeline.reset(data.move); if (viewPos != position()) { if (fixupDuration) @@ -989,12 +1108,14 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m return; } qreal maxDistance = 0; - // -ve velocity means list is moving up + qreal dataValue = isRightToLeftTopToBottom() ? -data.move.value()+size() : data.move.value(); + // -ve velocity means list is moving up/left if (velocity > 0) { if (data.move.value() < minExtent) { if (snapMode == QDeclarativeGridView::SnapOneRow) { - if (FxGridItem *item = firstVisibleItem()) - maxDistance = qAbs(item->rowPos() + data.move.value()); + if (FxGridItem *item = firstVisibleItem()) { + maxDistance = qAbs(item->rowPos() + dataValue); + } } else { maxDistance = qAbs(minExtent - data.move.value()); } @@ -1004,8 +1125,8 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m } else { if (data.move.value() > maxExtent) { if (snapMode == QDeclarativeGridView::SnapOneRow) { - qreal pos = snapPosAt(-data.move.value()) + rowSize(); - maxDistance = qAbs(pos + data.move.value()); + qreal pos = snapPosAt(-dataValue) + (isRightToLeftTopToBottom() ? 0 : rowSize()); + maxDistance = qAbs(pos + dataValue); } else { maxDistance = qAbs(maxExtent - data.move.value()); } @@ -1013,7 +1134,10 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m if (snapMode == QDeclarativeGridView::NoSnap && highlightRange != QDeclarativeGridView::StrictlyEnforceRange) data.flickTarget = maxExtent; } + bool overShoot = boundsBehavior == QDeclarativeFlickable::DragAndOvershootBounds; + qreal highlightStart = isRightToLeftTopToBottom() && highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart; + if (maxDistance > 0 || overShoot) { // This mode requires the grid to stop exactly on a row boundary. qreal v = velocity; @@ -1032,7 +1156,9 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m dist = qMin(dist, maxDistance); if (v > 0) dist = -dist; - data.flickTarget = -snapPosAt(-(data.move.value() - highlightRangeStart) + dist) + highlightRangeStart; + qreal distTemp = isRightToLeftTopToBottom() ? -dist : dist; + data.flickTarget = -snapPosAt(-(dataValue - highlightStart) + distTemp) + highlightStart; + data.flickTarget = isRightToLeftTopToBottom() ? -data.flickTarget+size() : data.flickTarget; qreal adjDist = -data.flickTarget + data.move.value(); if (qAbs(adjDist) > qAbs(dist)) { // Prevent painfully slow flicking - adjust velocity to suit flickDeceleration @@ -1224,6 +1350,13 @@ QVariant QDeclarativeGridView::model() const return d->modelVariant; } +// For internal use +int QDeclarativeGridView::modelCount() const +{ + Q_D(const QDeclarativeGridView); + return d->model->count(); +} + void QDeclarativeGridView::setModel(const QVariant &model) { Q_D(QDeclarativeGridView); @@ -1549,6 +1682,7 @@ qreal QDeclarativeGridView::preferredHighlightBegin() const void QDeclarativeGridView::setPreferredHighlightBegin(qreal start) { Q_D(QDeclarativeGridView); + d->highlightRangeStartValid = true; if (d->highlightRangeStart == start) return; d->highlightRangeStart = start; @@ -1556,6 +1690,16 @@ void QDeclarativeGridView::setPreferredHighlightBegin(qreal start) emit preferredHighlightBeginChanged(); } +void QDeclarativeGridView::resetPreferredHighlightBegin() +{ + Q_D(QDeclarativeGridView); + d->highlightRangeStartValid = false; + if (d->highlightRangeStart == 0) + return; + d->highlightRangeStart = 0; + emit preferredHighlightBeginChanged(); +} + qreal QDeclarativeGridView::preferredHighlightEnd() const { Q_D(const QDeclarativeGridView); @@ -1565,6 +1709,7 @@ qreal QDeclarativeGridView::preferredHighlightEnd() const void QDeclarativeGridView::setPreferredHighlightEnd(qreal end) { Q_D(QDeclarativeGridView); + d->highlightRangeEndValid = true; if (d->highlightRangeEnd == end) return; d->highlightRangeEnd = end; @@ -1572,6 +1717,16 @@ void QDeclarativeGridView::setPreferredHighlightEnd(qreal end) emit preferredHighlightEndChanged(); } +void QDeclarativeGridView::resetPreferredHighlightEnd() +{ + Q_D(QDeclarativeGridView); + d->highlightRangeEndValid = false; + if (d->highlightRangeEnd == 0) + return; + d->highlightRangeEnd = 0; + emit preferredHighlightEndChanged(); +} + QDeclarativeGridView::HighlightRangeMode QDeclarativeGridView::highlightRangeMode() const { Q_D(const QDeclarativeGridView); @@ -1588,6 +1743,43 @@ void QDeclarativeGridView::setHighlightRangeMode(HighlightRangeMode mode) emit highlightRangeModeChanged(); } +/*! + \qmlproperty enumeration GridView::layoutDirection + This property holds the layout direction of the grid. + + Possible values: + + \list + \o Qt.LeftToRight (default) - Items will be laid out starting in the top, left corner. The flow is + dependent on the \l GridView::flow property. + \o Qt.RightToLeft - Items will be laid out starting in the top, right corner. The flow is dependent + on the \l GridView:flow property. + \endlist + + \bold Note: If GridView::flow is set to GridView.LeftToRight, this is not to be confused if + GridView::layoutDirection is set to Qt.RightToLeft. The GridView.LeftToRight flow value simply + indicates that the flow is horizontal. + +*/ + +Qt::LayoutDirection QDeclarativeGridView::layoutDirection() const +{ + Q_D(const QDeclarativeGridView); + return d->layoutDirection; +} + +void QDeclarativeGridView::setLayoutDirection(Qt::LayoutDirection layoutDirection) +{ + Q_D(QDeclarativeGridView); + if (d->layoutDirection != layoutDirection) { + d->layoutDirection = layoutDirection; + d->clear(); + d->updateGrid(); + refill(); + d->updateCurrent(d->currentIndex); + emit layoutDirectionChanged(); + } +} /*! \qmlproperty enumeration GridView::flow @@ -1890,11 +2082,23 @@ void QDeclarativeGridView::viewportMoved() if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) { // reposition highlight qreal pos = d->highlight->rowPos(); - qreal viewPos = d->position(); - if (pos > viewPos + d->highlightRangeEnd - d->rowSize()) - pos = viewPos + d->highlightRangeEnd - d->rowSize(); - if (pos < viewPos + d->highlightRangeStart) - pos = viewPos + d->highlightRangeStart; + qreal viewPos; + qreal highlightStart; + qreal highlightEnd; + if (d->isRightToLeftTopToBottom()) { + highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart; + highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd; + viewPos = -d->position()-d->size(); + } else { + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + viewPos = d->position(); + } + if (pos > viewPos + highlightEnd - d->rowSize()) + pos = viewPos + highlightEnd - d->rowSize(); + if (pos < viewPos + highlightStart) + pos = viewPos + highlightStart; + d->highlight->setPosition(d->highlight->colPos(), qRound(pos)); // update current index @@ -1956,11 +2160,27 @@ qreal QDeclarativeGridView::minXExtent() const if (d->flow == QDeclarativeGridView::LeftToRight) return QDeclarativeFlickable::minXExtent(); qreal extent = -d->startPosition(); - if (d->header && d->visibleItems.count()) - extent += d->header->item->width(); + qreal highlightStart; + qreal highlightEnd; + qreal endPositionFirstItem; + if (d->isRightToLeftTopToBottom()) { + endPositionFirstItem = d->rowPosAt(d->model->count()-1); + highlightStart = d->highlightRangeStartValid + ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem) + : d->size() - (d->lastPosition()-endPositionFirstItem); + highlightEnd = d->highlightRangeEndValid ? d->highlightRangeEnd : d->size(); + if (d->footer && d->visibleItems.count()) + extent += d->footer->item->width(); + } else { + endPositionFirstItem = d->rowPosAt(0)+d->rowSize(); + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + if (d->header && d->visibleItems.count()) + extent += d->header->item->width(); + } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - extent += d->highlightRangeStart; - extent = qMax(extent, -(d->rowPosAt(0) + d->rowSize() - d->highlightRangeEnd)); + extent += highlightStart; + extent = qMax(extent, -(endPositionFirstItem - highlightEnd)); } return extent; } @@ -1973,15 +2193,36 @@ qreal QDeclarativeGridView::maxXExtent() const qreal extent; if (!d->model || !d->model->count()) { extent = 0; - } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - extent = -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart); - if (d->highlightRangeEnd != d->highlightRangeStart) - extent = qMin(extent, -(d->endPosition() - d->highlightRangeEnd + 1)); + } + qreal highlightStart; + qreal highlightEnd; + qreal lastItemPosition; + if (d->isRightToLeftTopToBottom()){ + highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size(); + highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size(); + lastItemPosition = d->endPosition(); + } else { + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + lastItemPosition = d->rowPosAt(d->model->count()-1); + } + if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { + extent = -(lastItemPosition - highlightStart); + if (highlightEnd != highlightStart) + extent = d->isRightToLeftTopToBottom() + ? qMax(extent, -(d->endPosition() - highlightEnd + 1)) + : qMin(extent, -(d->endPosition() - highlightEnd + 1)); } else { extent = -(d->endPosition() - width()); } - if (d->footer) - extent -= d->footer->item->width(); + if (d->isRightToLeftTopToBottom()) { + if (d->header) + extent -= d->header->item->width(); + } else { + if (d->footer) + extent -= d->footer->item->width(); + } + const qreal minX = minXExtent(); if (extent > minX) extent = minX; @@ -2094,15 +2335,30 @@ void QDeclarativeGridView::moveCurrentIndexLeft() const int count = d->model ? d->model->count() : 0; if (!count) return; - if (d->flow == QDeclarativeGridView::LeftToRight) { - if (currentIndex() > 0 || d->wrap) { - int index = currentIndex() - 1; - setCurrentIndex((index >= 0 && index < count) ? index : count-1); + + if (d->layoutDirection == Qt::LeftToRight) { + if (d->flow == QDeclarativeGridView::LeftToRight) { + if (currentIndex() > 0 || d->wrap) { + int index = currentIndex() - 1; + setCurrentIndex((index >= 0 && index < count) ? index : count-1); + } + } else { + if (currentIndex() >= d->columns || d->wrap) { + int index = currentIndex() - d->columns; + setCurrentIndex((index >= 0 && index < count) ? index : count-1); + } } } else { - if (currentIndex() >= d->columns || d->wrap) { - int index = currentIndex() - d->columns; - setCurrentIndex((index >= 0 && index < count) ? index : count-1); + if (d->flow == QDeclarativeGridView::LeftToRight) { + if (currentIndex() < count - 1 || d->wrap) { + int index = currentIndex() + 1; + setCurrentIndex((index >= 0 && index < count) ? index : 0); + } + } else { + if (currentIndex() < count - d->columns || d->wrap) { + int index = currentIndex() + d->columns; + setCurrentIndex((index >= 0 && index < count) ? index : 0); + } } } } @@ -2122,15 +2378,30 @@ void QDeclarativeGridView::moveCurrentIndexRight() const int count = d->model ? d->model->count() : 0; if (!count) return; - if (d->flow == QDeclarativeGridView::LeftToRight) { - if (currentIndex() < count - 1 || d->wrap) { - int index = currentIndex() + 1; - setCurrentIndex((index >= 0 && index < count) ? index : 0); + + if (d->layoutDirection == Qt::LeftToRight) { + if (d->flow == QDeclarativeGridView::LeftToRight) { + if (currentIndex() < count - 1 || d->wrap) { + int index = currentIndex() + 1; + setCurrentIndex((index >= 0 && index < count) ? index : 0); + } + } else { + if (currentIndex() < count - d->columns || d->wrap) { + int index = currentIndex()+d->columns; + setCurrentIndex((index >= 0 && index < count) ? index : 0); + } } } else { - if (currentIndex() < count - d->columns || d->wrap) { - int index = currentIndex()+d->columns; - setCurrentIndex((index >= 0 && index < count) ? index : 0); + if (d->flow == QDeclarativeGridView::LeftToRight) { + if (currentIndex() > 0 || d->wrap) { + int index = currentIndex() - 1; + setCurrentIndex((index >= 0 && index < count) ? index : count-1); + } + } else { + if (currentIndex() >= d->columns || d->wrap) { + int index = currentIndex() - d->columns; + setCurrentIndex((index >= 0 && index < count) ? index : count-1); + } } } } @@ -2147,16 +2418,24 @@ void QDeclarativeGridViewPrivate::positionViewAtIndex(int index, int mode) if (layoutScheduled) layout(); - qreal pos = position(); + qreal pos = isRightToLeftTopToBottom() ? -position() - size() : position(); FxGridItem *item = visibleItem(idx); - qreal maxExtent = flow == QDeclarativeGridView::LeftToRight ? -q->maxYExtent() : -q->maxXExtent(); + qreal maxExtent; + if (flow == QDeclarativeGridView::LeftToRight) + maxExtent = -q->maxYExtent(); + else + maxExtent = isRightToLeftTopToBottom() ? q->minXExtent()-size() : -q->maxXExtent(); + if (!item) { int itemPos = rowPosAt(idx); // save the currently visible items in case any of them end up visible again QList<FxGridItem*> oldVisible = visibleItems; visibleItems.clear(); visibleIndex = idx - idx % columns; - maxExtent = flow == QDeclarativeGridView::LeftToRight ? -q->maxYExtent() : -q->maxXExtent(); + if (flow == QDeclarativeGridView::LeftToRight) + maxExtent = -q->maxYExtent(); + else + maxExtent = isRightToLeftTopToBottom() ? q->minXExtent()-size() : -q->maxXExtent(); setPosition(qMin(qreal(itemPos), maxExtent)); // now release the reference to all the old visible items. for (int i = 0; i < oldVisible.count(); ++i) @@ -2197,8 +2476,13 @@ void QDeclarativeGridViewPrivate::positionViewAtIndex(int index, int mode) if (itemPos < pos) pos = itemPos; } + pos = qMin(pos, maxExtent); - qreal minExtent = flow == QDeclarativeGridView::LeftToRight ? -q->minYExtent() : -q->minXExtent(); + qreal minExtent; + if (flow == QDeclarativeGridView::LeftToRight) + minExtent = -q->minYExtent(); + else + minExtent = isRightToLeftTopToBottom() ? q->maxXExtent()-size() : -q->minXExtent(); pos = qMax(pos, minExtent); moveReason = QDeclarativeGridViewPrivate::Other; q->cancelFlick(); @@ -2337,32 +2621,43 @@ void QDeclarativeGridView::trackedPositionChanged() return; if (d->moveReason == QDeclarativeGridViewPrivate::SetIndex) { const qreal trackedPos = d->trackedItem->rowPos(); - const qreal viewPos = d->position(); + qreal viewPos; + qreal highlightStart; + qreal highlightEnd; + if (d->isRightToLeftTopToBottom()) { + viewPos = -d->position()-d->size(); + highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart; + highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd; + } else { + viewPos = d->position(); + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + } qreal pos = viewPos; if (d->haveHighlightRange) { if (d->highlightRange == StrictlyEnforceRange) { - if (trackedPos > pos + d->highlightRangeEnd - d->rowSize()) - pos = trackedPos - d->highlightRangeEnd + d->rowSize(); - if (trackedPos < pos + d->highlightRangeStart) - pos = trackedPos - d->highlightRangeStart; + if (trackedPos > pos + highlightEnd - d->rowSize()) + pos = trackedPos - highlightEnd + d->rowSize(); + if (trackedPos < pos + highlightStart) + pos = trackedPos - highlightStart; } else { - if (trackedPos < d->startPosition() + d->highlightRangeStart) { + if (trackedPos < d->startPosition() + highlightStart) { pos = d->startPosition(); - } else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + d->highlightRangeEnd) { + } else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + highlightEnd) { pos = d->endPosition() - d->size() + 1; if (pos < d->startPosition()) pos = d->startPosition(); } else { - if (trackedPos < viewPos + d->highlightRangeStart) { - pos = trackedPos - d->highlightRangeStart; - } else if (trackedPos > viewPos + d->highlightRangeEnd - d->rowSize()) { - pos = trackedPos - d->highlightRangeEnd + d->rowSize(); + if (trackedPos < viewPos + highlightStart) { + pos = trackedPos - highlightStart; + } else if (trackedPos > viewPos + highlightEnd - d->rowSize()) { + pos = trackedPos - highlightEnd + d->rowSize(); } } } } else { if (trackedPos < viewPos && d->currentItem->rowPos() < viewPos) { - pos = d->currentItem->rowPos() < trackedPos ? trackedPos : d->currentItem->rowPos(); + pos = qMax(trackedPos, d->currentItem->rowPos()); } else if (d->trackedItem->endRowPos() >= viewPos + d->size() && d->currentItem->endRowPos() >= viewPos + d->size()) { if (d->trackedItem->endRowPos() <= d->currentItem->endRowPos()) { @@ -2430,7 +2725,8 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) modelIndex = d->visibleIndex; } - int to = d->buffer+d->position()+d->size()-1; + qreal tempPos = d->isRightToLeftTopToBottom() ? -d->position()-d->size() : d->position(); + int to = d->buffer+tempPos+d->size()-1; int colPos = 0; int rowPos = 0; if (d->visibleItems.count()) { @@ -2756,7 +3052,10 @@ void QDeclarativeGridView::animStopped() void QDeclarativeGridView::refill() { Q_D(QDeclarativeGridView); - d->refill(d->position(), d->position()+d->size()-1); + if (d->isRightToLeftTopToBottom()) + d->refill(-d->position()-d->size()+1, -d->position()); + else + d->refill(d->position(), d->position()+d->size()-1); } diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h index 248b9ef..fc9e6b4 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview_p.h +++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h @@ -69,11 +69,12 @@ class Q_AUTOTEST_EXPORT QDeclarativeGridView : public QDeclarativeFlickable Q_PROPERTY(bool highlightFollowsCurrentItem READ highlightFollowsCurrentItem WRITE setHighlightFollowsCurrentItem) Q_PROPERTY(int highlightMoveDuration READ highlightMoveDuration WRITE setHighlightMoveDuration NOTIFY highlightMoveDurationChanged) - Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged) - Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged) + Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged RESET resetPreferredHighlightBegin) + Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged RESET resetPreferredHighlightEnd) Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged) Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged) + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) //Versioning support? Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged) Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged) Q_PROPERTY(int cellWidth READ cellWidth WRITE setCellWidth NOTIFY cellWidthChanged) @@ -95,6 +96,7 @@ public: ~QDeclarativeGridView(); QVariant model() const; + int modelCount() const; void setModel(const QVariant &); QDeclarativeComponent *delegate() const; @@ -122,9 +124,14 @@ public: qreal preferredHighlightBegin() const; void setPreferredHighlightBegin(qreal); + void resetPreferredHighlightBegin(); qreal preferredHighlightEnd() const; void setPreferredHighlightEnd(qreal); + void resetPreferredHighlightEnd(); + + Qt::LayoutDirection layoutDirection() const; + void setLayoutDirection(Qt::LayoutDirection); enum Flow { LeftToRight, TopToBottom }; Flow flow() const; @@ -184,6 +191,7 @@ Q_SIGNALS: void modelChanged(); void delegateChanged(); void flowChanged(); + void layoutDirectionChanged(); void keyNavigationWrapsChanged(); void cacheBufferChanged(); void snapModeChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index a60a4aa..6749657 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -100,13 +100,20 @@ public: } ~FxListItem() {} qreal position() const { - if (section) - return (view->orientation() == QDeclarativeListView::Vertical ? section->y() : section->x()); - else - return (view->orientation() == QDeclarativeListView::Vertical ? item->y() : item->x()); + if (section) { + if (view->orientation() == QDeclarativeListView::Vertical) + return section->y(); + else + return (view->layoutDirection() == Qt::RightToLeft ? -section->width()-section->x() : section->x()); + } else { + return itemPosition(); + } } qreal itemPosition() const { - return (view->orientation() == QDeclarativeListView::Vertical ? item->y() : item->x()); + if (view->orientation() == QDeclarativeListView::Vertical) + return item->y(); + else + return (view->layoutDirection() == Qt::RightToLeft ? -item->width()-item->x() : item->x()); } qreal size() const { if (section) @@ -123,9 +130,13 @@ public: return 0.0; } qreal endPosition() const { - return (view->orientation() == QDeclarativeListView::Vertical - ? item->y() + (item->height() >= 1.0 ? item->height() : 1) - : item->x() + (item->width() >= 1.0 ? item->width() : 1)) - 1; + if (view->orientation() == QDeclarativeListView::Vertical) { + return item->y() + (item->height() >= 1.0 ? item->height() : 1) - 1; + } else { + return (view->layoutDirection() == Qt::RightToLeft + ? -item->width()-item->x() + (item->width() >= 1.0 ? item->width() : 1) + : item->x() + (item->width() >= 1.0 ? item->width() : 1)) - 1; + } } void setPosition(qreal pos) { if (view->orientation() == QDeclarativeListView::Vertical) { @@ -135,11 +146,19 @@ public: } item->setY(pos); } else { - if (section) { - section->setX(pos); - pos += section->width(); + if (view->layoutDirection() == Qt::RightToLeft) { + if (section) { + section->setX(-section->width()-pos); + pos += section->width(); + } + item->setX(-item->width()-pos); + } else { + if (section) { + section->setX(pos); + pos += section->width(); + } + item->setX(pos); } - item->setX(pos); } } void setSize(qreal size) { @@ -168,10 +187,11 @@ class QDeclarativeListViewPrivate : public QDeclarativeFlickablePrivate public: QDeclarativeListViewPrivate() - : currentItem(0), orient(QDeclarativeListView::Vertical) + : currentItem(0), orient(QDeclarativeListView::Vertical), layoutDirection(Qt::LeftToRight) , visiblePos(0), visibleIndex(0) , averageSize(100.0), currentIndex(-1), requestedIndex(-1) , itemCount(0), highlightRangeStart(0), highlightRangeEnd(0) + , highlightRangeStartValid(false), highlightRangeEndValid(false) , highlightComponent(0), highlight(0), trackedItem(0) , moveReason(Other), buffer(0), highlightPosAnimator(0), highlightSizeAnimator(0) , sectionCriteria(0), spacing(0.0) @@ -204,7 +224,7 @@ public: } FxListItem *firstVisibleItem() const { - const qreal pos = position(); + const qreal pos = isRightToLeft() ? -position()-size() : position(); for (int i = 0; i < visibleItems.count(); ++i) { FxListItem *item = visibleItems.at(i); if (item->index != -1 && item->endPosition() > pos) @@ -214,7 +234,7 @@ public: } FxListItem *nextVisibleItem() const { - const qreal pos = position(); + const qreal pos = isRightToLeft() ? -position()-size() : position(); bool foundFirst = false; for (int i = 0; i < visibleItems.count(); ++i) { FxListItem *item = visibleItems.at(i); @@ -228,23 +248,32 @@ public: return 0; } + bool isRightToLeft() const { + return (layoutDirection == Qt::RightToLeft && orient == QDeclarativeListView::Horizontal); + } + qreal position() const { Q_Q(const QDeclarativeListView); return orient == QDeclarativeListView::Vertical ? q->contentY() : q->contentX(); } + void setPosition(qreal pos) { Q_Q(QDeclarativeListView); - if (orient == QDeclarativeListView::Vertical) + if (orient == QDeclarativeListView::Vertical) { q->QDeclarativeFlickable::setContentY(pos); - else - q->QDeclarativeFlickable::setContentX(pos); + } else { + if (layoutDirection == Qt::RightToLeft) + q->QDeclarativeFlickable::setContentX(-pos-size()); + else + q->QDeclarativeFlickable::setContentX(pos); + } } qreal size() const { Q_Q(const QDeclarativeListView); return orient == QDeclarativeListView::Vertical ? q->height() : q->width(); } - qreal startPosition() const { + qreal originPosition() const { qreal pos = 0; if (!visibleItems.isEmpty()) { pos = (*visibleItems.constBegin())->position(); @@ -254,7 +283,7 @@ public: return pos; } - qreal endPosition() const { + qreal lastPosition() const { qreal pos = 0; if (!visibleItems.isEmpty()) { int invisibleCount = visibleItems.count() - visibleIndex; @@ -271,6 +300,14 @@ public: return pos; } + qreal startPosition() const { + return isRightToLeft() ? -lastPosition()-1 : originPosition(); + } + + qreal endPosition() const { + return isRightToLeft() ? -originPosition()-1 : lastPosition(); + } + qreal positionAt(int modelIndex) const { if (FxListItem *item = visibleItem(modelIndex)) return item->position(); @@ -348,7 +385,7 @@ public: } else if (pos > endPos) return endPos + qRound((pos - endPos) / averageSize) * averageSize; } - return qRound((pos - startPosition()) / averageSize) * averageSize + startPosition(); + return qRound((pos - originPosition()) / averageSize) * averageSize + originPosition(); } FxListItem *snapItemAt(qreal pos) { @@ -464,6 +501,7 @@ public: QHash<QDeclarativeItem*,int> unrequestedItems; FxListItem *currentItem; QDeclarativeListView::Orientation orient; + Qt::LayoutDirection layoutDirection; qreal visiblePos; int visibleIndex; qreal averageSize; @@ -472,6 +510,8 @@ public: int itemCount; qreal highlightRangeStart; qreal highlightRangeEnd; + bool highlightRangeStartValid; + bool highlightRangeEndValid; QDeclarativeComponent *highlightComponent; FxListItem *highlight; FxListItem *trackedItem; @@ -649,7 +689,6 @@ void QDeclarativeListViewPrivate::refill(qreal from, qreal to, bool doBuffer) if (visibleItems.at(i)->index != -1) modelIndex = visibleItems.at(i)->index + 1; } - bool changed = false; FxListItem *item = 0; qreal pos = itemEnd + 1; @@ -795,8 +834,12 @@ void QDeclarativeListViewPrivate::updateUnrequestedPositions() if (item->y() + item->height() > pos && item->y() < pos + q->height()) item->setY(positionAt(*it)); } else { - if (item->x() + item->width() > pos && item->x() < pos + q->width()) - item->setX(positionAt(*it)); + if (item->x() + item->width() > pos && item->x() < pos + q->width()) { + if (isRightToLeft()) + item->setX(-positionAt(*it)-item->width()); + else + item->setX(positionAt(*it)); + } } } } @@ -887,7 +930,9 @@ void QDeclarativeListViewPrivate::updateHighlight() createHighlight(); if (currentItem && autoHighlight && highlight && !movingHorizontally && !movingVertically) { // auto-update highlight - highlightPosAnimator->to = currentItem->itemPosition(); + highlightPosAnimator->to = isRightToLeft() + ? -currentItem->itemPosition()-currentItem->itemSize() + : currentItem->itemPosition(); highlightSizeAnimator->to = currentItem->itemSize(); if (orient == QDeclarativeListView::Vertical) { if (highlight->item->width() == 0) @@ -1104,7 +1149,7 @@ void QDeclarativeListViewPrivate::updateFooter() } if (footer) { if (visibleItems.count()) { - qreal endPos = endPosition() + 1; + qreal endPos = lastPosition() + 1; if (lastVisibleIndex() == model->count()-1) { footer->setPosition(endPos); } else { @@ -1144,7 +1189,7 @@ void QDeclarativeListViewPrivate::updateHeader() } if (header) { if (visibleItems.count()) { - qreal startPos = startPosition(); + qreal startPos = originPosition(); if (visibleIndex == 0) { header->setPosition(startPos - header->size()); } else { @@ -1180,14 +1225,30 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m int oldDuration = fixupDuration; fixupDuration = moveReason == Mouse ? fixupDuration : 0; - if (currentItem && haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) { + qreal highlightStart; + qreal highlightEnd; + qreal viewPos; + if (isRightToLeft()) { + // Handle Right-To-Left exceptions + viewPos = -position()-size(); + highlightStart = highlightRangeStartValid ? size() - highlightRangeEnd : highlightRangeStart; + highlightEnd = highlightRangeEndValid ? size() - highlightRangeStart : highlightRangeEnd; + } else { + viewPos = position(); + highlightStart = highlightRangeStart; + highlightEnd = highlightRangeEnd; + } + + if (currentItem && haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange + && moveReason != QDeclarativeListViewPrivate::SetIndex) { updateHighlight(); qreal pos = currentItem->itemPosition(); - qreal viewPos = position(); - if (viewPos < pos + currentItem->itemSize() - highlightRangeEnd) - viewPos = pos + currentItem->itemSize() - highlightRangeEnd; - if (viewPos > pos - highlightRangeStart) - viewPos = pos - highlightRangeStart; + if (viewPos < pos + currentItem->itemSize() - highlightEnd) + viewPos = pos + currentItem->itemSize() - highlightEnd; + if (viewPos > pos - highlightStart) + viewPos = pos - highlightStart; + if (isRightToLeft()) + viewPos = -viewPos-size(); timeline.reset(data.move); if (viewPos != position()) { @@ -1197,17 +1258,26 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m timeline.set(data.move, -viewPos); } vTime = timeline.time(); - } else if (snapMode != QDeclarativeListView::NoSnap) { - FxListItem *topItem = snapItemAt(position()+highlightRangeStart); - FxListItem *bottomItem = snapItemAt(position()+highlightRangeEnd); + } else if (snapMode != QDeclarativeListView::NoSnap && moveReason != QDeclarativeListViewPrivate::SetIndex) { + qreal tempPosition = isRightToLeft() ? -position()-size() : position(); + FxListItem *topItem = snapItemAt(tempPosition+highlightStart); + FxListItem *bottomItem = snapItemAt(tempPosition+highlightEnd); qreal pos; - if (topItem) { - if (topItem->index == 0 && header && position()+highlightRangeStart < header->position()+header->size()/2) - pos = header->position() - highlightRangeStart; + bool isInBounds = -position() > maxExtent && -position() < minExtent; + if (topItem && isInBounds) { + if (topItem->index == 0 && header && tempPosition+highlightStart < header->position()+header->size()/2) { + pos = isRightToLeft() ? - header->position() + highlightStart - size() : header->position() - highlightStart; + } else { + if (isRightToLeft()) + pos = qMax(qMin(-topItem->position() + highlightStart - size(), -maxExtent), -minExtent); + else + pos = qMax(qMin(topItem->position() - highlightStart, -maxExtent), -minExtent); + } + } else if (bottomItem && isInBounds) { + if (isRightToLeft()) + pos = qMax(qMin(-bottomItem->position() + highlightStart - size(), -maxExtent), -minExtent); else - pos = qMax(qMin(topItem->position() - highlightRangeStart, -maxExtent), -minExtent); - } else if (bottomItem) { - pos = qMax(qMin(bottomItem->position() - highlightRangeStart, -maxExtent), -minExtent); + pos = qMax(qMin(bottomItem->position() - highlightStart, -maxExtent), -minExtent); } else { QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent); fixupDuration = oldDuration; @@ -1241,12 +1311,15 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m return; } qreal maxDistance = 0; + qreal dataValue = isRightToLeft() ? -data.move.value()+size() : data.move.value(); // -ve velocity means list is moving up/left if (velocity > 0) { if (data.move.value() < minExtent) { if (snapMode == QDeclarativeListView::SnapOneItem) { - if (FxListItem *item = firstVisibleItem()) - maxDistance = qAbs(item->position() + data.move.value()); + if (FxListItem *item = isRightToLeft() ? nextVisibleItem() : firstVisibleItem()) { + maxDistance = qAbs(item->position() + dataValue); +// qDebug() << "maxDist" << maxDistance << item->position() << dataValue; + } } else { maxDistance = qAbs(minExtent - data.move.value()); } @@ -1256,8 +1329,10 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m } else { if (data.move.value() > maxExtent) { if (snapMode == QDeclarativeListView::SnapOneItem) { - if (FxListItem *item = nextVisibleItem()) - maxDistance = qAbs(item->position() + data.move.value()); + if (FxListItem *item = isRightToLeft() ? firstVisibleItem() : nextVisibleItem()) { + maxDistance = qAbs(item->position() + dataValue); +// qDebug() << "maxDist2" << maxDistance << item->position() << dataValue; + } } else { maxDistance = qAbs(maxExtent - data.move.value()); } @@ -1265,7 +1340,10 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m if (snapMode == QDeclarativeListView::NoSnap && highlightRange != QDeclarativeListView::StrictlyEnforceRange) data.flickTarget = maxExtent; } + bool overShoot = boundsBehavior == QDeclarativeFlickable::DragAndOvershootBounds; + qreal highlightStart = isRightToLeft() && highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart; + if (maxDistance > 0 || overShoot) { // These modes require the list to stop exactly on an item boundary. // The initial flick will estimate the boundary to stop on. @@ -1290,7 +1368,9 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m if (v > 0) dist = -dist; if ((maxDistance > 0.0 && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarativeListView::SnapOneItem) { - data.flickTarget = -snapPosAt(-(data.move.value() - highlightRangeStart) + dist) + highlightRangeStart; + qreal distTemp = isRightToLeft() ? -dist : dist; + data.flickTarget = -snapPosAt(-(dataValue - highlightStart) + distTemp) + highlightStart; + data.flickTarget = isRightToLeft() ? -data.flickTarget+size() : data.flickTarget; if (overShoot) { if (data.flickTarget >= minExtent) { overshootDist = overShootDistance(v, vSize); @@ -1323,6 +1403,7 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m data.flickTarget -= overshootDist; } } + timeline.reset(data.move); timeline.accel(data.move, v, accel, maxDistance + overshootDist); timeline.callback(QDeclarativeTimeLineCallback(&data.move, fixupCallback, this)); @@ -1342,8 +1423,11 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m } else { // reevaluate the target boundary. qreal newtarget = data.flickTarget; - if (snapMode != QDeclarativeListView::NoSnap || highlightRange == QDeclarativeListView::StrictlyEnforceRange) - newtarget = -snapPosAt(-(data.flickTarget - highlightRangeStart)) + highlightRangeStart; + if (snapMode != QDeclarativeListView::NoSnap || highlightRange == QDeclarativeListView::StrictlyEnforceRange) { + qreal tempFlickTarget = isRightToLeft() ? -data.flickTarget+size() : data.flickTarget; + newtarget = -snapPosAt(-(tempFlickTarget - highlightStart)) + highlightStart; + newtarget = isRightToLeft() ? -newtarget+size() : newtarget; + } if (velocity < 0 && newtarget <= maxExtent) newtarget = maxExtent - overshootDist; else if (velocity > 0 && newtarget >= minExtent) @@ -1361,6 +1445,7 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m fixup(data, minExtent, maxExtent); return; } + timeline.reset(data.move); timeline.accelDistance(data.move, v, -dist); timeline.callback(QDeclarativeTimeLineCallback(&data.move, fixupCallback, this)); @@ -1859,6 +1944,7 @@ qreal QDeclarativeListView::preferredHighlightBegin() const void QDeclarativeListView::setPreferredHighlightBegin(qreal start) { Q_D(QDeclarativeListView); + d->highlightRangeStartValid = true; if (d->highlightRangeStart == start) return; d->highlightRangeStart = start; @@ -1866,6 +1952,16 @@ void QDeclarativeListView::setPreferredHighlightBegin(qreal start) emit preferredHighlightBeginChanged(); } +void QDeclarativeListView::resetPreferredHighlightBegin() +{ + Q_D(QDeclarativeListView); + d->highlightRangeStartValid = false; + if (d->highlightRangeStart == 0) + return; + d->highlightRangeStart = 0; + emit preferredHighlightBeginChanged(); +} + qreal QDeclarativeListView::preferredHighlightEnd() const { Q_D(const QDeclarativeListView); @@ -1875,6 +1971,7 @@ qreal QDeclarativeListView::preferredHighlightEnd() const void QDeclarativeListView::setPreferredHighlightEnd(qreal end) { Q_D(QDeclarativeListView); + d->highlightRangeEndValid = true; if (d->highlightRangeEnd == end) return; d->highlightRangeEnd = end; @@ -1882,6 +1979,16 @@ void QDeclarativeListView::setPreferredHighlightEnd(qreal end) emit preferredHighlightEndChanged(); } +void QDeclarativeListView::resetPreferredHighlightEnd() +{ + Q_D(QDeclarativeListView); + d->highlightRangeEndValid = false; + if (d->highlightRangeEnd == 0) + return; + d->highlightRangeEnd = 0; + emit preferredHighlightEndChanged(); +} + QDeclarativeListView::HighlightRangeMode QDeclarativeListView::highlightRangeMode() const { Q_D(const QDeclarativeListView); @@ -1968,6 +2075,25 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie } } +Qt::LayoutDirection QDeclarativeListView::layoutDirection() const +{ + Q_D(const QDeclarativeListView); + return d->layoutDirection; +} + +void QDeclarativeListView::setLayoutDirection(Qt::LayoutDirection layoutDirection) +{ + Q_D(QDeclarativeListView); + if (d->layoutDirection != layoutDirection) { + d->layoutDirection = layoutDirection; + d->clear(); + d->setPosition(0); + refill(); + emit layoutDirectionChanged(); + d->updateCurrent(d->currentIndex); + } +} + /*! \qmlproperty bool ListView::keyNavigationWraps This property holds whether the list wraps key navigation. @@ -2339,11 +2465,23 @@ void QDeclarativeListView::viewportMoved() if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) { // reposition highlight qreal pos = d->highlight->position(); - qreal viewPos = d->position(); - if (pos > viewPos + d->highlightRangeEnd - d->highlight->size()) - pos = viewPos + d->highlightRangeEnd - d->highlight->size(); - if (pos < viewPos + d->highlightRangeStart) - pos = viewPos + d->highlightRangeStart; + qreal viewPos; + qreal highlightStart; + qreal highlightEnd; + if (d->isRightToLeft()) { + // Handle Right-To-Left exceptions + viewPos = -d->position()-d->size(); + highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart; + highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd; + } else { + viewPos = d->position(); + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + } + if (pos > viewPos + highlightEnd - d->highlight->size()) + pos = viewPos + highlightEnd - d->highlight->size(); + if (pos < viewPos + highlightStart) + pos = viewPos + highlightStart; d->highlightPosAnimator->stop(); d->highlight->setPosition(qRound(pos)); @@ -2381,13 +2519,15 @@ void QDeclarativeListView::viewportMoved() if ((minX - d->hData.move.value() < width()/2 || d->hData.flickTarget - d->hData.move.value() < width()/2) && minX != d->hData.flickTarget) d->flickX(-d->hData.smoothVelocity.value()); - d->bufferMode = QDeclarativeListViewPrivate::BufferBefore; + d->bufferMode = d->isRightToLeft() + ? QDeclarativeListViewPrivate::BufferAfter : QDeclarativeListViewPrivate::BufferBefore; } else if (d->hData.velocity < 0) { const qreal maxX = maxXExtent(); if ((d->hData.move.value() - maxX < width()/2 || d->hData.move.value() - d->hData.flickTarget < width()/2) && maxX != d->hData.flickTarget) d->flickX(-d->hData.smoothVelocity.value()); - d->bufferMode = QDeclarativeListViewPrivate::BufferAfter; + d->bufferMode = d->isRightToLeft() + ? QDeclarativeListViewPrivate::BufferBefore : QDeclarativeListViewPrivate::BufferAfter; } } d->inFlickCorrection = false; @@ -2450,11 +2590,28 @@ qreal QDeclarativeListView::minXExtent() const return QDeclarativeFlickable::minXExtent(); if (d->minExtentDirty) { d->minExtent = -d->startPosition(); - if (d->header) - d->minExtent += d->header->size(); + + qreal highlightStart; + qreal highlightEnd; + qreal endPositionFirstItem; + if (d->isRightToLeft()) { + endPositionFirstItem = d->positionAt(d->model->count()-1); + highlightStart = d->highlightRangeStartValid + ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem) + : d->size() - (d->lastPosition()-endPositionFirstItem); + highlightEnd = d->highlightRangeEndValid ? d->highlightRangeEnd : d->size(); + if (d->footer) + d->minExtent += d->footer->size(); + } else { + endPositionFirstItem = d->endPositionAt(0); + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + if (d->header) + d->minExtent += d->header->size(); + } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - d->minExtent += d->highlightRangeStart; - d->minExtent = qMax(d->minExtent, -(d->endPositionAt(0) - d->highlightRangeEnd + 1)); + d->minExtent += highlightStart; + d->minExtent = qMax(d->minExtent, -(endPositionFirstItem - highlightEnd + 1)); } d->minExtentDirty = false; } @@ -2468,23 +2625,42 @@ qreal QDeclarativeListView::maxXExtent() const if (d->orient == QDeclarativeListView::Vertical) return width(); if (d->maxExtentDirty) { + qreal highlightStart; + qreal highlightEnd; + qreal lastItemPosition; + if (d->isRightToLeft()) { + highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size(); + highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size(); + lastItemPosition = d->endPosition(); + } else { + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + lastItemPosition = d->positionAt(d->model->count()-1); + } if (!d->model || !d->model->count()) { d->maxExtent = 0; } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - d->maxExtent = -(d->positionAt(d->model->count()-1) - d->highlightRangeStart); - if (d->highlightRangeEnd != d->highlightRangeStart) - d->maxExtent = qMin(d->maxExtent, -(d->endPosition() - d->highlightRangeEnd + 1)); + d->maxExtent = -(lastItemPosition - highlightStart); + if (highlightEnd != highlightStart) { + d->maxExtent = d->isRightToLeft() + ? qMax(d->maxExtent, -(d->endPosition() - highlightEnd + 1)) + : qMin(d->maxExtent, -(d->endPosition() - highlightEnd + 1)); + } } else { d->maxExtent = -(d->endPosition() - width() + 1); } - if (d->footer) - d->maxExtent -= d->footer->size(); + if (d->isRightToLeft()) { + if (d->header) + d->maxExtent -= d->header->size(); + } else { + if (d->footer) + d->maxExtent -= d->footer->size(); + } qreal minX = minXExtent(); if (d->maxExtent > minX) d->maxExtent = minX; d->maxExtentDirty = false; } - return d->maxExtent; } @@ -2496,7 +2672,8 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) return; if (d->model && d->model->count() && d->interactive) { - if ((d->orient == QDeclarativeListView::Horizontal && event->key() == Qt::Key_Left) + if ((d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::LeftToRight && event->key() == Qt::Key_Left) + || (d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::RightToLeft && event->key() == Qt::Key_Right) || (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Up)) { if (currentIndex() > 0 || (d->wrap && !event->isAutoRepeat())) { decrementCurrentIndex(); @@ -2506,7 +2683,8 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) event->accept(); return; } - } else if ((d->orient == QDeclarativeListView::Horizontal && event->key() == Qt::Key_Right) + } else if ((d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::LeftToRight && event->key() == Qt::Key_Right) + || (d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::RightToLeft && event->key() == Qt::Key_Left) || (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Down)) { if (currentIndex() < d->model->count() - 1 || (d->wrap && !event->isAutoRepeat())) { incrementCurrentIndex(); @@ -2583,9 +2761,14 @@ void QDeclarativeListViewPrivate::positionViewAtIndex(int index, int mode) if (layoutScheduled) layout(); - qreal pos = position(); + qreal pos = isRightToLeft() ? -position() - size() : position(); FxListItem *item = visibleItem(idx); - qreal maxExtent = orient == QDeclarativeListView::Vertical ? -q->maxYExtent() : -q->maxXExtent(); + qreal maxExtent; + if (orient == QDeclarativeListView::Vertical) + maxExtent = -q->maxYExtent(); + else + maxExtent = isRightToLeft() ? q->minXExtent()-size(): -q->maxXExtent(); + if (!item) { int itemPos = positionAt(idx); // save the currently visible items in case any of them end up visible again @@ -2628,7 +2811,12 @@ void QDeclarativeListViewPrivate::positionViewAtIndex(int index, int mode) pos = itemPos; } pos = qMin(pos, maxExtent); - qreal minExtent = orient == QDeclarativeListView::Vertical ? -q->minYExtent() : -q->minXExtent(); + qreal minExtent; + if (orient == QDeclarativeListView::Vertical) { + minExtent = -q->minYExtent(); + } else { + minExtent = isRightToLeft() ? q->maxXExtent()-size(): -q->minXExtent(); + } pos = qMax(pos, minExtent); moveReason = QDeclarativeListViewPrivate::Other; q->cancelFlick(); @@ -2783,7 +2971,10 @@ void QDeclarativeListView::updateSections() void QDeclarativeListView::refill() { Q_D(QDeclarativeListView); - d->refill(d->position(), d->position()+d->size()-1); + if (layoutDirection() == Qt::RightToLeft && orientation() == QDeclarativeListView::Horizontal) + d->refill(-d->position()-d->size()+1, -d->position()); + else + d->refill(d->position(), d->position()+d->size()-1); } void QDeclarativeListView::trackedPositionChanged() @@ -2798,26 +2989,37 @@ void QDeclarativeListView::trackedPositionChanged() trackedPos -= d->currentItem->sectionSize(); trackedSize += d->currentItem->sectionSize(); } - const qreal viewPos = d->position(); + qreal viewPos; + qreal highlightStart; + qreal highlightEnd; + if (d->isRightToLeft()) { + viewPos = -d->position()-d->size(); + highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart; + highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd; + } else { + viewPos = d->position(); + highlightStart = d->highlightRangeStart; + highlightEnd = d->highlightRangeEnd; + } qreal pos = viewPos; if (d->haveHighlightRange) { if (d->highlightRange == StrictlyEnforceRange) { - if (trackedPos > pos + d->highlightRangeEnd - d->trackedItem->size()) - pos = trackedPos - d->highlightRangeEnd + d->trackedItem->size(); - if (trackedPos < pos + d->highlightRangeStart) - pos = trackedPos - d->highlightRangeStart; + if (trackedPos > pos + highlightEnd - d->trackedItem->size()) + pos = trackedPos - highlightEnd + d->trackedItem->size(); + if (trackedPos < pos + highlightStart) + pos = trackedPos - highlightStart; } else { - if (trackedPos < d->startPosition() + d->highlightRangeStart) { + if (trackedPos < d->startPosition() + highlightStart) { pos = d->startPosition(); - } else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + d->highlightRangeEnd) { + } else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + highlightEnd) { pos = d->endPosition() - d->size() + 1; if (pos < d->startPosition()) pos = d->startPosition(); } else { - if (trackedPos < viewPos + d->highlightRangeStart) { - pos = trackedPos - d->highlightRangeStart; - } else if (trackedPos > viewPos + d->highlightRangeEnd - trackedSize) { - pos = trackedPos - d->highlightRangeEnd + trackedSize; + if (trackedPos < viewPos + highlightStart) { + pos = trackedPos - highlightStart; + } else if (trackedPos > viewPos + highlightEnd - trackedSize) { + pos = trackedPos - highlightEnd + trackedSize; } } } @@ -2854,6 +3056,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) d->updateUnrequestedIndexes(); d->moveReason = QDeclarativeListViewPrivate::Other; + qreal tempPos = d->isRightToLeft() ? -d->position()-d->size() : d->position(); int index = d->visibleItems.count() ? d->mapFromModel(modelIndex) : 0; if (index < 0) { int i = d->visibleItems.count() - 1; @@ -2863,7 +3066,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) // there are no visible items except items marked for removal index = d->visibleItems.count(); } else if (d->visibleItems.at(i)->index + 1 == modelIndex - && d->visibleItems.at(i)->endPosition() < d->buffer+d->position()+d->size()-1) { + && d->visibleItems.at(i)->endPosition() < d->buffer+tempPos+d->size()-1) { // Special case of appending an item to the model. index = d->visibleItems.count(); } else { @@ -2908,7 +3111,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) // Insert items before the visible item. int insertionIdx = index; int i = 0; - int from = d->position() - d->buffer; + int from = tempPos - d->buffer; for (i = count-1; i >= 0 && pos > from; --i) { if (!addedVisible) { d->scheduleLayout(); @@ -2938,7 +3141,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) } } else { int i = 0; - int to = d->buffer+d->position()+d->size()-1; + int to = d->buffer+tempPos+d->size()-1; for (i = 0; i < count && pos <= to; ++i) { if (!addedVisible) { d->scheduleLayout(); @@ -3233,10 +3436,14 @@ void QDeclarativeListView::createdItem(int index, QDeclarativeItem *item) if (d->requestedIndex != index) { item->setParentItem(contentItem()); d->unrequestedItems.insert(item, index); - if (d->orient == QDeclarativeListView::Vertical) + if (d->orient == QDeclarativeListView::Vertical) { item->setY(d->positionAt(index)); - else - item->setX(d->positionAt(index)); + } else { + if (d->isRightToLeft()) + item->setX(-d->positionAt(index)-item->width()); + else + item->setX(d->positionAt(index)); + } } } diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 10fbf10..6b72240 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -107,12 +107,13 @@ class Q_AUTOTEST_EXPORT QDeclarativeListView : public QDeclarativeFlickable Q_PROPERTY(qreal highlightResizeSpeed READ highlightResizeSpeed WRITE setHighlightResizeSpeed NOTIFY highlightResizeSpeedChanged) Q_PROPERTY(int highlightResizeDuration READ highlightResizeDuration WRITE setHighlightResizeDuration NOTIFY highlightResizeDurationChanged) - Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged) - Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged) + Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged RESET resetPreferredHighlightBegin) + Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged RESET resetPreferredHighlightEnd) Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged) Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing NOTIFY spacingChanged) Q_PROPERTY(Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged) + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged) Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged) Q_PROPERTY(QDeclarativeViewSection *section READ sectionCriteria CONSTANT) @@ -158,9 +159,11 @@ public: qreal preferredHighlightBegin() const; void setPreferredHighlightBegin(qreal); + void resetPreferredHighlightBegin(); qreal preferredHighlightEnd() const; void setPreferredHighlightEnd(qreal); + void resetPreferredHighlightEnd(); qreal spacing() const; void setSpacing(qreal spacing); @@ -169,6 +172,9 @@ public: Orientation orientation() const; void setOrientation(Orientation); + Qt::LayoutDirection layoutDirection() const; + void setLayoutDirection(Qt::LayoutDirection); + bool isWrapEnabled() const; void setWrapEnabled(bool); @@ -220,6 +226,7 @@ Q_SIGNALS: void countChanged(); void spacingChanged(); void orientationChanged(); + void layoutDirectionChanged(); void currentIndexChanged(); void currentSectionChanged(); void highlightMoveSpeedChanged(); diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml index 5719f43..164103d 100644 --- a/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml +++ b/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml @@ -48,6 +48,8 @@ Rectangle { model: testModel delegate: myDelegate highlight: myHighlight + flow: (testTopToBottom == true) ? GridView.TopToBottom : GridView.LeftToRight + layoutDirection: (testRightToLeft == true) ? Qt.RightToLeft : Qt.LeftToRight preferredHighlightBegin: 100 preferredHighlightEnd: 100 highlightRangeMode: "StrictlyEnforceRange" diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml index e4e699c..1f5943d 100644 --- a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml +++ b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml @@ -55,7 +55,8 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 - flow: (testTopToBottom == false) ? "LeftToRight" : "TopToBottom" + flow: (testTopToBottom == false) ? GridView.LeftToRight : GridView.TopToBottom + layoutDirection: (testRightToLeft == true) ? Qt.RightToLeft : Qt.LeftToRight model: testModel delegate: myDelegate header: root.showHeader ? headerFooter : null diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 79189a7..188fd6e 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -78,9 +78,11 @@ private slots: void componentChanges(); void modelChanges(); void positionViewAtIndex(); + void positionViewAtIndex_rightToLeft(); void snapping(); void resetModel(); void enforceRange(); + void enforceRange_rightToLeft(); void QTBUG_8456(); void manualHighlight(); void footer(); @@ -203,6 +205,7 @@ void tst_QDeclarativeGridView::items() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -251,6 +254,7 @@ void tst_QDeclarativeGridView::changed() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -284,6 +288,7 @@ void tst_QDeclarativeGridView::inserted() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -360,6 +365,7 @@ void tst_QDeclarativeGridView::removed() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -503,6 +509,7 @@ void tst_QDeclarativeGridView::moved() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -726,6 +733,58 @@ void tst_QDeclarativeGridView::currentIndex() QVERIFY(!gridview->highlightItem()); QVERIFY(!gridview->currentItem()); + gridview->setHighlightFollowsCurrentItem(true); + + gridview->setFlow(QDeclarativeGridView::LeftToRight); + gridview->setLayoutDirection(Qt::RightToLeft); + + qApp->setActiveWindow(canvas); +#ifdef Q_WS_X11 + // to be safe and avoid failing setFocus with window managers + qt_x11_wait_for_window_manager(canvas); +#endif + QTRY_VERIFY(canvas->hasFocus()); + QTRY_VERIFY(canvas->scene()->hasFocus()); + qApp->processEvents(); + + gridview->setCurrentIndex(35); + + QTest::keyClick(canvas, Qt::Key_Right); + QCOMPARE(gridview->currentIndex(), 34); + + QTest::keyClick(canvas, Qt::Key_Down); + QCOMPARE(gridview->currentIndex(), 37); + + QTest::keyClick(canvas, Qt::Key_Up); + QCOMPARE(gridview->currentIndex(), 34); + + QTest::keyClick(canvas, Qt::Key_Left); + QCOMPARE(gridview->currentIndex(), 35); + + + // turn off auto highlight + gridview->setHighlightFollowsCurrentItem(false); + QVERIFY(gridview->highlightFollowsCurrentItem() == false); + QVERIFY(gridview->highlightItem()); + hlPosX = gridview->highlightItem()->x(); + hlPosY = gridview->highlightItem()->y(); + + gridview->setCurrentIndex(5); + QTRY_COMPARE(gridview->highlightItem()->x(), hlPosX); + QTRY_COMPARE(gridview->highlightItem()->y(), hlPosY); + + // insert item before currentIndex + gridview->setCurrentIndex(28); + model.insertItem(0, "Foo", "1111"); + QTRY_COMPARE(canvas->rootObject()->property("current").toInt(), 29); + + // check removing highlight by setting currentIndex to -1; + gridview->setCurrentIndex(-1); + + QCOMPARE(gridview->currentIndex(), -1); + QVERIFY(!gridview->highlightItem()); + QVERIFY(!gridview->currentItem()); + delete canvas; } @@ -774,6 +833,7 @@ void tst_QDeclarativeGridView::changeFlow() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -819,6 +879,44 @@ void tst_QDeclarativeGridView::changeFlow() QTRY_COMPARE(number->text(), model.number(i)); } + ctxt->setContextProperty("testRightToLeft", QVariant(true)); + + // Confirm items positioned correctly and indexes correct + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80 - item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", i); + QTRY_VERIFY(name != 0); + QTRY_COMPARE(name->text(), model.name(i)); + QDeclarativeText *number = findItem<QDeclarativeText>(contentItem, "textNumber", i); + QTRY_VERIFY(number != 0); + QTRY_COMPARE(number->text(), model.number(i)); + } + gridview->setContentX(100); + QTRY_COMPARE(gridview->contentX(), 100.); + ctxt->setContextProperty("testTopToBottom", QVariant(false)); + QTRY_COMPARE(gridview->contentX(), 0.); + + // Confirm items positioned correctly and indexes correct + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(240 - (i%3+1)*80)); + QTRY_COMPARE(item->y(), qreal((i/3)*60)); + QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", i); + QTRY_VERIFY(name != 0); + QTRY_COMPARE(name->text(), model.name(i)); + QDeclarativeText *number = findItem<QDeclarativeText>(contentItem, "textNumber", i); + QTRY_VERIFY(number != 0); + QTRY_COMPARE(number->text(), model.number(i)); + } + delete canvas; } @@ -879,6 +977,7 @@ void tst_QDeclarativeGridView::propertyChanges() QSignalSpy keyNavigationWrapsSpy(gridView, SIGNAL(keyNavigationWrapsChanged())); QSignalSpy cacheBufferSpy(gridView, SIGNAL(cacheBufferChanged())); + QSignalSpy layoutSpy(gridView, SIGNAL(layoutDirectionChanged())); QSignalSpy flowSpy(gridView, SIGNAL(flowChanged())); QTRY_COMPARE(gridView->isWrapEnabled(), true); @@ -905,6 +1004,38 @@ void tst_QDeclarativeGridView::propertyChanges() QTRY_COMPARE(cacheBufferSpy.count(),1); QTRY_COMPARE(flowSpy.count(),1); + gridView->setFlow(QDeclarativeGridView::LeftToRight); + QTRY_COMPARE(gridView->flow(), QDeclarativeGridView::LeftToRight); + + gridView->setWrapEnabled(true); + gridView->setCacheBuffer(5); + gridView->setLayoutDirection(Qt::RightToLeft); + + QTRY_COMPARE(gridView->isWrapEnabled(), true); + QTRY_COMPARE(gridView->cacheBuffer(), 5); + QTRY_COMPARE(gridView->layoutDirection(), Qt::RightToLeft); + + QTRY_COMPARE(keyNavigationWrapsSpy.count(),2); + QTRY_COMPARE(cacheBufferSpy.count(),2); + QTRY_COMPARE(layoutSpy.count(),1); + QTRY_COMPARE(flowSpy.count(),2); + + gridView->setWrapEnabled(true); + gridView->setCacheBuffer(5); + gridView->setLayoutDirection(Qt::RightToLeft); + + QTRY_COMPARE(keyNavigationWrapsSpy.count(),2); + QTRY_COMPARE(cacheBufferSpy.count(),2); + QTRY_COMPARE(layoutSpy.count(),1); + QTRY_COMPARE(flowSpy.count(),2); + + gridView->setFlow(QDeclarativeGridView::TopToBottom); + QTRY_COMPARE(gridView->flow(), QDeclarativeGridView::TopToBottom); + QTRY_COMPARE(flowSpy.count(),3); + + gridView->setFlow(QDeclarativeGridView::TopToBottom); + QTRY_COMPARE(flowSpy.count(),3); + delete canvas; } @@ -992,6 +1123,7 @@ void tst_QDeclarativeGridView::positionViewAtIndex() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); @@ -1213,6 +1345,138 @@ void tst_QDeclarativeGridView::snapping() delete canvas; } +void tst_QDeclarativeGridView::positionViewAtIndex_rightToLeft() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 40; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testTopToBottom", QVariant(true)); + ctxt->setContextProperty("testRightToLeft", QVariant(true)); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); + QTRY_VERIFY(gridview != 0); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + // Confirm items positioned correctly + int itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount-1; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80-item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + } + + // Position on a currently visible item + gridview->positionViewAtIndex(6, QDeclarativeGridView::Beginning); + QTRY_COMPARE(gridview->contentX(), -320.); + + // Confirm items positioned correctly + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 3; i < model.count() && i < itemCount-3-1; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80-item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + } + + // Position on an item beyond the visible items + gridview->positionViewAtIndex(21, QDeclarativeGridView::Beginning); + QTRY_COMPARE(gridview->contentX(), -560.); + + // Confirm items positioned correctly + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 22; i < model.count() && i < itemCount-22-1; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80-item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + } + + // Position on an item that would leave empty space if positioned at the top + gridview->positionViewAtIndex(31, QDeclarativeGridView::Beginning); + QTRY_COMPARE(gridview->contentX(), -639.); + + // Confirm items positioned correctly + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 24; i < model.count() && i < itemCount-24-1; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80-item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + } + + // Position at the beginning again + gridview->positionViewAtIndex(0, QDeclarativeGridView::Beginning); + QTRY_COMPARE(gridview->contentX(), -240.); + + // Confirm items positioned correctly + itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount-1; ++i) { + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), qreal(-(i/5)*80-item->width())); + QTRY_COMPARE(item->y(), qreal((i%5)*60)); + } + + // Position at End + gridview->positionViewAtIndex(30, QDeclarativeGridView::End); + QTRY_COMPARE(gridview->contentX(), -560.); + + // Position in Center + gridview->positionViewAtIndex(15, QDeclarativeGridView::Center); + QTRY_COMPARE(gridview->contentX(), -400.); + + // Ensure at least partially visible + gridview->positionViewAtIndex(15, QDeclarativeGridView::Visible); + QTRY_COMPARE(gridview->contentX(), -400.); + + gridview->setContentX(-555.); + gridview->positionViewAtIndex(15, QDeclarativeGridView::Visible); + QTRY_COMPARE(gridview->contentX(), -555.); + + gridview->setContentX(-239); + gridview->positionViewAtIndex(15, QDeclarativeGridView::Visible); + QTRY_COMPARE(gridview->contentX(), -320.); + + gridview->setContentX(-239); + gridview->positionViewAtIndex(20, QDeclarativeGridView::Visible); + QTRY_COMPARE(gridview->contentX(), -400.); + + gridview->setContentX(-640); + gridview->positionViewAtIndex(20, QDeclarativeGridView::Visible); + QTRY_COMPARE(gridview->contentX(), -560.); + + // Ensure completely visible + gridview->setContentX(-400); + gridview->positionViewAtIndex(20, QDeclarativeGridView::Contain); + QTRY_COMPARE(gridview->contentX(), -400.); + + gridview->setContentX(-315); + gridview->positionViewAtIndex(15, QDeclarativeGridView::Contain); + QTRY_COMPARE(gridview->contentX(), -320.); + + gridview->setContentX(-640); + gridview->positionViewAtIndex(20, QDeclarativeGridView::Contain); + QTRY_COMPARE(gridview->contentX(), -560.); + + delete canvas; +} + void tst_QDeclarativeGridView::resetModel() { QDeclarativeView *canvas = createView(); @@ -1264,6 +1528,8 @@ void tst_QDeclarativeGridView::enforceRange() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); + ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview-enforcerange.qml")); qApp->processEvents(); @@ -1307,6 +1573,63 @@ void tst_QDeclarativeGridView::enforceRange() delete canvas; } +void tst_QDeclarativeGridView::enforceRange_rightToLeft() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(true)); + ctxt->setContextProperty("testTopToBottom", QVariant(true)); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview-enforcerange.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); + QTRY_VERIFY(gridview != 0); + + QTRY_COMPARE(gridview->preferredHighlightBegin(), 100.0); + QTRY_COMPARE(gridview->preferredHighlightEnd(), 100.0); + QTRY_COMPARE(gridview->highlightRangeMode(), QDeclarativeGridView::StrictlyEnforceRange); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + // view should be positioned at the top of the range. + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", 0); + QTRY_VERIFY(item); + QTRY_COMPARE(gridview->contentX(), -100.); + QTRY_COMPARE(gridview->contentY(), 0.0); + + QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", 0); + QTRY_VERIFY(name != 0); + QTRY_COMPARE(name->text(), model.name(0)); + QDeclarativeText *number = findItem<QDeclarativeText>(contentItem, "textNumber", 0); + QTRY_VERIFY(number != 0); + QTRY_COMPARE(number->text(), model.number(0)); + + // Check currentIndex is updated when contentItem moves + gridview->setContentX(-200); + QTRY_COMPARE(gridview->currentIndex(), 3); + + gridview->setCurrentIndex(7); + QTRY_COMPARE(gridview->contentX(), -300.); + QTRY_COMPARE(gridview->contentY(), 0.0); + + TestModel model2; + for (int i = 0; i < 5; i++) + model2.addItem("Item" + QString::number(i), ""); + + ctxt->setContextProperty("testModel", &model2); + QCOMPARE(gridview->count(), 5); + + delete canvas; +} + void tst_QDeclarativeGridView::QTBUG_8456() { QDeclarativeView *canvas = createView(); @@ -1475,6 +1798,7 @@ void tst_QDeclarativeGridView::indexAt() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); ctxt->setContextProperty("testTopToBottom", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index f358625..26219fe 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -115,6 +115,7 @@ private slots: void onRemove_data(); void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); + void rightToLeft(); private: template <class T> void items(); @@ -2299,6 +2300,47 @@ void tst_QDeclarativeListView::testQtQuick11Attributes_data() << ""; } +void tst_QDeclarativeListView::rightToLeft() +{ + QDeclarativeView *canvas = createView(); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/rightToLeft.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "view"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeVisualItemModel *model = canvas->rootObject()->findChild<QDeclarativeVisualItemModel*>("itemModel"); + QTRY_VERIFY(model != 0); + + QTRY_VERIFY(model->count() == 3); + QTRY_COMPARE(listview->currentIndex(), 0); + + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "item1"); + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), -100.0); + QCOMPARE(item->height(), listview->height()); + + QDeclarativeText *text = findItem<QDeclarativeText>(contentItem, "text1"); + QTRY_VERIFY(text); + QTRY_COMPARE(text->text(), QLatin1String("index: 0")); + + listview->setCurrentIndex(2); + + item = findItem<QDeclarativeItem>(contentItem, "item3"); + QTRY_VERIFY(item); + QTRY_COMPARE(item->x(), -600.0); + + text = findItem<QDeclarativeText>(contentItem, "text3"); + QTRY_VERIFY(text); + QTRY_COMPARE(text->text(), QLatin1String("index: 2")); + + delete canvas; +} + void tst_QDeclarativeListView::qListModelInterface_items() { items<TestModel>(); -- cgit v0.12 From 78c5c1cae5f9e100bfb7388f68208406f0db4b42 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Mon, 14 Feb 2011 16:23:00 +0100 Subject: Optimize the rendering path for the unified toolbar. The over flushing of the toolbar had a huge performance impact so now we only flush the toolbar when necessary and moved the rendering out of the flushing process. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qcocoaview_mac.mm | 10 +------- src/gui/kernel/qwidget.cpp | 17 ++++++++++++++ src/gui/kernel/qwidget_p.h | 4 +++- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 31 +++++++++++++++++++------ src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 3 ++- 5 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index e50c401..1fe96f8 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -581,20 +581,12 @@ static int qCocoaViewCount = 0; } else { - QUnifiedToolbarSurface *unifiedSurface = dynamic_cast<QUnifiedToolbarSurface *>(qwidgetprivate->unifiedSurface); + QUnifiedToolbarSurface *unifiedSurface = qwidgetprivate->unifiedSurface; if (!unifiedSurface || !qwidgetprivate->flushRequested) { qt_mac_release_graphics_context(context); return; } - // We render the content of the toolbar in the surface. - unifiedSurface->updateToolbarOffset(qwidget); - QRect beginPaintRect(qwidgetprivate->toolbar_offset.x(), qwidgetprivate->toolbar_offset.y(), qwidget->geometry().width(), qwidget->geometry().height()); - QRegion beginPaintRegion(beginPaintRect); - - unifiedSurface->beginPaint(beginPaintRegion); - qwidget->render(unifiedSurface->paintDevice(), qwidgetprivate->toolbar_offset, QRegion(), QWidget::DrawChildren); - int areaX = qwidgetprivate->toolbar_offset.x(); int areaY = qwidgetprivate->toolbar_offset.y(); int areaWidth = qwidget->geometry().width(); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 04bc2fb..84a839f 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -324,6 +324,7 @@ QWidgetPrivate::QWidgetPrivate(int version) hasOwnContext = false; isInUnifiedToolbar = false; unifiedSurface = 0; + toolbar_ancestor = 0; flushRequested = false; #endif // QT_MAC_USE_COCOA #ifdef QWIDGET_EXTRA_DEBUG @@ -10360,6 +10361,10 @@ void QWidget::repaint(const QRect &rect) return; if (hasBackingStoreSupport()) { + if (qt_widget_private(this)->isInUnifiedToolbar) { + qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); + return; + } QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; @@ -10389,6 +10394,10 @@ void QWidget::repaint(const QRegion &rgn) return; if (hasBackingStoreSupport()) { + if (qt_widget_private(this)->isInUnifiedToolbar) { + qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); + return; + } QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; @@ -10446,6 +10455,10 @@ void QWidget::update(const QRect &rect) } if (hasBackingStoreSupport()) { + if (qt_widget_private(this)->isInUnifiedToolbar) { + qt_widget_private(this)->unifiedSurface->renderToolbar(this); + return; + } QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) tlwExtra->backingStore->markDirty(rect, this); @@ -10470,6 +10483,10 @@ void QWidget::update(const QRegion &rgn) } if (hasBackingStoreSupport()) { + if (qt_widget_private(this)->isInUnifiedToolbar) { + qt_widget_private(this)->unifiedSurface->renderToolbar(this); + return; + } QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) tlwExtra->backingStore->markDirty(rgn, this); diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 921cf03..59cb737 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -79,6 +79,7 @@ #ifdef Q_WS_MAC #include <private/qt_mac_p.h> +#include <private/qunifiedtoolbarsurface_mac_p.h> #endif #if defined(Q_WS_QWS) @@ -855,8 +856,9 @@ public: // Unified toolbar variables bool isInUnifiedToolbar; - QWindowSurface *unifiedSurface; + QUnifiedToolbarSurface *unifiedSurface; QPoint toolbar_offset; + QWidget *toolbar_ancestor; bool flushRequested; #endif // QT_MAC_USE_COCOA void determineWindowClass(); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 36b3e6a..6abcf2c 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -71,7 +71,7 @@ QPaintDevice *QUnifiedToolbarSurface::paintDevice() return &d_ptr->image->image; } -void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &offset) +void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, QWidget *parent_toolbar, const QPoint &offset) { if (object != 0) { if (object->isWidgetType()) { @@ -83,9 +83,10 @@ void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &of widget->d_func()->unifiedSurface = this; widget->d_func()->isInUnifiedToolbar = true; widget->d_func()->toolbar_offset = offset; + widget->d_func()->toolbar_ancestor = parent_toolbar; for (int i = 0; i < object->children().size(); ++i) { - recursiveRedirect(object->children().at(i), offset); + recursiveRedirect(object->children().at(i), parent_toolbar, offset); } } } @@ -95,7 +96,7 @@ void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &of void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offset) { setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME - recursiveRedirect(toolbar, offset); + recursiveRedirect(toolbar, toolbar, offset); } void QUnifiedToolbarSurface::setGeometry(const QRect &rect) @@ -135,10 +136,10 @@ void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QP if (!d->image || rgn.rectCount() == 0) return; - widget->d_func()->flushRequested = true; - - // We call display: directly to avoid flickering in the toolbar. - qt_mac_display(widget); + if (widget->d_func()->flushRequested) { + // We call display: directly to avoid flickering in the toolbar. + qt_mac_display(widget); + } } void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widget) @@ -208,6 +209,22 @@ CGContextRef QUnifiedToolbarSurface::imageContext() return d->image->cg; } +void QUnifiedToolbarSurface::renderToolbar(QWidget *widget, bool forceFlush) +{ + QWidget *toolbar = widget->d_func()->toolbar_ancestor; + + updateToolbarOffset(toolbar); + QRect beginPaintRect(toolbar->d_func()->toolbar_offset.x(), toolbar->d_func()->toolbar_offset.y(), toolbar->geometry().width(), toolbar->geometry().height()); + QRegion beginPaintRegion(beginPaintRect); + + beginPaint(beginPaintRegion); + toolbar->render(paintDevice(), toolbar->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren); + toolbar->d_func()->flushRequested = true; + + if (forceFlush) + flush(toolbar, beginPaintRegion, toolbar->d_func()->toolbar_offset); +} + QT_END_NAMESPACE #endif // QT_MAC_USE_COCOA diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 54f0f8e..f7ad02e 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -86,10 +86,11 @@ public: QPaintDevice *paintDevice(); CGContextRef imageContext(); + void renderToolbar(QWidget *widget, bool forceFlush = false); private: void prepareBuffer(QImage::Format format, QWidget *widget); - void recursiveRedirect(QObject *widget, const QPoint &offset); + void recursiveRedirect(QObject *widget, QWidget *parent_toolbar, const QPoint &offset); Q_DECLARE_PRIVATE(QUnifiedToolbarSurface) QScopedPointer<QUnifiedToolbarSurfacePrivate> d_ptr; -- cgit v0.12 From b5076fb392894e71b44b4762d0567354ef1c8a9e Mon Sep 17 00:00:00 2001 From: Sarah Smith <sarah.j.smith@nokia.com> Date: Wed, 16 Feb 2011 14:58:28 +1000 Subject: Add a "note well" to QVectorXD re float precision. Several bug-reports ask for clarifications/warnings in the doc for this class, since it stores in float, but has a qreal interface (as per qt convention). Change-Id: I32ffcde3733866942134e881567eef367a5620f5 Task-number: QTBUG-8216 Reviewed-by: Rhys Weatherley --- src/gui/math3d/qvector2d.cpp | 5 +++++ src/gui/math3d/qvector3d.cpp | 5 +++++ src/gui/math3d/qvector4d.cpp | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/gui/math3d/qvector2d.cpp b/src/gui/math3d/qvector2d.cpp index 7f5a937..1fccfc9 100644 --- a/src/gui/math3d/qvector2d.cpp +++ b/src/gui/math3d/qvector2d.cpp @@ -60,6 +60,11 @@ QT_BEGIN_NAMESPACE The QVector2D class can also be used to represent vertices in 2D space. We therefore do not need to provide a separate vertex class. + \bold{Note:} By design values in the QVector2D instance are stored as \c float. + This means that on platforms where the \c qreal arguments to QVector2D + functions are represented by \c double values, it is possible to + lose precision. + \sa QVector3D, QVector4D, QQuaternion */ diff --git a/src/gui/math3d/qvector3d.cpp b/src/gui/math3d/qvector3d.cpp index 2414b5f..7bf0400 100644 --- a/src/gui/math3d/qvector3d.cpp +++ b/src/gui/math3d/qvector3d.cpp @@ -63,6 +63,11 @@ QT_BEGIN_NAMESPACE The QVector3D class can also be used to represent vertices in 3D space. We therefore do not need to provide a separate vertex class. + \bold{Note:} By design values in the QVector3D instance are stored as \c float. + This means that on platforms where the \c qreal arguments to QVector3D + functions are represented by \c double values, it is possible to + lose precision. + \sa QVector2D, QVector4D, QQuaternion */ diff --git a/src/gui/math3d/qvector4d.cpp b/src/gui/math3d/qvector4d.cpp index 74dedc4..23befc0 100644 --- a/src/gui/math3d/qvector4d.cpp +++ b/src/gui/math3d/qvector4d.cpp @@ -59,6 +59,11 @@ QT_BEGIN_NAMESPACE The QVector4D class can also be used to represent vertices in 4D space. We therefore do not need to provide a separate vertex class. + \bold{Note:} By design values in the QVector4D instance are stored as \c float. + This means that on platforms where the \c qreal arguments to QVector4D + functions are represented by \c double values, it is possible to + lose precision. + \sa QQuaternion, QVector2D, QVector3D */ -- cgit v0.12 From 4e75cb56f37ac2ff22fbc562c85daeb8599753a9 Mon Sep 17 00:00:00 2001 From: Christopher Ham <christopher.ham@nokia.com> Date: Wed, 16 Feb 2011 11:48:02 +1000 Subject: GridView and ListView bug fixes ListView and GridView check before accessing an empty model. Fixed issue with undefined header. Current index initialised properly when dynamically creating ListModel items with javascript. Change-Id: I121c0626db6eb7ccaab689dfc750e0d03773d90f Task-number: QTBUG-15877 Reviewed-by: Joona Petrell --- .../graphicsitems/qdeclarativegridview.cpp | 57 +++++++++++----------- .../graphicsitems/qdeclarativelistview.cpp | 16 +++--- .../tst_qdeclarativegridview.cpp | 2 + .../tst_qdeclarativelistview.cpp | 2 +- 4 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 39fa8e8..2eeadf4 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -73,22 +73,22 @@ public: if (view->flow() == QDeclarativeGridView::LeftToRight) { rowPos = item->y(); } else { - if (view->layoutDirection() == Qt::LeftToRight) - rowPos = item->x(); - else + if (view->layoutDirection() == Qt::RightToLeft) rowPos = -view->cellWidth()-item->x(); + else + rowPos = item->x(); } return rowPos; } qreal colPos() const { qreal colPos = 0; if (view->flow() == QDeclarativeGridView::LeftToRight) { - if (view->layoutDirection() == Qt::LeftToRight) { - colPos = item->x(); - } else { + if (view->layoutDirection() == Qt::RightToLeft) { int colSize = view->cellWidth(); int columns = view->width()/colSize; colPos = colSize * (columns-1) - item->x(); + } else { + colPos = item->x(); } } else { colPos = item->y(); @@ -101,25 +101,25 @@ public: if (view->flow() == QDeclarativeGridView::LeftToRight) { return item->y() + view->cellHeight() - 1; } else { - if (view->layoutDirection() == Qt::LeftToRight) - return item->x() + view->cellWidth() - 1; - else + if (view->layoutDirection() == Qt::RightToLeft) return -item->x() - 1; + else + return item->x() + view->cellWidth() - 1; } } void setPosition(qreal col, qreal row) { - if (view->layoutDirection() == Qt::LeftToRight) { - if (view->flow() == QDeclarativeGridView::LeftToRight) - item->setPos(QPointF(col, row)); - else - item->setPos(QPointF(row, col)); - } else { + if (view->layoutDirection() == Qt::RightToLeft) { if (view->flow() == QDeclarativeGridView::LeftToRight) { int columns = view->width()/view->cellWidth(); item->setPos(QPointF((view->cellWidth() * (columns-1) - col), row)); } else { item->setPos(QPointF(-view->cellWidth()-row, col)); } + } else { + if (view->flow() == QDeclarativeGridView::LeftToRight) + item->setPos(QPointF(col, row)); + else + item->setPos(QPointF(row, col)); } } @@ -697,7 +697,7 @@ void QDeclarativeGridViewPrivate::layout() qreal rowPos = visibleItems.first()->rowPos(); qreal colPos = visibleItems.first()->colPos(); int col = visibleIndex % columns; - if (colPos != col * colSize() || isRightToLeftTopToBottom()) { + if (colPos != col * colSize()) { colPos = col * colSize(); visibleItems.first()->setPosition(colPos, rowPos); } @@ -747,7 +747,7 @@ void QDeclarativeGridViewPrivate::updateUnrequestedPositions() if (isRightToLeftTopToBottom()) item->setPos(QPointF(-rowPosAt(*it)-item->width(), colPosAt(*it))); else - item->setPos(QPointF(rowPosAt(*it), (columns-1)*colSize()-colPosAt(*it))); + item->setPos(QPointF(rowPosAt(*it), colPosAt(*it))); } } } @@ -1032,7 +1032,9 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m qreal bottomPos = qMax(bottomItem->rowPos() - highlightEnd, -minExtent); pos = qAbs(data.move + topPos) < qAbs(data.move + bottomPos) ? topPos : bottomPos; } else if (topItem) { - qreal headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos(); + qreal headerPos = 0; + if (header) + headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos(); if (topItem->index == 0 && header && tempPosition+highlightStart < headerPos+headerSize()/2) { pos = isRightToLeftTopToBottom() ? - headerPos + highlightStart - size() : headerPos - highlightStart; } else { @@ -2191,9 +2193,6 @@ qreal QDeclarativeGridView::maxXExtent() const if (d->flow == QDeclarativeGridView::LeftToRight) return QDeclarativeFlickable::maxXExtent(); qreal extent; - if (!d->model || !d->model->count()) { - extent = 0; - } qreal highlightStart; qreal highlightEnd; qreal lastItemPosition; @@ -2204,9 +2203,12 @@ qreal QDeclarativeGridView::maxXExtent() const } else { highlightStart = d->highlightRangeStart; highlightEnd = d->highlightRangeEnd; - lastItemPosition = d->rowPosAt(d->model->count()-1); + if (d->model && d->model->count()) + lastItemPosition = d->rowPosAt(d->model->count()-1); } - if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { + if (!d->model || !d->model->count()) { + extent = 0; + } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { extent = -(lastItemPosition - highlightStart); if (highlightEnd != highlightStart) extent = d->isRightToLeftTopToBottom() @@ -2725,7 +2727,7 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) modelIndex = d->visibleIndex; } - qreal tempPos = d->isRightToLeftTopToBottom() ? -d->position()-d->size() : d->position(); + qreal tempPos = d->isRightToLeftTopToBottom() ? -d->position()-d->size()+d->width()+1 : d->position(); int to = d->buffer+tempPos+d->size()-1; int colPos = 0; int rowPos = 0; @@ -2744,10 +2746,7 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) } } } else if (d->itemCount == 0 && d->header) { - if (d->flow == QDeclarativeGridView::LeftToRight) - rowPos = d->headerSize(); - else - colPos = d->headerSize(); + rowPos = d->headerSize(); } // Update the indexes of the following visible items. @@ -2804,6 +2803,8 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) d->updateCurrent(0); } emit currentIndexChanged(); + } else if (d->itemCount == 0 && d->currentIndex == -1) { + setCurrentIndex(0); } // everything is in order now - emit add() signal diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6749657..486cec8 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -329,6 +329,7 @@ public: else idx = visibleItems.at(idx)->index; int count = modelIndex - idx - 1; + return (*(--visibleItems.constEnd()))->endPosition() + spacing + count * (averageSize + spacing) + 1; } } @@ -1316,10 +1317,8 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m if (velocity > 0) { if (data.move.value() < minExtent) { if (snapMode == QDeclarativeListView::SnapOneItem) { - if (FxListItem *item = isRightToLeft() ? nextVisibleItem() : firstVisibleItem()) { + if (FxListItem *item = isRightToLeft() ? nextVisibleItem() : firstVisibleItem()) maxDistance = qAbs(item->position() + dataValue); -// qDebug() << "maxDist" << maxDistance << item->position() << dataValue; - } } else { maxDistance = qAbs(minExtent - data.move.value()); } @@ -1329,10 +1328,8 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m } else { if (data.move.value() > maxExtent) { if (snapMode == QDeclarativeListView::SnapOneItem) { - if (FxListItem *item = isRightToLeft() ? firstVisibleItem() : nextVisibleItem()) { + if (FxListItem *item = isRightToLeft() ? firstVisibleItem() : nextVisibleItem()) maxDistance = qAbs(item->position() + dataValue); -// qDebug() << "maxDist2" << maxDistance << item->position() << dataValue; - } } else { maxDistance = qAbs(maxExtent - data.move.value()); } @@ -2595,7 +2592,8 @@ qreal QDeclarativeListView::minXExtent() const qreal highlightEnd; qreal endPositionFirstItem; if (d->isRightToLeft()) { - endPositionFirstItem = d->positionAt(d->model->count()-1); + if (d->model && d->model->count()) + endPositionFirstItem = d->positionAt(d->model->count()-1); highlightStart = d->highlightRangeStartValid ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem) : d->size() - (d->lastPosition()-endPositionFirstItem); @@ -2635,7 +2633,8 @@ qreal QDeclarativeListView::maxXExtent() const } else { highlightStart = d->highlightRangeStart; highlightEnd = d->highlightRangeEnd; - lastItemPosition = d->positionAt(d->model->count()-1); + if (d->model && d->model->count()) + lastItemPosition = d->positionAt(d->model->count()-1); } if (!d->model || !d->model->count()) { d->maxExtent = 0; @@ -3058,6 +3057,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) qreal tempPos = d->isRightToLeft() ? -d->position()-d->size() : d->position(); int index = d->visibleItems.count() ? d->mapFromModel(modelIndex) : 0; + if (index < 0) { int i = d->visibleItems.count() - 1; while (i > 0 && d->visibleItems.at(i)->index == -1) diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 188fd6e..4fcaed6 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -1317,6 +1317,7 @@ void tst_QDeclarativeGridView::snapping() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testModel", &model); ctxt->setContextProperty("testTopToBottom", QVariant(false)); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); qApp->processEvents(); @@ -1343,6 +1344,7 @@ void tst_QDeclarativeGridView::snapping() QCOMPARE(gridview->contentY(), 120.); delete canvas; + } void tst_QDeclarativeGridView::positionViewAtIndex_rightToLeft() diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 26219fe..02c8dad 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -2332,7 +2332,7 @@ void tst_QDeclarativeListView::rightToLeft() item = findItem<QDeclarativeItem>(contentItem, "item3"); QTRY_VERIFY(item); - QTRY_COMPARE(item->x(), -600.0); + QTRY_COMPARE(item->x(), -540.0); text = findItem<QDeclarativeText>(contentItem, "text3"); QTRY_VERIFY(text); -- cgit v0.12 From 13ea38369b7f095e6af96c98bed7a3bb9bf795d5 Mon Sep 17 00:00:00 2001 From: Christopher Ham <christopher.ham@nokia.com> Date: Thu, 17 Feb 2011 16:36:08 +1000 Subject: Adding file required for ListView Autotest The file was missed out in the previous commit. Change-Id: Ic8d055e9797b5da2ba1cb548984efc8c7e205751 Task-number: QTBUG-16010 Reviewed-by: Trust Me --- .../qdeclarativelistview/data/rightToLeft.qml | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml diff --git a/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml b/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml new file mode 100644 index 0000000..e31d923 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml @@ -0,0 +1,42 @@ +// This example demonstrates placing items in a view using +// a VisualItemModel + +import QtQuick 1.0 + +Rectangle { + color: "lightgray" + width: 240 + height: 320 + + VisualItemModel { + id: itemModel + objectName: "itemModel" + Rectangle { + objectName: "item1" + height: view.height; width: 100; color: "#FFFEF0" + Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + objectName: "item2" + height: view.height; width: 200; color: "#F0FFF7" + Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + objectName: "item3" + height: view.height; width: 240; color: "#F4F0FF" + Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + } + + ListView { + id: view + objectName: "view" + anchors.fill: parent + anchors.bottomMargin: 30 + model: itemModel + highlightRangeMode: "StrictlyEnforceRange" + orientation: ListView.Horizontal + flickDeceleration: 2000 + layoutDirection: Qt.RightToLeft + } +} -- cgit v0.12 From 623c13a70f646e8200900c01ce2e409fc0f2fdec Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 18 Feb 2011 15:11:20 +0100 Subject: Renamed the symbian/linux-* mkspecs to symbian-*. This was done for a number of reasons: - In order to get better consistency with the other mkspecs, which have the target system name followed by a hyphen and the compiler name. - There is no real reason why we should have specific mkspecs for compiling Symbian under Linux, when it is equally likely to work under other operating systems. RevBy: Thomas Zander Conflicts: src/s60main/s60main.pro --- configure | 2 +- doc/src/snippets/code/doc_src_installation.qdoc | 4 +- mkspecs/features/symbian/do_not_build_as_thumb.prf | 2 +- mkspecs/features/symbian/symbian_building.prf | 18 ++--- mkspecs/symbian-armcc/features/default_post.prf | 5 ++ mkspecs/symbian-armcc/qmake.conf | 62 +++++++++++++++ mkspecs/symbian-armcc/qplatformdefs.h | 42 ++++++++++ mkspecs/symbian-gcce/features/default_post.prf | 5 ++ mkspecs/symbian-gcce/qmake.conf | 92 ++++++++++++++++++++++ mkspecs/symbian-gcce/qplatformdefs.h | 43 ++++++++++ .../symbian/linux-armcc/features/default_post.prf | 5 -- mkspecs/symbian/linux-armcc/qmake.conf | 62 --------------- mkspecs/symbian/linux-armcc/qplatformdefs.h | 42 ---------- .../symbian/linux-gcce/features/default_post.prf | 5 -- mkspecs/symbian/linux-gcce/qmake.conf | 92 ---------------------- mkspecs/symbian/linux-gcce/qplatformdefs.h | 43 ---------- src/corelib/global/global.pri | 2 +- src/s60main/s60main.pro | 2 +- 18 files changed, 264 insertions(+), 264 deletions(-) create mode 100644 mkspecs/symbian-armcc/features/default_post.prf create mode 100644 mkspecs/symbian-armcc/qmake.conf create mode 100644 mkspecs/symbian-armcc/qplatformdefs.h create mode 100644 mkspecs/symbian-gcce/features/default_post.prf create mode 100644 mkspecs/symbian-gcce/qmake.conf create mode 100644 mkspecs/symbian-gcce/qplatformdefs.h delete mode 100644 mkspecs/symbian/linux-armcc/features/default_post.prf delete mode 100644 mkspecs/symbian/linux-armcc/qmake.conf delete mode 100644 mkspecs/symbian/linux-armcc/qplatformdefs.h delete mode 100644 mkspecs/symbian/linux-gcce/features/default_post.prf delete mode 100644 mkspecs/symbian/linux-gcce/qmake.conf delete mode 100644 mkspecs/symbian/linux-gcce/qplatformdefs.h diff --git a/configure b/configure index dfbf9bd..6341dfb 100755 --- a/configure +++ b/configure @@ -761,7 +761,7 @@ L_FLAGS= RPATH_FLAGS= l_FLAGS= QCONFIG_FLAGS= -XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian/linux-gcce" +XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce" XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) PLATFORM=$QMAKESPEC QT_CROSS_COMPILE=no diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc index 1a87566..5aaa2b0 100644 --- a/doc/src/snippets/code/doc_src_installation.qdoc +++ b/doc/src/snippets/code/doc_src_installation.qdoc @@ -250,12 +250,12 @@ export PATH //! [38] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-armcc +./configure -platform linux-g++ -xplatform symbian-armcc //! [38] //! [39] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-gcce -no-webkit +./configure -platform linux-g++ -xplatform symbian-gcce -no-webkit //! [39] //! [40] diff --git a/mkspecs/features/symbian/do_not_build_as_thumb.prf b/mkspecs/features/symbian/do_not_build_as_thumb.prf index 60d9382..0f1fd9f 100644 --- a/mkspecs/features/symbian/do_not_build_as_thumb.prf +++ b/mkspecs/features/symbian/do_not_build_as_thumb.prf @@ -1,6 +1,6 @@ symbian-abld|symbian-sbsv2 { MMP_RULES += ALWAYS_BUILD_AS_ARM -} else:linux-armcc { +} else:symbian-armcc { QMAKE_CFLAGS -= --thumb QMAKE_CFLAGS += --arm QMAKE_CXXFLAGS -= --thumb diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 0d2e053..248c83f 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -1,7 +1,7 @@ -linux-armcc { +symbian-armcc { QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC -} else:linux-gcce { +} else:symbian-gcce { QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE } @@ -16,7 +16,7 @@ else:clean_TARGET = $$TARGET !contains(clean_TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${clean_TARGET}_LFLAGS) !isEmpty(TMPVAR) { QMAKE_LFLAGS += $$TMPVAR -} else :linux-gcce { # lets provide a simple default. Without elf2e32 complains +} else :symbian-gcce { # lets provide a simple default. Without elf2e32 complains QMAKE_LFLAGS += -Ttext 0x80000 -Tdata 0x400000 } @@ -62,7 +62,7 @@ for(libToProcess, libsToProcess) { } else { qt_newLib = $$processSymbianLibrary($$qt_library) contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib - linux-gcce:qt_newLib = "-l:$$qt_newLib" + symbian-gcce:qt_newLib = "-l:$$qt_newLib" eval($$libToProcess += \$\$qt_newLib) } } @@ -142,10 +142,10 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def - linux-armcc: { + symbian-armcc: { LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\) - } else :linux-gcce { + } else :symbian-gcce { LIBS += \ -l:edllstub.lib \ -l:edll.lib \ @@ -185,7 +185,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget} - linux-armcc: { + symbian-armcc: { QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\) contains(CONFIG, "qt") { @@ -195,7 +195,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_LIBS -= $$QMAKE_LIBS_NO_QT_ENTRY QMAKE_LIBS += $$QMAKE_LIBS_NO_QT_ENTRY } - } else :linux-gcce { + } else :symbian-gcce { # notice that we can't merge these as ordering of arguments is important. QMAKE_LIBS += \ -l:eexe.lib \ @@ -225,7 +225,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { } # Symbian resource files -linux-armcc: { +symbian-armcc: { SYMBIAN_RVCT22INC=$$(RVCT22INC) !isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC} } diff --git a/mkspecs/symbian-armcc/features/default_post.prf b/mkspecs/symbian-armcc/features/default_post.prf new file mode 100644 index 0000000..7aa1f4d --- /dev/null +++ b/mkspecs/symbian-armcc/features/default_post.prf @@ -0,0 +1,5 @@ +load(default_post.prf) + +# It is important that this config be executed last, +# and qmake does them in reverse order. +CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf new file mode 100644 index 0000000..be6af39 --- /dev/null +++ b/mkspecs/symbian-armcc/qmake.conf @@ -0,0 +1,62 @@ +# +# qmake configuration for symbian-armcc +# + +include(../common/symbian/symbian-makefile.conf) + +include(../common/armcc.conf) + +QMAKE_RVCT_LINKSTYLE = 1 + +# notice that the middle part of the following set of vars matches the TARGET content of the libs + +#QMAKE_qtmain_CXXFLAGS = --arm +#QMAKE_QtCore_CXXFLAGS = +QMAKE_QtGui_LFLAGS = "--rw-base 0x800000" +#QMAKE_QtDBus_CXXFLAGS = +#QMAKE_QtDeclarative_CXXFLAGS = +#QMAKE_QtMultimedia_CXXFLAGS = +#QMAKE_QtNetwork_CXXFLAGS = +#QMAKE_QtOpenGL_CXXFLAGS = +#QMAKE_QtOpenVG_CXXFLAGS = +#QMAKE_phonon_CXXFLAGS = +#QMAKE_QtScript_CXXFLAGS = +#QMAKE_QtScriptTools_CXXFLAGS = +#QMAKE_QtSql_CXXFLAGS = +#QMAKE_QtSvg_CXXFLAGS = +#QMAKE_QtTest_CXXFLAGS = +#QMAKE_QtXmlPatterns_CXXFLAGS = +#QMAKE_QtXml_CXXFLAGS = +QMAKE_QtWebKit_CXXFLAGS = --arm +# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. +QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000 + +QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib +QMAKE_LFLAGS_APP += --entry _E32Startup +QMAKE_LFLAGS_SHLIB += --entry _E32Dll +QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB + +DEFINES += EKA2 \ + __ARMCC__ \ + __ARMcc_2__ \ + __ARMCC_2_2__ + +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib +QMAKE_LIBDIR *= $$(RVCT22LIB) + +INCLUDEPATH = $${EPOCROOT}epoc32/include \ + $${EPOCROOT}epoc32/include/variant \ + $${EPOCROOT}epoc32/include/stdapis \ + $$INCLUDEPATH + +exists($${EPOCROOT}epoc32/include/rvct2_2) { + INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 + QMAKE_CFLAGS += --preinclude rvct2_2.h + QMAKE_CXXFLAGS += --preinclude rvct2_2.h +} else { + INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct + QMAKE_CFLAGS += --preinclude rvct.h + QMAKE_CXXFLAGS += --preinclude rvct.h +} diff --git a/mkspecs/symbian-armcc/qplatformdefs.h b/mkspecs/symbian-armcc/qplatformdefs.h new file mode 100644 index 0000000..0eb74ca --- /dev/null +++ b/mkspecs/symbian-armcc/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../common/symbian/qplatformdefs.h" diff --git a/mkspecs/symbian-gcce/features/default_post.prf b/mkspecs/symbian-gcce/features/default_post.prf new file mode 100644 index 0000000..7aa1f4d --- /dev/null +++ b/mkspecs/symbian-gcce/features/default_post.prf @@ -0,0 +1,5 @@ +load(default_post.prf) + +# It is important that this config be executed last, +# and qmake does them in reverse order. +CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf new file mode 100644 index 0000000..8de9f26 --- /dev/null +++ b/mkspecs/symbian-gcce/qmake.conf @@ -0,0 +1,92 @@ +# +# qmake configuration for symbian-gcce +# + +include(../common/symbian/symbian-makefile.conf) + +include(../common/g++.conf) + +QMAKE_CC = arm-none-symbianelf-gcc +QMAKE_CXX = arm-none-symbianelf-g++ +QMAKE_LINK = arm-none-symbianelf-ld +QMAKE_LINK_SHLIB = arm-none-symbianelf-ld +QMAKE_LINK_C = arm-none-symbianelf-ld +QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld +QMAKE_AR = arm-none-symbianelf-ar cqs + +# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible +# notice that the middle part of the following set of vars matches the TARGET content of the libs + +QMAKE_qtmain_CXXFLAGS = -mthumb +QMAKE_QtCore_CXXFLAGS = -mthumb +QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 +QMAKE_QtDBus_CXXFLAGS = -mthumb +QMAKE_QtDeclarative_CXXFLAGS = -mthumb +QMAKE_QtMultimedia_CXXFLAGS = -mthumb +QMAKE_QtNetwork_CXXFLAGS = -mthumb +QMAKE_QtOpenGL_CXXFLAGS = -mthumb +QMAKE_QtOpenVG_CXXFLAGS = -mthumb +QMAKE_phonon_CXXFLAGS = -mthumb +QMAKE_QtScript_CXXFLAGS = -mthumb +QMAKE_QtScriptTools_CXXFLAGS = -mthumb +QMAKE_QtSql_CXXFLAGS = -mthumb +QMAKE_QtSvg_CXXFLAGS = -mthumb +QMAKE_QtTest_CXXFLAGS = -mthumb +QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb +QMAKE_QtXml_CXXFLAGS = -mthumb +#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b] +QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 + +# never use -fPIC, gcce-linker doesn't like it. +# g++ conf above adds it if the host platform is 64 bit, so we remove it again +QMAKE_CFLAGS_SHLIB -= -fPIC +QMAKE_CFLAGS_STATIC_LIB -= -fPIC +QMAKE_CXXFLAGS_SHLIB -= -fPIC +QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC + +QMAKE_LFLAGS_SONAME = +#QMAKE_LFLAGS_THREAD += +QMAKE_LFLAGS_NOUNDEF = +QMAKE_LFLAGS_RPATH = --rpath= + +DEFINES += __GCCE__ \ + UNICODE + +QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup +QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll +QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB + +gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script +QMAKE_CFLAGS += $${gcceExtraFlags} +QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden +#If we are not going to link to Qt or qtmain.lib, we need to include this at least once. +isEmpty(QT):contains(TEMPLATE, app) { + QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h +} + +QMAKE_LFLAGS += --target1-abs \ + --no-undefined \ + --nostdlib + +QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ + +# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile +QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) +for(line, QMAKE_GCC_SEARCH_DIRS) { + contains(line, "libraries:") { + foundIt="1" + } else { + contains(foundIt, "1") { + QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") + } + } +} + +QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib + +INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ + $${EPOCROOT}/epoc32/include/variant \ + $${EPOCROOT}/epoc32/include/stdapis \ + $${EPOCROOT}/epoc32/include/gcce \ + $$INCLUDEPATH + diff --git a/mkspecs/symbian-gcce/qplatformdefs.h b/mkspecs/symbian-gcce/qplatformdefs.h new file mode 100644 index 0000000..9d95a37 --- /dev/null +++ b/mkspecs/symbian-gcce/qplatformdefs.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../common/symbian/qplatformdefs.h" + diff --git a/mkspecs/symbian/linux-armcc/features/default_post.prf b/mkspecs/symbian/linux-armcc/features/default_post.prf deleted file mode 100644 index 7aa1f4d..0000000 --- a/mkspecs/symbian/linux-armcc/features/default_post.prf +++ /dev/null @@ -1,5 +0,0 @@ -load(default_post.prf) - -# It is important that this config be executed last, -# and qmake does them in reverse order. -CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian/linux-armcc/qmake.conf b/mkspecs/symbian/linux-armcc/qmake.conf deleted file mode 100644 index f058421..0000000 --- a/mkspecs/symbian/linux-armcc/qmake.conf +++ /dev/null @@ -1,62 +0,0 @@ -# -# qmake configuration for symbian/linux-armcc -# - -include(../../common/symbian/symbian-makefile.conf) - -include(../../common/armcc.conf) - -QMAKE_RVCT_LINKSTYLE = 1 - -# notice that the middle part of the following set of vars matches the TARGET content of the libs - -#QMAKE_qtmain_CXXFLAGS = --arm -#QMAKE_QtCore_CXXFLAGS = -QMAKE_QtGui_LFLAGS = "--rw-base 0x800000" -#QMAKE_QtDBus_CXXFLAGS = -#QMAKE_QtDeclarative_CXXFLAGS = -#QMAKE_QtMultimedia_CXXFLAGS = -#QMAKE_QtNetwork_CXXFLAGS = -#QMAKE_QtOpenGL_CXXFLAGS = -#QMAKE_QtOpenVG_CXXFLAGS = -#QMAKE_phonon_CXXFLAGS = -#QMAKE_QtScript_CXXFLAGS = -#QMAKE_QtScriptTools_CXXFLAGS = -#QMAKE_QtSql_CXXFLAGS = -#QMAKE_QtSvg_CXXFLAGS = -#QMAKE_QtTest_CXXFLAGS = -#QMAKE_QtXmlPatterns_CXXFLAGS = -#QMAKE_QtXml_CXXFLAGS = -QMAKE_QtWebKit_CXXFLAGS = --arm -# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. -QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000 - -QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter -QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib -QMAKE_LFLAGS_APP += --entry _E32Startup -QMAKE_LFLAGS_SHLIB += --entry _E32Dll -QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB - -DEFINES += EKA2 \ - __ARMCC__ \ - __ARMcc_2__ \ - __ARMCC_2_2__ - -QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -QMAKE_LIBDIR *= $$(RVCT22LIB) - -INCLUDEPATH = $${EPOCROOT}epoc32/include \ - $${EPOCROOT}epoc32/include/variant \ - $${EPOCROOT}epoc32/include/stdapis \ - $$INCLUDEPATH - -exists($${EPOCROOT}epoc32/include/rvct2_2) { - INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 - QMAKE_CFLAGS += --preinclude rvct2_2.h - QMAKE_CXXFLAGS += --preinclude rvct2_2.h -} else { - INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct - QMAKE_CFLAGS += --preinclude rvct.h - QMAKE_CXXFLAGS += --preinclude rvct.h -} diff --git a/mkspecs/symbian/linux-armcc/qplatformdefs.h b/mkspecs/symbian/linux-armcc/qplatformdefs.h deleted file mode 100644 index 19c97ff..0000000 --- a/mkspecs/symbian/linux-armcc/qplatformdefs.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the mkspecs of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "../../common/symbian/qplatformdefs.h" diff --git a/mkspecs/symbian/linux-gcce/features/default_post.prf b/mkspecs/symbian/linux-gcce/features/default_post.prf deleted file mode 100644 index 7aa1f4d..0000000 --- a/mkspecs/symbian/linux-gcce/features/default_post.prf +++ /dev/null @@ -1,5 +0,0 @@ -load(default_post.prf) - -# It is important that this config be executed last, -# and qmake does them in reverse order. -CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian/linux-gcce/qmake.conf b/mkspecs/symbian/linux-gcce/qmake.conf deleted file mode 100644 index 62cc9ae..0000000 --- a/mkspecs/symbian/linux-gcce/qmake.conf +++ /dev/null @@ -1,92 +0,0 @@ -# -# qmake configuration for symbian/linux-gcce -# - -include(../../common/symbian/symbian-makefile.conf) - -include(../../common/g++.conf) - -QMAKE_CC = arm-none-symbianelf-gcc -QMAKE_CXX = arm-none-symbianelf-g++ -QMAKE_LINK = arm-none-symbianelf-ld -QMAKE_LINK_SHLIB = arm-none-symbianelf-ld -QMAKE_LINK_C = arm-none-symbianelf-ld -QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld -QMAKE_AR = arm-none-symbianelf-ar cqs - -# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible -# notice that the middle part of the following set of vars matches the TARGET content of the libs - -QMAKE_qtmain_CXXFLAGS = -mthumb -QMAKE_QtCore_CXXFLAGS = -mthumb -QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 -QMAKE_QtDBus_CXXFLAGS = -mthumb -QMAKE_QtDeclarative_CXXFLAGS = -mthumb -QMAKE_QtMultimedia_CXXFLAGS = -mthumb -QMAKE_QtNetwork_CXXFLAGS = -mthumb -QMAKE_QtOpenGL_CXXFLAGS = -mthumb -QMAKE_QtOpenVG_CXXFLAGS = -mthumb -QMAKE_phonon_CXXFLAGS = -mthumb -QMAKE_QtScript_CXXFLAGS = -mthumb -QMAKE_QtScriptTools_CXXFLAGS = -mthumb -QMAKE_QtSql_CXXFLAGS = -mthumb -QMAKE_QtSvg_CXXFLAGS = -mthumb -QMAKE_QtTest_CXXFLAGS = -mthumb -QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb -QMAKE_QtXml_CXXFLAGS = -mthumb -#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b] -QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 - -# never use -fPIC, gcce-linker doesn't like it. -# g++ conf above adds it if the host platform is 64 bit, so we remove it again -QMAKE_CFLAGS_SHLIB -= -fPIC -QMAKE_CFLAGS_STATIC_LIB -= -fPIC -QMAKE_CXXFLAGS_SHLIB -= -fPIC -QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC - -QMAKE_LFLAGS_SONAME = -#QMAKE_LFLAGS_THREAD += -QMAKE_LFLAGS_NOUNDEF = -QMAKE_LFLAGS_RPATH = --rpath= - -DEFINES += __GCCE__ \ - UNICODE - -QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll -QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB - -gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -QMAKE_CFLAGS += $${gcceExtraFlags} -QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden -#If we are not going to link to Qt or qtmain.lib, we need to include this at least once. -isEmpty(QT):contains(TEMPLATE, app) { - QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h -} - -QMAKE_LFLAGS += --target1-abs \ - --no-undefined \ - --nostdlib - -QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ - -# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile -QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) -for(line, QMAKE_GCC_SEARCH_DIRS) { - contains(line, "libraries:") { - foundIt="1" - } else { - contains(foundIt, "1") { - QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") - } - } -} - -QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib - -INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ - $${EPOCROOT}/epoc32/include/variant \ - $${EPOCROOT}/epoc32/include/stdapis \ - $${EPOCROOT}/epoc32/include/gcce \ - $$INCLUDEPATH - diff --git a/mkspecs/symbian/linux-gcce/qplatformdefs.h b/mkspecs/symbian/linux-gcce/qplatformdefs.h deleted file mode 100644 index ae46e15..0000000 --- a/mkspecs/symbian/linux-gcce/qplatformdefs.h +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the mkspecs of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "../../common/symbian/qplatformdefs.h" - diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 86800ef..65de6e0 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -19,7 +19,7 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global # Only used on platforms with CONFIG += precompile_header PRECOMPILED_HEADER = global/qt_pch.h -linux*:!static:!linux-armcc:!linux-gcce { +linux*:!static:!symbian-armcc:!symbian-gcce { QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate prog=$$quote(if (/program interpreter: (.*)]/) { print $1; }) DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\" diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro index 8ab3bd3..1e3e06a 100644 --- a/src/s60main/s60main.pro +++ b/src/s60main/s60main.pro @@ -30,7 +30,7 @@ symbian { # Having MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA will cause s60main.lib be unlinkable # against GCCE apps, so remove it MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA - linux-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl + symbian-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl # Flag if exports are not frozen to avoid lookup of qtcore allocator creation function by ordinal contains(CONFIG, def_files_disabled): DEFINES += QT_EXPORTS_NOT_FROZEN -- cgit v0.12 From 342cd591f5a702b1bff2a72cf6894da191cd0f10 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 8 Oct 2010 15:38:10 +0200 Subject: Fixed various quotation problems when porting to Windows. These should work for both Windows and UNIX platforms. RevBy: Thomas Zander --- mkspecs/common/symbian/symbian-makefile.conf | 4 ++-- mkspecs/features/symbian/symbian_building.prf | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index e51de1d..899f8c2 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -25,9 +25,9 @@ QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 is_using_gnupoc { - DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh\\> + DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh>\" } else { - DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh\\> + DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh>\" } DEFINES *= \ __SYMBIAN32__ \ diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 248c83f..f5df68b 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -129,7 +129,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { --tmpdso=$${symbianObjdir}/$${baseTarget}.dso \ --dso=$${symbianDestdir}/$${baseTarget}.dso \ --defoutput=$$symbianObjdir/$${baseTarget}.def \ - --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll \ + --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" \ --heap=$$epoc_heap_size \ --stack=$$TARGET.EPOCSTACKSIZE \ $$elf2e32_LIBPATH \ @@ -143,8 +143,13 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def symbian-armcc: { - LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) - LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\) + LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso + # Quotation unfortunately is different on Windows and unix. + contains(QMAKE_HOST.os, Windows) { + LIBS += \"h_t__uf.l(switch8.o)\" edllstub.lib \"edll.lib(uc_dll_.o)\" + } else { + LIBS += h_t__uf.l\\(switch8.o\\) edllstub.lib edll.lib\\(uc_dll_.o\\) + } } else :symbian-gcce { LIBS += \ -l:edllstub.lib \ @@ -157,7 +162,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { -lgcc } - QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll + QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" DEFINES += __DLL__ } @@ -172,7 +177,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { --targettype=EXE \ --elfinput=$${symbianDestdir}/$${baseTarget}.sym \ --output=$${symbianDestdir}/$${baseTarget}.exe \ - --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe \ + --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" \ --heap=$$epoc_heap_size \ --stack=$$TARGET.EPOCSTACKSIZE \ $$elf2e32_LIBPATH \ @@ -220,7 +225,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_LFLAGS += --shared } - QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe + QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" DEFINES += __EXE__ } -- cgit v0.12 From c2773ce6b4efb3f8f8d516c29750dd25c802f60b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 18 Feb 2011 15:20:00 +0100 Subject: Changed various qmake constructs to support Windows. RevBy: Thomas Zander Conflicts: mkspecs/features/symbian/symbian_building.prf --- mkspecs/features/symbian/def_files.prf | 18 ++++++++++++++++-- mkspecs/features/symbian/symbian_building.prf | 19 ++++++++++++------- .../sqldrivers/sqlite_symbian/sqlite_symbian.pri | 10 ++++++++-- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf index 4a59116..746de6a 100644 --- a/mkspecs/features/symbian/def_files.prf +++ b/mkspecs/features/symbian/def_files.prf @@ -7,6 +7,18 @@ CONFIG -= def_files_disabled equals(QMAKE_TARGET_PRODUCT, Qt4)|equals(QMAKE_TARGET_PRODUCT, QTestLib):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "") else:clean_TARGET = $$TARGET +defineTest(qtTestIfDirExists) { + contains(QMAKE_HOST.os,Windows) { + dirToTest = $$1 + $$dirToTest ~= s,/,\\, + # Windows trick. Test for existence of nul, which every directory has. + retValue = $$system("if exist $$dirToTest\\nul echo true") + contains(retValue, true):return(true)|return(false) + } else { + system("test -d $$1"):return(true)|return(false) + } +} + symbian-abld|symbian-sbsv2 { # Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one # (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements @@ -52,9 +64,11 @@ symbian-abld|symbian-sbsv2 { } else { defFile = . } - system("$$QMAKE_CHK_DIR_EXISTS $$_PRO_FILE_PWD_/$$defFile") { + qtTestIfDirExists($$_PRO_FILE_PWD_/$$defFile) { !exists("$$_PRO_FILE_PWD_/$$defFile/eabi") { - system("$$QMAKE_MKDIR $$_PRO_FILE_PWD_/$$defFile/eabi") + dirToCreate = $$_PRO_FILE_PWD_/$$defFile/eabi + contains(QMAKE_HOST.os,Windows):dirToCreate ~= s,/,\\, + system("$$QMAKE_MKDIR $$dirToCreate") } elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(clean_TARGET)u.def } else { diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index f5df68b..8a0cc9b 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -89,12 +89,13 @@ count(splitVersion, 0) { decVersion = "10.0" } else { count(splitVersion, 3) { - hexVersion = $$system("sh -c 'printf %02x $$member(splitVersion, 0)'") - hexPart2 = $$system("sh -c 'printf %02x $$member(splitVersion, 1)'") - hexPart2 = $$hexPart2$$system("sh -c 'printf %02x $$member(splitVersion, 2)'") - decVersion = $$system("sh -c 'printf %1d 0x$$hexVersion'"). + hexVersion = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 0))\"") + hexPart2 = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 1))\"") + hexPart2 = $$hexPart2$$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 2))\"") + decVersion = $$system("perl -e \"printf (\\\"%1d\\\", 0x$$hexVersion)\""). hexVersion = $$hexVersion$$hexPart2 - decVersion = $$decVersion$$system("sh -c 'printf %d 0x$$hexPart2'") + decVersion = $$decVersion$$system("perl -e \"printf (\\\"%d\\\", 0x$$hexPart2)\"") + !contains(hexVersion, "[0-9a-f]{8}"):hexVersion = "00$${hexVersion}" } else { # app code may have different numbering... hexVersion = $$VERSION @@ -117,7 +118,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { contains(CONFIG, plugin):QMAKE_ELF2E32_FLAGS += --definput=plugin_commonu.def !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK - QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym \ + moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym + contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\) + QMAKE_POST_LINK = $$moveCmd \ && $$QMAKE_ELF2E32_WRAPPER --version=$$decVersion \ --sid=$$TARGET.SID \ --uid1=0x10000079 \ @@ -168,7 +171,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK - QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym \ + moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym + contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\) + QMAKE_POST_LINK = $$moveCmd \ && $$QMAKE_ELF2E32_WRAPPER --version $$decVersion \ --sid=$$TARGET.SID \ --uid1=0x1000007a \ diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index 494c64c..ebeccc9 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -1,6 +1,12 @@ # We just want to include the sqlite3 binaries for Symbian for platforms that do not have them. !symbian-abld:!symbian-sbsv2 { !symbian_no_export_sqlite:!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) { + contains(QMAKE_HOST.os,Windows) { + # Trick on Windows to do a touch on the file, since copy keeps the timestamp. + copyWithTouch = copy /y /b NUL+ + } else { + copyWithTouch = "$$QMAKE_COPY " + } symbian_sqlite3_zip_file = $$PWD/SQLite3_v9.2.zip # The QMAKE_COPY section is to update timestamp on the file. @@ -10,7 +16,7 @@ symbian_sqlite3_header.CONFIG = combine no_link symbian_sqlite3_header.dependency_type = TYPE_C symbian_sqlite3_header.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/include/stdapis/${QMAKE_FILE_OUT_BASE}.h \ - && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ + && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} silent:symbian_sqlite3_header.commands = @echo unzipping $@ && $$symbian_sqlite3_header.commands @@ -22,7 +28,7 @@ !isEmpty(OBJECTS_DIR):symbian_sqlite3_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_dso.output symbian_sqlite3_dso.CONFIG = combine no_link target_predeps symbian_sqlite3_dso.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/release/armv5/lib/${QMAKE_FILE_OUT_BASE}.dso \ - && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ + && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands -- cgit v0.12 From bfc7893b55e83e174474809861fa53d77e5f3165 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 8 Oct 2010 15:57:30 +0200 Subject: Added wrapper for the elf2e32_qtwrapper script. This is needed to call the script on Windows. RevBy: Trust me --- bin/elf2e32_qtwrapper | 148 +--------------------------------------------- bin/elf2e32_qtwrapper.bat | 3 + bin/elf2e32_qtwrapper.pl | 145 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 145 deletions(-) create mode 100644 bin/elf2e32_qtwrapper.bat create mode 100644 bin/elf2e32_qtwrapper.pl diff --git a/bin/elf2e32_qtwrapper b/bin/elf2e32_qtwrapper index 694d54a..a3a4065 100755 --- a/bin/elf2e32_qtwrapper +++ b/bin/elf2e32_qtwrapper @@ -1,145 +1,3 @@ -#!/usr/bin/perl -w - -# A script to get around some shortcomings in elf2e32, namely: -# - Returning 0 even when there are errors. -# - Excluding symbols from the dso file even when they are present in the ELF file. -# - Including symbols in the the dso file even when they are not present in the ELF file. -# - Overwriting the old dso file even when there are no changes (increases build time). - -use File::Copy; - -my @args = (); -my @definput; -my @defoutput; -my @dso; -my @tmpdso; -foreach (@ARGV) { - if (/^--definput/o) { - @definput = split('=', $_); - } elsif (/^--defoutput/o) { - @defoutput = split('=', $_); - } elsif (/^--dso/o) { - @dso = split('=', $_); - } elsif (/^--tmpdso/o) { - @tmpdso = split('=', $_); - $tmpdso[0] = "--dso"; - } else { - push(@args, $_); - } -} - -@definput = () if (!@definput || ! -e $definput[1]); - -if (@dso && !@tmpdso || !@dso && @tmpdso) { - print("--dso and --tmpdso must be used together.\n"); - exit 1; -} - -my $buildingLibrary = (@defoutput && @dso) ? 1 : 0; - -my $fixupFile = ""; -my $runCount = 0; -my $returnCode = 0; - -while (1) { - if (++$runCount > 2) { - print("Internal error in $0, link succeeded, but exports may be wrong.\n"); - last; - } - - my $elf2e32Pipe; - my $elf2e32Cmd = "elf2e32 @args" - . " " . join("=", @definput) - . " " . join("=", @defoutput) - . " " . join("=", @tmpdso); - open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32"); - - my %fixupSymbols; - my $foundBrokenSymbols = 0; - my $errors = 0; - while (<$elf2e32Pipe>) { - print; - if (/Error:/io) { - $errors = 1; - } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) { - $fixupSymbols{$1} = 1; - $foundBrokenSymbols = 1; - } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) { - $foundBrokenSymbols = 1; - } - } - close($elf2e32Pipe); - - if ($errors) { - $returnCode = 1; - last; - } - - if ($buildingLibrary) { - my $tmpDefFile; - my $defFile; - open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); - open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); - $fixupFile = "$defoutput[1].tmp"; - while (<$defFile>) { - s/\r//; - s/\n//; - next if (/; NEW:/); - if (/([a-z0-9_]+) @/i) { - if (exists($fixupSymbols{$1})) { - s/ ABSENT//; - } elsif (s/; MISSING://) { - s/$/ ABSENT/; - } - } - print($tmpDefFile "$_\n"); - } - close($defFile); - close($tmpDefFile); - - $definput[1] = "$defoutput[1].tmp"; - - if (!$foundBrokenSymbols || $errors) { - last; - } - - print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n"); - } else { - last; - } -}; - -if ($fixupFile) { - unlink($defoutput[1]); - move($fixupFile, $defoutput[1]); -} - -exit $returnCode if ($returnCode != 0); - -if ($buildingLibrary) { - my $differenceFound = 0; - - if (-e $dso[1]) { - my $dsoFile; - my $tmpdsoFile; - my $dsoBuf; - my $tmpdsoBuf; - open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]"); - open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]"); - binmode($dsoFile); - binmode($tmpdsoFile); - while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) { - if ($dsoBuf ne $tmpdsoBuf) { - $differenceFound = 1; - } - } - close($tmpdsoFile); - close($dsoFile); - } else { - $differenceFound = 1; - } - - if ($differenceFound) { - copy($tmpdso[1], $dso[1]); - } -} +#!/bin/sh +scriptpath=`dirname $0` +perl $scriptpath/elf2e32_qtwrapper.pl "$@" diff --git a/bin/elf2e32_qtwrapper.bat b/bin/elf2e32_qtwrapper.bat new file mode 100644 index 0000000..52910df --- /dev/null +++ b/bin/elf2e32_qtwrapper.bat @@ -0,0 +1,3 @@ +@echo off +set scriptpath=%~dp0 +perl %scriptpath%elf2e32_qtwrapper.pl %* diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl new file mode 100644 index 0000000..694d54a --- /dev/null +++ b/bin/elf2e32_qtwrapper.pl @@ -0,0 +1,145 @@ +#!/usr/bin/perl -w + +# A script to get around some shortcomings in elf2e32, namely: +# - Returning 0 even when there are errors. +# - Excluding symbols from the dso file even when they are present in the ELF file. +# - Including symbols in the the dso file even when they are not present in the ELF file. +# - Overwriting the old dso file even when there are no changes (increases build time). + +use File::Copy; + +my @args = (); +my @definput; +my @defoutput; +my @dso; +my @tmpdso; +foreach (@ARGV) { + if (/^--definput/o) { + @definput = split('=', $_); + } elsif (/^--defoutput/o) { + @defoutput = split('=', $_); + } elsif (/^--dso/o) { + @dso = split('=', $_); + } elsif (/^--tmpdso/o) { + @tmpdso = split('=', $_); + $tmpdso[0] = "--dso"; + } else { + push(@args, $_); + } +} + +@definput = () if (!@definput || ! -e $definput[1]); + +if (@dso && !@tmpdso || !@dso && @tmpdso) { + print("--dso and --tmpdso must be used together.\n"); + exit 1; +} + +my $buildingLibrary = (@defoutput && @dso) ? 1 : 0; + +my $fixupFile = ""; +my $runCount = 0; +my $returnCode = 0; + +while (1) { + if (++$runCount > 2) { + print("Internal error in $0, link succeeded, but exports may be wrong.\n"); + last; + } + + my $elf2e32Pipe; + my $elf2e32Cmd = "elf2e32 @args" + . " " . join("=", @definput) + . " " . join("=", @defoutput) + . " " . join("=", @tmpdso); + open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32"); + + my %fixupSymbols; + my $foundBrokenSymbols = 0; + my $errors = 0; + while (<$elf2e32Pipe>) { + print; + if (/Error:/io) { + $errors = 1; + } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) { + $fixupSymbols{$1} = 1; + $foundBrokenSymbols = 1; + } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) { + $foundBrokenSymbols = 1; + } + } + close($elf2e32Pipe); + + if ($errors) { + $returnCode = 1; + last; + } + + if ($buildingLibrary) { + my $tmpDefFile; + my $defFile; + open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); + open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); + $fixupFile = "$defoutput[1].tmp"; + while (<$defFile>) { + s/\r//; + s/\n//; + next if (/; NEW:/); + if (/([a-z0-9_]+) @/i) { + if (exists($fixupSymbols{$1})) { + s/ ABSENT//; + } elsif (s/; MISSING://) { + s/$/ ABSENT/; + } + } + print($tmpDefFile "$_\n"); + } + close($defFile); + close($tmpDefFile); + + $definput[1] = "$defoutput[1].tmp"; + + if (!$foundBrokenSymbols || $errors) { + last; + } + + print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n"); + } else { + last; + } +}; + +if ($fixupFile) { + unlink($defoutput[1]); + move($fixupFile, $defoutput[1]); +} + +exit $returnCode if ($returnCode != 0); + +if ($buildingLibrary) { + my $differenceFound = 0; + + if (-e $dso[1]) { + my $dsoFile; + my $tmpdsoFile; + my $dsoBuf; + my $tmpdsoBuf; + open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]"); + open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]"); + binmode($dsoFile); + binmode($tmpdsoFile); + while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) { + if ($dsoBuf ne $tmpdsoBuf) { + $differenceFound = 1; + } + } + close($tmpdsoFile); + close($dsoFile); + } else { + $differenceFound = 1; + } + + if ($differenceFound) { + copy($tmpdso[1], $dso[1]); + } +} -- cgit v0.12 From 4ae3fa3f2a912343b50472c6085ba46b8c6d1e7b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 8 Oct 2010 16:08:09 +0200 Subject: Got rid of some "duplicate library" warnings. RevBy: Trust me --- mkspecs/features/symbian/symbian_building.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 8a0cc9b..7f8570e 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -63,7 +63,7 @@ for(libToProcess, libsToProcess) { qt_newLib = $$processSymbianLibrary($$qt_library) contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib symbian-gcce:qt_newLib = "-l:$$qt_newLib" - eval($$libToProcess += \$\$qt_newLib) + eval($$libToProcess *= \$\$qt_newLib) } } } -- cgit v0.12 From 553a35e8ec823da981faf5119a4305268839ecb2 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 21 Feb 2011 16:14:10 +0100 Subject: Support to build Qt for Symbian on Mac OS X with gcce compiler. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RevBy: axis RevBy: Morten Johan Sørvig Conflicts: configure --- configure | 155 +++++++++++++++++++++---------------------- src/corelib/global/qglobal.h | 2 +- 2 files changed, 77 insertions(+), 80 deletions(-) diff --git a/configure b/configure index 6341dfb..fb1ee4c 100755 --- a/configure +++ b/configure @@ -763,6 +763,8 @@ l_FLAGS= QCONFIG_FLAGS= XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce" XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) +XPLATFORM_SYMBIAN=no # Whether target platform is SYMBIAN (*symbian*) +XPLATFORM_SYMBIAN_SBSV2=no # Whether target platform is SYMBIAN_SBSV2 (symbian-sbsv2) PLATFORM=$QMAKESPEC QT_CROSS_COMPILE=no OPT_CONFIRM_LICENSE=no @@ -1458,6 +1460,8 @@ while [ "$#" -gt 0 ]; do xplatform) XPLATFORM="$VAL" case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac + case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac + case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac ;; debug-and-release) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then @@ -2735,6 +2739,8 @@ fi [ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM" case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac +case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac +case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac if [ -d "$PLATFORM" ]; then QMAKESPEC="$PLATFORM" @@ -3010,7 +3016,7 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then esac elif [ "$XPLATFORM_MINGW" = "yes" ]; then [ -z "$CFG_ARCH" ] && CFG_ARCH="windows" -elif echo "$XPLATFORM" | grep symbian > /dev/null; then +elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_ARCH=symbian elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then CFG_ARCH=$CFG_HOST_ARCH @@ -3138,7 +3144,7 @@ QMAKE_CONF_COMPILER=`getQMakeConf "$XQMAKESPEC" | grep "^QMAKE_CXX[^_A-Z0-9]" | TEST_COMPILER="$CXX" [ -z "$TEST_COMPILER" ] && TEST_COMPILER=$QMAKE_CONF_COMPILER -if [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then #for Symbian we don't need this checking if [ -z "$TEST_COMPILER" ]; then echo "ERROR: Cannot set the compiler for the configuration tests" @@ -3305,16 +3311,18 @@ if [ -z "$QT_INSTALL_PREFIX" ]; then if [ "$PLATFORM" != "$XPLATFORM" ]; then QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" fi - elif [ -d "$EPOCROOT" ] && echo $XPLATFORM | grep symbian > /dev/null; then - QT_INSTALL_PREFIX="$EPOCROOT/epoc32/" - QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/" + elif [ -d "$EPOCROOT" ]; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then + QT_INSTALL_PREFIX="$EPOCROOT/epoc32/" + QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/" + fi else QT_INSTALL_PREFIX="/usr/local/Trolltech/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Trolltech/Qt-$QT_VERSION fi fi QT_INSTALL_PREFIX=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_PREFIX"` -if echo $XPLATFORM | grep symbian > /dev/null; then +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then [ -z "$QT_HOST_PREFIX" ] && QT_HOST_PREFIX="$QT_INSTALL_PREFIX" [ -z "$QT_INSTALL_DOCS" ] && QT_INSTALL_DOCS= [ -z "$QT_INSTALL_HEADERS" ] && QT_INSTALL_HEADERS= @@ -4172,7 +4180,7 @@ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_X11" = "yes" ]; then EOF fi -case "$XPLATFORM" in *symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then cat << EOF Qt for Symbian only: @@ -4184,9 +4192,7 @@ Qt for Symbian only: -no-usedeffiles .... Disable the usage of DEF files. * -usedeffiles ....... Enable the usage of DEF files. EOF -;; -esac - +fi [ "x$ERROR" = "xyes" ] && exit 1 exit 0 fi # Help @@ -4198,10 +4204,10 @@ fi # Help if [ "$PLATFORM_QWS" = "yes" ]; then Platform="Qt for Embedded Linux" +elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then + Platform="Qt for Symbian" elif [ "$PLATFORM_MAC" = "yes" ]; then Platform="Qt for Mac OS X" -elif echo "$XPLATFORM" | grep "symbian" > /dev/null ; then - Platform="Qt for Symbian" elif [ "$XPLATFORM_MINGW" = "yes" ]; then Platform="Qt for Windows" elif [ '!' -z "`getQMakeConf \"$XQMAKESPEC\" | grep QMAKE_LIBS_X11 | awk '{print $3;}'`" ]; then @@ -4586,7 +4592,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; #mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured rm -rf mkspecs/default - if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null ; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then #Link is not supported for Symbian build system cp -a mkspecs/`echo $XQMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` mkspecs/default else @@ -4838,33 +4844,12 @@ if ( [ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ] ) && [ "${CFG_NEON}" = fi fi -# detect zlib -if [ "$CFG_ZLIB" = "no" ]; then - # Note: Qt no longer support builds without zlib - # So we force a "no" to be "auto" here. - # If you REALLY really need no zlib support, you can still disable - # it by doing the following: - # add "no-zlib" to mkspecs/qconfig.pri - # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) - # - # There's no guarantee that Qt will build under those conditions - - CFG_ZLIB=auto - ZLIB_FORCED=yes -fi -if [ "$CFG_ZLIB" = "auto" ]; then - if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then - CFG_ZLIB=system - else - CFG_ZLIB=yes - fi -fi - [ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista" -case "$XPLATFORM" in *symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then QMakeVar set styles "windows s60" #overwrite previous default CFG_LIBFREETYPE=no + CFG_ZLIB=yes if [ "$CFG_LARGEFILE" = auto ]; then CFG_LARGEFILE=no @@ -4882,7 +4867,7 @@ case "$XPLATFORM" in *symbian*) exit 1 fi - if ! echo $XPLATFORM | grep symbian-sbsv2 > /dev/null; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then # Raptor does not support configure tests. # the main commands needed to compile; @@ -4906,8 +4891,29 @@ case "$XPLATFORM" in *symbian*) exit 1; fi fi - ;; -esac +fi + +# detect zlib +if [ "$CFG_ZLIB" = "no" ]; then + # Note: Qt no longer support builds without zlib + # So we force a "no" to be "auto" here. + # If you REALLY really need no zlib support, you can still disable + # it by doing the following: + # add "no-zlib" to mkspecs/qconfig.pri + # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) + # + # There's no guarantee that Qt will build under those conditions + + CFG_ZLIB=auto + ZLIB_FORCED=yes +fi +if [ "$CFG_ZLIB" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then + CFG_ZLIB=system + else + CFG_ZLIB=yes + fi +fi if [ "$CFG_LARGEFILE" = "auto" ]; then #Large files should be enabled for all Linux systems @@ -4916,7 +4922,7 @@ fi if [ "$CFG_S60" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_S60=yes else CFG_S60=no @@ -4924,7 +4930,7 @@ if [ "$CFG_S60" = "auto" ]; then fi if [ "$CFG_QS60STYLE" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_QS60STYLE=qt else CFG_QS60STYLE=no @@ -4932,7 +4938,7 @@ if [ "$CFG_QS60STYLE" = "auto" ]; then fi if [ "$CFG_SYMBIAN_DEFFILES" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null && [ "$CFG_DEV" = "no" ]; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ] && [ "$CFG_DEV" = "no" ]; then CFG_SYMBIAN_DEFFILES=yes else CFG_SYMBIAN_DEFFILES=no @@ -5011,14 +5017,12 @@ fi # detect accessibility if [ "$CFG_ACCESSIBILITY" = "auto" ]; then - case "$XPLATFORM" in - symbian*) + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # accessibility is currently unsupported CFG_ACCESSIBILITY=no - ;; - *) + else CFG_ACCESSIBILITY=yes - esac + fi fi # auto-detect SQL-modules support @@ -5230,15 +5234,13 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do ;; sqlite) if [ "$CFG_SQL_sqlite" = "auto" ]; then # the default - case "$XPLATFORM" in - symbian*) + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # sqlite on symbian is typically not build in Qt but deployed as a pre-existing sis file and should be marked as driver. # Configuration parameters should be set CFG_SQL_sqlite=qt QT_LFLAGS_SQLITE=-lsqlite3 QMAKE_CONFIG="$QMAKE_CONFIG system-sqlite" - ;; - esac + fi fi if [ "$CFG_SQL_sqlite" != "no" ]; then SQLITE_AUTODETECT_FAILED="no" @@ -6103,10 +6105,10 @@ fi if [ "$CFG_ENDIAN" = "auto" ]; then if [ "$XPLATFORM_MINGW" = "yes" ]; then CFG_ENDIAN="Q_LITTLE_ENDIAN" - elif [ "$PLATFORM_MAC" = "yes" ]; then - true #leave as auto - elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then + elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then CFG_ENDIAN="Q_LITTLE_ENDIAN" + elif [ "$PLATFORM_MAC" = "yes" ] && [ "$XPLATFORM_SYMBIAN" = "no" ]; then + true #leave as auto else "$unixtests/endian.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" F="$?" @@ -6192,7 +6194,7 @@ if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then fi HAVE_STL=no -if echo "$XPLATFORM" | grep symbian > /dev/null || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then +if [ "$XPLATFORM_SYMBIAN" = "yes" ] || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then HAVE_STL=yes fi @@ -6219,7 +6221,7 @@ if [ "$CFG_IPV6" != "no" ]; then # Therefore for 4.7.1 and following we disable it until OpenC either supports it or we have the native Qt # symbian socket engine. # - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_IPV6=no elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ipv6 "IPv6" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_IPV6=yes @@ -6334,7 +6336,7 @@ if [ "$CFG_GETIFADDRS" != "no" ]; then fi # detect OpenSSL -if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/openssl "OpenSSL" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then if [ "$CFG_OPENSSL" = "auto" ]; then CFG_OPENSSL=yes @@ -6351,14 +6353,14 @@ if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then fi fi else - if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM" = "symbian-sbsv2" ]; then + if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then #OpenSSl should be enabled for Symbian release CFG_OPENSSL=yes fi fi # detect OpenVG support -if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/openvg" "OpenVG" $L_FLAGS $I_FLAGS $l_FLAGS $CONFIG_ARG; then if [ "$CFG_OPENVG" = "auto" ]; then CFG_OPENVG=yes @@ -6415,13 +6417,13 @@ if [ "$CFG_PTMALLOC" != "no" ]; then QMakeVar add QMAKE_LFLAGS "$outpath/lib/libptmalloc3.a" fi -if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/alsa "alsa" $L_FLAGS $I_FLAGS $l_FLAGS; then CFG_ALSA=yes else CFG_ALSA=no fi -elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then +elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then # Disabled for Symbian release CFG_ALSA=no fi @@ -6442,7 +6444,7 @@ elif [ "$CFG_JAVASCRIPTCORE_JIT" = "no" ]; then fi if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null 2>&1; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then if "$symbiantests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/symbian/audio "audio" $L_FLAGS $I_FLAGS $l_FLAGS ; then CFG_AUDIO_BACKEND=yes fi @@ -6454,7 +6456,7 @@ fi if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then echo "Warning: largefile support cannot be disabled for win32." CFG_LARGEFILE="yes" -elif [ "$CFG_LARGEFILE" != "no" ] && echo "$XPLATFORM" | grep "symbian" > /dev/null; then +elif [ "$CFG_LARGEFILE" != "no" ] && [ "$XPLATFORM_SYMBIAN" = "yes" ]; then echo "Warning: largefile support cannot be enabled for symbian." CFG_LARGEFILE="no" fi @@ -6561,8 +6563,9 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi fi -# but disable Cocoa if cross-building for mingw +# but disable Cocoa if cross-building for mingw and symbian [ "$XPLATFORM_MINGW" = "yes" ] && CFG_MAC_COCOA="no" +[ "$XPLATFORM_SYMBIAN" = "yes" ] && CFG_MAC_COCOA="no" # set the global Mac deployment target. This is overridden on an arch-by-arch basis # in some cases, see code further down @@ -6640,13 +6643,11 @@ else fi # Just check if OpenGL is not set by command argumets for Symbian. -case "$XPLATFORM" in - symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then if [ "$CFG_OPENGL" = "auto" ]; then CFG_OPENGL="no" fi - ;; -esac +fi # enable opengl if [ "$CFG_OPENGL" = "no" ]; then @@ -6830,7 +6831,7 @@ else fi -if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then +if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ] && [ "$XPLATFORM_SYMBIAN" != "yes" ]; then #On Mac we implicitly link against libz, so we #never use the 3rdparty stuff. [ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system" @@ -7469,14 +7470,11 @@ rm -f .options BUILD_OPTIONS="$BUILD_CONFIG $BUILD_OPTIONS" # extract the operating system from the XPLATFORM TARGET_OPERATING_SYSTEM=`echo $XPLATFORM | cut -f 2- -d/ | cut -f -1 -d-` -case "$XPLATFORM" in -symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then QT_BUILD_KEY_SYSTEM_PART="Symbian" - ;; -*) +else QT_BUILD_KEY_SYSTEM_PART="$CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPILER" - ;; -esac +fi # when cross-compiling, don't include build-host information (build key is target specific) QT_BUILD_KEY="$CFG_USER_BUILD_KEY $QT_BUILD_KEY_SYSTEM_PART $BUILD_OPTIONS" @@ -7808,8 +7806,7 @@ fi [ '!' -z "$AWK" ] && QCONFIG_FLAGS=`echo $QCONFIG_FLAGS | $AWK '{ gsub(" ", "\n"); print }' | sort | uniq` QCONFIG_FLAGS=`echo $QCONFIG_FLAGS` -if echo $XPLATFORM | grep symbian >/dev/null -then +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # Enable Symbian DLLs and export rules. # We cannot use Linux's default export rules since they export everything. QCONFIG_FLAGS="$QCONFIG_FLAGS QT_DLL" @@ -7889,7 +7886,7 @@ else mv "$outpath/src/corelib/global/qconfig.h.new" "$outpath/src/corelib/global/qconfig.h" chmod -w "$outpath/src/corelib/global/qconfig.h" for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do - if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1 ; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then [ -e "$conf" ] && rm -rf "$conf" cp -a "$outpath/src/corelib/global/qconfig.h" "$conf" elif [ '!' -f "$conf" ]; then @@ -8568,7 +8565,7 @@ for file in .projects .projects.3; do fi SPEC=$XQMAKESPEC ;; *s60main/s60main.pro) - if [ "$CFG_NOPROCESS" = "yes" ] || ! echo "$XPLATFORM" | grep "symbian" >/dev/null; then + if [ "$CFG_NOPROCESS" = "yes" ] || [ "$XPLATFORM_SYMBIAN" != "yes" ]; then continue fi;; *examples/activeqt/*) continue ;; diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index c2fb16c..d90f455 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -284,7 +284,7 @@ namespace QT_NAMESPACE {} # endif #endif -#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) +#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) && !defined(QT_BOOTSTRAPPED) #error "You are building a 64-bit application, but using a 32-bit version of Qt. Check your build configuration." #endif -- cgit v0.12 From d2f833db2323a1ca13b4f293b169a8401cd30ace Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 21 Feb 2011 16:17:57 +0100 Subject: Fix some build issues for building Qt for Symbian on Mac OS X. Need to add edllstub.lib and change a bit because some refactored work for mkspecs in 86636e0c4ab91bfb60be1e18d6daff34d41a5927. RevBy: axis Conflicts: mkspecs/symbian-gcce/qmake.conf --- mkspecs/symbian-gcce/qmake.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 8de9f26..4b54421 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -4,6 +4,7 @@ include(../common/symbian/symbian-makefile.conf) +include(../common/gcc-base.conf) include(../common/g++.conf) QMAKE_CC = arm-none-symbianelf-gcc @@ -53,7 +54,7 @@ DEFINES += __GCCE__ \ UNICODE QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll +QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -- cgit v0.12 From 92afb21fb194a1bfa2d0529307d329b6ca941281 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Wed, 27 Oct 2010 14:48:25 +0200 Subject: Fixed a bug in the elf2e32_qtwrapper script. It did not handle missing symbols in all cases, most notably when elf2e32 decides to omit it from the produced def file. This required us to start reading the original def file as well, to find out what the original symbols was. Task: QTBUG-11839 RevBy: Thomas Zander --- bin/elf2e32_qtwrapper.pl | 104 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 90 insertions(+), 14 deletions(-) mode change 100644 => 100755 bin/elf2e32_qtwrapper.pl diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl old mode 100644 new mode 100755 index 694d54a..c51c409 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -75,26 +75,102 @@ while (1) { last; } - if ($buildingLibrary) { + if ($buildingLibrary && $runCount == 1) { my $tmpDefFile; - my $defFile; - open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); + my $newDefFile; + my $origDefFile; + my $savedNewDefFileLine = ""; + open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + open($newDefFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); + print($tmpDefFile "EXPORTS\n"); $fixupFile = "$defoutput[1].tmp"; - while (<$defFile>) { - s/\r//; - s/\n//; - next if (/; NEW:/); - if (/([a-z0-9_]+) @/i) { - if (exists($fixupSymbols{$1})) { - s/ ABSENT//; - } elsif (s/; MISSING://) { - s/$/ ABSENT/; + while (1) { + my $origDefLine; + my $origSym; + my $origOrdinal; + my $origExtraData; + my $newDefLine; + my $newSym; + my $newOrdinal; + my $newExtraData; + my $defLine; + my $sym; + my $ordinal; + my $extraData; + # Read from original def file, and skip non-symbol lines + while (1) { + $origDefLine = <$origDefFile>; + if (defined($origDefLine)) { + $origDefLine =~ s/[\n\r]//; + if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $origSym = $1; + $origOrdinal = $2; + $origExtraData = $3; + last; + } + } else { + last; } } - print($tmpDefFile "$_\n"); + + if ($savedNewDefFileLine) { + # This happens if the new def file was missing an entry. + $newDefLine = $savedNewDefFileLine; + $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen"); + $newSym = $1; + $newOrdinal = $2; + $newExtraData = $3; + } else { + # Read from new def file, and skip non-symbol lines + while (1) { + $newDefLine = <$newDefFile>; + if (defined($newDefLine)) { + $newDefLine =~ s/[\n\r]//; + if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $newSym = $1; + $newOrdinal = $2; + $newExtraData = $3; + last; + } + } else { + last; + } + } + } + $savedNewDefFileLine = ""; + last if (!defined($origDefLine) && !defined($newDefLine)); + + if (defined($origOrdinal) && (!defined($newOrdinal) || $origOrdinal != $newOrdinal)) { + # If the symbol is missing from the new def file, use the original symbol. + $savedNewDefFileLine = $newDefLine; + $defLine = $origDefLine; + $sym = $origSym; + $ordinal = $origOrdinal; + $extraData = $origExtraData; + } else { + $defLine = $newDefLine; + $sym = $newSym; + $ordinal = $newOrdinal; + if ($newExtraData =~ /ABSENT/) { + # Special case to keep "DATA [0-9]+" data in absent entries. + $extraData = $origExtraData; + } else { + $extraData = $newExtraData; + } + } + if (exists($fixupSymbols{$sym})) { + # Fix symbols that have returned after first being marked ABSENT. + $extraData =~ s/ ABSENT//; + } elsif ($defLine =~ s/; MISSING://) { + # Auto-absent symbols. + $extraData .= " ABSENT"; + } + print($tmpDefFile "\t$sym \@ $ordinal $extraData\n"); } - close($defFile); + print($tmpDefFile "\n"); + close($origDefFile); + close($newDefFile); close($tmpDefFile); $definput[1] = "$defoutput[1].tmp"; -- cgit v0.12 From b3fe4cfad7815cb5acefad6edd88b773f2461ef8 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 4 Nov 2010 13:51:44 +0100 Subject: Fixed elf2e32_qtwrapper when not using def files. RevBy: Liang Qi Task: QTBUG-14952 --- bin/elf2e32_qtwrapper.pl | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index c51c409..4eeb098 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -80,7 +80,9 @@ while (1) { my $newDefFile; my $origDefFile; my $savedNewDefFileLine = ""; - open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + if ($definput[1]) { + open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + } open($newDefFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); print($tmpDefFile "EXPORTS\n"); @@ -98,19 +100,21 @@ while (1) { my $sym; my $ordinal; my $extraData; - # Read from original def file, and skip non-symbol lines - while (1) { - $origDefLine = <$origDefFile>; - if (defined($origDefLine)) { - $origDefLine =~ s/[\n\r]//; - if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { - $origSym = $1; - $origOrdinal = $2; - $origExtraData = $3; + if ($definput[1]) { + # Read from original def file, and skip non-symbol lines + while (1) { + $origDefLine = <$origDefFile>; + if (defined($origDefLine)) { + $origDefLine =~ s/[\n\r]//; + if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $origSym = $1; + $origOrdinal = $2; + $origExtraData = $3; + last; + } + } else { last; } - } else { - last; } } @@ -169,7 +173,7 @@ while (1) { print($tmpDefFile "\t$sym \@ $ordinal $extraData\n"); } print($tmpDefFile "\n"); - close($origDefFile); + close($origDefFile) if ($definput[1]); close($newDefFile); close($tmpDefFile); -- cgit v0.12 From b4079c3d3891331ee635f8578740b8fcf2f06ac5 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Wed, 23 Feb 2011 16:33:40 +0100 Subject: Remove useless variable. Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qwidget.cpp | 1 - src/gui/kernel/qwidget_p.h | 1 - 2 files changed, 2 deletions(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 51ced44..407af02 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -326,7 +326,6 @@ QWidgetPrivate::QWidgetPrivate(int version) drawRectOriginalAdded = false; originalDrawMethod = true; changeMethods = false; - hasOwnContext = false; isInUnifiedToolbar = false; unifiedSurface = 0; toolbar_ancestor = 0; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 2940d19..492292c 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -857,7 +857,6 @@ public: bool originalDrawMethod; // Do we need to change the methods? bool changeMethods; - bool hasOwnContext; // Unified toolbar variables bool isInUnifiedToolbar; -- cgit v0.12 From f41e395e9ebc6db33c21ff082b59f2d7b6d2a3b2 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Wed, 23 Feb 2011 17:42:23 +0100 Subject: Move the Mac specific behavior in #ifdef. Since the other platforms are not aware of the unified toolbar, we move all the specific behaviors in #ifdef sections. Reviewed-by: Denis Dzyubenko --- src/gui/kernel/qwidget.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 407af02..5fc9951 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -2078,9 +2078,14 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt { Q_Q(const QWidget); static int disableSubtractOpaqueSiblings = qgetenv("QT_NO_SUBTRACTOPAQUESIBLINGS").toInt(); - if (disableSubtractOpaqueSiblings || q->isWindow() || q->d_func()->isInUnifiedToolbar) + if (disableSubtractOpaqueSiblings || q->isWindow()) return; +#ifdef QT_MAC_USE_COCOA + if (q->d_func()->isInUnifiedToolbar) + return; +#endif // QT_MAC_USE_COCOA + QRect clipBoundingRect; bool dirtyClipBoundingRect = true; @@ -10373,10 +10378,12 @@ void QWidget::repaint(const QRect &rect) return; if (hasBackingStoreSupport()) { +#ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); return; } +#endif // QT_MAC_USE_COCOA QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; @@ -10406,10 +10413,12 @@ void QWidget::repaint(const QRegion &rgn) return; if (hasBackingStoreSupport()) { +#ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); return; } +#endif // QT_MAC_USE_COCOA QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) { tlwExtra->inRepaint = true; @@ -10467,10 +10476,12 @@ void QWidget::update(const QRect &rect) } if (hasBackingStoreSupport()) { +#ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { qt_widget_private(this)->unifiedSurface->renderToolbar(this); return; } +#endif // QT_MAC_USE_COCOA QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) tlwExtra->backingStore->markDirty(rect, this); @@ -10495,10 +10506,12 @@ void QWidget::update(const QRegion &rgn) } if (hasBackingStoreSupport()) { +#ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { qt_widget_private(this)->unifiedSurface->renderToolbar(this); return; } +#endif // QT_MAC_USE_COCOA QTLWExtra *tlwExtra = window()->d_func()->maybeTopData(); if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) tlwExtra->backingStore->markDirty(rgn, this); -- cgit v0.12 From 99e32b0a2049f3b28d3a54bec31f2471586d8d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Thu, 24 Feb 2011 13:35:27 +0100 Subject: Added extended key event support in QWindowSystemInterface. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are needed for compositor applications to be able to send the raw scan codes to the clients. Reviewed-by: Jørgen Lind --- src/gui/kernel/qapplication_qpa.cpp | 11 ++++++++-- src/gui/kernel/qevent.cpp | 1 + src/gui/kernel/qwindowsysteminterface_qpa.cpp | 30 +++++++++++++++++++++++++++ src/gui/kernel/qwindowsysteminterface_qpa.h | 11 ++++++++++ src/gui/kernel/qwindowsysteminterface_qpa_p.h | 12 ++++++++++- 5 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index cd76adf..cb5439c 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -51,6 +51,7 @@ #endif #include "private/qwidget_p.h" +#include "private/qevent_p.h" #include "qgenericpluginfactory_qpa.h" #include "qplatformintegrationfactory_qpa_p.h" @@ -816,8 +817,14 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEven if (app_do_modal && !qt_try_modal(focusW, e->keyType)) return; - QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); - QApplication::sendSpontaneousEvent(focusW, &ev); + if (e->nativeScanCode || e->nativeVirtualKey || e->nativeModifiers) { + QKeyEventEx ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount, + e->nativeScanCode, e->nativeVirtualKey, e->nativeModifiers); + QApplication::sendSpontaneousEvent(focusW, &ev); + } else { + QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); + QApplication::sendSpontaneousEvent(focusW, &ev); + } } void QApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e) diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index e7abb47..db25da3 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -43,6 +43,7 @@ #include "qcursor.h" #include "qapplication.h" #include "private/qapplication_p.h" +#include "private/qevent_p.h" #include "private/qkeysequence_p.h" #include "qwidget.h" #include "qgraphicsview.h" diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index b6177b0..1fd4afd 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -150,6 +150,36 @@ void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEven QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } +void QWindowSystemInterface::handleExtendedKeyEvent(QWidget *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, + quint32 nativeScanCode, quint32 nativeVirtualKey, + quint32 nativeModifiers, + const QString& text, bool autorep, + ushort count) +{ + unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); + handleExtendedKeyEvent(w, time, type, key, modifiers, nativeScanCode, nativeVirtualKey, nativeModifiers, + text, autorep, count); +} + +void QWindowSystemInterface::handleExtendedKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, int key, + Qt::KeyboardModifiers modifiers, + quint32 nativeScanCode, quint32 nativeVirtualKey, + quint32 nativeModifiers, + const QString& text, bool autorep, + ushort count) +{ + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + } + + QWindowSystemInterfacePrivate::KeyEvent * e = + new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, type, key, modifiers, + nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); handleWheelEvent(w, time, local, global, d, o); diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h index 39c2f79..df67857 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa.h @@ -64,6 +64,17 @@ public: static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + static void handleExtendedKeyEvent(QWidget *w, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, + quint32 nativeScanCode, quint32 nativeVirtualKey, + quint32 nativeModifiers, + const QString& text = QString(), bool autorep = false, + ushort count = 1); + static void handleExtendedKeyEvent(QWidget *w, ulong timestamp, QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, + quint32 nativeScanCode, quint32 nativeVirtualKey, + quint32 nativeModifiers, + const QString& text = QString(), bool autorep = false, + ushort count = 1); + static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h index 3491a1a..6be86ad 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa_p.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h @@ -142,13 +142,23 @@ public: public: KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) :UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep), - repeatCount(count), modifiers(mods), keyType(t) { } + repeatCount(count), modifiers(mods), keyType(t), + nativeScanCode(0), nativeVirtualKey(0), nativeModifiers(0) { } + KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, + quint32 nativeSC, quint32 nativeVK, quint32 nativeMods, + const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep), + repeatCount(count), modifiers(mods), keyType(t), + nativeScanCode(nativeSC), nativeVirtualKey(nativeVK), nativeModifiers(nativeMods) { } int key; QString unicode; bool repeat; ushort repeatCount; Qt::KeyboardModifiers modifiers; QEvent::Type keyType; + quint32 nativeScanCode; + quint32 nativeVirtualKey; + quint32 nativeModifiers; }; class TouchEvent : public UserEvent { -- cgit v0.12 From 87c16f2bedaf1810cf9a96f65e5af0ad819bf9e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Thu, 24 Feb 2011 13:49:16 +0100 Subject: Call the extended key event handlers in XCB and Xlib backends. --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 2 +- src/plugins/platforms/xlib/qxlibkeyboard.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index dcb35fd..f594232 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -948,7 +948,7 @@ void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keycod QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count); - QWindowSystemInterface::handleKeyEvent(widget, time, type, qtcode, modifiers, string.left(count)); + QWindowSystemInterface::handleExtendedKeyEvent(widget, time, type, qtcode, modifiers, code, 0, state, string.left(count)); } void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.cpp b/src/plugins/platforms/xlib/qxlibkeyboard.cpp index 65727a4..a1e38b0 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.cpp +++ b/src/plugins/platforms/xlib/qxlibkeyboard.cpp @@ -996,5 +996,5 @@ void QXlibKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, XKeyEvent KeySym keySym; count = XLookupString(ev,chars.data(),chars.size(),&keySym,0); QString text = translateKeySym(keySym,ev->state,qtcode,modifiers,chars,count); - QWindowSystemInterface::handleKeyEvent(widget,ev->time,type,qtcode,modifiers,text.left(count)); + QWindowSystemInterface::handleExtendedKeyEvent(widget,ev->time,type,qtcode,modifiers,ev->keycode,0,ev->state,text.left(count)); } -- cgit v0.12 From 1f50a3aa50b934a181cd0d18c260f2533ab63d43 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete <paul.tvete@nokia.com> Date: Thu, 24 Feb 2011 17:31:15 +0100 Subject: Make it build when EGL is not available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 12 ++++++++++- src/plugins/platforms/wayland/qwaylandinclude.h | 6 ++++++ .../platforms/wayland/qwaylandintegration.cpp | 4 ++++ src/plugins/platforms/wayland/wayland.pro | 24 ++++++++++++++-------- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index ca23165..c3e87a1 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -171,8 +171,9 @@ void QWaylandDisplay::flushRequests(void) QWaylandDisplay::QWaylandDisplay(void) : mWriteNotifier(0) { +#ifdef QT_WAYLAND_GL_SUPPORT EGLint major, minor; - +#endif mDisplay = wl_display_connect(NULL); if (mDisplay == NULL) { fprintf(stderr, "failed to create display: %m\n"); @@ -182,6 +183,7 @@ QWaylandDisplay::QWaylandDisplay(void) wl_display_add_global_listener(mDisplay, QWaylandDisplay::displayHandleGlobal, this); +#ifdef QT_WAYLAND_GL_SUPPORT mNativeEglDisplay = wl_egl_display_create(mDisplay); mEglDisplay = eglGetDisplay((EGLNativeDisplayType)mNativeEglDisplay); @@ -193,6 +195,12 @@ QWaylandDisplay::QWaylandDisplay(void) return; } } +#else + mNativeEglDisplay = 0; + mEglDisplay = 0; +#endif + + eventDispatcher(); int fd = wl_display_get_fd(mDisplay, sourceUpdate, this); mReadNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); @@ -208,7 +216,9 @@ QWaylandDisplay::QWaylandDisplay(void) QWaylandDisplay::~QWaylandDisplay(void) { close(mFd); +#ifdef QT_WAYLAND_GL_SUPPORT eglTerminate(mEglDisplay); +#endif wl_display_destroy(mDisplay); } diff --git a/src/plugins/platforms/wayland/qwaylandinclude.h b/src/plugins/platforms/wayland/qwaylandinclude.h index afaa885..0135251 100644 --- a/src/plugins/platforms/wayland/qwaylandinclude.h +++ b/src/plugins/platforms/wayland/qwaylandinclude.h @@ -44,6 +44,7 @@ #include <wayland-client.h> +#ifdef QT_WAYLAND_GL_SUPPORT #include <wayland-egl.h> #define GL_GLEXT_PROTOTYPES @@ -54,4 +55,9 @@ #include <EGL/egl.h> #include <EGL/eglext.h> +#else +typedef void* EGLDisplay; +typedef void* EGLConfig; +#endif + #endif // QWAYLANDINCLUDE_H diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 9483a47..7c0f69e 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -54,7 +54,9 @@ #include <QtGui/QPlatformWindowFormat> #include <QtGui/private/qpixmap_raster_p.h> +#ifdef QT_WAYLAND_GL_SUPPORT #include <QtOpenGL/private/qpixmapdata_gl_p.h> +#endif QWaylandIntegration::QWaylandIntegration(bool useOpenGL) : mFontDb(new QFontconfigDatabase()) @@ -71,8 +73,10 @@ QWaylandIntegration::screens() const QPixmapData *QWaylandIntegration::createPixmapData(QPixmapData::PixelType type) const { +#ifdef QT_WAYLAND_GL_SUPPORT if (mUseOpenGL) return new QGLPixmapData(type); +#endif return new QRasterPixmapData(type); } diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index e40e423..9faa59b 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -8,15 +8,11 @@ DEFINES += Q_PLATFORM_WAYLAND SOURCES = main.cpp \ qwaylandintegration.cpp \ qwaylandshmsurface.cpp \ - qwaylanddrmsurface.cpp \ qwaylandinputdevice.cpp \ - qwaylandglcontext.cpp \ qwaylandcursor.cpp \ qwaylanddisplay.cpp \ qwaylandwindow.cpp \ qwaylandscreen.cpp \ - ../eglconvenience/qeglconvenience.cpp \ - qwaylandeglwindow.cpp \ qwaylandshmwindow.cpp HEADERS = qwaylandintegration.h \ @@ -24,19 +20,31 @@ HEADERS = qwaylandintegration.h \ qwaylanddisplay.h \ qwaylandwindow.h \ qwaylandscreen.h \ - qwaylandglcontext.h \ qwaylandshmsurface.h \ qwaylanddrmsurface.h \ qwaylandbuffer.h \ - ../eglconvenience/qeglconvenience.h \ qwaylandinclude.h \ qwaylandeglwindow.h \ qwaylandshmwindow.h -contains(QT_CONFIG, opengl) { +LIBS += -lwayland-client +LIBS += -lxkbcommon + +contains(QT_CONFIG, opengles2) { QT += opengl + LIBS += -lwayland-egl -lEGL + + SOURCES += qwaylanddrmsurface.cpp \ + qwaylandglcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + qwaylandeglwindow.cpp + + HEADERS += qwaylandglcontext.h \ + ../eglconvenience/qeglconvenience.h \ + + DEFINES += QT_WAYLAND_GL_SUPPORT } -LIBS += -lwayland-client -lwayland-egl -lxkbcommon -lEGL + unix { CONFIG += link_pkgconfig PKGCONFIG += libdrm -- cgit v0.12 From 2b9e7bcede5ca6ba9de2534839244cc621f17e1c Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Thu, 24 Feb 2011 16:36:44 +0100 Subject: Add the ability to remove a toolbar from the unified toolbar. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows to toggle the unified look of the toolbar. This is useful for apps going fullscreen since we have to turn the unified look off when entering fullscreen mode. Reviewed-by: Samuel Rødal --- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 26 +++++++++++++++++++++++++ src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 5 ++++- src/gui/widgets/qmainwindowlayout_mac.mm | 6 +++--- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 6abcf2c..87206f3 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -99,6 +99,32 @@ void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offse recursiveRedirect(toolbar, toolbar, offset); } +// We basically undo what we set in recursiveRedirect(). +void QUnifiedToolbarSurface::recursiveRemoval(QObject *object) +{ + if (object != 0) { + if (object->isWidgetType()) { + QWidget *widget = qobject_cast<QWidget *>(object); + + if (!(widget->windowType() & Qt::Window)) { + widget->d_func()->unifiedSurface = 0; + widget->d_func()->isInUnifiedToolbar = false; + widget->d_func()->toolbar_offset = QPoint(); + widget->d_func()->toolbar_ancestor = 0; + + for (int i = 0; i < object->children().size(); ++i) { + recursiveRemoval(object->children().at(i)); + } + } + } + } +} + +void QUnifiedToolbarSurface::removeToolbar(QToolBar *toolbar) +{ + recursiveRemoval(toolbar); +} + void QUnifiedToolbarSurface::setGeometry(const QRect &rect) { QWindowSurface::setGeometry(rect); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index f7ad02e..99839fa 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -55,6 +55,7 @@ #include <private/qwindowsurface_raster_p.h> #include <QWidget> +#include <QToolBar> #include <private/qwidget_p.h> #include <private/qnativeimage_p.h> @@ -82,15 +83,17 @@ public: void setGeometry(const QRect &rect); void beginPaint(const QRegion &rgn); void insertToolbar(QWidget *toolbar, const QPoint &offset); + void removeToolbar(QToolBar *toolbar); void updateToolbarOffset(QWidget *widget); + void renderToolbar(QWidget *widget, bool forceFlush = false); QPaintDevice *paintDevice(); CGContextRef imageContext(); - void renderToolbar(QWidget *widget, bool forceFlush = false); private: void prepareBuffer(QImage::Format format, QWidget *widget); void recursiveRedirect(QObject *widget, QWidget *parent_toolbar, const QPoint &offset); + void recursiveRemoval(QObject *object); Q_DECLARE_PRIVATE(QUnifiedToolbarSurface) QScopedPointer<QUnifiedToolbarSurfacePrivate> d_ptr; diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm index e428ffc..761a433 100644 --- a/src/gui/widgets/qmainwindowlayout_mac.mm +++ b/src/gui/widgets/qmainwindowlayout_mac.mm @@ -356,10 +356,10 @@ void QMainWindowLayout::updateHIToolBarStatus() while (!qtoolbarsInUnifiedToolbarList.isEmpty()) { // Should shrink the list by one every time. QToolBar *toolbar = qtoolbarsInUnifiedToolbarList.first(); - layoutState.mainWindow->addToolBar(Qt::TopToolBarArea, toolbar); #if defined(QT_MAC_USE_COCOA) - toolbar->d_func()->isInUnifiedToolbar = false; + unifiedSurface->removeToolbar(toolbar); #endif + layoutState.mainWindow->addToolBar(Qt::TopToolBarArea, toolbar); } macWindowToolbarSet(qt_mac_window_for(layoutState.mainWindow), 0); } else { @@ -393,7 +393,7 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar return; #if defined(QT_MAC_USE_COCOA) - // toolbar will now become native (if not allready) since we need + // toolbar will now become native (if not already) since we need // an nsview for it inside the corresponding NSToolbarItem. // Setting isInUnifiedToolbar will (among other things) stop alien // siblings from becoming native when this happends since the toolbar -- cgit v0.12 From 2a9680ffcaf85f233323a0d41bea776a519e747a Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete <paul.tvete@nokia.com> Date: Fri, 25 Feb 2011 12:56:28 +0100 Subject: Avoid flicker Don't start a new paint until we get an ack from the compositor Reviewed-by: Samuel --- src/plugins/platforms/wayland/qwaylandshmsurface.cpp | 16 ++++++++++++++++ src/plugins/platforms/wayland/qwaylandshmsurface.h | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp index 9bcae26..b1cba71 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp @@ -95,6 +95,7 @@ QWaylandShmWindowSurface::QWaylandShmWindowSurface(QWidget *window) : QWindowSurface(window) , mBuffer(0) , mDisplay(QWaylandScreen::waylandScreenFromWidget(window)->display()) + , mWaitingForFrameSync(false) { } @@ -107,6 +108,19 @@ QPaintDevice *QWaylandShmWindowSurface::paintDevice() return mBuffer->image(); } +void QWaylandShmWindowSurface::beginPaint(const QRegion &) +{ + while (mWaitingForFrameSync) { + mDisplay->eventDispatcher(); + } +} + +void QWaylandShmWindowSurface::frameCallback(void *data, uint32_t time) +{ + QWaylandShmWindowSurface *self = static_cast<QWaylandShmWindowSurface*>(data); + self->mWaitingForFrameSync = false; +} + void QWaylandShmWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); @@ -118,6 +132,8 @@ void QWaylandShmWindowSurface::flush(QWidget *widget, const QRegion ®ion, con for (int i = 0; i < rects.size(); i++) { waylandWindow->damage(rects.at(i)); } + mWaitingForFrameSync = true; + mDisplay->frameCallback(QWaylandShmWindowSurface::frameCallback, this); } void QWaylandShmWindowSurface::resize(const QSize &size) diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.h b/src/plugins/platforms/wayland/qwaylandshmsurface.h index 266b290..615d944 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.h +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.h @@ -71,10 +71,14 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); void resize(const QSize &size); + void beginPaint(const QRegion &); private: + static void frameCallback(void *data, uint32_t time);\ + QWaylandShmBuffer *mBuffer; QWaylandDisplay *mDisplay; + bool mWaitingForFrameSync; }; QT_END_NAMESPACE -- cgit v0.12 From c675b021d2d598a924a7c7e9786fbf7c9620549c Mon Sep 17 00:00:00 2001 From: Daniel Black <daniel@cacert.org> Date: Fri, 25 Feb 2011 11:51:46 +0100 Subject: Add Server Name Identification (RFC4366 section 3.1) ...to client QSslSocket connections when supported by openssl as per task tracker id #188841 Merge-request: 1574 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com> --- src/network/ssl/qsslsocket_openssl.cpp | 10 ++++++++++ src/network/ssl/qsslsocket_openssl_p.h | 3 +++ src/network/ssl/qsslsocket_openssl_symbols.cpp | 6 ++++++ src/network/ssl/qsslsocket_openssl_symbols_p.h | 3 +++ 4 files changed, 22 insertions(+) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 83714ed..11dc941 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -386,6 +386,16 @@ init_context: return false; } +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) + if (client) { + // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. + QByteArray ace = QUrl::toAce(hostName); + if (!ace.isEmpty()) { + q_SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,ace.constData()); + } + } +#endif + // Clear the session. q_SSL_clear(ssl); errorList.clear(); diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index 5a7963e..02d70f9 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -79,6 +79,9 @@ #include <openssl/x509_vfy.h> #include <openssl/dsa.h> #include <openssl/rsa.h> +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) +#include <openssl/tls1.h> +#endif #if OPENSSL_VERSION_NUMBER >= 0x10000000L typedef _STACK STACK; diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index b9a05f3..4b6d84d 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -208,6 +208,9 @@ DEFINEFUNC(long, SSL_get_verify_result, SSL *a, a, return -1, return) DEFINEFUNC(int, SSL_library_init, void, DUMMYARG, return -1, return) DEFINEFUNC(void, SSL_load_error_strings, void, DUMMYARG, return, DUMMYARG) DEFINEFUNC(SSL *, SSL_new, SSL_CTX *a, a, return 0, return) +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) +DEFINEFUNC4(long, SSL_ctrl, SSL *a, a, int cmd, cmd, long larg, larg, const void *parg, parg, return -1, return) +#endif DEFINEFUNC3(int, SSL_read, SSL *a, a, void *b, b, int c, c, return -1, return) DEFINEFUNC3(void, SSL_set_bio, SSL *a, a, BIO *b, b, BIO *c, c, return, DUMMYARG) DEFINEFUNC(void, SSL_set_accept_state, SSL *a, a, return, DUMMYARG) @@ -711,6 +714,9 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(SSL_library_init) RESOLVEFUNC(SSL_load_error_strings) RESOLVEFUNC(SSL_new) +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) + RESOLVEFUNC(SSL_ctrl) +#endif RESOLVEFUNC(SSL_read) RESOLVEFUNC(SSL_set_accept_state) RESOLVEFUNC(SSL_set_bio) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index c05dfe11..5aab8d7 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -316,6 +316,9 @@ long q_SSL_get_verify_result(SSL *a); int q_SSL_library_init(); void q_SSL_load_error_strings(); SSL *q_SSL_new(SSL_CTX *a); +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) +long q_SSL_ctrl(SSL *ssl,int cmd, long larg, const void *parg); +#endif int q_SSL_read(SSL *a, void *b, int c); void q_SSL_set_bio(SSL *a, BIO *b, BIO *c); void q_SSL_set_accept_state(SSL *a); -- cgit v0.12 From 3a16e772efe7f39d506b90e14b74a2b078648a56 Mon Sep 17 00:00:00 2001 From: David Faure <faure@kde.org> Date: Fri, 25 Feb 2011 11:49:40 +0100 Subject: QSslSocket SNI: prefer verificationPeerName then peerName then hostName As suggested by p--hartmann in a comment for MR 1574. Task-number: QTBUG-1352 Merge-request: 1110 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com> --- src/network/ssl/qsslsocket_openssl.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 11dc941..60d6cae 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -389,9 +389,12 @@ init_context: #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) if (client) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. - QByteArray ace = QUrl::toAce(hostName); + QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName; + if (tlsHostName.isEmpty()) + tlsHostName = hostName; + QByteArray ace = QUrl::toAce(tlsHostName); if (!ace.isEmpty()) { - q_SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,ace.constData()); + q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.constData()); } } #endif -- cgit v0.12 From 600374f0e4ff5d497120a2dbabd6d0a9ed05c47c Mon Sep 17 00:00:00 2001 From: David Faure <faure@kde.org> Date: Fri, 25 Feb 2011 11:49:43 +0100 Subject: Add QSslSocket::setPeerVerifyName()/peerVerifyName() This allows to set the sslPeerName even when not using connectToHostEncrypted, but rather connectToHost + startClientEncryption Task-number: QTBUG-1352 Merge-request: 1110 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com> --- src/network/ssl/qsslsocket.cpp | 28 ++++++++++++++++++++++++++++ src/network/ssl/qsslsocket.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 61f27fe..b9d8e16 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -659,6 +659,34 @@ void QSslSocket::setPeerVerifyDepth(int depth) } /*! + \since 4.8 + + Returns the different hostname for the certificate validation, as set by + setPeerVerifyName or by connectToHostEncrypted. + + \sa setPeerVerifyName(), connectToHostEncrypted() +*/ +QString QSslSocket::peerVerifyName() const +{ + Q_D(const QSslSocket); + return d->verificationPeerName; +} + +/*! + \since 4.8 + + Sets a different hostname for the certificate validation instead of the one used for the TCP + connection. + + \sa connectToHostEncrypted() +*/ +void QSslSocket::setPeerVerifyName(const QString &hostName) +{ + Q_D(QSslSocket); + d->verificationPeerName = hostName; +} + +/*! \reimp Returns the number of decrypted bytes that are immediately available for diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 703a1fb..648fd8c 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -106,6 +106,9 @@ public: int peerVerifyDepth() const; void setPeerVerifyDepth(int depth); + QString peerVerifyName() const; + void setPeerVerifyName(const QString &hostName); + // From QIODevice qint64 bytesAvailable() const; qint64 bytesToWrite() const; -- cgit v0.12 From 2053ac707d0d74761ac926bafe3f3fced6daf490 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Fri, 25 Feb 2011 12:03:57 +0100 Subject: QSslSocket backend: resolve symbols for SNI for Symbian Task-number: QTBUG-1352 --- src/network/ssl/qsslsocket_openssl_symbols.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 4b6d84d..732fc86 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -589,6 +589,9 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(SSL_library_init, 137, libs.first ) RESOLVEFUNC(SSL_load_error_strings, 139, libs.first ) RESOLVEFUNC(SSL_new, 140, libs.first ) +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) + RESOLVEFUNC(SSL_ctrl, 95, libs.first ) +#endif RESOLVEFUNC(SSL_read, 143, libs.first ) RESOLVEFUNC(SSL_set_accept_state, 148, libs.first ) RESOLVEFUNC(SSL_set_bio, 149, libs.first ) -- cgit v0.12 From 3287348434ee1f15c7468c7d25b2fc97c8791371 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Fri, 25 Feb 2011 12:15:42 +0100 Subject: SSL: Switch default version to TLS 1.0 TLS is backward compatible, so servers only supporting SSL 3 should still work. All browsers send a TLS 1.0 Client Hello these days. However, some servers apparently have problems with a TLS handshake (and a SNI message); for now, wait and see how many of them are broken and either add a fallback to SSLv3 or blacklist them (i.e. set the used SSL version for those servers explicitly). Reviewed-by: Markus Goetz --- src/network/ssl/qssl.cpp | 4 ++-- src/network/ssl/qsslconfiguration.cpp | 4 ++-- src/network/ssl/qsslconfiguration_p.h | 2 +- src/network/ssl/qsslsocket.cpp | 4 ++-- tests/auto/qsslsocket/tst_qsslsocket.cpp | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index e9e7d21..8a450b9 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -101,9 +101,9 @@ QT_BEGIN_NAMESPACE Describes the protocol of the cipher. - \value SslV3 SSLv3 - the default protocol. + \value SslV3 SSLv3 \value SslV2 SSLv2 - \value TlsV1 TLSv1 + \value TlsV1 TLSv1 - the default protocol. \value UnknownProtocol The cipher's protocol cannot be determined. \value AnyProtocol The socket understands SSLv2, SSLv3, and TLSv1. This value is used by QSslSocket only. diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index 3592226..b0d5c90 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -213,7 +213,7 @@ bool QSslConfiguration::isNull() const */ QSsl::SslProtocol QSslConfiguration::protocol() const { - return d ? d->protocol : QSsl::SslV3; + return d ? d->protocol : QSsl::TlsV1; } /*! @@ -518,7 +518,7 @@ void QSslConfiguration::setCaCertificates(const QList<QSslCertificate> &certific \list \o no local certificate and no private key - \o protocol SSLv3 + \o protocol TlsV1 \o the system's default CA certificate list \o the cipher list equal to the list of the SSL libraries' supported SSL ciphers diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index b039e69..47adace 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -80,7 +80,7 @@ class QSslConfigurationPrivate: public QSharedData { public: QSslConfigurationPrivate() - : protocol(QSsl::SslV3), + : protocol(QSsl::TlsV1), peerVerifyMode(QSslSocket::AutoVerifyPeer), peerVerifyDepth(0) { } diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index b9d8e16..224ed67 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -56,7 +56,7 @@ QSslSocket establishes a secure, encrypted TCP connection you can use for transmitting encrypted data. It can operate in both client and server mode, and it supports modern SSL protocols, including - SSLv3 and TLSv1. By default, QSslSocket uses SSLv3, but you can + SSLv3 and TLSv1. By default, QSslSocket uses TLSv1, but you can change the SSL protocol by calling setProtocol() as long as you do it before the handshake has started. @@ -552,7 +552,7 @@ bool QSslSocket::isEncrypted() const } /*! - Returns the socket's SSL protocol. By default, \l QSsl::SslV3 is used. + Returns the socket's SSL protocol. By default, \l QSsl::TLSv1 is used. \sa setProtocol() */ diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 739f902..4beddad 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -385,7 +385,7 @@ void tst_QSslSocket::constructing() QVERIFY(!socket.waitForConnected(10)); QTest::ignoreMessage(QtWarningMsg, "QSslSocket::waitForDisconnected() is not allowed in UnconnectedState"); QVERIFY(!socket.waitForDisconnected(10)); - QCOMPARE(socket.protocol(), QSsl::SslV3); + QCOMPARE(socket.protocol(), QSsl::TlsV1); QSslConfiguration savedDefault = QSslConfiguration::defaultConfiguration(); @@ -771,7 +771,7 @@ void tst_QSslSocket::protocol() #endif // qDebug() << "socket cert:" << socket->caCertificates().at(0).issuerInfo(QSslCertificate::CommonName); - QCOMPARE(socket->protocol(), QSsl::SslV3); + QCOMPARE(socket->protocol(), QSsl::TlsV1); { // Fluke allows SSLv3. socket->setProtocol(QSsl::SslV3); -- cgit v0.12 From 74c683c6879dea1cb4eaa99aaf61e16524b8a4a1 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 28 Feb 2011 18:35:23 +0100 Subject: SSL TLS extension on Symbian: work around missing symbol ... by defining it ourselves. That symbol is missing in the header files for Symbian. Reviewed-by: Shane Kearns --- src/network/ssl/qsslsocket_openssl.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 60d6cae..455a49f1 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -60,6 +60,12 @@ #include <QtCore/qvarlengtharray.h> #include <QLibrary> // for loading the security lib for the CA store +#if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) +// Symbian does not seem to have the symbol for SNI defined +#ifndef SSL_CTRL_SET_TLSEXT_HOSTNAME +#define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +#endif +#endif QT_BEGIN_NAMESPACE #if defined(Q_OS_MAC) -- cgit v0.12 From 5fe25728c0ebb04c3fd2958d902cc58d2064b84d Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 28 Feb 2011 18:42:06 +0100 Subject: Remove qt3support dependency of qtconfig Revert "Revert the integration of the merge request 2286." This reverts commit e3edad83a1e6e99a551d40d4118352435c6dd710. This had been submitted in the Qt 4.7, but reverted because the change was to intrusive to be pushed in a stable branch. Now re-apply the change in master. Conflicts: tools/qtconfig/mainwindowbase.cpp tools/qtconfig/mainwindowbase.h tools/qtconfig/paletteeditoradvancedbase.cpp tools/qtconfig/paletteeditoradvancedbase.h tools/qtconfig/paletteeditoradvancedbase.ui tools/qtconfig/previewwidgetbase.cpp tools/qtconfig/previewwidgetbase.h tools/qtconfig/previewwidgetbase.ui tools/tools.pro --- tools/qtconfig/colorbutton.cpp | 9 +- tools/qtconfig/main.cpp | 1 - tools/qtconfig/mainwindow.cpp | 785 +++++++-------- tools/qtconfig/mainwindow.h | 19 +- tools/qtconfig/mainwindow.ui | 1388 ++++++++++++++++++++++++++ tools/qtconfig/mainwindowbase.cpp | 250 ----- tools/qtconfig/mainwindowbase.h | 95 -- tools/qtconfig/mainwindowbase.ui | 1384 ------------------------- tools/qtconfig/paletteeditoradvanced.cpp | 579 ++++------- tools/qtconfig/paletteeditoradvanced.h | 66 +- tools/qtconfig/paletteeditoradvanced.ui | 416 ++++++++ tools/qtconfig/paletteeditoradvancedbase.cpp | 144 --- tools/qtconfig/paletteeditoradvancedbase.h | 78 -- tools/qtconfig/paletteeditoradvancedbase.ui | 617 ------------ tools/qtconfig/previewframe.cpp | 18 +- tools/qtconfig/previewframe.h | 13 +- tools/qtconfig/previewwidget.cpp | 29 +- tools/qtconfig/previewwidget.h | 18 +- tools/qtconfig/previewwidget.ui | 252 +++++ tools/qtconfig/previewwidgetbase.cpp | 88 -- tools/qtconfig/previewwidgetbase.h | 68 -- tools/qtconfig/previewwidgetbase.ui | 340 ------- tools/qtconfig/qtconfig.pro | 19 +- tools/tools.pro | 2 +- 24 files changed, 2688 insertions(+), 3990 deletions(-) create mode 100644 tools/qtconfig/mainwindow.ui delete mode 100644 tools/qtconfig/mainwindowbase.cpp delete mode 100644 tools/qtconfig/mainwindowbase.h delete mode 100644 tools/qtconfig/mainwindowbase.ui create mode 100644 tools/qtconfig/paletteeditoradvanced.ui delete mode 100644 tools/qtconfig/paletteeditoradvancedbase.cpp delete mode 100644 tools/qtconfig/paletteeditoradvancedbase.h delete mode 100644 tools/qtconfig/paletteeditoradvancedbase.ui create mode 100644 tools/qtconfig/previewwidget.ui delete mode 100644 tools/qtconfig/previewwidgetbase.cpp delete mode 100644 tools/qtconfig/previewwidgetbase.h delete mode 100644 tools/qtconfig/previewwidgetbase.ui diff --git a/tools/qtconfig/colorbutton.cpp b/tools/qtconfig/colorbutton.cpp index 1a98897..0b0fefc 100644 --- a/tools/qtconfig/colorbutton.cpp +++ b/tools/qtconfig/colorbutton.cpp @@ -52,19 +52,20 @@ QT_BEGIN_NAMESPACE ColorButton::ColorButton(QWidget *parent) - : QAbstractButton(parent), mousepressed(false) + : QAbstractButton(parent) + , mousepressed(false) + , col(Qt::black) { setAcceptDrops(true); - col = Qt::black; connect(this, SIGNAL(clicked()), SLOT(changeColor())); } ColorButton::ColorButton(const QColor &c, QWidget *parent) : QAbstractButton(parent) + , col(c) { setAcceptDrops(true); - col = c; connect(this, SIGNAL(clicked()), SLOT(changeColor())); } @@ -182,7 +183,7 @@ void ColorButton::mouseReleaseEvent(QMouseEvent *e) void ColorButton::mouseMoveEvent(QMouseEvent *e) { - if (! mousepressed) + if (!mousepressed) return; if ((presspos - e->pos()).manhattanLength() > QApplication::startDragDistance()) { diff --git a/tools/qtconfig/main.cpp b/tools/qtconfig/main.cpp index 3c17511..38435d9 100644 --- a/tools/qtconfig/main.cpp +++ b/tools/qtconfig/main.cpp @@ -39,7 +39,6 @@ ** ****************************************************************************/ -#include "ui_previewwidgetbase.h" #include "mainwindow.h" #include <QApplication> #include <QLibraryInfo> diff --git a/tools/qtconfig/mainwindow.cpp b/tools/qtconfig/mainwindow.cpp index 5dd321e..7bff03d 100644 --- a/tools/qtconfig/mainwindow.cpp +++ b/tools/qtconfig/mainwindow.cpp @@ -40,6 +40,8 @@ ****************************************************************************/ #include "mainwindow.h" +#include "ui_mainwindow.h" + #include "colorbutton.h" #include "previewframe.h" #include "paletteeditoradvanced.h" @@ -59,7 +61,6 @@ #include <QMessageBox> #include <QStyle> #include <QtEvents> -#include <Q3ValueList> #include <QInputContext> #include <QInputContextFactory> #include <QtDebug> @@ -155,36 +156,20 @@ static const char *phonon_text = QT_TRANSLATE_NOOP("MainWindow", "<p>It is reccommended to leave all settings on \"Auto\" to let " "Phonon determine your settings automatically."); -static QColorGroup::ColorRole centralFromItem( int item ) -{ - switch( item ) { - case 0: return QColorGroup::Window; - case 1: return QColorGroup::WindowText; - case 2: return QColorGroup::Button; - case 3: return QColorGroup::Base; - case 4: return QColorGroup::Text; - case 5: return QColorGroup::BrightText; - case 6: return QColorGroup::ButtonText; - case 7: return QColorGroup::Highlight; - case 8: return QColorGroup::HighlightedText; - default: return QColorGroup::NColorRoles; - } -} - -static QColorGroup::ColorRole effectFromItem( int item ) +QPalette::ColorGroup MainWindow::groupFromIndex(int item) { - switch( item ) { - case 0: return QColorGroup::Light; - case 1: return QColorGroup::Midlight; - case 2: return QColorGroup::Mid; - case 3: return QColorGroup::Dark; - case 4: return QColorGroup::Shadow; - default: return QColorGroup::NColorRoles; + switch (item) { + case 0: + default: + return QPalette::Active; + case 1: + return QPalette::Inactive; + case 2: + return QPalette::Disabled; } } - static void setStyleHelper(QWidget *w, QStyle *s) { const QObjectList children = w->children(); @@ -196,100 +181,141 @@ static void setStyleHelper(QWidget *w, QStyle *s) w->setStyle(s); } - MainWindow::MainWindow() - : MainWindowBase(0, "main window"), - editPalette(palette()), previewPalette(palette()), previewstyle(0) -{ + : ui(new Ui::MainWindow), + editPalette(palette()), + previewPalette(palette()), + previewstyle(0) +{ + ui->setupUi(this); + statusBar(); + + // signals and slots connections + connect(ui->fontPathLineEdit, SIGNAL(returnPressed()), SLOT(addFontpath())); + connect(ui->addFontPathButton, SIGNAL(clicked()), SLOT(addFontpath())); + connect(ui->addSubstitutionButton, SIGNAL(clicked()), SLOT(addSubstitute())); + connect(ui->browseFontPathButton, SIGNAL(clicked()), SLOT(browseFontpath())); + connect(ui->fontStyleCombo, SIGNAL(activated(int)), SLOT(buildFont())); + connect(ui->pointSizeCombo, SIGNAL(activated(int)), SLOT(buildFont())); + connect(ui->downFontpathButton, SIGNAL(clicked()), SLOT(downFontpath())); + connect(ui->downSubstitutionButton, SIGNAL(clicked()), SLOT(downSubstitute())); + connect(ui->fontFamilyCombo, SIGNAL(activated(QString)), SLOT(familySelected(QString))); + connect(ui->fileExitAction, SIGNAL(activated()), SLOT(fileExit())); + connect(ui->fileSaveAction, SIGNAL(activated()), SLOT(fileSave())); + connect(ui->helpAboutAction, SIGNAL(activated()), SLOT(helpAbout())); + connect(ui->helpAboutQtAction, SIGNAL(activated()), SLOT(helpAboutQt())); + connect(ui->mainTabWidget, SIGNAL(currentChanged(QWidget*)), SLOT(pageChanged(QWidget*))); + connect(ui->paletteCombo, SIGNAL(activated(int)), SLOT(paletteSelected(int))); + connect(ui->removeFontpathButton, SIGNAL(clicked()), SLOT(removeFontpath())); + connect(ui->removeSubstitutionButton, SIGNAL(clicked()), SLOT(removeSubstitute())); + connect(ui->toolBoxEffectCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->doubleClickIntervalSpinBox, SIGNAL(valueChanged(int)), SLOT(somethingModified())); + connect(ui->cursorFlashTimeSpinBox, SIGNAL(valueChanged(int)), SLOT(somethingModified())); + connect(ui->wheelScrollLinesSpinBox, SIGNAL(valueChanged(int)), SLOT(somethingModified())); + connect(ui->menuEffectCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->comboEffectCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->audiosinkCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->videomodeCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->toolTipEffectCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->strutWidthSpinBox, SIGNAL(valueChanged(int)), SLOT(somethingModified())); + connect(ui->strutHeightSpinBox, SIGNAL(valueChanged(int)), SLOT(somethingModified())); + connect(ui->effectsCheckBox, SIGNAL(toggled(bool)), SLOT(somethingModified())); + connect(ui->resolveLinksCheckBox, SIGNAL(toggled(bool)), SLOT(somethingModified())); + connect(ui->fontEmbeddingCheckBox, SIGNAL(clicked()), SLOT(somethingModified())); + connect(ui->rtlExtensionsCheckBox, SIGNAL(toggled(bool)), SLOT(somethingModified())); + connect(ui->inputStyleCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->inputMethodCombo, SIGNAL(activated(int)), SLOT(somethingModified())); + connect(ui->guiStyleCombo, SIGNAL(activated(QString)), SLOT(styleSelected(QString))); + connect(ui->familySubstitutionCombo, SIGNAL(activated(QString)), SLOT(substituteSelected(QString))); + connect(ui->tunePaletteButton, SIGNAL(clicked()), SLOT(tunePalette())); + connect(ui->upFontpathButton, SIGNAL(clicked()), SLOT(upFontpath())); + connect(ui->upSubstitutionButton, SIGNAL(clicked()), SLOT(upSubstitute())); + modified = true; desktopThemeName = tr("Desktop Settings (Default)"); setIcon(QPixmap(":/trolltech/qtconfig/images/appicon.png")); QStringList gstyles = QStyleFactory::keys(); gstyles.sort(); - gstylecombo->addItem(desktopThemeName); - gstylecombo->setItemData(gstylecombo->findText(desktopThemeName), - tr("Choose style and palette based on your desktop settings."), Qt::ToolTipRole); - gstylecombo->insertStringList(gstyles); + ui->guiStyleCombo->addItem(desktopThemeName); + ui->guiStyleCombo->setItemData(ui->guiStyleCombo->findText(desktopThemeName), + tr("Choose style and palette based on your desktop settings."), + Qt::ToolTipRole); + ui->guiStyleCombo->addItems(gstyles); QSettings settings(QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("Qt")); QString currentstyle = settings.value(QLatin1String("style")).toString(); if (currentstyle.isEmpty()) { - gstylecombo->setCurrentItem(gstylecombo->findText(desktopThemeName)); - currentstyle = QLatin1String(QApplication::style()->name()); + ui->guiStyleCombo->setCurrentIndex(ui->guiStyleCombo->findText(desktopThemeName)); + currentstyle = QApplication::style()->objectName(); } else { - int index = gstylecombo->findText(currentstyle, Qt::MatchFixedString); + int index = ui->guiStyleCombo->findText(currentstyle, Qt::MatchFixedString); if (index != -1) { - gstylecombo->setCurrentItem(index); + ui->guiStyleCombo->setCurrentIndex(index); } else { // we give up - gstylecombo->insertItem(QLatin1String("Unknown")); - gstylecombo->setCurrentItem(gstylecombo->count() - 1); + ui->guiStyleCombo->addItem(tr("Unknown")); + ui->guiStyleCombo->setCurrentIndex(ui->guiStyleCombo->count() - 1); } } - buttonMainColor->setColor(palette().color(QPalette::Active, - QColorGroup::Button)); - buttonMainColor2->setColor(palette().color(QPalette::Active, - QColorGroup::Window)); - connect(buttonMainColor, SIGNAL(colorChanged(QColor)), - this, SLOT(buildPalette())); - connect(buttonMainColor2, SIGNAL(colorChanged(QColor)), - this, SLOT(buildPalette())); + ui->buttonMainColor->setColor(palette().color(QPalette::Active, QPalette::Button)); + ui->buttonWindowColor->setColor(palette().color(QPalette::Active, QPalette::Window)); + connect(ui->buttonMainColor, SIGNAL(colorChanged(QColor)), SLOT(buildPalette())); + connect(ui->buttonWindowColor, SIGNAL(colorChanged(QColor)), SLOT(buildPalette())); if (X11->desktopEnvironment == DE_KDE) - colorConfig->hide(); + ui->colorConfig->hide(); else - labelKDENote->hide(); + ui->kdeNoteLabel->hide(); QFontDatabase db; QStringList families = db.families(); - familycombo->insertStringList(families); + ui->fontFamilyCombo->addItems(families); QStringList fs = families; QStringList fs2 = QFont::substitutions(); QStringList::Iterator fsit = fs2.begin(); while (fsit != fs2.end()) { - if (! fs.contains(*fsit)) + if (!fs.contains(*fsit)) fs += *fsit; fsit++; } fs.sort(); - familysubcombo->insertStringList(fs); + ui->familySubstitutionCombo->addItems(fs); - choosesubcombo->insertStringList(families); - Q3ValueList<int> sizes = db.standardSizes(); - Q3ValueList<int>::Iterator it = sizes.begin(); - while (it != sizes.end()) - psizecombo->insertItem(QString::number(*it++)); + ui->chooseSubstitutionCombo->addItems(families); + QList<int> sizes = db.standardSizes(); + foreach(int i, sizes) + ui->pointSizeCombo->addItem(QString::number(i)); - dcispin->setValue(QApplication::doubleClickInterval()); - cfispin->setValue(QApplication::cursorFlashTime()); - wslspin->setValue(QApplication::wheelScrollLines()); + ui->doubleClickIntervalSpinBox->setValue(QApplication::doubleClickInterval()); + ui->cursorFlashTimeSpinBox->setValue(QApplication::cursorFlashTime()); + ui->wheelScrollLinesSpinBox->setValue(QApplication::wheelScrollLines()); // ############# -// resolvelinks->setChecked(qt_resolve_symlinks); + // resolveLinksCheckBox->setChecked(qt_resolve_symlinks); - effectcheckbox->setChecked(QApplication::isEffectEnabled(Qt::UI_General)); - effectbase->setEnabled(effectcheckbox->isChecked()); + ui->effectsCheckBox->setChecked(QApplication::isEffectEnabled(Qt::UI_General)); + ui->effectsFrame->setEnabled(ui->effectsCheckBox->isChecked()); if (QApplication::isEffectEnabled(Qt::UI_FadeMenu)) - menueffect->setCurrentItem(2); + ui->menuEffectCombo->setCurrentIndex(2); else if (QApplication::isEffectEnabled(Qt::UI_AnimateMenu)) - menueffect->setCurrentItem(1); + ui->menuEffectCombo->setCurrentIndex(1); if (QApplication::isEffectEnabled(Qt::UI_AnimateCombo)) - comboeffect->setCurrentItem(1); + ui->comboEffectCombo->setCurrentIndex(1); if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)) - tooltipeffect->setCurrentItem(2); + ui->toolTipEffectCombo->setCurrentIndex(2); else if (QApplication::isEffectEnabled(Qt::UI_AnimateTooltip)) - tooltipeffect->setCurrentItem(1); + ui->toolTipEffectCombo->setCurrentIndex(1); - if ( QApplication::isEffectEnabled( Qt::UI_AnimateToolBox ) ) - toolboxeffect->setCurrentItem( 1 ); + if (QApplication::isEffectEnabled(Qt::UI_AnimateToolBox)) + ui->toolBoxEffectCombo->setCurrentIndex(1); QSize globalStrut = QApplication::globalStrut(); - strutwidth->setValue(globalStrut.width()); - strutheight->setValue(globalStrut.height()); + ui->strutWidthSpinBox->setValue(globalStrut.width()); + ui->strutHeightSpinBox->setValue(globalStrut.height()); // find the default family QStringList::Iterator sit = families.begin(); @@ -308,10 +334,10 @@ MainWindow::MainWindow() if (i == -1) // no clue about the current font i = 0; - familycombo->setCurrentItem(i); + ui->fontFamilyCombo->setCurrentIndex(i); - QStringList styles = db.styles(familycombo->currentText()); - stylecombo->insertStringList(styles); + QStringList styles = db.styles(ui->fontFamilyCombo->currentText()); + ui->fontStyleCombo->addItems(styles); QString stylestring = db.styleString(QApplication::font()); sit = styles.begin(); @@ -330,91 +356,98 @@ MainWindow::MainWindow() i = possible; if (i == -1) // no clue about the current font i = 0; - stylecombo->setCurrentItem(i); + ui->fontStyleCombo->setCurrentIndex(i); i = 0; - for (int psize = QApplication::font().pointSize(); i < psizecombo->count(); ++i) { - const int sz = psizecombo->text(i).toInt(); + for (int psize = QApplication::font().pointSize(); i < ui->pointSizeCombo->count(); ++i) { + const int sz = ui->pointSizeCombo->itemText(i).toInt(); if (sz == psize) { - psizecombo->setCurrentItem(i); + ui->pointSizeCombo->setCurrentIndex(i); break; } else if(sz > psize) { - psizecombo->insertItem(i, QString::number(psize)); - psizecombo->setCurrentItem(i); + ui->pointSizeCombo->insertItem(i, QString::number(psize)); + ui->pointSizeCombo->setCurrentIndex(i); break; } } - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - sublistbox->clear(); - sublistbox->insertStringList(subs); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); - rtlExtensions->setChecked(settings.value(QLatin1String("useRtlExtensions"), false).toBool()); + ui->rtlExtensionsCheckBox->setChecked(settings.value(QLatin1String("useRtlExtensions"), false) + .toBool()); #ifdef Q_WS_X11 - inputStyle->setCurrentText(settings.value(QLatin1String("XIMInputStyle"), trUtf8("On The Spot")).toString()); + QString settingsInputStyle = settings.value(QLatin1String("XIMInputStyle")).toString(); + if (!settingsInputStyle.isEmpty()) + ui->inputStyleCombo->setCurrentIndex(ui->inputStyleCombo->findText(settingsInputStyle)); #else - inputStyle->hide(); - inputStyleLabel->hide(); + ui->inputStyleCombo->hide(); + ui->inputStyleComboLabel->hide(); #endif #if defined(Q_WS_X11) && !defined(QT_NO_XIM) - QStringList inputMethods = QInputContextFactory::keys(); - int inputMethodIndex = -1; + QStringList inputMethodCombo = QInputContextFactory::keys(); + int inputMethodComboIndex = -1; QString defaultInputMethod = settings.value(QLatin1String("DefaultInputMethod"), QLatin1String("xim")).toString(); - for (int i = inputMethods.size()-1; i >= 0; --i) { - const QString &im = inputMethods.at(i); + for (int i = inputMethodCombo.size()-1; i >= 0; --i) { + const QString &im = inputMethodCombo.at(i); if (im.contains(QLatin1String("imsw"))) { - inputMethods.removeAt(i); - if (inputMethodIndex > i) - --inputMethodIndex; + inputMethodCombo.removeAt(i); + if (inputMethodComboIndex > i) + --inputMethodComboIndex; } else if (im == defaultInputMethod) { - inputMethodIndex = i; + inputMethodComboIndex = i; } } - if (inputMethodIndex == -1 && !inputMethods.isEmpty()) - inputMethodIndex = 0; - inputMethod->addItems(inputMethods); - inputMethod->setCurrentIndex(inputMethodIndex); + if (inputMethodComboIndex == -1 && !inputMethodCombo.isEmpty()) + inputMethodComboIndex = 0; + ui->inputMethodCombo->addItems(inputMethodCombo); + ui->inputMethodCombo->setCurrentIndex(inputMethodComboIndex); #else - inputMethod->hide(); - inputMethodLabel->hide(); + ui->inputMethodCombo->hide(); + ui->inputMethodComboLabel->hide(); #endif - fontembeddingcheckbox->setChecked(settings.value(QLatin1String("embedFonts"), true).toBool()); + ui->fontEmbeddingCheckBox->setChecked(settings.value(QLatin1String("embedFonts"), true) + .toBool()); fontpaths = settings.value(QLatin1String("fontPath")).toStringList(); - fontpathlistbox->insertStringList(fontpaths); - - audiosinkCombo->addItem(tr("Auto (default)"), QLatin1String("Auto")); - audiosinkCombo->setItemData(audiosinkCombo->findText(tr("Auto (default)")), - tr("Choose audio output automatically."), Qt::ToolTipRole); - audiosinkCombo->addItem(tr("aRts"), QLatin1String("artssink")); - audiosinkCombo->setItemData(audiosinkCombo->findText(tr("aRts")), - tr("Experimental aRts support for GStreamer."), Qt::ToolTipRole); + ui->fontpathListBox->insertItems(0, fontpaths); + + ui->audiosinkCombo->addItem(tr("Auto (default)"), QLatin1String("Auto")); + ui->audiosinkCombo->setItemData(ui->audiosinkCombo->findText(tr("Auto (default)")), + tr("Choose audio output automatically."), Qt::ToolTipRole); + ui->audiosinkCombo->addItem(tr("aRts"), QLatin1String("artssink")); + ui->audiosinkCombo->setItemData(ui->audiosinkCombo->findText(tr("aRts")), + tr("Experimental aRts support for GStreamer."), + Qt::ToolTipRole); #ifdef HAVE_PHONON - phononVersionLabel->setText(QLatin1String(Phonon::phononVersion())); + ui->phononVersionLabel->setText(QLatin1String(Phonon::phononVersion())); #endif #ifndef QT_NO_GSTREAMER if (gst_init_check(0, 0, 0)) { gchar *versionString = gst_version_string(); - gstversionLabel->setText(QLatin1String(versionString)); + ui->gstVersionLabel->setText(QLatin1String(versionString)); g_free(versionString); - GList* factoryList = gst_registry_get_feature_list(gst_registry_get_default (), GST_TYPE_ELEMENT_FACTORY); + GList *factoryList = gst_registry_get_feature_list(gst_registry_get_default(), + GST_TYPE_ELEMENT_FACTORY); QString name, klass, description; - for (GList* iter = g_list_first(factoryList) ; iter != NULL ; iter = g_list_next(iter)) { + for (GList *iter = g_list_first(factoryList) ; iter != NULL ; iter = g_list_next(iter)) { GstPluginFeature *feature = GST_PLUGIN_FEATURE(iter->data); klass = QLatin1String(gst_element_factory_get_klass(GST_ELEMENT_FACTORY(feature))); if (klass == QLatin1String("Sink/Audio")) { name = QLatin1String(GST_PLUGIN_FEATURE_NAME(feature)); if (name == QLatin1String("sfsink")) - continue; //useless to output audio to file when you cannot set the file path + continue; // useless to output audio to file when you cannot set the file path else if (name == QLatin1String("autoaudiosink")) continue; //This is used implicitly from the auto setting GstElement *sink = gst_element_factory_make (qPrintable(name), NULL); if (sink) { - description = QLatin1String(gst_element_factory_get_description (GST_ELEMENT_FACTORY(feature))); - audiosinkCombo->addItem(name, name); - audiosinkCombo->setItemData(audiosinkCombo->findText(name), description, Qt::ToolTipRole); + description = QLatin1String(gst_element_factory_get_description(GST_ELEMENT_FACTORY(feature))); + ui->audiosinkCombo->addItem(name, name); + ui->audiosinkCombo->setItemData(ui->audiosinkCombo->findText(name), description, + Qt::ToolTipRole); gst_object_unref (sink); } } @@ -422,39 +455,43 @@ MainWindow::MainWindow() g_list_free(factoryList); } #else - tab4->setEnabled(false); - phononLabel->setText(tr("Phonon GStreamer backend not available.")); + ui->phononTab->setEnabled(false); + ui->phononLabel->setText(tr("Phonon GStreamer backend not available.")); #endif - videomodeCombo->addItem(tr("Auto (default)"), QLatin1String("Auto")); - videomodeCombo->setItemData(videomodeCombo->findText(tr("Auto (default)")), tr("Choose render method automatically"), Qt::ToolTipRole); + ui->videomodeCombo->addItem(tr("Auto (default)"), QLatin1String("Auto")); + ui->videomodeCombo->setItemData(ui->videomodeCombo->findText(tr("Auto (default)")), + tr("Choose render method automatically"), Qt::ToolTipRole); #ifdef Q_WS_X11 - videomodeCombo->addItem(tr("X11"), QLatin1String("X11")); - videomodeCombo->setItemData(videomodeCombo->findText(tr("X11")), tr("Use X11 Overlays"), Qt::ToolTipRole); + ui->videomodeCombo->addItem(tr("X11"), QLatin1String("X11")); + ui->videomodeCombo->setItemData(ui->videomodeCombo->findText(tr("X11")), + tr("Use X11 Overlays"), Qt::ToolTipRole); #endif #ifndef QT_NO_OPENGL - videomodeCombo->addItem(tr("OpenGL"), QLatin1String("OpenGL")); - videomodeCombo->setItemData(videomodeCombo->findText(tr("OpenGL")), tr("Use OpenGL if available"), Qt::ToolTipRole); + ui->videomodeCombo->addItem(tr("OpenGL"), QLatin1String("OpenGL")); + ui->videomodeCombo->setItemData(ui->videomodeCombo->findText(tr("OpenGL")), + tr("Use OpenGL if available"), Qt::ToolTipRole); #endif - videomodeCombo->addItem(tr("Software"), QLatin1String("Software")); - videomodeCombo->setItemData(videomodeCombo->findText(tr("Software")), tr("Use simple software rendering"), Qt::ToolTipRole); + ui->videomodeCombo->addItem(tr("Software"), QLatin1String("Software")); + ui->videomodeCombo->setItemData(ui->videomodeCombo->findText(tr("Software")), + tr("Use simple software rendering"), Qt::ToolTipRole); QString audioSink = settings.value(QLatin1String("audiosink"), QLatin1String("Auto")).toString(); QString videoMode = settings.value(QLatin1String("videomode"), QLatin1String("Auto")).toString(); - audiosinkCombo->setCurrentItem(audiosinkCombo->findData(audioSink)); - videomodeCombo->setCurrentItem(videomodeCombo->findData(videoMode)); + ui->audiosinkCombo->setCurrentIndex(ui->audiosinkCombo->findData(audioSink)); + ui->videomodeCombo->setCurrentIndex(ui->videomodeCombo->findData(videoMode)); settings.endGroup(); // Qt - helpview->setText(tr(appearance_text)); + ui->helpView->setText(tr(appearance_text)); setModified(false); updateStyleLayout(); } - MainWindow::~MainWindow() { + delete ui; } #ifdef Q_WS_X11 @@ -474,23 +511,23 @@ void MainWindow::fileSave() QSettings settings(QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("Qt")); QFontDatabase db; - QFont font = db.font(familycombo->currentText(), - stylecombo->currentText(), - psizecombo->currentText().toInt()); + QFont font = db.font(ui->fontFamilyCombo->currentText(), + ui->fontStyleCombo->currentText(), + ui->pointSizeCombo->currentText().toInt()); QStringList actcg, inactcg, discg; - bool overrideDesktopSettings = (gstylecombo->currentText() != desktopThemeName); + bool overrideDesktopSettings = (ui->guiStyleCombo->currentText() != desktopThemeName); if (overrideDesktopSettings) { int i; - for (i = 0; i < QColorGroup::NColorRoles; i++) + for (i = 0; i < QPalette::NColorRoles; i++) actcg << editPalette.color(QPalette::Active, - (QColorGroup::ColorRole) i).name(); - for (i = 0; i < QColorGroup::NColorRoles; i++) + QPalette::ColorRole(i)).name(); + for (i = 0; i < QPalette::NColorRoles; i++) inactcg << editPalette.color(QPalette::Inactive, - (QColorGroup::ColorRole) i).name(); - for (i = 0; i < QColorGroup::NColorRoles; i++) + QPalette::ColorRole(i)).name(); + for (i = 0; i < QPalette::NColorRoles; i++) discg << editPalette.color(QPalette::Disabled, - (QColorGroup::ColorRole) i).name(); + QPalette::ColorRole(i)).name(); } settings.setValue(QLatin1String("font"), font.toString()); @@ -499,59 +536,63 @@ void MainWindow::fileSave() settings.setValue(QLatin1String("Palette/disabled"), discg); settings.setValue(QLatin1String("fontPath"), fontpaths); - settings.setValue(QLatin1String("embedFonts"), fontembeddingcheckbox->isChecked()); - settings.setValue(QLatin1String("style"), overrideDesktopSettings ? gstylecombo->currentText() : QString()); + settings.setValue(QLatin1String("embedFonts"), ui->fontEmbeddingCheckBox->isChecked()); + settings.setValue(QLatin1String("style"), + overrideDesktopSettings ? ui->guiStyleCombo->currentText() : QString()); - settings.setValue(QLatin1String("doubleClickInterval"), dcispin->value()); - settings.setValue(QLatin1String("cursorFlashTime"), cfispin->value() == 9 ? 0 : cfispin->value() ); - settings.setValue(QLatin1String("wheelScrollLines"), wslspin->value()); - settings.setValue(QLatin1String("resolveSymlinks"), resolvelinks->isChecked()); + settings.setValue(QLatin1String("doubleClickInterval"), ui->doubleClickIntervalSpinBox->value()); + settings.setValue(QLatin1String("cursorFlashTime"), + ui->cursorFlashTimeSpinBox->value() == 9 ? 0 : ui->cursorFlashTimeSpinBox->value()); + settings.setValue(QLatin1String("wheelScrollLines"), ui->wheelScrollLinesSpinBox->value()); + settings.setValue(QLatin1String("resolveSymlinks"), ui->resolveLinksCheckBox->isChecked()); - QSize strut(strutwidth->value(), strutheight->value()); + QSize strut(ui->strutWidthSpinBox->value(), ui->strutHeightSpinBox->value()); settings.setValue(QLatin1String("globalStrut/width"), strut.width()); settings.setValue(QLatin1String("globalStrut/height"), strut.height()); - settings.setValue(QLatin1String("useRtlExtensions"), rtlExtensions->isChecked()); + settings.setValue(QLatin1String("useRtlExtensions"), ui->rtlExtensionsCheckBox->isChecked()); #ifdef Q_WS_X11 - QString style = inputStyle->currentText(); + QString style = ui->inputStyleCombo->currentText(); QString str = QLatin1String("On The Spot"); - if ( style == trUtf8( "Over The Spot" ) ) + if (style == tr("Over The Spot")) str = QLatin1String("Over The Spot"); - else if ( style == trUtf8( "Off The Spot" ) ) + else if (style == tr("Off The Spot")) str = QLatin1String("Off The Spot"); - else if ( style == trUtf8( "Root" ) ) + else if (style == tr("Root")) str = QLatin1String("Root"); - settings.setValue( QLatin1String("XIMInputStyle"), str ); + settings.setValue(QLatin1String("XIMInputStyle"), str); #endif #if defined(Q_WS_X11) && !defined(QT_NO_XIM) - settings.setValue(QLatin1String("DefaultInputMethod"), inputMethod->currentText()); + settings.setValue(QLatin1String("DefaultInputMethod"), ui->inputMethodCombo->currentText()); #endif QString audioSink = settings.value(QLatin1String("audiosink"), QLatin1String("Auto")).toString(); QString videoMode = settings.value(QLatin1String("videomode"), QLatin1String("Auto")).toString(); - settings.setValue(QLatin1String("audiosink"), audiosinkCombo->itemData(audiosinkCombo->currentIndex())); - settings.setValue(QLatin1String("videomode"), videomodeCombo->itemData(videomodeCombo->currentIndex())); + settings.setValue(QLatin1String("audiosink"), + ui->audiosinkCombo->itemData(ui->audiosinkCombo->currentIndex())); + settings.setValue(QLatin1String("videomode"), + ui->videomodeCombo->itemData(ui->videomodeCombo->currentIndex())); QStringList effects; - if (effectcheckbox->isChecked()) { + if (ui->effectsCheckBox->isChecked()) { effects << QLatin1String("general"); - switch (menueffect->currentItem()) { + switch (ui->menuEffectCombo->currentIndex()) { case 1: effects << QLatin1String("animatemenu"); break; case 2: effects << QLatin1String("fademenu"); break; } - switch (comboeffect->currentItem()) { + switch (ui->comboEffectCombo->currentIndex()) { case 1: effects << QLatin1String("animatecombo"); break; } - switch (tooltipeffect->currentItem()) { + switch (ui->toolTipEffectCombo->currentIndex()) { case 1: effects << QLatin1String("animatetooltip"); break; case 2: effects << QLatin1String("fadetooltip"); break; } - switch ( toolboxeffect->currentItem() ) { + switch (ui->toolBoxEffectCombo->currentIndex()) { case 1: effects << QLatin1String("animatetoolbox"); break; } } else @@ -575,189 +616,63 @@ void MainWindow::fileSave() #endif // Q_WS_X11 setModified(false); - statusBar()->showMessage(QLatin1String("Saved changes.")); + statusBar()->showMessage(tr("Saved changes.")); } - void MainWindow::fileExit() { qApp->closeAllWindows(); } - void MainWindow::setModified(bool m) { if (modified == m) return; modified = m; - fileSaveAction->setEnabled(m); + ui->fileSaveAction->setEnabled(m); } - void MainWindow::buildPalette() { - int i; - QColorGroup cg; - QColor btn = buttonMainColor->color(); - QColor back = buttonMainColor2->color(); - QPalette automake( btn, back ); - - for (i = 0; i<9; i++) - cg.setColor( centralFromItem(i), automake.active().color( centralFromItem(i) ) ); - - editPalette.setActive( cg ); - buildActiveEffect(); - - cg = editPalette.inactive(); - - QPalette temp( editPalette.active().color( QColorGroup::Button ), - editPalette.active().color( QColorGroup::Window ) ); - - for (i = 0; i<9; i++) - cg.setColor( centralFromItem(i), temp.inactive().color( centralFromItem(i) ) ); - - editPalette.setInactive( cg ); - buildInactiveEffect(); - - cg = editPalette.disabled(); - - for (i = 0; i<9; i++) - cg.setColor( centralFromItem(i), temp.disabled().color( centralFromItem(i) ) ); - - editPalette.setDisabled( cg ); - buildDisabledEffect(); + QPalette temp(ui->buttonMainColor->color(), ui->buttonWindowColor->color()); + for (int i = 0; i < QPalette::NColorGroups; i++) + temp = PaletteEditorAdvanced::buildEffect(QPalette::ColorGroup(i), temp); + editPalette = temp; + setPreviewPalette(editPalette); updateColorButtons(); setModified(true); } - -void MainWindow::buildActiveEffect() -{ - QColorGroup cg = editPalette.active(); - QColor btn = cg.color( QColorGroup::Button ); - - QPalette temp( btn, btn ); - - for (int i = 0; i<5; i++) - cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) ); - - editPalette.setActive( cg ); - setPreviewPalette( editPalette ); - - updateColorButtons(); -} - - -void MainWindow::buildInactive() +void MainWindow::setPreviewPalette(const QPalette &pal) { - editPalette.setInactive( editPalette.active() ); - buildInactiveEffect(); -} - + QPalette::ColorGroup colorGroup = groupFromIndex(ui->paletteCombo->currentIndex()); -void MainWindow::buildInactiveEffect() -{ - QColorGroup cg = editPalette.inactive(); - - QColor light, midlight, mid, dark, shadow; - QColor btn = cg.color( QColorGroup::Button ); - - light = btn.light(150); - midlight = btn.light(115); - mid = btn.dark(150); - dark = btn.dark(); - shadow = Qt::black; - - cg.setColor( QColorGroup::Light, light ); - cg.setColor( QColorGroup::Midlight, midlight ); - cg.setColor( QColorGroup::Mid, mid ); - cg.setColor( QColorGroup::Dark, dark ); - cg.setColor( QColorGroup::Shadow, shadow ); - - editPalette.setInactive( cg ); - setPreviewPalette( editPalette ); - updateColorButtons(); -} - - -void MainWindow::buildDisabled() -{ - QColorGroup cg = editPalette.active(); - cg.setColor( QColorGroup::ButtonText, Qt::darkGray ); - cg.setColor( QColorGroup::WindowText, Qt::darkGray ); - cg.setColor( QColorGroup::Text, Qt::darkGray ); - cg.setColor( QColorGroup::HighlightedText, Qt::darkGray ); - editPalette.setDisabled( cg ); - - buildDisabledEffect(); -} - - -void MainWindow::buildDisabledEffect() -{ - QColorGroup cg = editPalette.disabled(); - - QColor light, midlight, mid, dark, shadow; - QColor btn = cg.color( QColorGroup::Button ); - - light = btn.light(150); - midlight = btn.light(115); - mid = btn.dark(150); - dark = btn.dark(); - shadow = Qt::black; - - cg.setColor( QColorGroup::Light, light ); - cg.setColor( QColorGroup::Midlight, midlight ); - cg.setColor( QColorGroup::Mid, mid ); - cg.setColor( QColorGroup::Dark, dark ); - cg.setColor( QColorGroup::Shadow, shadow ); - - editPalette.setDisabled( cg ); - setPreviewPalette( editPalette ); - updateColorButtons(); -} - - -void MainWindow::setPreviewPalette( const QPalette& pal ) -{ - QColorGroup cg; - - switch (paletteCombo->currentItem()) { - case 0: - default: - cg = pal.active(); - break; - case 1: - cg = pal.inactive(); - break; - case 2: - cg = pal.disabled(); - break; + for (int i = 0; i < QPalette::NColorGroups; i++) { + for (int j = 0; j < QPalette::NColorRoles; j++) { + QPalette::ColorGroup targetGroup = QPalette::ColorGroup(i); + QPalette::ColorRole targetRole = QPalette::ColorRole(j); + previewPalette.setColor(targetGroup, targetRole, pal.color(colorGroup, targetRole)); + } } - previewPalette.setActive( cg ); - previewPalette.setInactive( cg ); - previewPalette.setDisabled( cg ); - previewFrame->setPreviewPalette(previewPalette); + ui->previewFrame->setPreviewPalette(previewPalette); } - void MainWindow::updateColorButtons() { - buttonMainColor->setColor( editPalette.active().color( QColorGroup::Button )); - buttonMainColor2->setColor( editPalette.active().color( QColorGroup::Window )); + ui->buttonMainColor->setColor(editPalette.color(QPalette::Active, QPalette::Button)); + ui->buttonWindowColor->setColor(editPalette.color(QPalette::Active, QPalette::Window)); } - void MainWindow::tunePalette() { bool ok; QPalette pal = PaletteEditorAdvanced::getPalette(&ok, editPalette, - backgroundMode(), this); - if (! ok) + backgroundRole(), this); + if (!ok) return; editPalette = pal; @@ -765,7 +680,6 @@ void MainWindow::tunePalette() setModified(true); } - void MainWindow::paletteSelected(int) { setPreviewPalette(editPalette); @@ -773,10 +687,10 @@ void MainWindow::paletteSelected(int) void MainWindow::updateStyleLayout() { - QString currentStyle = gstylecombo->currentText(); + QString currentStyle = ui->guiStyleCombo->currentText(); bool autoStyle = (currentStyle == desktopThemeName); - previewFrame->setPreviewVisible(!autoStyle); - groupAutoPalette->setEnabled(currentStyle.toLower() != QLatin1String("gtk") && !autoStyle); + ui->previewFrame->setPreviewVisible(!autoStyle); + ui->buildPaletteGroup->setEnabled(currentStyle.toLower() != QLatin1String("gtk") && !autoStyle); } void MainWindow::styleSelected(const QString &stylename) @@ -788,7 +702,7 @@ void MainWindow::styleSelected(const QString &stylename) style = QStyleFactory::create(stylename); if (!style) return; - setStyleHelper(previewFrame, style); + setStyleHelper(ui->previewFrame, style); delete previewstyle; previewstyle = style; setModified(true); @@ -796,210 +710,191 @@ void MainWindow::styleSelected(const QString &stylename) updateStyleLayout(); } - void MainWindow::familySelected(const QString &family) { QFontDatabase db; QStringList styles = db.styles(family); - stylecombo->clear(); - stylecombo->insertStringList(styles); - familysubcombo->insertItem(family); + ui->fontStyleCombo->clear(); + ui->fontStyleCombo->addItems(styles); + ui->familySubstitutionCombo->addItem(family); buildFont(); } - void MainWindow::buildFont() { QFontDatabase db; - QFont font = db.font(familycombo->currentText(), - stylecombo->currentText(), - psizecombo->currentText().toInt()); - samplelineedit->setFont(font); + QFont font = db.font(ui->fontFamilyCombo->currentText(), + ui->fontStyleCombo->currentText(), + ui->pointSizeCombo->currentText().toInt()); + ui->sampleLineEdit->setFont(font); setModified(true); } - void MainWindow::substituteSelected(const QString &family) { QStringList subs = QFont::substitutes(family); - sublistbox->clear(); - sublistbox->insertStringList(subs); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); } - void MainWindow::removeSubstitute() { - if (sublistbox->currentItem() < 0 || - uint(sublistbox->currentItem()) > sublistbox->count()) + if (!ui->substitutionsListBox->currentItem()) return; - int item = sublistbox->currentItem(); - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - subs.removeAt(sublistbox->currentItem()); - sublistbox->clear(); - sublistbox->insertStringList(subs); - if (uint(item) > sublistbox->count()) - item = int(sublistbox->count()) - 1; - sublistbox->setCurrentItem(item); - QFont::removeSubstitution(familysubcombo->currentText()); - QFont::insertSubstitutions(familysubcombo->currentText(), subs); + int row = ui->substitutionsListBox->currentRow(); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + subs.removeAt(ui->substitutionsListBox->currentRow()); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); + if (row > ui->substitutionsListBox->count()) + row = ui->substitutionsListBox->count() - 1; + ui->substitutionsListBox->setCurrentRow(row); + QFont::removeSubstitution(ui->familySubstitutionCombo->currentText()); + QFont::insertSubstitutions(ui->familySubstitutionCombo->currentText(), subs); setModified(true); } - void MainWindow::addSubstitute() { - if (sublistbox->currentItem() < 0 || - uint(sublistbox->currentItem()) > sublistbox->count()) { - QFont::insertSubstitution(familysubcombo->currentText(), choosesubcombo->currentText()); - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - sublistbox->clear(); - sublistbox->insertStringList(subs); + if (!ui->substitutionsListBox->currentItem()) { + QFont::insertSubstitution(ui->familySubstitutionCombo->currentText(), + ui->chooseSubstitutionCombo->currentText()); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); setModified(true); return; } - int item = sublistbox->currentItem(); - QFont::insertSubstitution(familysubcombo->currentText(), choosesubcombo->currentText()); - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - sublistbox->clear(); - sublistbox->insertStringList(subs); - sublistbox->setCurrentItem(item); + int row = ui->substitutionsListBox->currentRow(); + QFont::insertSubstitution(ui->familySubstitutionCombo->currentText(), ui->chooseSubstitutionCombo->currentText()); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); + ui->substitutionsListBox->setCurrentRow(row); setModified(true); } - void MainWindow::downSubstitute() { - if (sublistbox->currentItem() < 0 || - uint(sublistbox->currentItem()) >= sublistbox->count()) + if (!ui->substitutionsListBox->currentItem() || ui->substitutionsListBox->currentRow() >= ui->substitutionsListBox->count()) return; - int item = sublistbox->currentItem(); - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - QString fam = subs.at(item); - subs.removeAt(item); - subs.insert(item+1, fam); - sublistbox->clear(); - sublistbox->insertStringList(subs); - sublistbox->setCurrentItem(item + 1); - QFont::removeSubstitution(familysubcombo->currentText()); - QFont::insertSubstitutions(familysubcombo->currentText(), subs); + int row = ui->substitutionsListBox->currentRow(); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + QString fam = subs.at(row); + subs.removeAt(row); + subs.insert(row + 1, fam); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); + ui->substitutionsListBox->setCurrentRow(row + 1); + QFont::removeSubstitution(ui->familySubstitutionCombo->currentText()); + QFont::insertSubstitutions(ui->familySubstitutionCombo->currentText(), subs); setModified(true); } - void MainWindow::upSubstitute() { - if (sublistbox->currentItem() < 1) + if (!ui->substitutionsListBox->currentItem() || ui->substitutionsListBox->currentRow() < 1) return; - int item = sublistbox->currentItem(); - QStringList subs = QFont::substitutes(familysubcombo->currentText()); - QString fam = subs.at(item); - subs.removeAt(item); - subs.insert(item-1, fam); - sublistbox->clear(); - sublistbox->insertStringList(subs); - sublistbox->setCurrentItem(item - 1); - QFont::removeSubstitution(familysubcombo->currentText()); - QFont::insertSubstitutions(familysubcombo->currentText(), subs); + int row = ui->substitutionsListBox->currentRow(); + QStringList subs = QFont::substitutes(ui->familySubstitutionCombo->currentText()); + QString fam = subs.at(row); + subs.removeAt(row); + subs.insert(row-1, fam); + ui->substitutionsListBox->clear(); + ui->substitutionsListBox->insertItems(0, subs); + ui->substitutionsListBox->setCurrentRow(row - 1); + QFont::removeSubstitution(ui->familySubstitutionCombo->currentText()); + QFont::insertSubstitutions(ui->familySubstitutionCombo->currentText(), subs); setModified(true); } - void MainWindow::removeFontpath() { - if (fontpathlistbox->currentItem() < 0 || - uint(fontpathlistbox->currentItem()) > fontpathlistbox->count()) + if (!ui->fontpathListBox->currentItem()) return; - int item = fontpathlistbox->currentItem(); - fontpaths.removeAt(fontpathlistbox->currentItem()); - fontpathlistbox->clear(); - fontpathlistbox->insertStringList(fontpaths); - if (uint(item) > fontpathlistbox->count()) - item = int(fontpathlistbox->count()) - 1; - fontpathlistbox->setCurrentItem(item); + int row = ui->fontpathListBox->currentRow(); + fontpaths.removeAt(row); + ui->fontpathListBox->clear(); + ui->fontpathListBox->insertItems(0, fontpaths); + if (row > ui->fontpathListBox->count()) + row = ui->fontpathListBox->count() - 1; + ui->fontpathListBox->setCurrentRow(row); setModified(true); } - void MainWindow::addFontpath() { - if (fontpathlineedit->text().isEmpty()) + if (ui->fontPathLineEdit->text().isEmpty()) return; - if (fontpathlistbox->currentItem() < 0 || - uint(fontpathlistbox->currentItem()) > fontpathlistbox->count()) { - fontpaths.append(fontpathlineedit->text()); - fontpathlistbox->clear(); - fontpathlistbox->insertStringList(fontpaths); + if (!ui->fontpathListBox->currentItem()) { + fontpaths.append(ui->fontPathLineEdit->text()); + ui->fontpathListBox->clear(); + ui->fontpathListBox->insertItems(0, fontpaths); setModified(true); return; } - int item = fontpathlistbox->currentItem(); - fontpaths.insert(fontpathlistbox->currentItem()+1, - fontpathlineedit->text()); - fontpathlistbox->clear(); - fontpathlistbox->insertStringList(fontpaths); - fontpathlistbox->setCurrentItem(item); + int row = ui->fontpathListBox->currentRow(); + fontpaths.insert(row + 1, ui->fontPathLineEdit->text()); + ui->fontpathListBox->clear(); + ui->fontpathListBox->insertItems(0, fontpaths); + ui->fontpathListBox->setCurrentRow(row); setModified(true); } - void MainWindow::downFontpath() { - if (fontpathlistbox->currentItem() < 0 || - uint(fontpathlistbox->currentItem()) >= fontpathlistbox->count() - 1) + if (!ui->fontpathListBox->currentItem() + || ui->fontpathListBox->currentRow() >= (ui->fontpathListBox->count() - 1)) { return; + } - int item = fontpathlistbox->currentItem(); - QString fam = fontpaths.at(item); - fontpaths.removeAt(item); - fontpaths.insert(item+1, fam); - fontpathlistbox->clear(); - fontpathlistbox->insertStringList(fontpaths); - fontpathlistbox->setCurrentItem(item + 1); + int row = ui->fontpathListBox->currentRow(); + QString fam = fontpaths.at(row); + fontpaths.removeAt(row); + fontpaths.insert(row + 1, fam); + ui->fontpathListBox->clear(); + ui->fontpathListBox->insertItems(0, fontpaths); + ui->fontpathListBox->setCurrentRow(row + 1); setModified(true); } - void MainWindow::upFontpath() { - if (fontpathlistbox->currentItem() < 1) + if (!ui->fontpathListBox->currentItem() || ui->fontpathListBox->currentRow() < 1) return; - int item = fontpathlistbox->currentItem(); - QString fam = fontpaths.at(item); - fontpaths.removeAt(item); - fontpaths.insert(item-1, fam); - fontpathlistbox->clear(); - fontpathlistbox->insertStringList(fontpaths); - fontpathlistbox->setCurrentItem(item - 1); + int row = ui->fontpathListBox->currentRow(); + QString fam = fontpaths.at(row); + fontpaths.removeAt(row); + fontpaths.insert(row - 1, fam); + ui->fontpathListBox->clear(); + ui->fontpathListBox->insertItems(0, fontpaths); + ui->fontpathListBox->setCurrentRow(row - 1); setModified(true); } - void MainWindow::browseFontpath() { - QString dirname = QFileDialog::getExistingDirectory(QString(), this, 0, - tr("Select a Directory")); + QString dirname = QFileDialog::getExistingDirectory(this, tr("Select a Directory")); if (dirname.isNull()) return; - fontpathlineedit->setText(dirname); + ui->fontPathLineEdit->setText(dirname); } - void MainWindow::somethingModified() { setModified(true); } - void MainWindow::helpAbout() { QMessageBox box(this); @@ -1012,44 +907,42 @@ void MainWindow::helpAbout() box.exec(); } - void MainWindow::helpAboutQt() { QMessageBox::aboutQt(this, tr("Qt Configuration")); } - void MainWindow::pageChanged(QWidget *page) { - if (page == tab) - helpview->setText(tr(interface_text)); - else if (page == tab1) - helpview->setText(tr(appearance_text)); - else if (page == tab2) - helpview->setText(tr(font_text)); - else if (page == tab3) - helpview->setText(tr(printer_text)); - else if (page == tab4) - helpview->setText(tr(phonon_text)); + if (page == ui->interfaceTab) + ui->helpView->setText(tr(interface_text)); + else if (page == ui->appearanceTab) + ui->helpView->setText(tr(appearance_text)); + else if (page == ui->fontsTab) + ui->helpView->setText(tr(font_text)); + else if (page == ui->printerTab) + ui->helpView->setText(tr(printer_text)); + else if (page == ui->phononTab) + ui->helpView->setText(tr(phonon_text)); } - void MainWindow::closeEvent(QCloseEvent *e) { if (modified) { - switch(QMessageBox::warning(this, tr("Save Changes"), - tr("Save changes to settings?"), - tr("&Yes"), tr("&No"), tr("&Cancel"), 0, 2)) { - case 0: // save + switch (QMessageBox::warning(this, tr("Save Changes"), + tr("Save changes to settings?"), + (QMessageBox::Yes | QMessageBox::No + | QMessageBox::Cancel))) { + case QMessageBox::Yes: // save qApp->processEvents(); fileSave(); // fall through intended - case 1: // don't save + case QMessageBox::No: // don't save e->accept(); break; - case 2: // cancel + case QMessageBox::Cancel: // cancel e->ignore(); break; diff --git a/tools/qtconfig/mainwindow.h b/tools/qtconfig/mainwindow.h index cc7d597..0cd2b29 100644 --- a/tools/qtconfig/mainwindow.h +++ b/tools/qtconfig/mainwindow.h @@ -42,11 +42,15 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include "mainwindowbase.h" +#include <QtGui/QMainWindow> QT_BEGIN_NAMESPACE -class MainWindow : public MainWindowBase +namespace Ui { + class MainWindow; +} + +class MainWindow : public QMainWindow { Q_OBJECT @@ -56,7 +60,6 @@ public: void closeEvent(QCloseEvent *); - public slots: virtual void buildPalette(); virtual void buildFont(); @@ -83,21 +86,17 @@ public slots: private: - void buildActive(); - void buildActiveEffect(); - void buildInactive(); - void buildInactiveEffect(); - void buildDisabled(); - void buildDisabledEffect(); - void updateColorButtons(); void updateFontSample(); void updateStyleLayout(); + static QPalette::ColorGroup groupFromIndex(int); + void setPreviewPalette(const QPalette &); void setModified(bool); + Ui::MainWindow *ui; QString desktopThemeName; QPalette editPalette, previewPalette; QStyle *previewstyle; diff --git a/tools/qtconfig/mainwindow.ui b/tools/qtconfig/mainwindow.ui new file mode 100644 index 0000000..d906800 --- /dev/null +++ b/tools/qtconfig/mainwindow.ui @@ -0,0 +1,1388 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <comment>********************************************************************* +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +*********************************************************************</comment> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>815</width> + <height>716</height> + </rect> + </property> + <property name="windowTitle"> + <string>Qt Configuration</string> + </property> + <widget class="QWidget" name="widget"> + <layout class="QGridLayout" name="gridLayout"> + <property name="margin"> + <number>8</number> + </property> + <item row="0" column="0"> + <widget class="QTextEdit" name="helpView"> + <property name="minimumSize"> + <size> + <width>200</width> + <height>0</height> + </size> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QTabWidget" name="mainTabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="appearanceTab"> + <attribute name="title"> + <string>Appearance</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="0" column="0"> + <widget class="QGroupBox" name="guiStyleGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="title"> + <string>GUI Style</string> + </property> + <layout class="QHBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>8</number> + </property> + <item> + <widget class="QLabel" name="guiStyleLabel"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Select GUI &Style:</string> + </property> + <property name="buddy"> + <cstring>guiStyleCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="guiStyleCombo"/> + </item> + </layout> + </widget> + </item> + <item row="3" column="0"> + <widget class="QGroupBox" name="previewGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Preview</string> + </property> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="0" column="0"> + <widget class="QLabel" name="paletteLabel"> + <property name="text"> + <string>Select &Palette:</string> + </property> + <property name="buddy"> + <cstring>paletteCombo</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="paletteCombo"> + <item> + <property name="text"> + <string>Active Palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Inactive Palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled Palette</string> + </property> + </item> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="PreviewFrame" name="previewFrame" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>410</width> + <height>260</height> + </size> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QGroupBox" name="buildPaletteGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>400</width> + <height>0</height> + </size> + </property> + <property name="title"> + <string>Build Palette</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QWidget" name="colorConfig" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="labelMainColor"> + <property name="text"> + <string>&Button Background:</string> + </property> + <property name="buddy"> + <cstring>buttonMainColor</cstring> + </property> + </widget> + </item> + <item> + <widget class="ColorButton" name="buttonMainColor" native="true"/> + </item> + <item> + <widget class="QLabel" name="labelWindowColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>50</width> + <height>0</height> + </size> + </property> + <property name="lineWidth"> + <number>1</number> + </property> + <property name="midLineWidth"> + <number>0</number> + </property> + <property name="text"> + <string>Window Back&ground:</string> + </property> + <property name="alignment"> + <set>Qt::AlignVCenter</set> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="buddy"> + <cstring>buttonWindowColor</cstring> + </property> + </widget> + </item> + <item> + <widget class="ColorButton" name="buttonWindowColor" native="true"/> + </item> + <item> + <spacer name="spacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>70</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="tunePaletteButton"> + <property name="text"> + <string>&Tune Palette...</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QLabel" name="kdeNoteLabel"> + <property name="text"> + <string>Please use the KDE Control Center to set the palette.</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="fontsTab"> + <attribute name="title"> + <string>Fonts</string> + </attribute> + <layout class="QVBoxLayout"> + <item> + <widget class="QGroupBox" name="defaultFontGroup"> + <property name="title"> + <string>Default Font</string> + </property> + <layout class="QGridLayout"> + <property name="margin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="1" column="1"> + <widget class="QComboBox" name="fontStyleCombo"> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <property name="duplicatesEnabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="fontFamilyCombo"> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <property name="duplicatesEnabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="pointSizeCombo"> + <property name="editable"> + <bool>true</bool> + </property> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <property name="duplicatesEnabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="fontStyleLabel"> + <property name="text"> + <string>&Style:</string> + </property> + <property name="buddy"> + <cstring>fontStyleCombo</cstring> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="pointSizeLabel"> + <property name="text"> + <string>&Point Size:</string> + </property> + <property name="buddy"> + <cstring>pointSizeCombo</cstring> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="fontFamilyLabel"> + <property name="text"> + <string>F&amily:</string> + </property> + <property name="buddy"> + <cstring>fontFamilyCombo</cstring> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QLineEdit" name="sampleLineEdit"> + <property name="text"> + <string>Sample Text</string> + </property> + <property name="alignment"> + <set>Qt::AlignHCenter</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="fontSubstitutionGroup"> + <property name="title"> + <string>Font Substitution</string> + </property> + <layout class="QVBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>8</number> + </property> + <item> + <layout class="QHBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="familySubstitutionLabel"> + <property name="text"> + <string>S&elect or Enter a Family:</string> + </property> + <property name="buddy"> + <cstring>familySubstitutionCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="familySubstitutionCombo"> + <property name="editable"> + <bool>true</bool> + </property> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <property name="duplicatesEnabled"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="Line1"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="substitutionsLabel"> + <property name="text"> + <string>Current Substitutions:</string> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="substitutionsListBox"/> + </item> + <item> + <layout class="QHBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QPushButton" name="upSubstitutionButton"> + <property name="text"> + <string>Up</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="downSubstitutionButton"> + <property name="text"> + <string>Down</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="removeSubstitutionButton"> + <property name="text"> + <string>Remove</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="Line" name="Line2"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="chooseSubstitutionLabel"> + <property name="text"> + <string>Select s&ubstitute Family:</string> + </property> + <property name="buddy"> + <cstring>chooseSubstitutionCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="chooseSubstitutionCombo"> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <property name="duplicatesEnabled"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="addSubstitutionButton"> + <property name="text"> + <string>Add</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="interfaceTab"> + <attribute name="title"> + <string>Interface</string> + </attribute> + <layout class="QVBoxLayout"> + <item> + <widget class="QGroupBox" name="feelSettingsGroup"> + <property name="title"> + <string>Feel Settings</string> + </property> + <layout class="QGridLayout"> + <property name="margin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="1"> + <widget class="QSpinBox" name="doubleClickIntervalSpinBox"> + <property name="suffix"> + <string> ms</string> + </property> + <property name="minimum"> + <number>10</number> + </property> + <property name="maximum"> + <number>10000</number> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="doubleClickIntervalLabel"> + <property name="text"> + <string>&Double Click Interval:</string> + </property> + <property name="buddy"> + <cstring>doubleClickIntervalSpinBox</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="cursorFlashTimeSpinBox"> + <property name="specialValueText"> + <string>No blinking</string> + </property> + <property name="suffix"> + <string> ms</string> + </property> + <property name="minimum"> + <number>9</number> + </property> + <property name="maximum"> + <number>10000</number> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="cursorFlashTimeLabel"> + <property name="text"> + <string>&Cursor Flash Time:</string> + </property> + <property name="buddy"> + <cstring>cursorFlashTimeSpinBox</cstring> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="wheelScrollLinesSpinBox"> + <property name="suffix"> + <string> lines</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>20</number> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="wheelScrollLinesLabel"> + <property name="text"> + <string>Wheel &Scroll Lines:</string> + </property> + <property name="buddy"> + <cstring>wheelScrollLinesSpinBox</cstring> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QCheckBox" name="resolveLinksCheckBox"> + <property name="text"> + <string>Resolve symlinks in URLs</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="guiEffectsGroup"> + <property name="title"> + <string>GUI Effects</string> + </property> + <layout class="QVBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>8</number> + </property> + <item> + <widget class="QCheckBox" name="effectsCheckBox"> + <property name="text"> + <string>&Enable</string> + </property> + <property name="shortcut"> + <string>Alt+E</string> + </property> + </widget> + </item> + <item> + <widget class="QFrame" name="effectsFrame"> + <layout class="QGridLayout"> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="menuEffectLabel"> + <property name="text"> + <string>&Menu Effect:</string> + </property> + <property name="buddy"> + <cstring>menuEffectCombo</cstring> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="comboEffectLabel"> + <property name="text"> + <string>C&omboBox Effect:</string> + </property> + <property name="buddy"> + <cstring>comboEffectCombo</cstring> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="toolTipEffectLabel"> + <property name="text"> + <string>&ToolTip Effect:</string> + </property> + <property name="buddy"> + <cstring>toolTipEffectCombo</cstring> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="toolBoxEffectLabel"> + <property name="text"> + <string>Tool&Box Effect:</string> + </property> + <property name="buddy"> + <cstring>toolBoxEffectCombo</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="menuEffectCombo"> + <property name="currentIndex"> + <number>0</number> + </property> + <property name="autoCompletion"> + <bool>true</bool> + </property> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + <item> + <property name="text"> + <string>Fade</string> + </property> + </item> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="comboEffectCombo"> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="toolTipEffectCombo"> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + <item> + <property name="text"> + <string>Fade</string> + </property> + </item> + </widget> + </item> + <item row="3" column="1"> + <widget class="QComboBox" name="toolBoxEffectCombo"> + <item> + <property name="text"> + <string>Disable</string> + </property> + </item> + <item> + <property name="text"> + <string>Animate</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="globalStrutGroup"> + <property name="title"> + <string>Global Strut</string> + </property> + <layout class="QGridLayout"> + <property name="margin"> + <number>8</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="strutWidthLabel"> + <property name="text"> + <string>Minimum &Width:</string> + </property> + <property name="buddy"> + <cstring>strutWidthSpinBox</cstring> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="strutHeightLabel"> + <property name="text"> + <string>Minimum Hei&ght:</string> + </property> + <property name="buddy"> + <cstring>strutHeightSpinBox</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QSpinBox" name="strutWidthSpinBox"> + <property name="suffix"> + <string> pixels</string> + </property> + <property name="maximum"> + <number>1000</number> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="strutHeightSpinBox"> + <property name="suffix"> + <string> pixels</string> + </property> + <property name="maximum"> + <number>1000</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QCheckBox" name="rtlExtensionsCheckBox"> + <property name="text"> + <string>Enhanced support for languages written right-to-left</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="inputStyleLabel"> + <property name="text"> + <string>XIM Input Style:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="inputStyleCombo"> + <property name="currentIndex"> + <number>0</number> + </property> + <item> + <property name="text"> + <string>On The Spot</string> + </property> + </item> + <item> + <property name="text"> + <string>Over The Spot</string> + </property> + </item> + <item> + <property name="text"> + <string>Off The Spot</string> + </property> + </item> + <item> + <property name="text"> + <string>Root</string> + </property> + </item> + </widget> + </item> + <item> + <widget class="QLabel" name="inputMethodLabel"> + <property name="text"> + <string>Default Input Method:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="inputMethodCombo"> + <property name="currentIndex"> + <number>-1</number> + </property> + </widget> + </item> + <item> + <spacer> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="printerTab"> + <attribute name="title"> + <string>Printer</string> + </attribute> + <layout class="QVBoxLayout"> + <item> + <widget class="QCheckBox" name="fontEmbeddingCheckBox"> + <property name="text"> + <string>Enable Font embedding</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="fontPathsGroup"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Font Paths</string> + </property> + <layout class="QVBoxLayout"> + <property name="spacing"> + <number>4</number> + </property> + <property name="margin"> + <number>8</number> + </property> + <item> + <layout class="QGridLayout"> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="1" column="0"> + <widget class="QPushButton" name="upFontpathButton"> + <property name="text"> + <string>Up</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QPushButton" name="removeFontpathButton"> + <property name="text"> + <string>Remove</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QPushButton" name="downFontpathButton"> + <property name="text"> + <string>Down</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="3"> + <widget class="QListWidget" name="fontpathListBox"/> + </item> + </layout> + </item> + <item> + <layout class="QGridLayout"> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>4</number> + </property> + <item row="2" column="0"> + <spacer> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Minimum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="2"> + <widget class="QPushButton" name="addFontPathButton"> + <property name="text"> + <string>Add</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QPushButton" name="browseFontPathButton"> + <property name="text"> + <string>Browse...</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="3"> + <widget class="QLabel" name="browseFontPathLabel"> + <property name="text"> + <string>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3"> + <widget class="QLineEdit" name="fontPathLineEdit"/> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="phononTab"> + <attribute name="title"> + <string>Phonon</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QGroupBox" name="aboutPhononGroup"> + <property name="title"> + <string>About Phonon</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QLabel" name="phononVersionBuddyLabel"> + <property name="text"> + <string>Current Version:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="phononVersionLabel"> + <property name="text"> + <string>Not available</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="phononWebsiteBuddyLabel"> + <property name="text"> + <string>Website:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="phononWebsiteLabel"> + <property name="text"> + <string><a href="http://phonon.kde.org">http://phonon.kde.org/</a></string> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="aboutGStreamerGroup"> + <property name="title"> + <string>About GStreamer</string> + </property> + <layout class="QGridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="gstVersionBuddyLabel"> + <property name="text"> + <string>Current Version:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="gstVersionLabel"> + <property name="text"> + <string>Not available</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="gstWebsiteBuddyLabel"> + <property name="text"> + <string>Website:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="gstWebsiteLabel"> + <property name="text"> + <string><a href="http://gstreamer.freedesktop.org/">http://gstreamer.freedesktop.org/</a></string> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="gstBackendGroup"> + <property name="title"> + <string>GStreamer backend settings</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="audiosinkLabel"> + <property name="text"> + <string>Preferred audio sink:</string> + </property> + <property name="buddy"> + <cstring>audiosinkCombo</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="audiosinkCombo"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="videomodeLabel"> + <property name="text"> + <string>Preferred render method:</string> + </property> + <property name="buddy"> + <cstring>videomodeCombo</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="videomodeCombo"/> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QLabel" name="gstBackendNoteLabel"> + <property name="text"> + <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></string> + </property> + <property name="textFormat"> + <enum>Qt::RichText</enum> + </property> + <property name="scaledContents"> + <bool>false</bool> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="margin"> + <number>2</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QLabel" name="phononLabel"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="mainMenu"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>815</width> + <height>19</height> + </rect> + </property> + <widget class="QMenu" name="fileMenu"> + <property name="geometry"> + <rect> + <x>203</x> + <y>114</y> + <width>161</width> + <height>110</height> + </rect> + </property> + <property name="title"> + <string>&File</string> + </property> + <addaction name="fileSaveAction"/> + <addaction name="separator"/> + <addaction name="fileExitAction"/> + </widget> + <widget class="QMenu" name="saveMenu"> + <property name="geometry"> + <rect> + <x>543</x> + <y>98</y> + <width>161</width> + <height>106</height> + </rect> + </property> + <property name="title"> + <string>&Help</string> + </property> + <addaction name="helpAboutAction"/> + <addaction name="helpAboutQtAction"/> + </widget> + <addaction name="fileMenu"/> + <addaction name="separator"/> + <addaction name="saveMenu"/> + </widget> + <action name="fileSaveAction"> + <property name="text"> + <string>&Save</string> + </property> + <property name="iconText"> + <string>Save</string> + </property> + <property name="shortcut"> + <string>Ctrl+S</string> + </property> + </action> + <action name="fileExitAction"> + <property name="text"> + <string>E&xit</string> + </property> + <property name="iconText"> + <string>Exit</string> + </property> + <property name="shortcut"> + <string>Ctrl+Q</string> + </property> + </action> + <action name="helpAboutAction"> + <property name="text"> + <string>&About</string> + </property> + <property name="iconText"> + <string>About</string> + </property> + <property name="shortcut"> + <string/> + </property> + </action> + <action name="helpAboutQtAction"> + <property name="text"> + <string>About &Qt</string> + </property> + <property name="iconText"> + <string>About Qt</string> + </property> + </action> + </widget> + <customwidgets> + <customwidget> + <class>ColorButton</class> + <extends></extends> + <header>colorbutton.h</header> + </customwidget> + <customwidget> + <class>PreviewFrame</class> + <extends></extends> + <header>previewframe.h</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>helpView</tabstop> + <tabstop>mainTabWidget</tabstop> + <tabstop>guiStyleCombo</tabstop> + <tabstop>tunePaletteButton</tabstop> + <tabstop>paletteCombo</tabstop> + <tabstop>fontFamilyCombo</tabstop> + <tabstop>fontStyleCombo</tabstop> + <tabstop>pointSizeCombo</tabstop> + <tabstop>sampleLineEdit</tabstop> + <tabstop>familySubstitutionCombo</tabstop> + <tabstop>substitutionsListBox</tabstop> + <tabstop>upSubstitutionButton</tabstop> + <tabstop>downSubstitutionButton</tabstop> + <tabstop>removeSubstitutionButton</tabstop> + <tabstop>chooseSubstitutionCombo</tabstop> + <tabstop>addSubstitutionButton</tabstop> + <tabstop>doubleClickIntervalSpinBox</tabstop> + <tabstop>cursorFlashTimeSpinBox</tabstop> + <tabstop>wheelScrollLinesSpinBox</tabstop> + <tabstop>resolveLinksCheckBox</tabstop> + <tabstop>effectsCheckBox</tabstop> + <tabstop>menuEffectCombo</tabstop> + <tabstop>comboEffectCombo</tabstop> + <tabstop>toolTipEffectCombo</tabstop> + <tabstop>toolBoxEffectCombo</tabstop> + <tabstop>strutWidthSpinBox</tabstop> + <tabstop>strutHeightSpinBox</tabstop> + <tabstop>rtlExtensionsCheckBox</tabstop> + <tabstop>inputStyleCombo</tabstop> + <tabstop>inputMethodCombo</tabstop> + <tabstop>fontEmbeddingCheckBox</tabstop> + <tabstop>fontpathListBox</tabstop> + <tabstop>upFontpathButton</tabstop> + <tabstop>downFontpathButton</tabstop> + <tabstop>removeFontpathButton</tabstop> + <tabstop>fontPathLineEdit</tabstop> + <tabstop>browseFontPathButton</tabstop> + <tabstop>addFontPathButton</tabstop> + <tabstop>audiosinkCombo</tabstop> + <tabstop>videomodeCombo</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>effectsCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>effectsFrame</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>417</x> + <y>257</y> + </hint> + <hint type="destinationlabel"> + <x>578</x> + <y>379</y> + </hint> + </hints> + </connection> + <connection> + <sender>fontEmbeddingCheckBox</sender> + <signal>toggled(bool)</signal> + <receiver>fontPathsGroup</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>449</x> + <y>69</y> + </hint> + <hint type="destinationlabel"> + <x>447</x> + <y>94</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/tools/qtconfig/mainwindowbase.cpp b/tools/qtconfig/mainwindowbase.cpp deleted file mode 100644 index efca58b..0000000 --- a/tools/qtconfig/mainwindowbase.cpp +++ /dev/null @@ -1,250 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "mainwindowbase.h" -#include "colorbutton.h" -#include "previewframe.h" - -#include <QVariant> -#include <QImage> -#include <QPixmap> - -QT_BEGIN_NAMESPACE - -/* - * Constructs a MainWindowBase as a child of 'parent', with the - * name 'name' and widget flags set to 'f'. - * - */ -MainWindowBase::MainWindowBase(QWidget* parent, const char* name, Qt::WindowFlags fl) - : Q3MainWindow(parent, name, fl) -{ - setupUi(this); - - (void)statusBar(); - - // signals and slots connections - connect(fontpathlineedit, SIGNAL(returnPressed()), this, SLOT(addFontpath())); - connect(PushButton15, SIGNAL(clicked()), this, SLOT(addFontpath())); - connect(PushButton1, SIGNAL(clicked()), this, SLOT(addSubstitute())); - connect(PushButton14, SIGNAL(clicked()), this, SLOT(browseFontpath())); - connect(stylecombo, SIGNAL(activated(int)), this, SLOT(buildFont())); - connect(psizecombo, SIGNAL(activated(int)), this, SLOT(buildFont())); - connect(PushButton12, SIGNAL(clicked()), this, SLOT(downFontpath())); - connect(PushButton3, SIGNAL(clicked()), this, SLOT(downSubstitute())); - connect(familycombo, SIGNAL(activated(QString)), this, SLOT(familySelected(QString))); - connect(fileExitAction, SIGNAL(activated()), this, SLOT(fileExit())); - connect(fileSaveAction, SIGNAL(activated()), this, SLOT(fileSave())); - connect(helpAboutAction, SIGNAL(activated()), this, SLOT(helpAbout())); - connect(helpAboutQtAction, SIGNAL(activated()), this, SLOT(helpAboutQt())); - connect(TabWidget3, SIGNAL(currentChanged(QWidget*)), this, SLOT(pageChanged(QWidget*))); - connect(paletteCombo, SIGNAL(activated(int)), this, SLOT(paletteSelected(int))); - connect(PushButton13, SIGNAL(clicked()), this, SLOT(removeFontpath())); - connect(PushButton4, SIGNAL(clicked()), this, SLOT(removeSubstitute())); - connect(effectcheckbox, SIGNAL(toggled(bool)), effectbase, SLOT(setEnabled(bool))); - connect(fontembeddingcheckbox, SIGNAL(toggled(bool)), GroupBox10, SLOT(setEnabled(bool))); - connect(toolboxeffect, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(dcispin, SIGNAL(valueChanged(int)), this, SLOT(somethingModified())); - connect(cfispin, SIGNAL(valueChanged(int)), this, SLOT(somethingModified())); - connect(wslspin, SIGNAL(valueChanged(int)), this, SLOT(somethingModified())); - connect(menueffect, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(comboeffect, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(audiosinkCombo, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(videomodeCombo, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(tooltipeffect, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(strutwidth, SIGNAL(valueChanged(int)), this, SLOT(somethingModified())); - connect(strutheight, SIGNAL(valueChanged(int)), this, SLOT(somethingModified())); - connect(effectcheckbox, SIGNAL(toggled(bool)), this, SLOT(somethingModified())); - connect(resolvelinks, SIGNAL(toggled(bool)), this, SLOT(somethingModified())); - connect(fontembeddingcheckbox, SIGNAL(clicked()), this, SLOT(somethingModified())); - connect(rtlExtensions, SIGNAL(toggled(bool)), this, SLOT(somethingModified())); - connect(inputStyle, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(inputMethod, SIGNAL(activated(int)), this, SLOT(somethingModified())); - connect(gstylecombo, SIGNAL(activated(QString)), this, SLOT(styleSelected(QString))); - connect(familysubcombo, SIGNAL(activated(QString)), this, SLOT(substituteSelected(QString))); - connect(btnAdvanced, SIGNAL(clicked()), this, SLOT(tunePalette())); - connect(PushButton11, SIGNAL(clicked()), this, SLOT(upFontpath())); - connect(PushButton2, SIGNAL(clicked()), this, SLOT(upSubstitute())); - init(); -} - -/* - * Destroys the object and frees any allocated resources - */ -MainWindowBase::~MainWindowBase() -{ - destroy(); - // no need to delete child widgets, Qt does it all for us -} - -/* - * Sets the strings of the subwidgets using the current - * language. - */ -void MainWindowBase::languageChange() -{ - retranslateUi(this); -} - -void MainWindowBase::init() -{ -} - -void MainWindowBase::destroy() -{ -} - -void MainWindowBase::addFontpath() -{ - qWarning("MainWindowBase::addFontpath(): Not implemented yet"); -} - -void MainWindowBase::addSubstitute() -{ - qWarning("MainWindowBase::addSubstitute(): Not implemented yet"); -} - -void MainWindowBase::browseFontpath() -{ - qWarning("MainWindowBase::browseFontpath(): Not implemented yet"); -} - -void MainWindowBase::buildFont() -{ - qWarning("MainWindowBase::buildFont(): Not implemented yet"); -} - -void MainWindowBase::buildPalette() -{ - qWarning("MainWindowBase::buildPalette(): Not implemented yet"); -} - -void MainWindowBase::downFontpath() -{ - qWarning("MainWindowBase::downFontpath(): Not implemented yet"); -} - -void MainWindowBase::downSubstitute() -{ - qWarning("MainWindowBase::downSubstitute(): Not implemented yet"); -} - -void MainWindowBase::familySelected( const QString &) -{ - qWarning("MainWindowBase::familySelected( const QString &): Not implemented yet"); -} - -void MainWindowBase::fileExit() -{ - qWarning("MainWindowBase::fileExit(): Not implemented yet"); -} - -void MainWindowBase::fileSave() -{ - qWarning("MainWindowBase::fileSave(): Not implemented yet"); -} - -void MainWindowBase::helpAbout() -{ - qWarning("MainWindowBase::helpAbout(): Not implemented yet"); -} - -void MainWindowBase::helpAboutQt() -{ - qWarning("MainWindowBase::helpAboutQt(): Not implemented yet"); -} - -void MainWindowBase::new_slot() -{ - qWarning("MainWindowBase::new_slot(): Not implemented yet"); -} - -void MainWindowBase::pageChanged( QWidget *) -{ - qWarning("MainWindowBase::pageChanged( QWidget *): Not implemented yet"); -} - -void MainWindowBase::paletteSelected(int) -{ - qWarning("MainWindowBase::paletteSelected(int): Not implemented yet"); -} - -void MainWindowBase::removeFontpath() -{ - qWarning("MainWindowBase::removeFontpath(): Not implemented yet"); -} - -void MainWindowBase::removeSubstitute() -{ - qWarning("MainWindowBase::removeSubstitute(): Not implemented yet"); -} - -void MainWindowBase::somethingModified() -{ - qWarning("MainWindowBase::somethingModified(): Not implemented yet"); -} - -void MainWindowBase::styleSelected( const QString &) -{ - qWarning("MainWindowBase::styleSelected( const QString &): Not implemented yet"); -} - -void MainWindowBase::substituteSelected( const QString &) -{ - qWarning("MainWindowBase::substituteSelected( const QString &): Not implemented yet"); -} - -void MainWindowBase::tunePalette() -{ - qWarning("MainWindowBase::tunePalette(): Not implemented yet"); -} - -void MainWindowBase::upFontpath() -{ - qWarning("MainWindowBase::upFontpath(): Not implemented yet"); -} - -void MainWindowBase::upSubstitute() -{ - qWarning("MainWindowBase::upSubstitute(): Not implemented yet"); -} - -QT_END_NAMESPACE diff --git a/tools/qtconfig/mainwindowbase.h b/tools/qtconfig/mainwindowbase.h deleted file mode 100644 index 97c6716..0000000 --- a/tools/qtconfig/mainwindowbase.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MAINWINDOWBASE_H -#define MAINWINDOWBASE_H - -#include "ui_mainwindowbase.h" -#include <QVariant> - -QT_BEGIN_NAMESPACE - -class ColorButton; -class PreviewFrame; - -class MainWindowBase : public Q3MainWindow, public Ui::MainWindowBase -{ - Q_OBJECT - -public: - MainWindowBase(QWidget* parent = 0, const char* name = 0, Qt::WindowFlags fl = Qt::Window); - ~MainWindowBase(); - -public slots: - virtual void addFontpath(); - virtual void addSubstitute(); - virtual void browseFontpath(); - virtual void buildFont(); - virtual void buildPalette(); - virtual void downFontpath(); - virtual void downSubstitute(); - virtual void familySelected( const QString & ); - virtual void fileExit(); - virtual void fileSave(); - virtual void helpAbout(); - virtual void helpAboutQt(); - virtual void new_slot(); - virtual void pageChanged( QWidget * ); - virtual void paletteSelected( int ); - virtual void removeFontpath(); - virtual void removeSubstitute(); - virtual void somethingModified(); - virtual void styleSelected( const QString & ); - virtual void substituteSelected( const QString & ); - virtual void tunePalette(); - virtual void upFontpath(); - virtual void upSubstitute(); - -protected slots: - virtual void languageChange(); - - virtual void init(); - virtual void destroy(); -}; - -QT_END_NAMESPACE - -#endif // MAINWINDOWBASE_H diff --git a/tools/qtconfig/mainwindowbase.ui b/tools/qtconfig/mainwindowbase.ui deleted file mode 100644 index c5b4470..0000000 --- a/tools/qtconfig/mainwindowbase.ui +++ /dev/null @@ -1,1384 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <comment>********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -*********************************************************************</comment> - <class>MainWindowBase</class> - <widget class="Q3MainWindow" name="MainWindowBase"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>815</width> - <height>716</height> - </rect> - </property> - <property name="windowTitle"> - <string>Qt Configuration</string> - </property> - <widget class="QWidget" name="widget"> - <property name="geometry"> - <rect> - <x>0</x> - <y>26</y> - <width>815</width> - <height>690</height> - </rect> - </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="margin"> - <number>8</number> - </property> - <item row="0" column="0"> - <widget class="QTextEdit" name="helpview"> - <property name="minimumSize"> - <size> - <width>200</width> - <height>0</height> - </size> - </property> - <property name="readOnly"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QTabWidget" name="TabWidget3"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tab1"> - <attribute name="title"> - <string>Appearance</string> - </attribute> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="0" column="0"> - <widget class="QGroupBox" name="GroupBox40"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="title"> - <string>GUI Style</string> - </property> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>8</number> - </property> - <item> - <widget class="QLabel" name="gstylebuddy"> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Select GUI &Style:</string> - </property> - <property name="buddy"> - <cstring>gstylecombo</cstring> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="gstylecombo"/> - </item> - </layout> - </widget> - </item> - <item row="3" column="0"> - <widget class="QGroupBox" name="groupPreview"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Preview</string> - </property> - <layout class="QGridLayout" name="gridLayout_4"> - <item row="0" column="0"> - <widget class="QLabel" name="TextLabel1"> - <property name="text"> - <string>Select &Palette:</string> - </property> - <property name="buddy"> - <cstring>paletteCombo</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="paletteCombo"> - <item> - <property name="text"> - <string>Active Palette</string> - </property> - </item> - <item> - <property name="text"> - <string>Inactive Palette</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled Palette</string> - </property> - </item> - </widget> - </item> - <item row="1" column="0" colspan="2"> - <widget class="PreviewFrame" name="previewFrame" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>410</width> - <height>260</height> - </size> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="1" column="0"> - <widget class="QGroupBox" name="groupAutoPalette"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>400</width> - <height>0</height> - </size> - </property> - <property name="title"> - <string>Build Palette</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QWidget" name="colorConfig" native="true"> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QLabel" name="labelMainColor"> - <property name="text"> - <string>&3-D Effects:</string> - </property> - <property name="buddy"> - <cstring>buttonMainColor</cstring> - </property> - </widget> - </item> - <item> - <widget class="ColorButton" name="buttonMainColor" native="true"/> - </item> - <item> - <widget class="QLabel" name="labelMainColor2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>50</width> - <height>0</height> - </size> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="midLineWidth"> - <number>0</number> - </property> - <property name="text"> - <string>Window Back&ground:</string> - </property> - <property name="alignment"> - <set>Qt::AlignVCenter</set> - </property> - <property name="margin"> - <number>0</number> - </property> - <property name="buddy"> - <cstring>buttonMainColor2</cstring> - </property> - </widget> - </item> - <item> - <widget class="ColorButton" name="buttonMainColor2" native="true"/> - </item> - <item> - <spacer name="spacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>70</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="btnAdvanced"> - <property name="text"> - <string>&Tune Palette...</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QLabel" name="labelKDENote"> - <property name="text"> - <string>Please use the KDE Control Center to set the palette.</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab2"> - <attribute name="title"> - <string>Fonts</string> - </attribute> - <layout class="QVBoxLayout"> - <item> - <widget class="QGroupBox" name="GroupBox1"> - <property name="title"> - <string>Default Font</string> - </property> - <layout class="QGridLayout"> - <property name="margin"> - <number>8</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="1" column="1"> - <widget class="QComboBox" name="stylecombo"> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <property name="duplicatesEnabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="familycombo"> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <property name="duplicatesEnabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QComboBox" name="psizecombo"> - <property name="editable"> - <bool>true</bool> - </property> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <property name="duplicatesEnabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="stylebuddy"> - <property name="text"> - <string>&Style:</string> - </property> - <property name="buddy"> - <cstring>stylecombo</cstring> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="psizebuddy"> - <property name="text"> - <string>&Point Size:</string> - </property> - <property name="buddy"> - <cstring>psizecombo</cstring> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="familybuddy"> - <property name="text"> - <string>F&amily:</string> - </property> - <property name="buddy"> - <cstring>familycombo</cstring> - </property> - </widget> - </item> - <item row="3" column="0" colspan="2"> - <widget class="QLineEdit" name="samplelineedit"> - <property name="text"> - <string>Sample Text</string> - </property> - <property name="alignment"> - <set>Qt::AlignHCenter</set> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="GroupBox2"> - <property name="title"> - <string>Font Substitution</string> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>8</number> - </property> - <item> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QLabel" name="famsubbuddy"> - <property name="text"> - <string>S&elect or Enter a Family:</string> - </property> - <property name="buddy"> - <cstring>familysubcombo</cstring> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="familysubcombo"> - <property name="editable"> - <bool>true</bool> - </property> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <property name="duplicatesEnabled"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="Line" name="Line1"> - <property name="frameShape"> - <enum>QFrame::HLine</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="TextLabel5"> - <property name="text"> - <string>Current Substitutions:</string> - </property> - </widget> - </item> - <item> - <widget class="Q3ListBox" name="sublistbox"/> - </item> - <item> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QPushButton" name="PushButton2"> - <property name="text"> - <string>Up</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="PushButton3"> - <property name="text"> - <string>Down</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="PushButton4"> - <property name="text"> - <string>Remove</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="Line" name="Line2"> - <property name="frameShape"> - <enum>QFrame::HLine</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QLabel" name="choosebuddy"> - <property name="text"> - <string>Select s&ubstitute Family:</string> - </property> - <property name="buddy"> - <cstring>choosesubcombo</cstring> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="choosesubcombo"> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <property name="duplicatesEnabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="PushButton1"> - <property name="text"> - <string>Add</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab"> - <attribute name="title"> - <string>Interface</string> - </attribute> - <layout class="QVBoxLayout"> - <item> - <widget class="QGroupBox" name="GroupBox4"> - <property name="title"> - <string>Feel Settings</string> - </property> - <layout class="QGridLayout"> - <property name="margin"> - <number>8</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="1"> - <widget class="QSpinBox" name="dcispin"> - <property name="suffix"> - <string> ms</string> - </property> - <property name="minimum"> - <number>10</number> - </property> - <property name="maximum"> - <number>10000</number> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="dcibuddy"> - <property name="text"> - <string>&Double Click Interval:</string> - </property> - <property name="buddy"> - <cstring>dcispin</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QSpinBox" name="cfispin"> - <property name="specialValueText"> - <string>No blinking</string> - </property> - <property name="suffix"> - <string> ms</string> - </property> - <property name="minimum"> - <number>9</number> - </property> - <property name="maximum"> - <number>10000</number> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="cfibuddy"> - <property name="text"> - <string>&Cursor Flash Time:</string> - </property> - <property name="buddy"> - <cstring>cfispin</cstring> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QSpinBox" name="wslspin"> - <property name="suffix"> - <string> lines</string> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>20</number> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="wslbuddy"> - <property name="text"> - <string>Wheel &Scroll Lines:</string> - </property> - <property name="buddy"> - <cstring>wslspin</cstring> - </property> - </widget> - </item> - <item row="3" column="0" colspan="2"> - <widget class="QCheckBox" name="resolvelinks"> - <property name="text"> - <string>Resolve symlinks in URLs</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="GroupBox3"> - <property name="title"> - <string>GUI Effects</string> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>8</number> - </property> - <item> - <widget class="QCheckBox" name="effectcheckbox"> - <property name="text"> - <string>&Enable</string> - </property> - <property name="shortcut"> - <string>Alt+E</string> - </property> - </widget> - </item> - <item> - <widget class="Q3Frame" name="effectbase"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <layout class="QGridLayout"> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="meffectbuddy"> - <property name="text"> - <string>&Menu Effect:</string> - </property> - <property name="buddy"> - <cstring>menueffect</cstring> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="ceffectbuddy"> - <property name="text"> - <string>C&omboBox Effect:</string> - </property> - <property name="buddy"> - <cstring>comboeffect</cstring> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="teffectbuddy"> - <property name="text"> - <string>&ToolTip Effect:</string> - </property> - <property name="buddy"> - <cstring>tooltipeffect</cstring> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="beffectbuddy"> - <property name="text"> - <string>Tool&Box Effect:</string> - </property> - <property name="buddy"> - <cstring>toolboxeffect</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="menueffect"> - <property name="currentIndex"> - <number>0</number> - </property> - <property name="autoCompletion"> - <bool>true</bool> - </property> - <item> - <property name="text"> - <string>Disable</string> - </property> - </item> - <item> - <property name="text"> - <string>Animate</string> - </property> - </item> - <item> - <property name="text"> - <string>Fade</string> - </property> - </item> - </widget> - </item> - <item row="1" column="1"> - <widget class="QComboBox" name="comboeffect"> - <item> - <property name="text"> - <string>Disable</string> - </property> - </item> - <item> - <property name="text"> - <string>Animate</string> - </property> - </item> - </widget> - </item> - <item row="2" column="1"> - <widget class="QComboBox" name="tooltipeffect"> - <item> - <property name="text"> - <string>Disable</string> - </property> - </item> - <item> - <property name="text"> - <string>Animate</string> - </property> - </item> - <item> - <property name="text"> - <string>Fade</string> - </property> - </item> - </widget> - </item> - <item row="3" column="1"> - <widget class="QComboBox" name="toolboxeffect"> - <item> - <property name="text"> - <string>Disable</string> - </property> - </item> - <item> - <property name="text"> - <string>Animate</string> - </property> - </item> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="GroupBox5"> - <property name="title"> - <string>Global Strut</string> - </property> - <layout class="QGridLayout"> - <property name="margin"> - <number>8</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="swbuddy"> - <property name="text"> - <string>Minimum &Width:</string> - </property> - <property name="buddy"> - <cstring>strutwidth</cstring> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="shbuddy"> - <property name="text"> - <string>Minimum Hei&ght:</string> - </property> - <property name="buddy"> - <cstring>strutheight</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QSpinBox" name="strutwidth"> - <property name="suffix"> - <string> pixels</string> - </property> - <property name="maximum"> - <number>1000</number> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QSpinBox" name="strutheight"> - <property name="suffix"> - <string> pixels</string> - </property> - <property name="maximum"> - <number>1000</number> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QCheckBox" name="rtlExtensions"> - <property name="text"> - <string>Enhanced support for languages written right-to-left</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="inputStyleLabel"> - <property name="text"> - <string>XIM Input Style:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="inputStyle"> - <property name="currentIndex"> - <number>0</number> - </property> - <item> - <property name="text"> - <string>On The Spot</string> - </property> - </item> - <item> - <property name="text"> - <string>Over The Spot</string> - </property> - </item> - <item> - <property name="text"> - <string>Off The Spot</string> - </property> - </item> - <item> - <property name="text"> - <string>Root</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QLabel" name="inputMethodLabel"> - <property name="text"> - <string>Default Input Method:</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="inputMethod"> - <property name="currentIndex"> - <number>-1</number> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab3"> - <attribute name="title"> - <string>Printer</string> - </attribute> - <layout class="QVBoxLayout"> - <item> - <widget class="QCheckBox" name="fontembeddingcheckbox"> - <property name="text"> - <string>Enable Font embedding</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="GroupBox10"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Font Paths</string> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>4</number> - </property> - <property name="margin"> - <number>8</number> - </property> - <item> - <layout class="QGridLayout"> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="1" column="0"> - <widget class="QPushButton" name="PushButton11"> - <property name="text"> - <string>Up</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QPushButton" name="PushButton13"> - <property name="text"> - <string>Remove</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QPushButton" name="PushButton12"> - <property name="text"> - <string>Down</string> - </property> - </widget> - </item> - <item row="0" column="0" colspan="3"> - <widget class="Q3ListBox" name="fontpathlistbox"/> - </item> - </layout> - </item> - <item> - <layout class="QGridLayout"> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>4</number> - </property> - <item row="2" column="0"> - <spacer> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Minimum</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item row="2" column="2"> - <widget class="QPushButton" name="PushButton15"> - <property name="text"> - <string>Add</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QPushButton" name="PushButton14"> - <property name="text"> - <string>Browse...</string> - </property> - </widget> - </item> - <item row="0" column="0" colspan="3"> - <widget class="QLabel" name="TextLabel15_2"> - <property name="text"> - <string>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</string> - </property> - </widget> - </item> - <item row="1" column="0" colspan="3"> - <widget class="QLineEdit" name="fontpathlineedit"/> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab4"> - <attribute name="title"> - <string>Phonon</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox_4"> - <property name="title"> - <string>About Phonon</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Current Version:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="phononVersionLabel"> - <property name="text"> - <string>Not available</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Website:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="gstversionLabel_3"> - <property name="text"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></string> - </property> - <property name="openExternalLinks"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_3"> - <property name="title"> - <string>About GStreamer</string> - </property> - <layout class="QGridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Current Version:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="gstversionLabel"> - <property name="text"> - <string>Not available</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Website:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLabel" name="gstversionLabel_2"> - <property name="text"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></string> - </property> - <property name="openExternalLinks"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>GStreamer backend settings</string> - </property> - <layout class="QGridLayout" name="gridLayout_3"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Preferred audio sink:</string> - </property> - <property name="buddy"> - <cstring>audiosinkCombo</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="audiosinkCombo"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Preferred render method:</string> - </property> - <property name="buddy"> - <cstring>videomodeCombo</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QComboBox" name="videomodeCombo"/> - </item> - <item row="2" column="0" colspan="2"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html></string> - </property> - <property name="textFormat"> - <enum>Qt::RichText</enum> - </property> - <property name="scaledContents"> - <bool>false</bool> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - <property name="margin"> - <number>2</number> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QLabel" name="phononLabel"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <widget class="QMenuBar" name="menubar"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>815</width> - <height>26</height> - </rect> - </property> - <widget class="QMenu" name="PopupMenu"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>123</width> - <height>92</height> - </rect> - </property> - <property name="title"> - <string>&File</string> - </property> - <action name=""/> - <action name=""/> - <action name=""/> - <addaction name="fileSaveAction"/> - <addaction name="separator"/> - <addaction name="fileExitAction"/> - </widget> - <widget class="QMenu" name="PopupMenu_2"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>123</width> - <height>90</height> - </rect> - </property> - <property name="title"> - <string>&Help</string> - </property> - <addaction name="helpAboutAction"/> - <addaction name="helpAboutQtAction"/> - </widget> - <action name=""/> - <action name=""/> - <action name=""/> - <addaction name="PopupMenu"/> - <addaction name="separator"/> - <addaction name="PopupMenu_2"/> - </widget> - <action name="fileSaveAction"> - <property name="text"> - <string>&Save</string> - </property> - <property name="iconText"> - <string>Save</string> - </property> - <property name="shortcut"> - <string>Ctrl+S</string> - </property> - </action> - <action name="fileExitAction"> - <property name="text"> - <string>E&xit</string> - </property> - <property name="iconText"> - <string>Exit</string> - </property> - <property name="shortcut"> - <string/> - </property> - </action> - <action name="helpAboutAction"> - <property name="text"> - <string>&About</string> - </property> - <property name="iconText"> - <string>About</string> - </property> - <property name="shortcut"> - <string/> - </property> - </action> - <action name="helpAboutQtAction"> - <property name="text"> - <string>About &Qt</string> - </property> - <property name="iconText"> - <string>About Qt</string> - </property> - </action> - </widget> - <customwidgets> - <customwidget> - <class>Q3Frame</class> - <extends>QFrame</extends> - <header>Qt3Support/Q3Frame</header> - <container>1</container> - </customwidget> - <customwidget> - <class>Q3MainWindow</class> - <extends>QWidget</extends> - <header>q3mainwindow.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>Q3ListBox</class> - <extends>Q3Frame</extends> - <header>q3listbox.h</header> - </customwidget> - <customwidget> - <class>ColorButton</class> - <extends></extends> - <header>colorbutton.h</header> - </customwidget> - <customwidget> - <class>PreviewFrame</class> - <extends></extends> - <header>previewframe.h</header> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>helpview</tabstop> - <tabstop>familycombo</tabstop> - <tabstop>stylecombo</tabstop> - <tabstop>psizecombo</tabstop> - <tabstop>samplelineedit</tabstop> - <tabstop>familysubcombo</tabstop> - <tabstop>PushButton2</tabstop> - <tabstop>PushButton3</tabstop> - <tabstop>PushButton4</tabstop> - <tabstop>choosesubcombo</tabstop> - <tabstop>PushButton1</tabstop> - <tabstop>dcispin</tabstop> - <tabstop>cfispin</tabstop> - <tabstop>wslspin</tabstop> - <tabstop>effectcheckbox</tabstop> - <tabstop>menueffect</tabstop> - <tabstop>comboeffect</tabstop> - <tabstop>tooltipeffect</tabstop> - <tabstop>strutwidth</tabstop> - <tabstop>strutheight</tabstop> - <tabstop>sublistbox</tabstop> - </tabstops> - <resources/> - <connections/> -</ui> diff --git a/tools/qtconfig/paletteeditoradvanced.cpp b/tools/qtconfig/paletteeditoradvanced.cpp index 5f28413..4797ead 100644 --- a/tools/qtconfig/paletteeditoradvanced.cpp +++ b/tools/qtconfig/paletteeditoradvanced.cpp @@ -38,58 +38,74 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ - +#include "ui_paletteeditoradvanced.h" #include "paletteeditoradvanced.h" #include "colorbutton.h" -#include <QCheckBox> -#include <QComboBox> -#include <QApplication> -#include <QPushButton> -#include <QPainter> -#include <QGroupBox> - QT_BEGIN_NAMESPACE -PaletteEditorAdvanced::PaletteEditorAdvanced( QWidget * parent, - const char * name, bool modal, Qt::WindowFlags f ) - : PaletteEditorAdvancedBase( parent, name, modal, f ), selectedPalette(0) +PaletteEditorAdvanced::PaletteEditorAdvanced(QWidget *parent) + : QDialog(parent), ui(new Ui::PaletteEditorAdvanced), selectedPalette(0) { - // work around buggy UI file - comboEffect->setEnabled(false); + ui->setupUi(this); + + // create a ColorButton's + buttonCentral = new ColorButton(ui->groupCentral); + buttonCentral->setToolTip(tr("Choose a color")); + buttonCentral->setWhatsThis(tr("Choose a color for the selected central color role.")); + ui->layoutCentral->addWidget(buttonCentral); + ui->labelCentral->setBuddy(buttonCentral); + + buttonEffect = new ColorButton(ui->groupEffect); + buttonEffect->setToolTip(tr("Choose a color")); + buttonEffect->setWhatsThis(tr("Choose a color for the selected effect color role.")); buttonEffect->setEnabled(false); + ui->layoutEffect->addWidget(buttonEffect); + ui->labelEffect->setBuddy(buttonEffect); + + // signals and slots connections + connect(ui->paletteCombo, SIGNAL(activated(int)), SLOT(paletteSelected(int))); + connect(ui->comboCentral, SIGNAL(activated(int)), SLOT(onCentral(int))); + connect(buttonCentral, SIGNAL(clicked()), SLOT(onChooseCentralColor())); + connect(buttonEffect, SIGNAL(clicked()), SLOT(onChooseEffectColor())); + connect(ui->comboEffect, SIGNAL(activated(int)), SLOT(onEffect(int))); + connect(ui->checkBuildEffect, SIGNAL(toggled(bool)), SLOT(onToggleBuildEffects(bool))); + connect(ui->checkBuildEffect, SIGNAL(toggled(bool)), buttonEffect, SLOT(setDisabled(bool))); + connect(ui->checkBuildInactive, SIGNAL(toggled(bool)), SLOT(onToggleBuildInactive(bool))); + connect(ui->checkBuildDisabled, SIGNAL(toggled(bool)), SLOT(onToggleBuildDisabled(bool))); + onToggleBuildEffects(true); editPalette = QApplication::palette(); - setPreviewPalette( editPalette ); } PaletteEditorAdvanced::~PaletteEditorAdvanced() { + delete ui; } -void PaletteEditorAdvanced::onToggleBuildInactive( bool v ) +void PaletteEditorAdvanced::onToggleBuildInactive(bool v) { if (selectedPalette == 1) { - groupCentral->setDisabled(v); - groupEffect->setDisabled(v); + ui->groupCentral->setDisabled(v); + ui->groupEffect->setDisabled(v); } if (v) { - buildInactive(); + build(QPalette::Inactive); updateColorButtons(); } } -void PaletteEditorAdvanced::onToggleBuildDisabled( bool v ) +void PaletteEditorAdvanced::onToggleBuildDisabled(bool v) { if (selectedPalette == 2) { - groupCentral->setDisabled(v); - groupEffect->setDisabled(v); + ui->groupCentral->setDisabled(v); + ui->groupEffect->setDisabled(v); } if (v) { - buildDisabled(); + build(QPalette::Disabled); updateColorButtons(); } } @@ -99,402 +115,204 @@ void PaletteEditorAdvanced::paletteSelected(int p) selectedPalette = p; if(p == 1) { // inactive - groupCentral->setDisabled(checkBuildInactive->isChecked()); - groupEffect->setDisabled(checkBuildInactive->isChecked()); - } - else if (p == 2) { // disabled - groupCentral->setDisabled(checkBuildDisabled->isChecked()); - groupEffect->setDisabled(checkBuildDisabled->isChecked()); - } - else { - groupCentral->setEnabled(true); - groupEffect->setEnabled(true); + ui->groupCentral->setDisabled(ui->checkBuildInactive->isChecked()); + ui->groupEffect->setDisabled(ui->checkBuildInactive->isChecked()); + } else if (p == 2) { // disabled + ui->groupCentral->setDisabled(ui->checkBuildDisabled->isChecked()); + ui->groupEffect->setDisabled(ui->checkBuildDisabled->isChecked()); + } else { + ui->groupCentral->setEnabled(true); + ui->groupEffect->setEnabled(true); } updateColorButtons(); } void PaletteEditorAdvanced::onChooseCentralColor() { - switch(selectedPalette) { - case 0: - default: - mapToActiveCentralRole( buttonCentral->color() ); - break; - case 1: - mapToInactiveCentralRole( buttonCentral->color() ); - break; - case 2: - mapToDisabledCentralRole( buttonCentral->color() ); - break; + QPalette::ColorGroup group = groupFromIndex(selectedPalette); + editPalette.setColor(group, centralFromIndex(ui->comboCentral->currentIndex()), + buttonCentral->color()); + + buildEffect(group); + if (group == QPalette::Active) { + if(ui->checkBuildInactive->isChecked()) + build(QPalette::Inactive); + if(ui->checkBuildDisabled->isChecked()) + build(QPalette::Disabled); } + updateColorButtons(); } void PaletteEditorAdvanced::onChooseEffectColor() { - switch(selectedPalette) { - case 0: - default: - mapToActiveEffectRole( buttonEffect->color() ); - break; - case 1: - mapToInactiveEffectRole( buttonEffect->color() ); - break; - case 2: - mapToDisabledEffectRole( buttonEffect->color() ); - break; + QPalette::ColorGroup group = groupFromIndex(selectedPalette); + editPalette.setColor(group, effectFromIndex(ui->comboEffect->currentIndex()), + buttonEffect->color()); + + if (group == QPalette::Active) { + if(ui->checkBuildInactive->isChecked()) + build(QPalette::Inactive); + if(ui->checkBuildDisabled->isChecked()) + build(QPalette::Disabled); } - updateColorButtons(); -} -void PaletteEditorAdvanced::onToggleBuildEffects( bool on ) -{ - if (!on) return; - buildActiveEffect(); - buildInactiveEffect(); - buildDisabledEffect(); + updateColorButtons(); } -QColorGroup::ColorRole PaletteEditorAdvanced::centralFromItem( int item ) +void PaletteEditorAdvanced::onToggleBuildEffects(bool on) { - switch( item ) { - case 0: - return QColorGroup::Window; - case 1: - return QColorGroup::WindowText; - case 2: - return QColorGroup::Button; - case 3: - return QColorGroup::Base; - case 4: - return QColorGroup::Text; - case 5: - return QColorGroup::BrightText; - case 6: - return QColorGroup::ButtonText; - case 7: - return QColorGroup::Highlight; - case 8: - return QColorGroup::HighlightedText; - default: - return QColorGroup::NColorRoles; + if (on) { + for (int i = 0; i < QPalette::NColorGroups; i++) + buildEffect(QPalette::ColorGroup(i)); } } -QColorGroup::ColorRole PaletteEditorAdvanced::effectFromItem( int item ) - +QPalette::ColorGroup PaletteEditorAdvanced::groupFromIndex(int item) { - switch( item ) { + switch (item) { case 0: - return QColorGroup::Light; + default: + return QPalette::Active; case 1: - return QColorGroup::Midlight; + return QPalette::Inactive; case 2: - return QColorGroup::Mid; - case 3: - return QColorGroup::Dark; - case 4: - return QColorGroup::Shadow; - default: - return QColorGroup::NColorRoles; + return QPalette::Disabled; } } -void PaletteEditorAdvanced::onCentral( int item ) +QPalette::ColorRole PaletteEditorAdvanced::centralFromIndex(int item) { - QColor c; - - switch(selectedPalette) { + switch (item) { case 0: - default: - c = editPalette.active().color( centralFromItem(item) ); - break; + return QPalette::Window; case 1: - c = editPalette.inactive().color( centralFromItem(item) ); - break; + return QPalette::WindowText; case 2: - c = editPalette.disabled().color( centralFromItem(item) ); - break; + return QPalette::Base; + case 3: + return QPalette::AlternateBase; + case 4: + return QPalette::ToolTipBase; + case 5: + return QPalette::ToolTipText; + case 6: + return QPalette::Text; + case 7: + return QPalette::Button; + case 8: + return QPalette::ButtonText; + case 9: + return QPalette::BrightText; + case 10: + return QPalette::Highlight; + case 11: + return QPalette::HighlightedText; + case 12: + return QPalette::Link; + case 13: + return QPalette::LinkVisited; + default: + return QPalette::NoRole; } - - buttonCentral->setColor(c); } -void PaletteEditorAdvanced::onEffect( int item ) +QPalette::ColorRole PaletteEditorAdvanced::effectFromIndex(int item) { - QColor c; - switch(selectedPalette) { + switch (item) { case 0: - default: - c = editPalette.active().color( effectFromItem(item) ); - break; + return QPalette::Light; case 1: - editPalette.inactive().color( effectFromItem(item) ); - break; + return QPalette::Midlight; case 2: - editPalette.disabled().color( effectFromItem(item) ); - break; + return QPalette::Mid; + case 3: + return QPalette::Dark; + case 4: + return QPalette::Shadow; + default: + return QPalette::NoRole; } - buttonEffect->setColor(c); -} - -void PaletteEditorAdvanced::mapToActiveCentralRole( const QColor& c ) -{ - QColorGroup cg = editPalette.active(); - cg.setColor( centralFromItem(comboCentral->currentItem()), c ); - editPalette.setActive( cg ); - - buildActiveEffect(); - if(checkBuildInactive->isChecked()) - buildInactive(); - if(checkBuildDisabled->isChecked()) - buildDisabled(); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToActiveEffectRole( const QColor& c ) -{ - QColorGroup cg = editPalette.active(); - cg.setColor( effectFromItem(comboEffect->currentItem()), c ); - editPalette.setActive( cg ); - - if(checkBuildInactive->isChecked()) - buildInactive(); - if(checkBuildDisabled->isChecked()) - buildDisabled(); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToActivePixmapRole( const QPixmap& pm ) -{ - QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem()); - QColorGroup cg = editPalette.active(); - if ( !pm.isNull() ) - cg.setBrush( role, QBrush( cg.color( role ), pm ) ); - else - cg.setBrush( role, QBrush( cg.color( role ) ) ); - editPalette.setActive( cg ); - - - buildActiveEffect(); - if(checkBuildInactive->isChecked()) - buildInactive(); - if(checkBuildDisabled->isChecked()) - buildDisabled(); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToInactiveCentralRole( const QColor& c ) -{ - QColorGroup cg = editPalette.inactive(); - cg.setColor( centralFromItem(comboCentral->currentItem()), c ); - editPalette.setInactive( cg ); - - buildInactiveEffect(); - - setPreviewPalette( editPalette ); } -void PaletteEditorAdvanced::mapToInactiveEffectRole( const QColor& c ) +void PaletteEditorAdvanced::onCentral(int item) { - QColorGroup cg = editPalette.inactive(); - cg.setColor( effectFromItem(comboEffect->currentItem()), c ); - editPalette.setInactive( cg ); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToInactivePixmapRole( const QPixmap& pm ) -{ - QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem()); - QColorGroup cg = editPalette.inactive(); - if ( !pm.isNull() ) - cg.setBrush( role, QBrush( cg.color( role ), pm ) ); - else - cg.setBrush( role, QBrush( cg.color( role ) ) ); - editPalette.setInactive( cg ); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToDisabledCentralRole( const QColor& c ) -{ - QColorGroup cg = editPalette.disabled(); - cg.setColor( centralFromItem(comboCentral->currentItem()), c ); - editPalette.setDisabled( cg ); - - buildDisabledEffect(); - - setPreviewPalette( editPalette ); -} - -void PaletteEditorAdvanced::mapToDisabledEffectRole( const QColor& c ) -{ - QColorGroup cg = editPalette.disabled(); - cg.setColor( effectFromItem(comboEffect->currentItem()), c ); - editPalette.setDisabled( cg ); - - setPreviewPalette( editPalette ); + QColor c = editPalette.color(groupFromIndex(selectedPalette), centralFromIndex(item)); + buttonCentral->setColor(c); } -void PaletteEditorAdvanced::mapToDisabledPixmapRole( const QPixmap& pm ) +void PaletteEditorAdvanced::onEffect(int item) { - QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem()); - QColorGroup cg = editPalette.disabled(); - if ( !pm.isNull() ) - cg.setBrush( role, QBrush( cg.color( role ), pm ) ); - else - cg.setBrush( role, QBrush( cg.color( role ) ) ); - - editPalette.setDisabled( cg ); - - setPreviewPalette( editPalette ); + QColor c = editPalette.color(groupFromIndex(selectedPalette), effectFromIndex(item)); + buttonEffect->setColor(c); } -void PaletteEditorAdvanced::buildActiveEffect() +QPalette PaletteEditorAdvanced::buildEffect(QPalette::ColorGroup colorGroup, + const QPalette &basePalette) { - QColorGroup cg = editPalette.active(); - QColor btn = cg.color( QColorGroup::Button ); - - QPalette temp( btn, btn ); - - for (int i = 0; i<5; i++) - cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) ); + QPalette result(basePalette); - editPalette.setActive( cg ); - setPreviewPalette( editPalette ); + if (colorGroup == QPalette::Active) { + QPalette calculatedPalette(basePalette.color(colorGroup, QPalette::Button), + basePalette.color(colorGroup, QPalette::Window)); - updateColorButtons(); -} + for (int i = 0; i < 5; i++) { + QPalette::ColorRole effectRole = effectFromIndex(i); + result.setColor(colorGroup, effectRole, + calculatedPalette.color(colorGroup, effectRole)); + } + } else { + QColor btn = basePalette.color(colorGroup, QPalette::Button); -void PaletteEditorAdvanced::buildInactive() -{ - editPalette.setInactive( editPalette.active() ); - if ( checkBuildEffect->isChecked() ) - buildInactiveEffect(); - else { - setPreviewPalette( editPalette ); - updateColorButtons(); + result.setColor(colorGroup, QPalette::Light, btn.lighter()); + result.setColor(colorGroup, QPalette::Midlight, btn.lighter(115)); + result.setColor(colorGroup, QPalette::Mid, btn.darker(150)); + result.setColor(colorGroup, QPalette::Dark, btn.darker()); + result.setColor(colorGroup, QPalette::Shadow, Qt::black); } + return result; } -void PaletteEditorAdvanced::buildInactiveEffect() +void PaletteEditorAdvanced::buildEffect(QPalette::ColorGroup colorGroup) { - QColorGroup cg = editPalette.inactive(); - - QColor light, midlight, mid, dark, shadow; - QColor btn = cg.color( QColorGroup::Button ); - - light = btn.light(150); - midlight = btn.light(115); - mid = btn.dark(150); - dark = btn.dark(); - shadow = Qt::black; - - cg.setColor( QColorGroup::Light, light ); - cg.setColor( QColorGroup::Midlight, midlight ); - cg.setColor( QColorGroup::Mid, mid ); - cg.setColor( QColorGroup::Dark, dark ); - cg.setColor( QColorGroup::Shadow, shadow ); - - editPalette.setInactive( cg ); - setPreviewPalette( editPalette ); + editPalette = buildEffect(colorGroup, editPalette); updateColorButtons(); } -void PaletteEditorAdvanced::buildDisabled() +void PaletteEditorAdvanced::build(QPalette::ColorGroup colorGroup) { - QColorGroup cg = editPalette.active(); - cg.setColor( QColorGroup::ButtonText, Qt::darkGray ); - cg.setColor( QColorGroup::WindowText, Qt::darkGray ); - cg.setColor( QColorGroup::Text, Qt::darkGray ); - cg.setColor( QColorGroup::HighlightedText, Qt::darkGray ); - editPalette.setDisabled( cg ); - - if ( checkBuildEffect->isChecked() ) - buildDisabledEffect(); - else { - setPreviewPalette( editPalette ); - updateColorButtons(); - } -} - -void PaletteEditorAdvanced::buildDisabledEffect() -{ - QColorGroup cg = editPalette.disabled(); - - QColor light, midlight, mid, dark, shadow; - QColor btn = cg.color( QColorGroup::Button ); - - light = btn.light(150); - midlight = btn.light(115); - mid = btn.dark(150); - dark = btn.dark(); - shadow = Qt::black; + if (colorGroup != QPalette::Active) { + for (int i = 0; i < QPalette::NColorRoles; i++) + editPalette.setColor(colorGroup, QPalette::ColorRole(i), + editPalette.color(QPalette::Active, QPalette::ColorRole(i))); - cg.setColor( QColorGroup::Light, light ); - cg.setColor( QColorGroup::Midlight, midlight ); - cg.setColor( QColorGroup::Mid, mid ); - cg.setColor( QColorGroup::Dark, dark ); - cg.setColor( QColorGroup::Shadow, shadow ); + if (colorGroup == QPalette::Disabled) { + editPalette.setColor(colorGroup, QPalette::ButtonText, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::WindowText, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::Text, Qt::darkGray); + editPalette.setColor(colorGroup, QPalette::HighlightedText, Qt::darkGray); + } - editPalette.setDisabled( cg ); - setPreviewPalette( editPalette ); - updateColorButtons(); -} - -void PaletteEditorAdvanced::setPreviewPalette( const QPalette& pal ) -{ - QColorGroup cg; - - switch (selectedPalette) { - case 0: - default: - cg = pal.active(); - break; - case 1: - cg = pal.inactive(); - break; - case 2: - cg = pal.disabled(); - break; + if (ui->checkBuildEffect->isChecked()) + buildEffect(colorGroup); + else + updateColorButtons(); } - previewPalette.setActive( cg ); - previewPalette.setInactive( cg ); - previewPalette.setDisabled( cg ); } void PaletteEditorAdvanced::updateColorButtons() { - QColor central, effect; - switch (selectedPalette) { - case 0: - default: - central = editPalette.active().color( centralFromItem( comboCentral->currentItem() ) ); - effect = editPalette.active().color( effectFromItem( comboEffect->currentItem() ) ); - break; - case 1: - central = editPalette.inactive().color( centralFromItem( comboCentral->currentItem() ) ); - effect = editPalette.inactive().color( effectFromItem( comboEffect->currentItem() ) ); - break; - case 2: - central = editPalette.disabled().color( centralFromItem( comboCentral->currentItem() ) ); - effect = editPalette.disabled().color( effectFromItem( comboEffect->currentItem() ) ); - break; - } - - buttonCentral->setColor(central); - buttonEffect->setColor(effect); + QPalette::ColorGroup colorGroup = groupFromIndex(selectedPalette); + buttonCentral->setColor(editPalette.color(colorGroup, + centralFromIndex(ui->comboCentral->currentIndex()))); + buttonEffect->setColor(editPalette.color(colorGroup, + effectFromIndex(ui->comboEffect->currentIndex()))); } -void PaletteEditorAdvanced::setPal( const QPalette& pal ) +void PaletteEditorAdvanced::setPal(const QPalette &pal) { editPalette = pal; - setPreviewPalette( pal ); updateColorButtons(); } @@ -503,51 +321,51 @@ QPalette PaletteEditorAdvanced::pal() const return editPalette; } -void PaletteEditorAdvanced::setupBackgroundMode( Qt::BackgroundMode mode ) +void PaletteEditorAdvanced::setupBackgroundRole(QPalette::ColorRole role) { int initRole = 0; - switch( mode ) { - case Qt::PaletteBackground: + switch (role) { + case QPalette::Window: initRole = 0; break; - case Qt::PaletteForeground: + case QPalette::WindowText: initRole = 1; break; - case Qt::PaletteButton: + case QPalette::Base: initRole = 2; break; - case Qt::PaletteBase: + case QPalette::AlternateBase: initRole = 3; break; - case Qt::PaletteText: + case QPalette::ToolTipBase: initRole = 4; break; - case Qt::PaletteBrightText: + case QPalette::ToolTipText: initRole = 5; break; - case Qt::PaletteButtonText: + case QPalette::Text: initRole = 6; break; - case Qt::PaletteHighlight: + case QPalette::Button: initRole = 7; break; - case Qt::PaletteHighlightedText: + case QPalette::ButtonText: initRole = 8; break; - case Qt::PaletteLight: + case QPalette::BrightText: initRole = 9; break; - case Qt::PaletteMidlight: + case QPalette::Highlight: initRole = 10; break; - case Qt::PaletteDark: + case QPalette::HighlightedText: initRole = 11; break; - case Qt::PaletteMid: + case QPalette::Link: initRole = 12; break; - case Qt::PaletteShadow: + case QPalette::LinkVisited: initRole = 13; break; default: @@ -555,36 +373,27 @@ void PaletteEditorAdvanced::setupBackgroundMode( Qt::BackgroundMode mode ) break; } - if ( initRole <= -1 ) return; - - if (initRole > 8 ) { - comboEffect->setCurrentItem( initRole - 9 ); - } - else { - comboCentral->setCurrentItem( initRole ); - } + if (initRole != -1) + ui->comboCentral->setCurrentIndex(initRole); } -QPalette PaletteEditorAdvanced::getPalette( bool *ok, const QPalette &init, - Qt::BackgroundMode mode, QWidget* parent, - const char* name ) +QPalette PaletteEditorAdvanced::getPalette(bool *ok, const QPalette &init, + QPalette::ColorRole backgroundRole, QWidget *parent) { - PaletteEditorAdvanced* dlg = new PaletteEditorAdvanced( parent, name, true ); - dlg->setupBackgroundMode( mode ); + PaletteEditorAdvanced *dlg = new PaletteEditorAdvanced(parent); + dlg->setupBackgroundRole(backgroundRole); - if ( init != QPalette() ) - dlg->setPal( init ); + if (init != QPalette()) + dlg->setPal(init); int resultCode = dlg->exec(); QPalette result = init; - if ( resultCode == QDialog::Accepted ) { - if ( ok ) - *ok = true; + if (resultCode == QDialog::Accepted) result = dlg->pal(); - } else { - if ( ok ) - *ok = false; - } + + if (ok) + *ok = resultCode; + delete dlg; return result; } diff --git a/tools/qtconfig/paletteeditoradvanced.h b/tools/qtconfig/paletteeditoradvanced.h index 83bcebb..4f61676 100644 --- a/tools/qtconfig/paletteeditoradvanced.h +++ b/tools/qtconfig/paletteeditoradvanced.h @@ -42,69 +42,65 @@ #ifndef PALETTEEDITORADVANCED_H #define PALETTEEDITORADVANCED_H -#include "paletteeditoradvancedbase.h" +#include <QtGui/QDialog> QT_BEGIN_NAMESPACE -class PaletteEditorAdvanced : public PaletteEditorAdvancedBase +namespace Ui { + class PaletteEditorAdvanced; +} + +class ColorButton; + +class PaletteEditorAdvanced : public QDialog { Q_OBJECT public: - PaletteEditorAdvanced( QWidget * parent=0, const char * name=0, - bool modal=false, Qt::WindowFlags f=0 ); + PaletteEditorAdvanced(QWidget *parent = 0); ~PaletteEditorAdvanced(); - static QPalette getPalette( bool *ok, const QPalette &pal, Qt::BackgroundMode mode = Qt::PaletteBackground, - QWidget* parent = 0, const char* name = 0 ); + static QPalette getPalette(bool *ok, const QPalette &pal, + QPalette::ColorRole backgroundRole = QPalette::Window, + QWidget *parent = 0); + + static QPalette buildEffect(QPalette::ColorGroup colorGroup, const QPalette &basePalette); protected slots: void paletteSelected(int); - void onCentral( int ); - void onEffect( int ); + void onCentral(int); + void onEffect(int); void onChooseCentralColor(); void onChooseEffectColor(); - void onToggleBuildEffects( bool ); - void onToggleBuildInactive( bool ); - void onToggleBuildDisabled( bool ); + void onToggleBuildEffects(bool); + void onToggleBuildInactive(bool); + void onToggleBuildDisabled(bool); protected: - void mapToActiveCentralRole( const QColor& ); - void mapToActiveEffectRole( const QColor& ); - void mapToActivePixmapRole( const QPixmap& ); - void mapToInactiveCentralRole( const QColor& ); - void mapToInactiveEffectRole( const QColor& ); - void mapToInactivePixmapRole( const QPixmap& ); - void mapToDisabledCentralRole( const QColor& ); - void mapToDisabledEffectRole( const QColor& ); - void mapToDisabledPixmapRole( const QPixmap& ); - - - void buildPalette(); - void buildActiveEffect(); - void buildInactive(); - void buildInactiveEffect(); - void buildDisabled(); - void buildDisabledEffect(); + void buildEffect(QPalette::ColorGroup); + void build(QPalette::ColorGroup); private: - void setPreviewPalette( const QPalette& ); void updateColorButtons(); - void setupBackgroundMode( Qt::BackgroundMode ); + void setupBackgroundRole(QPalette::ColorRole); QPalette pal() const; - void setPal( const QPalette& ); + void setPal(const QPalette &); - QColorGroup::ColorRole centralFromItem( int ); - QColorGroup::ColorRole effectFromItem( int ); + static QPalette::ColorGroup groupFromIndex(int); + static QPalette::ColorRole centralFromIndex(int); + static QPalette::ColorRole effectFromIndex(int); QPalette editPalette; - QPalette previewPalette; + + Ui::PaletteEditorAdvanced *ui; int selectedPalette; + ColorButton *buttonCentral; + ColorButton *buttonEffect; }; QT_END_NAMESPACE -#endif +#endif // PALETTEEDITORADVANCED_H diff --git a/tools/qtconfig/paletteeditoradvanced.ui b/tools/qtconfig/paletteeditoradvanced.ui new file mode 100644 index 0000000..b1d6b95 --- /dev/null +++ b/tools/qtconfig/paletteeditoradvanced.ui @@ -0,0 +1,416 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <comment>********************************************************************* +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +*********************************************************************</comment> + <class>PaletteEditorAdvanced</class> + <widget class="QDialog" name="PaletteEditorAdvanced"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>239</width> + <height>344</height> + </rect> + </property> + <property name="windowTitle"> + <string>Tune Palette</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="paletteComboLabel"> + <property name="text"> + <string>Select &Palette:</string> + </property> + <property name="buddy"> + <cstring>paletteCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="paletteCombo"> + <item> + <property name="text"> + <string>Active Palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Inactive Palette</string> + </property> + </item> + <item> + <property name="text"> + <string>Disabled Palette</string> + </property> + </item> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QGroupBox" name="autoGroupBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Auto</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="checkBuildInactive"> + <property name="text"> + <string>Build inactive palette from active</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="checkBuildDisabled"> + <property name="text"> + <string>Build disabled palette from active</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupCentral"> + <property name="title"> + <string>Central color &roles</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QComboBox" name="comboCentral"> + <property name="toolTip"> + <string>Choose central color role</string> + </property> + <property name="whatsThis"> + <string><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></string> + </property> + <item> + <property name="text"> + <string>Window</string> + </property> + </item> + <item> + <property name="text"> + <string>WindowText</string> + </property> + </item> + <item> + <property name="text"> + <string>Base</string> + </property> + </item> + <item> + <property name="text"> + <string>AlternateBase</string> + </property> + </item> + <item> + <property name="text"> + <string>ToolTipBase</string> + </property> + </item> + <item> + <property name="text"> + <string>ToolTipText</string> + </property> + </item> + <item> + <property name="text"> + <string>Text</string> + </property> + </item> + <item> + <property name="text"> + <string>Button</string> + </property> + </item> + <item> + <property name="text"> + <string>ButtonText</string> + </property> + </item> + <item> + <property name="text"> + <string>BrightText</string> + </property> + </item> + <item> + <property name="text"> + <string>Highlight</string> + </property> + </item> + <item> + <property name="text"> + <string>HighlightedText</string> + </property> + </item> + <item> + <property name="text"> + <string>Link</string> + </property> + </item> + <item> + <property name="text"> + <string>LinkVisited</string> + </property> + </item> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="layoutCentral"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="labelCentral"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>&Select Color:</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupEffect"> + <property name="title"> + <string>3-D shadow &effects</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QCheckBox" name="checkBuildEffect"> + <property name="toolTip"> + <string>Generate shadings</string> + </property> + <property name="whatsThis"> + <string>Check to let 3D-effect colors be calculated from button-color.</string> + </property> + <property name="text"> + <string>Build &from button color</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="comboEffect"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Choose 3D-effect color role</string> + </property> + <property name="whatsThis"> + <string><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></string> + </property> + <item> + <property name="text"> + <string>Light</string> + </property> + </item> + <item> + <property name="text"> + <string>Midlight</string> + </property> + </item> + <item> + <property name="text"> + <string>Mid</string> + </property> + </item> + <item> + <property name="text"> + <string>Dark</string> + </property> + </item> + <item> + <property name="text"> + <string>Shadow</string> + </property> + </item> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="layoutEffect"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="labelEffect"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Select Co&lor:</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>PaletteEditorAdvanced</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>238</x> + <y>384</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>PaletteEditorAdvanced</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>306</x> + <y>390</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>checkBuildEffect</sender> + <signal>toggled(bool)</signal> + <receiver>comboEffect</receiver> + <slot>setDisabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>82</x> + <y>262</y> + </hint> + <hint type="destinationlabel"> + <x>190</x> + <y>262</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/tools/qtconfig/paletteeditoradvancedbase.cpp b/tools/qtconfig/paletteeditoradvancedbase.cpp deleted file mode 100644 index 55a03b7..0000000 --- a/tools/qtconfig/paletteeditoradvancedbase.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "paletteeditoradvancedbase.h" -#include "colorbutton.h" - -#include <QVariant> - -QT_BEGIN_NAMESPACE - -/* - * Constructs a PaletteEditorAdvancedBase as a child of 'parent', with the - * name 'name' and widget flags set to 'f'. - * - * The dialog will by default be modeless, unless you set 'modal' to - * true to construct a modal dialog. - */ -PaletteEditorAdvancedBase::PaletteEditorAdvancedBase(QWidget* parent, const char* name, bool modal, Qt::WindowFlags fl) - : QDialog(parent, name, modal, fl) -{ - setupUi(this); - - - // signals and slots connections - connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); - connect(paletteCombo, SIGNAL(activated(int)), this, SLOT(paletteSelected(int))); - connect(comboCentral, SIGNAL(activated(int)), this, SLOT(onCentral(int))); - connect(buttonCentral, SIGNAL(clicked()), this, SLOT(onChooseCentralColor())); - connect(buttonEffect, SIGNAL(clicked()), this, SLOT(onChooseEffectColor())); - connect(comboEffect, SIGNAL(activated(int)), this, SLOT(onEffect(int))); - connect(checkBuildEffect, SIGNAL(toggled(bool)), this, SLOT(onToggleBuildEffects(bool))); - connect(checkBuildEffect, SIGNAL(toggled(bool)), comboEffect, SLOT(setDisabled(bool))); - connect(checkBuildEffect, SIGNAL(toggled(bool)), buttonEffect, SLOT(setDisabled(bool))); - connect(checkBuildInactive, SIGNAL(toggled(bool)), this, SLOT(onToggleBuildInactive(bool))); - connect(checkBuildDisabled, SIGNAL(toggled(bool)), this, SLOT(onToggleBuildDisabled(bool))); - init(); -} - -/* - * Destroys the object and frees any allocated resources - */ -PaletteEditorAdvancedBase::~PaletteEditorAdvancedBase() -{ - destroy(); - // no need to delete child widgets, Qt does it all for us -} - -/* - * Sets the strings of the subwidgets using the current - * language. - */ -void PaletteEditorAdvancedBase::languageChange() -{ - retranslateUi(this); -} - -void PaletteEditorAdvancedBase::init() -{ -} - -void PaletteEditorAdvancedBase::destroy() -{ -} - -void PaletteEditorAdvancedBase::onCentral(int) -{ - qWarning("PaletteEditorAdvancedBase::onCentral(int): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onChooseCentralColor() -{ - qWarning("PaletteEditorAdvancedBase::onChooseCentralColor(): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onChooseEffectColor() -{ - qWarning("PaletteEditorAdvancedBase::onChooseEffectColor(): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onEffect(int) -{ - qWarning("PaletteEditorAdvancedBase::onEffect(int): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onToggleBuildDisabled(bool) -{ - qWarning("PaletteEditorAdvancedBase::onToggleBuildDisabled(bool): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onToggleBuildEffects(bool) -{ - qWarning("PaletteEditorAdvancedBase::onToggleBuildEffects(bool): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::onToggleBuildInactive(bool) -{ - qWarning("PaletteEditorAdvancedBase::onToggleBuildInactive(bool): Not implemented yet"); -} - -void PaletteEditorAdvancedBase::paletteSelected(int) -{ - qWarning("PaletteEditorAdvancedBase::paletteSelected(int): Not implemented yet"); -} - -QT_END_NAMESPACE diff --git a/tools/qtconfig/paletteeditoradvancedbase.h b/tools/qtconfig/paletteeditoradvancedbase.h deleted file mode 100644 index c097382..0000000 --- a/tools/qtconfig/paletteeditoradvancedbase.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef PALETTEEDITORADVANCEDBASE_H -#define PALETTEEDITORADVANCEDBASE_H - -#include "ui_paletteeditoradvancedbase.h" -#include <QVariant> - -QT_BEGIN_NAMESPACE - -class ColorButton; - -class PaletteEditorAdvancedBase : public QDialog, public Ui::PaletteEditorAdvancedBase -{ - Q_OBJECT - -public: - PaletteEditorAdvancedBase(QWidget* parent = 0, const char* name = 0, bool modal = false, Qt::WindowFlags fl = 0); - ~PaletteEditorAdvancedBase(); - -protected slots: - virtual void languageChange(); - - virtual void init(); - virtual void destroy(); - virtual void onCentral(int); - virtual void onChooseCentralColor(); - virtual void onChooseEffectColor(); - virtual void onEffect(int); - virtual void onToggleBuildDisabled(bool); - virtual void onToggleBuildEffects(bool); - virtual void onToggleBuildInactive(bool); - virtual void paletteSelected(int); - -}; - -QT_END_NAMESPACE - -#endif // PALETTEEDITORADVANCEDBASE_H diff --git a/tools/qtconfig/paletteeditoradvancedbase.ui b/tools/qtconfig/paletteeditoradvancedbase.ui deleted file mode 100644 index 8965960..0000000 --- a/tools/qtconfig/paletteeditoradvancedbase.ui +++ /dev/null @@ -1,617 +0,0 @@ -<ui version="4.0" stdsetdef="1" > - <author></author> - <comment>********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -*********************************************************************</comment> - <exportmacro></exportmacro> - <class>PaletteEditorAdvancedBase</class> - <widget class="QDialog" name="PaletteEditorAdvancedBase" > - <property name="objectName" > - <string notr="true" >PaletteEditorAdvancedBase</string> - </property> - <property name="enabled" > - <bool>true</bool> - </property> - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>295</width> - <height>346</height> - </rect> - </property> - <property name="windowTitle" > - <string>Tune Palette</string> - </property> - <property name="sizeGripEnabled" > - <bool>true</bool> - </property> - <property name="whatsThis" stdset="0" > - <string><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLabel" name="TextLabel1" > - <property name="objectName" > - <string notr="true" >TextLabel1</string> - </property> - <property name="text" > - <string>Select &Palette:</string> - </property> - <property name="buddy" stdset="0" > - <cstring>paletteCombo</cstring> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="paletteCombo" > - <property name="objectName" > - <string notr="true" >paletteCombo</string> - </property> - <item> - <property name="text" > - <string>Active Palette</string> - </property> - </item> - <item> - <property name="text" > - <string>Inactive Palette</string> - </property> - </item> - <item> - <property name="text" > - <string>Disabled Palette</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - <item> - <widget class="Q3ButtonGroup" name="ButtonGroup1" > - <property name="objectName" > - <string notr="true" >ButtonGroup1</string> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>4</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title" > - <string>Auto</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QCheckBox" name="checkBuildInactive" > - <property name="objectName" > - <string notr="true" >checkBuildInactive</string> - </property> - <property name="text" > - <string>Build inactive palette from active</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="checkBuildDisabled" > - <property name="objectName" > - <string notr="true" >checkBuildDisabled</string> - </property> - <property name="text" > - <string>Build disabled palette from active</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="Q3GroupBox" name="groupCentral" > - <property name="objectName" > - <string notr="true" >groupCentral</string> - </property> - <property name="title" > - <string>Central color &roles</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QComboBox" name="comboCentral" > - <property name="objectName" > - <string notr="true" >comboCentral</string> - </property> - <property name="toolTip" stdset="0" > - <string>Choose central color role</string> - </property> - <property name="whatsThis" stdset="0" > - <string><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></string> - </property> - <item> - <property name="text" > - <string>Window</string> - </property> - </item> - <item> - <property name="text" > - <string>WindowText</string> - </property> - </item> - <item> - <property name="text" > - <string>Button</string> - </property> - </item> - <item> - <property name="text" > - <string>Base</string> - </property> - </item> - <item> - <property name="text" > - <string>Text</string> - </property> - </item> - <item> - <property name="text" > - <string>BrightText</string> - </property> - </item> - <item> - <property name="text" > - <string>ButtonText</string> - </property> - </item> - <item> - <property name="text" > - <string>Highlight</string> - </property> - </item> - <item> - <property name="text" > - <string>HighlightedText</string> - </property> - </item> - </widget> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <spacer name="Horizontal_Spacing1" > - <property name="sizeHint" > - <size> - <width>20</width> - <height>20</height> - </size> - </property> - <property name="sizeType" > - <enum>Expanding</enum> - </property> - <property name="orientation" > - <enum>Horizontal</enum> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="labelCentral" > - <property name="objectName" > - <string notr="true" >labelCentral</string> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>1</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string>&Select Color:</string> - </property> - <property name="buddy" stdset="0" > - <cstring>buttonCentral</cstring> - </property> - </widget> - </item> - <item> - <widget class="ColorButton" name="buttonCentral" > - <property name="objectName" > - <string notr="true" >buttonCentral</string> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy" > - <enum>Qt::TabFocus</enum> - </property> - <property name="toolTip" stdset="0" > - <string>Choose a color</string> - </property> - <property name="whatsThis" stdset="0" > - <string>Choose a color for the selected central color role.</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <widget class="Q3GroupBox" name="groupEffect" > - <property name="objectName" > - <string notr="true" >groupEffect</string> - </property> - <property name="title" > - <string>3-D shadow &effects</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QCheckBox" name="checkBuildEffect" > - <property name="objectName" > - <string notr="true" >checkBuildEffect</string> - </property> - <property name="text" > - <string>Build &from button color</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - <property name="toolTip" stdset="0" > - <string>Generate shadings</string> - </property> - <property name="whatsThis" stdset="0" > - <string>Check to let 3D-effect colors be calculated from button-color.</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="comboEffect" > - <property name="objectName" > - <string notr="true" >comboEffect</string> - </property> - <property name="toolTip" stdset="0" > - <string>Choose 3D-effect color role</string> - </property> - <property name="whatsThis" stdset="0" > - <string><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></string> - </property> - <item> - <property name="text" > - <string>Light</string> - </property> - </item> - <item> - <property name="text" > - <string>Midlight</string> - </property> - </item> - <item> - <property name="text" > - <string>Mid</string> - </property> - </item> - <item> - <property name="text" > - <string>Dark</string> - </property> - </item> - <item> - <property name="text" > - <string>Shadow</string> - </property> - </item> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <spacer name="Horizontal_Spacing3" > - <property name="sizeHint" > - <size> - <width>20</width> - <height>20</height> - </size> - </property> - <property name="sizeType" > - <enum>Expanding</enum> - </property> - <property name="orientation" > - <enum>Horizontal</enum> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="labelEffect" > - <property name="objectName" > - <string notr="true" >labelEffect</string> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>1</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize" > - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text" > - <string>Select Co&lor:</string> - </property> - <property name="buddy" stdset="0" > - <cstring>buttonEffect</cstring> - </property> - </widget> - </item> - <item> - <widget class="ColorButton" name="buttonEffect" > - <property name="objectName" > - <string notr="true" >buttonEffect</string> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>0</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy" > - <enum>Qt::TabFocus</enum> - </property> - <property name="toolTip" stdset="0" > - <string>Choose a color</string> - </property> - <property name="whatsThis" stdset="0" > - <string>Choose a color for the selected effect color role.</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <spacer name="Horizontal_Spacing2" > - <property name="sizeHint" > - <size> - <width>20</width> - <height>20</height> - </size> - </property> - <property name="sizeType" > - <enum>Expanding</enum> - </property> - <property name="orientation" > - <enum>Horizontal</enum> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="buttonOk" > - <property name="objectName" > - <string notr="true" >buttonOk</string> - </property> - <property name="text" > - <string>OK</string> - </property> - <property name="autoDefault" > - <bool>true</bool> - </property> - <property name="default" > - <bool>true</bool> - </property> - <property name="whatsThis" stdset="0" > - <string>Close dialog and apply all changes.</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonCancel" > - <property name="objectName" > - <string notr="true" >buttonCancel</string> - </property> - <property name="text" > - <string>Cancel</string> - </property> - <property name="autoDefault" > - <bool>true</bool> - </property> - <property name="whatsThis" stdset="0" > - <string>Close dialog and discard all changes.</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <pixmapfunction></pixmapfunction> - <customwidgets> - <customwidget> - <class>ColorButton</class> - <extends></extends> - <header location="local" >colorbutton.h</header> - <sizehint> - <width>40</width> - <height>25</height> - </sizehint> - <container>0</container> - <sizepolicy> - <hordata>5</hordata> - <verdata>5</verdata> - </sizepolicy> - <pixmap>image0</pixmap> - <properties> - <property type="Color" >color</property> - <property type="Pixmap" >pixmap</property> - </properties> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>buttonOk</tabstop> - <tabstop>buttonCancel</tabstop> - <tabstop>paletteCombo</tabstop> - <tabstop>checkBuildInactive</tabstop> - <tabstop>checkBuildDisabled</tabstop> - <tabstop>comboCentral</tabstop> - <tabstop>buttonCentral</tabstop> - <tabstop>checkBuildEffect</tabstop> - <tabstop>comboEffect</tabstop> - <tabstop>buttonEffect</tabstop> - </tabstops> - <images> - <image name="image0" > - <data format="XPM.GZ" length="646" >789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> - </image> - </images> -</ui> diff --git a/tools/qtconfig/previewframe.cpp b/tools/qtconfig/previewframe.cpp index 2d7b113..c6df899 100644 --- a/tools/qtconfig/previewframe.cpp +++ b/tools/qtconfig/previewframe.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "previewframe.h" +#include "previewwidget.h" #include <QBoxLayout> #include <QPainter> @@ -47,8 +48,8 @@ QT_BEGIN_NAMESPACE -PreviewFrame::PreviewFrame( QWidget *parent, const char *name ) - : QFrame( parent, name ) +PreviewFrame::PreviewFrame(QWidget *parent) + : QFrame(parent) { setMinimumSize(200, 200); setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); @@ -82,23 +83,22 @@ void PreviewFrame::setPreviewVisible(bool visible) workspace->viewport()->update(); } -Workspace::Workspace(PreviewFrame* parent, const char* name) +Workspace::Workspace(PreviewFrame *parent) : QMdiArea(parent) { previewFrame = parent; PreviewWidget *previewWidget = previewFrame->widget(); - setObjectName(QLatin1String(name)); QMdiSubWindow *frame = addSubWindow(previewWidget, Qt::Window); - frame->move(10,10); + frame->move(10, 10); frame->show(); } -void Workspace::paintEvent( QPaintEvent* ) +void Workspace::paintEvent(QPaintEvent *) { - QPainter p (viewport()); + QPainter p(viewport()); p.fillRect(rect(), palette().color(backgroundRole()).dark()); - p.setPen( QPen( Qt::white ) ); - p.drawText ( 0, height() / 2, width(), height(), Qt::AlignHCenter, previewFrame->previewText()); + p.setPen(QPen(Qt::white)); + p.drawText(0, height() / 2, width(), height(), Qt::AlignHCenter, previewFrame->previewText()); } QT_END_NAMESPACE diff --git a/tools/qtconfig/previewframe.h b/tools/qtconfig/previewframe.h index cd7bd0b..5cb0d59 100644 --- a/tools/qtconfig/previewframe.h +++ b/tools/qtconfig/previewframe.h @@ -42,8 +42,6 @@ #ifndef PREVIEWFRAME_H #define PREVIEWFRAME_H -#include "previewwidget.h" - #include <QMdiArea> QT_BEGIN_NAMESPACE @@ -54,28 +52,29 @@ class Workspace : public QMdiArea Q_OBJECT public: - Workspace( PreviewFrame* parent = 0, const char* name = 0 ); + Workspace(PreviewFrame *parent = 0); ~Workspace() {} protected: - void paintEvent( QPaintEvent* ); + void paintEvent(QPaintEvent *); private: PreviewFrame *previewFrame; }; +class PreviewWidget; class PreviewFrame : public QFrame { Q_OBJECT public: - PreviewFrame( QWidget *parent = 0, const char *name = 0 ); + PreviewFrame(QWidget *parent = 0); void setPreviewPalette(QPalette); void setPreviewVisible(bool val); QString previewText() const; PreviewWidget *widget() const { return previewWidget; } private: - Workspace *workspace; - PreviewWidget *previewWidget; + Workspace *workspace; + PreviewWidget *previewWidget; QString m_previewWindowText; }; diff --git a/tools/qtconfig/previewwidget.cpp b/tools/qtconfig/previewwidget.cpp index 71cef23..66ebb92 100644 --- a/tools/qtconfig/previewwidget.cpp +++ b/tools/qtconfig/previewwidget.cpp @@ -40,32 +40,32 @@ ****************************************************************************/ #include "previewwidget.h" +#include "ui_previewwidget.h" #include <QtEvents> QT_BEGIN_NAMESPACE -PreviewWidget::PreviewWidget( QWidget *parent, const char *name ) - : PreviewWidgetBase( parent, name ) +PreviewWidget::PreviewWidget(QWidget *parent) + : QWidget(parent), ui(new Ui::PreviewWidget) { + ui->setupUi(this); + // install event filter on child widgets - QObjectList l = queryList("QWidget"); - for (int i = 0; i < l.size(); ++i) { - QObject * obj = l.at(i); - obj->installEventFilter(this); - ((QWidget*)obj)->setFocusPolicy(Qt::NoFocus); + QList<QWidget *> l = findChildren<QWidget *>(); + foreach(QWidget *w, l) { + w->installEventFilter(this); + w->setFocusPolicy(Qt::NoFocus); } } - -void PreviewWidget::closeEvent(QCloseEvent *e) +PreviewWidget::~PreviewWidget() { - e->ignore(); + delete ui; } - bool PreviewWidget::eventFilter(QObject *, QEvent *e) { - switch ( e->type() ) { + switch (e->type()) { case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: @@ -81,4 +81,9 @@ bool PreviewWidget::eventFilter(QObject *, QEvent *e) return false; } +void PreviewWidget::closeEvent(QCloseEvent *e) +{ + e->ignore(); +} + QT_END_NAMESPACE diff --git a/tools/qtconfig/previewwidget.h b/tools/qtconfig/previewwidget.h index a6ec5b3..d39fd75 100644 --- a/tools/qtconfig/previewwidget.h +++ b/tools/qtconfig/previewwidget.h @@ -42,21 +42,29 @@ #ifndef PREVIEWWIDGET_H #define PREVIEWWIDGET_H -#include "previewwidgetbase.h" +#include <QtGui/QWidget> QT_BEGIN_NAMESPACE -class PreviewWidget : public PreviewWidgetBase +namespace Ui { + class PreviewWidget; +} + + +class PreviewWidget : public QWidget { Q_OBJECT public: - PreviewWidget( QWidget *parent = 0, const char *name = 0 ); + PreviewWidget(QWidget *parent = 0); + ~PreviewWidget(); - void closeEvent(QCloseEvent *); bool eventFilter(QObject *, QEvent *); +private: + void closeEvent(QCloseEvent *); + Ui::PreviewWidget *ui; }; QT_END_NAMESPACE -#endif +#endif // PREVIEWWIDGET_H diff --git a/tools/qtconfig/previewwidget.ui b/tools/qtconfig/previewwidget.ui new file mode 100644 index 0000000..2e0789f --- /dev/null +++ b/tools/qtconfig/previewwidget.ui @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <comment>********************************************************************* +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +*********************************************************************</comment> + <class>PreviewWidget</class> + <widget class="QWidget" name="PreviewWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>398</width> + <height>282</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Preview Window</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QGroupBox" name="GroupBox1"> + <property name="title"> + <string>GroupBox</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>11</number> + </property> + <item> + <widget class="QRadioButton" name="RadioButton1"> + <property name="text"> + <string>RadioButton1</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="RadioButton2"> + <property name="text"> + <string>RadioButton2</string> + </property> + </widget> + </item> + <item> + <widget class="QRadioButton" name="RadioButton3"> + <property name="text"> + <string>RadioButton3</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="GroupBox2"> + <property name="title"> + <string>GroupBox2</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>11</number> + </property> + <item> + <widget class="QCheckBox" name="CheckBox1"> + <property name="text"> + <string>CheckBox1</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="CheckBox2"> + <property name="text"> + <string>CheckBox2</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QProgressBar" name="ProgressBar1"> + <property name="value"> + <number>50</number> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QLineEdit" name="LineEdit1"> + <property name="text"> + <string>LineEdit</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="ComboBox1"> + <item> + <property name="text"> + <string>ComboBox</string> + </property> + </item> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>6</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QSpinBox" name="SpinBox1"/> + </item> + <item> + <widget class="QPushButton" name="PushButton1"> + <property name="text"> + <string>PushButton</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QScrollBar" name="ScrollBar1"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="Slider1"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QTextEdit" name="textView"> + <property name="maximumSize"> + <size> + <width>32767</width> + <height>55</height> + </size> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="html"> + <string><p><a href="http://qt.nokia.com">http://qt.nokia.com</a></p> +<p><a href="http://www.kde.org">http://www.kde.org</a></p></string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <spacer name="Spacer2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/tools/qtconfig/previewwidgetbase.cpp b/tools/qtconfig/previewwidgetbase.cpp deleted file mode 100644 index c156c32..0000000 --- a/tools/qtconfig/previewwidgetbase.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "previewwidgetbase.h" - -#include <QVariant> - -QT_BEGIN_NAMESPACE - -/* - * Constructs a PreviewWidgetBase as a child of 'parent', with the - * name 'name' and widget flags set to 'f'. - */ -PreviewWidgetBase::PreviewWidgetBase(QWidget* parent, const char* name, Qt::WindowFlags fl) - : QWidget(parent, name, fl) -{ - setupUi(this); - - - // signals and slots connections - init(); -} - -/* - * Destroys the object and frees any allocated resources - */ -PreviewWidgetBase::~PreviewWidgetBase() -{ - destroy(); - // no need to delete child widgets, Qt does it all for us -} - -/* - * Sets the strings of the subwidgets using the current - * language. - */ -void PreviewWidgetBase::languageChange() -{ - retranslateUi(this); -} - -void PreviewWidgetBase::init() -{ -} - -void PreviewWidgetBase::destroy() -{ -} - -QT_END_NAMESPACE diff --git a/tools/qtconfig/previewwidgetbase.h b/tools/qtconfig/previewwidgetbase.h deleted file mode 100644 index 624e612..0000000 --- a/tools/qtconfig/previewwidgetbase.h +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef PREVIEWWIDGETBASE_H -#define PREVIEWWIDGETBASE_H - -#include "ui_previewwidgetbase.h" -#include <QVariant> - -QT_BEGIN_NAMESPACE - -class PreviewWidgetBase : public QWidget, public Ui::PreviewWidgetBase -{ - Q_OBJECT - -public: - PreviewWidgetBase(QWidget* parent = 0, const char* name = 0, Qt::WindowFlags fl = 0); - ~PreviewWidgetBase(); - -protected slots: - virtual void languageChange(); - - virtual void init(); - virtual void destroy(); - -}; - -QT_END_NAMESPACE - -#endif // PREVIEWWIDGETBASE_H diff --git a/tools/qtconfig/previewwidgetbase.ui b/tools/qtconfig/previewwidgetbase.ui deleted file mode 100644 index bd8a5f3..0000000 --- a/tools/qtconfig/previewwidgetbase.ui +++ /dev/null @@ -1,340 +0,0 @@ -<ui version="4.0" stdsetdef="1" > - <author></author> - <comment>********************************************************************* -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -*********************************************************************</comment> - <exportmacro></exportmacro> - <class>PreviewWidgetBase</class> - <widget class="QWidget" name="PreviewWidgetBase" > - <property name="objectName" > - <string notr="true" >PreviewWidgetBase</string> - </property> - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>378</width> - <height>236</height> - </rect> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>1</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="windowTitle" > - <string>Preview Window</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="Q3ButtonGroup" name="ButtonGroup1" > - <property name="objectName" > - <string notr="true" >ButtonGroup1</string> - </property> - <property name="title" > - <string>ButtonGroup</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QRadioButton" name="RadioButton1" > - <property name="objectName" > - <string notr="true" >RadioButton1</string> - </property> - <property name="text" > - <string>RadioButton1</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="RadioButton2" > - <property name="objectName" > - <string notr="true" >RadioButton2</string> - </property> - <property name="text" > - <string>RadioButton2</string> - </property> - </widget> - </item> - <item> - <widget class="QRadioButton" name="RadioButton3" > - <property name="objectName" > - <string notr="true" >RadioButton3</string> - </property> - <property name="text" > - <string>RadioButton3</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="Q3ButtonGroup" name="ButtonGroup2" > - <property name="objectName" > - <string notr="true" >ButtonGroup2</string> - </property> - <property name="title" > - <string>ButtonGroup2</string> - </property> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QCheckBox" name="CheckBox1" > - <property name="objectName" > - <string notr="true" >CheckBox1</string> - </property> - <property name="text" > - <string>CheckBox1</string> - </property> - <property name="checked" > - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="CheckBox2" > - <property name="objectName" > - <string notr="true" >CheckBox2</string> - </property> - <property name="text" > - <string>CheckBox2</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QProgressBar" name="ProgressBar1" > - <property name="objectName" > - <string notr="true" >ProgressBar1</string> - </property> - <property name="value" > - <number>50</number> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLineEdit" name="LineEdit1" > - <property name="objectName" > - <string notr="true" >LineEdit1</string> - </property> - <property name="text" > - <string>LineEdit</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="ComboBox1" > - <property name="objectName" > - <string notr="true" >ComboBox1</string> - </property> - <item> - <property name="text" > - <string>ComboBox</string> - </property> - </item> - </widget> - </item> - <item> - <layout class="QHBoxLayout" > - <property name="objectName" > - <string notr="true" >unnamed</string> - </property> - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QSpinBox" name="SpinBox1" > - <property name="objectName" > - <string notr="true" >SpinBox1</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="PushButton1" > - <property name="objectName" > - <string notr="true" >PushButton1</string> - </property> - <property name="text" > - <string>PushButton</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QScrollBar" name="ScrollBar1" > - <property name="objectName" > - <string notr="true" >ScrollBar1</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QSlider" name="Slider1" > - <property name="objectName" > - <string notr="true" >Slider1</string> - </property> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QTextEdit" name="textView" > - <property name="objectName" > - <string notr="true" >textView</string> - </property> - <property name="maximumSize" > - <size> - <width>32767</width> - <height>50</height> - </size> - </property> - <property name="readOnly" > - <bool>true</bool> - </property> - <property name="text" > - <string><p> -<a href="http://qt.nokia.com">http://qt.nokia.com</a> -</p> -<p> -<a href="http://www.kde.org">http://www.kde.org</a> -</p></string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <spacer name="Spacer2" > - <property name="sizeHint" > - <size> - <width>20</width> - <height>20</height> - </size> - </property> - <property name="sizeType" > - <enum>Expanding</enum> - </property> - <property name="orientation" > - <enum>Vertical</enum> - </property> - </spacer> - </item> - </layout> - </widget> - <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> -</ui> diff --git a/tools/qtconfig/qtconfig.pro b/tools/qtconfig/qtconfig.pro index d1fd320..cb06e5a 100644 --- a/tools/qtconfig/qtconfig.pro +++ b/tools/qtconfig/qtconfig.pro @@ -1,11 +1,10 @@ TEMPLATE = app -CONFIG += qt warn_on x11 +CONFIG += qt warn_on x11 build_all:!build_pass { CONFIG -= build_all CONFIG += release } LANGUAGE = C++ -QT += qt3support contains(QT_CONFIG, gstreamer):LIBS += $$QT_LIBS_GSTREAMER -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstbase-0.10 contains(QT_CONFIG, gstreamer):QMAKE_CXXFLAGS += $$QT_CFLAGS_GSTREAMER @@ -13,19 +12,17 @@ contains(QT_CONFIG, phonon) { QT += phonon DEFINES += HAVE_PHONON } -SOURCES += colorbutton.cpp main.cpp previewframe.cpp previewwidget.cpp mainwindow.cpp paletteeditoradvanced.cpp \ - mainwindowbase.cpp paletteeditoradvancedbase.cpp previewwidgetbase.cpp -HEADERS += colorbutton.h previewframe.h previewwidget.h mainwindow.h paletteeditoradvanced.h \ - mainwindowbase.h paletteeditoradvancedbase.h previewwidgetbase.h +SOURCES += colorbutton.cpp main.cpp previewframe.cpp previewwidget.cpp mainwindow.cpp paletteeditoradvanced.cpp +HEADERS += colorbutton.h previewframe.h previewwidget.h mainwindow.h paletteeditoradvanced.h -FORMS = mainwindowbase.ui paletteeditoradvancedbase.ui previewwidgetbase.ui +FORMS = mainwindow.ui paletteeditoradvanced.ui previewwidget.ui RESOURCES = qtconfig.qrc PROJECTNAME = Qt Configuration -TARGET = qtconfig -DESTDIR = ../../bin +TARGET = qtconfig +DESTDIR = ../../bin target.path=$$[QT_INSTALL_BINS] INSTALLS += target -INCLUDEPATH += . -DBFILE = qtconfig.db +INCLUDEPATH += . +DBFILE = qtconfig.db diff --git a/tools/tools.pro b/tools/tools.pro index e82bcaa..04596ee 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -20,7 +20,7 @@ TEMPLATE = subdirs SUBDIRS += designer } } - unix:!mac:!embedded:!qpa:contains(QT_CONFIG, qt3support):SUBDIRS += qtconfig + unix:!mac:!embedded:!qpa:SUBDIRS += qtconfig win32:!wince*:SUBDIRS += activeqt } contains(QT_CONFIG, declarative):SUBDIRS += qml -- cgit v0.12 From 654b0866a4a189d428416a8daae80844ad4e280e Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 28 Feb 2011 19:02:27 +0100 Subject: Fix errors and warnings in qtconfig. That occured with the removal of the qt3support dependency. The setIcon call was added after the merge request was created. --- tools/qtconfig/colorbutton.cpp | 2 +- tools/qtconfig/mainwindow.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/qtconfig/colorbutton.cpp b/tools/qtconfig/colorbutton.cpp index 0b0fefc..33c1b25 100644 --- a/tools/qtconfig/colorbutton.cpp +++ b/tools/qtconfig/colorbutton.cpp @@ -53,8 +53,8 @@ QT_BEGIN_NAMESPACE ColorButton::ColorButton(QWidget *parent) : QAbstractButton(parent) - , mousepressed(false) , col(Qt::black) + , mousepressed(false) { setAcceptDrops(true); connect(this, SIGNAL(clicked()), SLOT(changeColor())); diff --git a/tools/qtconfig/mainwindow.cpp b/tools/qtconfig/mainwindow.cpp index 7bff03d..629574f 100644 --- a/tools/qtconfig/mainwindow.cpp +++ b/tools/qtconfig/mainwindow.cpp @@ -233,7 +233,7 @@ MainWindow::MainWindow() modified = true; desktopThemeName = tr("Desktop Settings (Default)"); - setIcon(QPixmap(":/trolltech/qtconfig/images/appicon.png")); + setWindowIcon(QPixmap(":/trolltech/qtconfig/images/appicon.png")); QStringList gstyles = QStyleFactory::keys(); gstyles.sort(); ui->guiStyleCombo->addItem(desktopThemeName); -- cgit v0.12 From 83aff7323172497e68ac59e79eacda3fe28ed9e7 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 28 Feb 2011 20:10:58 +0100 Subject: qtconfig: don't connect to qt3support signals --- tools/qtconfig/mainwindow.cpp | 13 +++++++------ tools/qtconfig/mainwindow.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/tools/qtconfig/mainwindow.cpp b/tools/qtconfig/mainwindow.cpp index 629574f..059adb3 100644 --- a/tools/qtconfig/mainwindow.cpp +++ b/tools/qtconfig/mainwindow.cpp @@ -200,11 +200,11 @@ MainWindow::MainWindow() connect(ui->downFontpathButton, SIGNAL(clicked()), SLOT(downFontpath())); connect(ui->downSubstitutionButton, SIGNAL(clicked()), SLOT(downSubstitute())); connect(ui->fontFamilyCombo, SIGNAL(activated(QString)), SLOT(familySelected(QString))); - connect(ui->fileExitAction, SIGNAL(activated()), SLOT(fileExit())); - connect(ui->fileSaveAction, SIGNAL(activated()), SLOT(fileSave())); - connect(ui->helpAboutAction, SIGNAL(activated()), SLOT(helpAbout())); - connect(ui->helpAboutQtAction, SIGNAL(activated()), SLOT(helpAboutQt())); - connect(ui->mainTabWidget, SIGNAL(currentChanged(QWidget*)), SLOT(pageChanged(QWidget*))); + connect(ui->fileExitAction, SIGNAL(triggered()), SLOT(fileExit())); + connect(ui->fileSaveAction, SIGNAL(triggered()), SLOT(fileSave())); + connect(ui->helpAboutAction, SIGNAL(triggered()), SLOT(helpAbout())); + connect(ui->helpAboutQtAction, SIGNAL(triggered()), SLOT(helpAboutQt())); + connect(ui->mainTabWidget, SIGNAL(currentChanged(int)), SLOT(pageChanged(int))); connect(ui->paletteCombo, SIGNAL(activated(int)), SLOT(paletteSelected(int))); connect(ui->removeFontpathButton, SIGNAL(clicked()), SLOT(removeFontpath())); connect(ui->removeSubstitutionButton, SIGNAL(clicked()), SLOT(removeSubstitute())); @@ -912,8 +912,9 @@ void MainWindow::helpAboutQt() QMessageBox::aboutQt(this, tr("Qt Configuration")); } -void MainWindow::pageChanged(QWidget *page) +void MainWindow::pageChanged(int pageNumber) { + QWidget *page = ui->mainTabWidget->widget(pageNumber); if (page == ui->interfaceTab) ui->helpView->setText(tr(interface_text)); else if (page == ui->appearanceTab) diff --git a/tools/qtconfig/mainwindow.h b/tools/qtconfig/mainwindow.h index 0cd2b29..6f4c8a5 100644 --- a/tools/qtconfig/mainwindow.h +++ b/tools/qtconfig/mainwindow.h @@ -82,7 +82,7 @@ public slots: virtual void somethingModified(); virtual void helpAbout(); virtual void helpAboutQt(); - virtual void pageChanged(QWidget *); + virtual void pageChanged(int); private: -- cgit v0.12 From cb042e8dcc836a89919d7c048698154f2c423307 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Mon, 28 Feb 2011 20:17:36 +0100 Subject: Don't compile qtconfig on symbian Reviewed-by: Benjamin Poulain --- tools/tools.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tools.pro b/tools/tools.pro index 04596ee..f090b86 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -20,7 +20,7 @@ TEMPLATE = subdirs SUBDIRS += designer } } - unix:!mac:!embedded:!qpa:SUBDIRS += qtconfig + unix:!symbian:!mac:!embedded:!qpa:SUBDIRS += qtconfig win32:!wince*:SUBDIRS += activeqt } contains(QT_CONFIG, declarative):SUBDIRS += qml -- cgit v0.12 From 2c7cab4172f1acc86fd49345a2847417e162f2c3 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 24 Feb 2011 12:33:11 +1000 Subject: Add LayoutMirroring attached property for mirroring QML layouts Task-number: QTBUG-17280 Reviewed-by: Martin Jones Change-Id: I34a623b49ce0fd5c05ae7a7ea5d0437c107b8a9b --- doc/src/snippets/declarative/layoutmirroring.qml | 64 ++++++++ .../layoutdirection/layoutdirection.qml | 22 ++- .../graphicsitems/qdeclarativeanchors.cpp | 40 ++--- .../graphicsitems/qdeclarativeanchors_p.h | 10 +- .../graphicsitems/qdeclarativeanchors_p_p.h | 4 +- .../graphicsitems/qdeclarativegridview.cpp | 69 +++++--- .../graphicsitems/qdeclarativegridview_p.h | 7 +- src/declarative/graphicsitems/qdeclarativeitem.cpp | 154 +++++++++++++++++- src/declarative/graphicsitems/qdeclarativeitem_p.h | 53 +++++- .../graphicsitems/qdeclarativeitemsmodule.cpp | 1 + .../graphicsitems/qdeclarativelistview.cpp | 90 ++++++++--- .../graphicsitems/qdeclarativelistview_p.h | 7 +- .../graphicsitems/qdeclarativepositioners.cpp | 114 +++++++++---- .../graphicsitems/qdeclarativepositioners_p.h | 15 +- .../graphicsitems/qdeclarativepositioners_p_p.h | 30 +++- .../tst_qdeclarativeanchors.cpp | 12 +- .../data/gridview-enforcerange.qml | 2 +- .../qdeclarativegridview/data/gridview1.qml | 2 +- .../qdeclarativegridview/data/mirroring.qml | 43 +++++ .../tst_qdeclarativegridview.cpp | 65 ++++++++ .../qdeclarativeitem/data/layoutmirroring.qml | 54 +++++++ .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 180 +++++++++++++++++---- .../qdeclarativelistview/data/rightToLeft.qml | 8 +- .../tst_qdeclarativelistview.cpp | 69 +++++++- .../data/grid-righttoleft.qml | 41 ----- .../qdeclarativepositioners/data/gridtest.qml | 6 +- .../qdeclarativepositioners/data/horizontal.qml | 1 - .../tst_qdeclarativepositioners.cpp | 78 ++++++++- .../qdeclarativestates/tst_qdeclarativestates.cpp | 2 +- 29 files changed, 1027 insertions(+), 216 deletions(-) create mode 100644 doc/src/snippets/declarative/layoutmirroring.qml create mode 100644 tests/auto/declarative/qdeclarativegridview/data/mirroring.qml create mode 100644 tests/auto/declarative/qdeclarativeitem/data/layoutmirroring.qml delete mode 100644 tests/auto/declarative/qdeclarativepositioners/data/grid-righttoleft.qml diff --git a/doc/src/snippets/declarative/layoutmirroring.qml b/doc/src/snippets/declarative/layoutmirroring.qml new file mode 100644 index 0000000..23eecd6 --- /dev/null +++ b/doc/src/snippets/declarative/layoutmirroring.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import QtQuick 1.1 + +Rectangle { + LayoutMirroring.enabled: true + LayoutMirroring.childrenInherit: true + width: 240; height: 50 + Row { + anchors { left: parent.left; margins: 5 } + y: 5; spacing: 5 + Repeater { + model: 5 + Rectangle { + color: "red" + opacity: (5-index) / 5 + width: 40; height: 40 + Text { + text: index+1 + anchors.centerIn: parent + } + } + } + } +} +//![0] diff --git a/examples/declarative/positioners/layoutdirection/layoutdirection.qml b/examples/declarative/positioners/layoutdirection/layoutdirection.qml index 3e23b15..080010e 100644 --- a/examples/declarative/positioners/layoutdirection/layoutdirection.qml +++ b/examples/declarative/positioners/layoutdirection/layoutdirection.qml @@ -41,10 +41,13 @@ import QtQuick 1.1 Rectangle { + property bool mirror + property int direction: Qt.application.layoutDirection + LayoutMirroring.enabled: mirror + LayoutMirroring.childrenInherit: true width: column.width + 100 height: column.height + 100 - property int direction: Qt.application.layoutDirection Column { id: column @@ -133,6 +136,23 @@ Rectangle { anchors.fill: parent } } + Rectangle { + height: 50; width: parent.width + color: mouseArea2.pressed ? "black" : "gray" + Text { + text: mirror ? "Mirrored" : "Normal" + color: "white" + font.pixelSize: 16 + anchors.centerIn: parent + } + MouseArea { + id: mouseArea2 + onClicked: { + mirror = !mirror; + } + anchors.fill: parent + } + } } Component { diff --git a/src/declarative/graphicsitems/qdeclarativeanchors.cpp b/src/declarative/graphicsitems/qdeclarativeanchors.cpp index a2d6261..5ff6d2c 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanchors.cpp @@ -175,13 +175,14 @@ QDeclarativeAnchors::~QDeclarativeAnchors() void QDeclarativeAnchorsPrivate::fillChanged() { + Q_Q(QDeclarativeAnchors); if (!fill || !isItemComplete()) return; if (updatingFill < 2) { ++updatingFill; - qreal horizontalMargin = isMirrored() ? rightMargin : leftMargin; + qreal horizontalMargin = q->mirrored() ? rightMargin : leftMargin; if (fill == item->parentItem()) { //child-parent setItemPos(QPointF(horizontalMargin, topMargin)); @@ -201,13 +202,14 @@ void QDeclarativeAnchorsPrivate::fillChanged() void QDeclarativeAnchorsPrivate::centerInChanged() { + Q_Q(QDeclarativeAnchors); if (!centerIn || fill || !isItemComplete()) return; if (updatingCenterIn < 2) { ++updatingCenterIn; - qreal effectiveHCenterOffset = isMirrored() ? -hCenterOffset : hCenterOffset; + qreal effectiveHCenterOffset = q->mirrored() ? -hCenterOffset : hCenterOffset; if (centerIn == item->parentItem()) { QPointF p(hcenter(item->parentItem()) - hcenter(item) + effectiveHCenterOffset, vcenter(item->parentItem()) - vcenter(item) + vCenterOffset); @@ -315,6 +317,13 @@ void QDeclarativeAnchors::componentComplete() d->componentComplete = true; } +bool QDeclarativeAnchors::mirrored() +{ + Q_D(QDeclarativeAnchors); + QGraphicsItemPrivate * itemPrivate = QGraphicsItemPrivate::get(d->item); + return itemPrivate->isDeclarativeItem ? static_cast<QDeclarativeItemPrivate *>(itemPrivate)->effectiveLayoutMirror : false; +} + void QDeclarativeAnchorsPrivate::setItemHeight(qreal v) { updatingMe = true; @@ -502,11 +511,6 @@ bool QDeclarativeAnchorsPrivate::calcStretch(const QDeclarativeAnchorLine &edge1 return invalid; } -bool QDeclarativeAnchorsPrivate::isMirrored() const -{ - return layoutDirection == Qt::RightToLeft; -} - void QDeclarativeAnchorsPrivate::updateVerticalAnchors() { if (fill || centerIn || !isItemComplete()) @@ -591,6 +595,7 @@ inline QDeclarativeAnchorLine::AnchorLine reverseAnchorLine(QDeclarativeAnchorLi void QDeclarativeAnchorsPrivate::updateHorizontalAnchors() { + Q_Q(QDeclarativeAnchors); if (fill || centerIn || !isItemComplete()) return; @@ -599,7 +604,7 @@ void QDeclarativeAnchorsPrivate::updateHorizontalAnchors() qreal effectiveRightMargin, effectiveLeftMargin, effectiveHorizontalCenterOffset; QDeclarativeAnchorLine effectiveLeft, effectiveRight, effectiveHorizontalCenter; QDeclarativeAnchors::Anchor effectiveLeftAnchor, effectiveRightAnchor; - if (isMirrored()) { + if (q->mirrored()) { effectiveLeftAnchor = QDeclarativeAnchors::RightAnchor; effectiveRightAnchor = QDeclarativeAnchors::LeftAnchor; effectiveLeft.item = right.item; @@ -1086,25 +1091,6 @@ QDeclarativeAnchors::Anchors QDeclarativeAnchors::usedAnchors() const return d->usedAnchors; } - -Qt::LayoutDirection QDeclarativeAnchors::layoutDirection() const -{ - Q_D(const QDeclarativeAnchors); - return d->layoutDirection; -} - -void QDeclarativeAnchors::setLayoutDirection(Qt::LayoutDirection layoutDirection) -{ - Q_D(QDeclarativeAnchors); - if (d->layoutDirection != layoutDirection) { - d->layoutDirection = layoutDirection; - d->fillChanged(); - d->centerInChanged(); - d->updateHorizontalAnchors(); - emit layoutDirectionChanged(); - } -} - bool QDeclarativeAnchorsPrivate::checkHValid() const { if (usedAnchors & QDeclarativeAnchors::LeftAnchor && diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p.h index 90a3508..388d6b9 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors_p.h +++ b/src/declarative/graphicsitems/qdeclarativeanchors_p.h @@ -79,7 +79,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAnchors : public QObject Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged) Q_PROPERTY(QGraphicsObject *fill READ fill WRITE setFill RESET resetFill NOTIFY fillChanged) Q_PROPERTY(QGraphicsObject *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn NOTIFY centerInChanged) - Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) + Q_PROPERTY(bool mirrored READ mirrored NOTIFY mirroredChanged REVISION 1) public: QDeclarativeAnchors(QObject *parent=0); @@ -161,12 +161,11 @@ public: Anchors usedAnchors() const; - Qt::LayoutDirection layoutDirection() const; - void setLayoutDirection (Qt::LayoutDirection); - void classBegin(); void componentComplete(); + bool mirrored(); + Q_SIGNALS: void leftChanged(); void rightChanged(); @@ -185,10 +184,11 @@ Q_SIGNALS: void verticalCenterOffsetChanged(); void horizontalCenterOffsetChanged(); void baselineOffsetChanged(); - Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void mirroredChanged(); private: friend class QDeclarativeItem; + friend class QDeclarativeItemPrivate; friend class QDeclarativeGraphicsWidget; Q_DISABLE_COPY(QDeclarativeAnchors) Q_DECLARE_PRIVATE(QDeclarativeAnchors) diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h index ec96582..d8d2f15 100644 --- a/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeanchors_p_p.h @@ -94,7 +94,7 @@ public: : componentComplete(true), updatingMe(false), updatingHorizontalAnchor(0), updatingVerticalAnchor(0), updatingFill(0), updatingCenterIn(0), item(i), usedAnchors(0), fill(0), centerIn(0), leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0), - margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0), layoutDirection(Qt::LeftToRight) + margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0) { } @@ -161,8 +161,6 @@ public: qreal vCenterOffset; qreal hCenterOffset; qreal baselineOffset; - - Qt::LayoutDirection layoutDirection; }; QT_END_NAMESPACE diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 2eeadf4..f6810ed 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -73,7 +73,7 @@ public: if (view->flow() == QDeclarativeGridView::LeftToRight) { rowPos = item->y(); } else { - if (view->layoutDirection() == Qt::RightToLeft) + if (view->effectiveLayoutDirection() == Qt::RightToLeft) rowPos = -view->cellWidth()-item->x(); else rowPos = item->x(); @@ -83,7 +83,7 @@ public: qreal colPos() const { qreal colPos = 0; if (view->flow() == QDeclarativeGridView::LeftToRight) { - if (view->layoutDirection() == Qt::RightToLeft) { + if (view->effectiveLayoutDirection() == Qt::RightToLeft) { int colSize = view->cellWidth(); int columns = view->width()/colSize; colPos = colSize * (columns-1) - item->x(); @@ -101,14 +101,14 @@ public: if (view->flow() == QDeclarativeGridView::LeftToRight) { return item->y() + view->cellHeight() - 1; } else { - if (view->layoutDirection() == Qt::RightToLeft) + if (view->effectiveLayoutDirection() == Qt::RightToLeft) return -item->x() - 1; else return item->x() + view->cellWidth() - 1; } } void setPosition(qreal col, qreal row) { - if (view->layoutDirection() == Qt::RightToLeft) { + if (view->effectiveLayoutDirection() == Qt::RightToLeft) { if (view->flow() == QDeclarativeGridView::LeftToRight) { int columns = view->width()/view->cellWidth(); item->setPos(QPointF((view->cellWidth() * (columns-1) - col), row)); @@ -188,7 +188,24 @@ public: } bool isRightToLeftTopToBottom() const { - return flow == QDeclarativeGridView::TopToBottom && layoutDirection == Qt::RightToLeft; + Q_Q(const QDeclarativeGridView); + return flow == QDeclarativeGridView::TopToBottom && q->effectiveLayoutDirection() == Qt::RightToLeft; + } + + void regenerate() { + Q_Q(QDeclarativeGridView); + if (q->isComponentComplete()) { + clear(); + updateGrid(); + q->refill(); + updateCurrent(currentIndex); + } + } + + void mirrorChange() { + Q_Q(QDeclarativeGridView); + regenerate(); + emit q->effectiveLayoutDirectionChanged(); } qreal position() const { @@ -201,7 +218,7 @@ public: q->QDeclarativeFlickable::setContentY(pos); q->QDeclarativeFlickable::setContentX(0); } else { - if (layoutDirection == Qt::LeftToRight) + if (q->effectiveLayoutDirection() == Qt::LeftToRight) q->QDeclarativeFlickable::setContentX(pos); else q->QDeclarativeFlickable::setContentX(-pos-size()); @@ -918,7 +935,7 @@ void QDeclarativeGridViewPrivate::updateFooter() rowOffset = footer->item->width()-cellWidth; } else { rowOffset = 0; - if (layoutDirection == Qt::RightToLeft) + if (q->effectiveLayoutDirection() == Qt::RightToLeft) colOffset = footer->item->width()-cellWidth; } if (visibleItems.count()) { @@ -971,7 +988,7 @@ void QDeclarativeGridViewPrivate::updateHeader() rowOffset = -cellWidth; } else { rowOffset = -headerSize(); - if (layoutDirection == Qt::RightToLeft) + if (q->effectiveLayoutDirection() == Qt::RightToLeft) colOffset = header->item->width()-cellWidth; } if (visibleItems.count()) { @@ -1761,7 +1778,6 @@ void QDeclarativeGridView::setHighlightRangeMode(HighlightRangeMode mode) \bold Note: If GridView::flow is set to GridView.LeftToRight, this is not to be confused if GridView::layoutDirection is set to Qt.RightToLeft. The GridView.LeftToRight flow value simply indicates that the flow is horizontal. - */ Qt::LayoutDirection QDeclarativeGridView::layoutDirection() const @@ -1775,15 +1791,33 @@ void QDeclarativeGridView::setLayoutDirection(Qt::LayoutDirection layoutDirectio Q_D(QDeclarativeGridView); if (d->layoutDirection != layoutDirection) { d->layoutDirection = layoutDirection; - d->clear(); - d->updateGrid(); - refill(); - d->updateCurrent(d->currentIndex); + d->regenerate(); emit layoutDirectionChanged(); + emit effectiveLayoutDirectionChanged(); } } /*! + \qmlproperty enumeration GridView::effectiveLayoutDirection + This property holds the effective layout direction of the grid. + + When using the attached property \l {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + the visual layout direction of the grid will be mirrored. However, the + property \l {GridView::layoutDirection}{layoutDirection} will remain unchanged. + + \sa GridView::layoutDirection, {LayoutMirroring}{LayoutMirroring} +*/ + +Qt::LayoutDirection QDeclarativeGridView::effectiveLayoutDirection() const +{ + Q_D(const QDeclarativeGridView); + if (d->effectiveLayoutMirror) + return d->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft; + else + return d->layoutDirection; +} + +/*! \qmlproperty enumeration GridView::flow This property holds the flow of the grid. @@ -1814,10 +1848,7 @@ void QDeclarativeGridView::setFlow(Flow flow) } setContentX(0); setContentY(0); - d->clear(); - d->updateGrid(); - refill(); - d->updateCurrent(d->currentIndex); + d->regenerate(); emit flowChanged(); } } @@ -2338,7 +2369,7 @@ void QDeclarativeGridView::moveCurrentIndexLeft() if (!count) return; - if (d->layoutDirection == Qt::LeftToRight) { + if (effectiveLayoutDirection() == Qt::LeftToRight) { if (d->flow == QDeclarativeGridView::LeftToRight) { if (currentIndex() > 0 || d->wrap) { int index = currentIndex() - 1; @@ -2381,7 +2412,7 @@ void QDeclarativeGridView::moveCurrentIndexRight() if (!count) return; - if (d->layoutDirection == Qt::LeftToRight) { + if (effectiveLayoutDirection() == Qt::LeftToRight) { if (d->flow == QDeclarativeGridView::LeftToRight) { if (currentIndex() < count - 1 || d->wrap) { int index = currentIndex() + 1; diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h index fc9e6b4..ad0c609 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview_p.h +++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h @@ -74,7 +74,8 @@ class Q_AUTOTEST_EXPORT QDeclarativeGridView : public QDeclarativeFlickable Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged) Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged) - Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) //Versioning support? + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) + Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1) Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged) Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged) Q_PROPERTY(int cellWidth READ cellWidth WRITE setCellWidth NOTIFY cellWidthChanged) @@ -132,6 +133,7 @@ public: Qt::LayoutDirection layoutDirection() const; void setLayoutDirection(Qt::LayoutDirection); + Qt::LayoutDirection effectiveLayoutDirection() const; enum Flow { LeftToRight, TopToBottom }; Flow flow() const; @@ -191,7 +193,8 @@ Q_SIGNALS: void modelChanged(); void delegateChanged(); void flowChanged(); - void layoutDirectionChanged(); + Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void effectiveLayoutDirectionChanged(); void keyNavigationWrapsChanged(); void cacheBufferChanged(); void snapModeChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index ac5d55c..d16025d 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -39,12 +39,12 @@ ** ****************************************************************************/ -#include "private/qdeclarativeitem_p.h" #include "qdeclarativeitem.h" #include "private/qdeclarativeevents_p_p.h" #include <private/qdeclarativeengine_p.h> #include <private/qgraphicsitem_p.h> +#include <QtDeclarative/private/qdeclarativeitem_p.h> #include <qdeclarativeengine.h> #include <qdeclarativeopenmetaobject_p.h> @@ -731,6 +731,152 @@ void QDeclarativeKeyNavigationAttached::setFocusNavigation(QDeclarativeItem *cur } /*! + \qmlclass LayoutMirroring QDeclarativeLayoutMirroringAttached + \since QtQuick 1.1 + \ingroup qml-utility-elements + \brief The LayoutMirroring is used for mirroring the Qt Quick application layouts. + + LayoutMirroring \l enabled property can be used to horizontally mirror \l {anchor-layout}{Item anchors}, + \l{Using QML Positioner and Repeater Items}{Positioner} elements and QML views like \l {GridView}{GridView} + and horizontal \l {ListView}{ListView}. Mirroring is a visual change, left anchors will become + right anchors and left-to-right positioner will instead position child items from right to left. + By default setting the \l enabled property to true only affects the item in question. You can set property + LayoutDirection \l childrenInherit to true if you want the item children also inherit the mirror setting. + If no attached property has been defined, mirroring is disabled. + + The following example shows mirroring in action. When \l enabled is set to true, left anchor + becomes right, and \l {Row}{Row} starts positioning items in a reverse order: + + \snippet doc/src/snippets/declarative/layoutmirroring.qml 0 + + Layout mirroring is useful when you need to support both left-to-right and right-to-left + layout versions of your application that target different language areas. Inheritance saves + you from having to mirror the layouts manually for each layout item in your application. Keep + in mind however that the mirroring does not affect the positioning done by modifying Item's x + co-ordinate directly, so even with the mirroring enabled you will often need to do some layout + fixes to support the other reading direction. Also, there are cases where you need to disable + mirroring of individual child items, either because mirroring is not the wanted behavior or + because the item already implements mirroring in some custom way. +*/ + +/*! + \qmlproperty bool LayoutMirroring::enabled + + Setting this property to true mirrors item's layout horizontally, whether the layout is done + using \l {anchor-layout}{anchors}, \l{Using QML Positioner and Repeater Items}{Positioners} + or as a QML view \l {GridView}{GridView} or \l {ListView}{ListView}. +*/ + +/*! + \qmlproperty bool LayoutMirroring::childrenInherit + + This property can be set to true if you want the item children + to inherit the item's mirror setting. +*/ + +QDeclarativeLayoutMirroringAttached::QDeclarativeLayoutMirroringAttached(QObject *parent) : QObject(parent), itemPrivate(0) +{ + if (QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent)) { + itemPrivate = QDeclarativeItemPrivate::get(item); + itemPrivate->attachedLayoutDirection = this; + } else + qmlInfo(parent) << tr("LayoutDirection attached property only works with Items"); +} + +QDeclarativeLayoutMirroringAttached * QDeclarativeLayoutMirroringAttached::qmlAttachedProperties(QObject *object) +{ + return new QDeclarativeLayoutMirroringAttached(object); +} + +bool QDeclarativeLayoutMirroringAttached::enabled() const +{ + return itemPrivate ? itemPrivate->effectiveLayoutMirror : false; +} + +void QDeclarativeLayoutMirroringAttached::setEnabled(bool enabled) +{ + if (!itemPrivate) + return; + + itemPrivate->isMirrorImplicit = false; + if (enabled != itemPrivate->effectiveLayoutMirror) { + itemPrivate->setLayoutMirror(enabled); + if (itemPrivate->inheritMirrorFromItem) + itemPrivate->resolveLayoutMirror(); + } +} + +void QDeclarativeLayoutMirroringAttached::resetEnabled() +{ + if (itemPrivate && !itemPrivate->isMirrorImplicit) { + itemPrivate->isMirrorImplicit = true; + itemPrivate->resolveLayoutMirror(); + } +} + +bool QDeclarativeLayoutMirroringAttached::childrenInherit() const +{ + return itemPrivate ? itemPrivate->inheritMirrorFromItem : false; +} + +void QDeclarativeLayoutMirroringAttached::setChildrenInherit(bool childrenInherit) { + if (itemPrivate && childrenInherit != itemPrivate->inheritMirrorFromItem) { + itemPrivate->inheritMirrorFromItem = childrenInherit; + itemPrivate->resolveLayoutMirror(); + childrenInheritChanged(); + } +} + +void QDeclarativeItemPrivate::resolveLayoutMirror() +{ + Q_Q(QDeclarativeItem); + if (QDeclarativeItem *parentItem = q->parentItem()) { + QDeclarativeItemPrivate *parentPrivate = QDeclarativeItemPrivate::get(parentItem); + setImplicitLayoutMirror(parentPrivate->inheritedLayoutMirror, parentPrivate->inheritMirrorFromParent); + } else { + setImplicitLayoutMirror(isMirrorImplicit ? false : effectiveLayoutMirror, inheritMirrorFromItem); + } +} + +void QDeclarativeItemPrivate::setImplicitLayoutMirror(bool mirror, bool inherit) +{ + inherit = inherit || inheritMirrorFromItem; + if (!isMirrorImplicit && inheritMirrorFromItem) + mirror = effectiveLayoutMirror; + if (mirror == inheritedLayoutMirror && inherit == inheritMirrorFromParent) + return; + + inheritMirrorFromParent = inherit; + inheritedLayoutMirror = inheritMirrorFromParent ? mirror : false; + + if (isMirrorImplicit) + setLayoutMirror(inherit ? inheritedLayoutMirror : false); + for (int i = 0; i < children.count(); ++i) { + if (QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i))) { + QDeclarativeItemPrivate *childPrivate = QDeclarativeItemPrivate::get(child); + childPrivate->setImplicitLayoutMirror(inheritedLayoutMirror, inheritMirrorFromParent); + } + } +} + +void QDeclarativeItemPrivate::setLayoutMirror(bool mirror) +{ + if (mirror != effectiveLayoutMirror) { + effectiveLayoutMirror = mirror; + if (_anchors) { + _anchors->d_func()->fillChanged(); + _anchors->d_func()->centerInChanged(); + _anchors->d_func()->updateHorizontalAnchors(); + emit _anchors->mirroredChanged(); + } + mirrorChange(); + if (attachedLayoutDirection) { + emit attachedLayoutDirection->enabledChanged(); + } + } +} + +/*! \qmlclass Keys QDeclarativeKeysAttached \ingroup qml-basic-interaction-elements \since 4.7 @@ -1389,6 +1535,11 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec \endqml See the \l {Keys}{Keys} attached property for detailed documentation. + + \section1 Layout Mirroring + + Item layouts can be mirrored using \l {LayoutMirroring}{LayoutMirroring} attached property. + */ /*! @@ -2782,6 +2933,7 @@ QVariant QDeclarativeItem::itemChange(GraphicsItemChange change, Q_D(QDeclarativeItem); switch (change) { case ItemParentHasChanged: + d->resolveLayoutMirror(); emit parentChanged(parentItem()); d->parentNotifier.notify(); break; diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index 4303c0a..b204d7f 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -77,6 +77,7 @@ QT_BEGIN_NAMESPACE class QNetworkReply; class QDeclarativeItemKeyFilter; +class QDeclarativeLayoutMirroringAttached; //### merge into private? class QDeclarativeContents : public QObject, public QDeclarativeItemChangeListener @@ -125,8 +126,10 @@ public: _stateGroup(0), origin(QDeclarativeItem::Center), widthValid(false), heightValid(false), componentComplete(true), keepMouse(false), - smooth(false), transformOriginDirty(true), doneEventPreHandler(false), keyHandler(0), - mWidth(0), mHeight(0), mImplicitWidth(0), mImplicitHeight(0), hadSubFocusItem(false) + smooth(false), transformOriginDirty(true), doneEventPreHandler(false), + inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true), + inheritMirrorFromParent(false), inheritMirrorFromItem(false), keyHandler(0), + mWidth(0), mHeight(0), mImplicitWidth(0), mImplicitHeight(0), attachedLayoutDirection(0), hadSubFocusItem(false) { QGraphicsItemPrivate::acceptedMouseButtons = 0; isDeclarativeItem = 1; @@ -134,7 +137,6 @@ public: QGraphicsItem::ItemHasNoContents | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemNegativeZStacksBehindParent); - } void init(QDeclarativeItem *parent) @@ -146,6 +148,11 @@ public: } baselineOffset.invalidate(); mouseSetsFocus = false; + resolveLayoutMirror(); + } + + bool isMirrored() const { + return effectiveLayoutMirror; } // Private Properties @@ -162,6 +169,10 @@ public: virtual void implicitWidthChanged(); virtual void implicitHeightChanged(); + void resolveLayoutMirror(); + void setImplicitLayoutMirror(bool mirror, bool inherit); + void setLayoutMirror(bool mirror); + QDeclarativeListProperty<QObject> data(); QDeclarativeListProperty<QObject> resources(); @@ -272,6 +283,11 @@ public: bool smooth:1; bool transformOriginDirty : 1; bool doneEventPreHandler : 1; + bool inheritedLayoutMirror:1; + bool effectiveLayoutMirror:1; + bool isMirrorImplicit:1; + bool inheritMirrorFromParent:1; + bool inheritMirrorFromItem:1; QDeclarativeItemKeyFilter *keyHandler; @@ -280,6 +296,8 @@ public: qreal mImplicitWidth; qreal mImplicitHeight; + QDeclarativeLayoutMirroringAttached* attachedLayoutDirection; + bool hadSubFocusItem; QPointF computeTransformOrigin() const; @@ -326,6 +344,8 @@ public: virtual void focusChanged(bool); + virtual void mirrorChange() {}; + static qint64 consistentTime; static void setConsistentTime(qint64 t); static void start(QElapsedTimer &); @@ -423,6 +443,31 @@ private: void setFocusNavigation(QDeclarativeItem *currentItem, const char *dir); }; +class QDeclarativeLayoutMirroringAttached : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool enabled READ enabled WRITE setEnabled RESET resetEnabled NOTIFY enabledChanged) + Q_PROPERTY(bool childrenInherit READ childrenInherit WRITE setChildrenInherit NOTIFY childrenInheritChanged) + +public: + explicit QDeclarativeLayoutMirroringAttached(QObject *parent = 0); + + bool enabled() const; + void setEnabled(bool); + void resetEnabled(); + + bool childrenInherit() const; + void setChildrenInherit(bool); + + static QDeclarativeLayoutMirroringAttached *qmlAttachedProperties(QObject *); +Q_SIGNALS: + void enabledChanged(); + void childrenInheritChanged(); +private: + friend class QDeclarativeItemPrivate; + QDeclarativeItemPrivate *itemPrivate; +}; + class QDeclarativeKeysAttachedPrivate : public QObjectPrivate { public: @@ -572,5 +617,7 @@ QML_DECLARE_TYPE(QDeclarativeKeysAttached) QML_DECLARE_TYPEINFO(QDeclarativeKeysAttached, QML_HAS_ATTACHED_PROPERTIES) QML_DECLARE_TYPE(QDeclarativeKeyNavigationAttached) QML_DECLARE_TYPEINFO(QDeclarativeKeyNavigationAttached, QML_HAS_ATTACHED_PROPERTIES) +QML_DECLARE_TYPE(QDeclarativeLayoutMirroringAttached) +QML_DECLARE_TYPEINFO(QDeclarativeLayoutMirroringAttached, QML_HAS_ATTACHED_PROPERTIES) #endif // QDECLARATIVEITEM_P_H diff --git a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp index 3c8f64e..c4a9030 100644 --- a/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitemsmodule.cpp @@ -198,6 +198,7 @@ void QDeclarativeItemModule::defineModule() qmlRegisterRevision<QDeclarativeImplicitSizeItem,1>("QtQuick",1,1); qmlRegisterRevision<QDeclarativeImplicitSizePaintedItem,0>("QtQuick",1,0); qmlRegisterRevision<QDeclarativeImplicitSizePaintedItem,1>("QtQuick",1,1); + qmlRegisterUncreatableType<QDeclarativeLayoutMirroringAttached>("QtQuick",1,1,"LayoutMirroring", QDeclarativeLayoutMirroringAttached::tr("LayoutMirroring is only available via attached properties")); #ifndef QT_NO_IMPORT_QT47_QML #ifdef QT_NO_MOVIE diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 486cec8..879b99b 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -104,16 +104,17 @@ public: if (view->orientation() == QDeclarativeListView::Vertical) return section->y(); else - return (view->layoutDirection() == Qt::RightToLeft ? -section->width()-section->x() : section->x()); + return (view->effectiveLayoutDirection() == Qt::RightToLeft ? -section->width()-section->x() : section->x()); } else { return itemPosition(); } } + qreal itemPosition() const { if (view->orientation() == QDeclarativeListView::Vertical) return item->y(); else - return (view->layoutDirection() == Qt::RightToLeft ? -item->width()-item->x() : item->x()); + return (view->effectiveLayoutDirection() == Qt::RightToLeft ? -item->width()-item->x() : item->x()); } qreal size() const { if (section) @@ -133,7 +134,7 @@ public: if (view->orientation() == QDeclarativeListView::Vertical) { return item->y() + (item->height() >= 1.0 ? item->height() : 1) - 1; } else { - return (view->layoutDirection() == Qt::RightToLeft + return (view->effectiveLayoutDirection() == Qt::RightToLeft ? -item->width()-item->x() + (item->width() >= 1.0 ? item->width() : 1) : item->x() + (item->width() >= 1.0 ? item->width() : 1)) - 1; } @@ -146,7 +147,7 @@ public: } item->setY(pos); } else { - if (view->layoutDirection() == Qt::RightToLeft) { + if (view->effectiveLayoutDirection() == Qt::RightToLeft) { if (section) { section->setX(-section->width()-pos); pos += section->width(); @@ -248,8 +249,25 @@ public: return 0; } + void regenerate() { + Q_Q(QDeclarativeListView); + if (q->isComponentComplete()) { + clear(); + setPosition(0); + q->refill(); + updateCurrent(currentIndex); + } + } + + void mirrorChange() { + Q_Q(QDeclarativeListView); + regenerate(); + emit q->effectiveLayoutDirectionChanged(); + } + bool isRightToLeft() const { - return (layoutDirection == Qt::RightToLeft && orient == QDeclarativeListView::Horizontal); + Q_Q(const QDeclarativeListView); + return orient == QDeclarativeListView::Horizontal && q->effectiveLayoutDirection() == Qt::RightToLeft; } qreal position() const { @@ -262,7 +280,7 @@ public: if (orient == QDeclarativeListView::Vertical) { q->QDeclarativeFlickable::setContentY(pos); } else { - if (layoutDirection == Qt::RightToLeft) + if (isRightToLeft()) q->QDeclarativeFlickable::setContentX(-pos-size()); else q->QDeclarativeFlickable::setContentX(pos); @@ -2064,14 +2082,25 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie setContentHeight(-1); setFlickableDirection(HorizontalFlick); } - d->clear(); - d->setPosition(0); - refill(); + d->regenerate(); emit orientationChanged(); - d->updateCurrent(d->currentIndex); } } +/*! + \qmlproperty enumeration ListView::layoutDirection + This property holds the layout direction of the horizontal list. + + Possible values: + + \list + \o Qt.LeftToRight (default) - Items will be laid out from left to right. + \o Qt.RightToLeft - Items will be laid out from right to let. + \endlist + + \sa ListView::effectiveLayoutDirection +*/ + Qt::LayoutDirection QDeclarativeListView::layoutDirection() const { Q_D(const QDeclarativeListView); @@ -2083,15 +2112,33 @@ void QDeclarativeListView::setLayoutDirection(Qt::LayoutDirection layoutDirectio Q_D(QDeclarativeListView); if (d->layoutDirection != layoutDirection) { d->layoutDirection = layoutDirection; - d->clear(); - d->setPosition(0); - refill(); + d->regenerate(); emit layoutDirectionChanged(); - d->updateCurrent(d->currentIndex); + emit effectiveLayoutDirectionChanged(); } } /*! + \qmlproperty enumeration ListView::effectiveLayoutDirection + This property holds the effective layout direction of the horizontal list. + + When using the attached property \l {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + the visual layout direction of the horizontal list will be mirrored. However, the + property \l {ListView::layoutDirection}{layoutDirection} will remain unchanged. + + \sa ListView::layoutDirection, {LayoutMirroring}{LayoutMirroring} +*/ + +Qt::LayoutDirection QDeclarativeListView::effectiveLayoutDirection() const +{ + Q_D(const QDeclarativeListView); + if (d->effectiveLayoutMirror) + return d->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft; + else + return d->layoutDirection; +} + +/*! \qmlproperty bool ListView::keyNavigationWraps This property holds whether the list wraps key navigation. @@ -2671,8 +2718,8 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) return; if (d->model && d->model->count() && d->interactive) { - if ((d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::LeftToRight && event->key() == Qt::Key_Left) - || (d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::RightToLeft && event->key() == Qt::Key_Right) + if ((!d->isRightToLeft() && event->key() == Qt::Key_Left) + || (d->orient == QDeclarativeListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Right) || (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Up)) { if (currentIndex() > 0 || (d->wrap && !event->isAutoRepeat())) { decrementCurrentIndex(); @@ -2682,8 +2729,8 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event) event->accept(); return; } - } else if ((d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::LeftToRight && event->key() == Qt::Key_Right) - || (d->orient == QDeclarativeListView::Horizontal && d->layoutDirection == Qt::RightToLeft && event->key() == Qt::Key_Left) + } else if ((!d->isRightToLeft() && event->key() == Qt::Key_Right) + || (d->orient == QDeclarativeListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Left) || (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Down)) { if (currentIndex() < d->model->count() - 1 || (d->wrap && !event->isAutoRepeat())) { incrementCurrentIndex(); @@ -2970,7 +3017,7 @@ void QDeclarativeListView::updateSections() void QDeclarativeListView::refill() { Q_D(QDeclarativeListView); - if (layoutDirection() == Qt::RightToLeft && orientation() == QDeclarativeListView::Horizontal) + if (d->isRightToLeft()) d->refill(-d->position()-d->size()+1, -d->position()); else d->refill(d->position(), d->position()+d->size()-1); @@ -3416,11 +3463,8 @@ void QDeclarativeListView::itemsChanged(int, int) void QDeclarativeListView::modelReset() { Q_D(QDeclarativeListView); - d->clear(); - d->setPosition(0); - refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; - d->updateCurrent(d->currentIndex); + d->regenerate(); if (d->highlight && d->currentItem) { if (d->autoHighlight) d->highlight->setPosition(d->currentItem->position()); diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 6b72240..30171f8 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -113,7 +113,8 @@ class Q_AUTOTEST_EXPORT QDeclarativeListView : public QDeclarativeFlickable Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing NOTIFY spacingChanged) Q_PROPERTY(Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged) - Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) + Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1) Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged) Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged) Q_PROPERTY(QDeclarativeViewSection *section READ sectionCriteria CONSTANT) @@ -174,6 +175,7 @@ public: Qt::LayoutDirection layoutDirection() const; void setLayoutDirection(Qt::LayoutDirection); + Qt::LayoutDirection effectiveLayoutDirection() const; bool isWrapEnabled() const; void setWrapEnabled(bool); @@ -226,7 +228,8 @@ Q_SIGNALS: void countChanged(); void spacingChanged(); void orientationChanged(); - void layoutDirectionChanged(); + Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void effectiveLayoutDirectionChanged(); void currentIndexChanged(); void currentSectionChanged(); void highlightMoveSpeedChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 4560d32..f57f501 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -574,7 +574,7 @@ void QDeclarativeColumn::reportConflictingAnchors() \sa Grid::spacing */ QDeclarativeRow::QDeclarativeRow(QDeclarativeItem *parent) -: QDeclarativeBasePositioner(Horizontal, parent), m_layoutDirection(Qt::LeftToRight) +: QDeclarativeBasePositioner(Horizontal, parent) { } @@ -595,20 +595,39 @@ QDeclarativeRow::QDeclarativeRow(QDeclarativeItem *parent) */ Qt::LayoutDirection QDeclarativeRow::layoutDirection() const { - return m_layoutDirection; + return QDeclarativeBasePositionerPrivate::getLayoutDirection(this); } void QDeclarativeRow::setLayoutDirection(Qt::LayoutDirection layoutDirection) { - if (m_layoutDirection != layoutDirection) { - m_layoutDirection = layoutDirection; + QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate* >(QDeclarativeBasePositionerPrivate::get(this)); + if (d->layoutDirection != layoutDirection) { + d->layoutDirection = layoutDirection; prePositioning(); emit layoutDirectionChanged(); + emit effectiveLayoutDirectionChanged(); } } +/*! + \qmlproperty enumeration Row::effectiveLayoutDirection + This property holds the effective layout direction of the row positioner. + + When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + the visual layout direction of the row positioner will be mirrored. However, the + property \l {Row::layoutDirection}{layoutDirection} will remain unchanged. + + \sa Row::layoutDirection, {LayoutMirroring}{LayoutMirroring} +*/ + +Qt::LayoutDirection QDeclarativeRow::effectiveLayoutDirection() const +{ + return QDeclarativeBasePositionerPrivate::getEffectiveLayoutDirection(this); +} + void QDeclarativeRow::doPositioning(QSizeF *contentSize) { + QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate*>(QDeclarativeBasePositionerPrivate::get(this)); int hoffset = 0; QList<int> hoffsets; @@ -617,7 +636,7 @@ void QDeclarativeRow::doPositioning(QSizeF *contentSize) if (!child.item || !child.isVisible) continue; - if(m_layoutDirection == Qt::LeftToRight){ + if(d->isLeftToRight()){ if(child.item->x() != hoffset) positionX(hoffset, child); }else{ @@ -632,7 +651,7 @@ void QDeclarativeRow::doPositioning(QSizeF *contentSize) contentSize->setWidth(hoffset - spacing()); - if(m_layoutDirection == Qt::LeftToRight) + if(d->isLeftToRight()) return; //Right to Left layout @@ -786,7 +805,7 @@ void QDeclarativeRow::reportConflictingAnchors() \sa rows, columns */ QDeclarativeGrid::QDeclarativeGrid(QDeclarativeItem *parent) : - QDeclarativeBasePositioner(Both, parent), m_rows(-1), m_columns(-1), m_flow(LeftToRight), m_layoutDirection(Qt::LeftToRight) + QDeclarativeBasePositioner(Both, parent), m_rows(-1), m_columns(-1), m_flow(LeftToRight) { } @@ -860,11 +879,11 @@ void QDeclarativeGrid::setFlow(Flow flow) Possible values are: \list - \o Qt.LeftToRight (default) - Items are positioned beginning - from the top, left anchor. The flow direction is dependent - on the \l Grid::flow property. - \o Qt.RightToLeft - Items are positioned beginning from the - top, right anchor. The flow direction is dependent on the + \o Qt.LeftToRight (default) - Items are positioned from the top to bottom, + and left to right. The flow direction is dependent on the + \l Grid::flow property. + \o Qt.RightToLeft - Items are positioned from the top to bottom, + and right to left. The flow direction is dependent on the \l Grid::flow property. \endlist @@ -872,21 +891,39 @@ void QDeclarativeGrid::setFlow(Flow flow) */ Qt::LayoutDirection QDeclarativeGrid::layoutDirection() const { - return m_layoutDirection; + return QDeclarativeBasePositionerPrivate::getLayoutDirection(this); } void QDeclarativeGrid::setLayoutDirection(Qt::LayoutDirection layoutDirection) { - if (m_layoutDirection != layoutDirection) { - m_layoutDirection = layoutDirection; + QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate*>(QDeclarativeBasePositionerPrivate::get(this)); + if (d->layoutDirection != layoutDirection) { + d->layoutDirection = layoutDirection; prePositioning(); emit layoutDirectionChanged(); + emit effectiveLayoutDirectionChanged(); } } -void QDeclarativeGrid::doPositioning(QSizeF *contentSize) +/*! + \qmlproperty enumeration Grid::effectiveLayoutDirection + This property holds the effective layout direction of the grid positioner. + + When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + the visual layout direction of the grid positioner will be mirrored. However, the + property \l {Grid::layoutDirection}{layoutDirection} will remain unchanged. + + \sa Grid::layoutDirection, {LayoutMirroring}{LayoutMirroring} +*/ + +Qt::LayoutDirection QDeclarativeGrid::effectiveLayoutDirection() const { + return QDeclarativeBasePositionerPrivate::getEffectiveLayoutDirection(this); +} +void QDeclarativeGrid::doPositioning(QSizeF *contentSize) +{ + QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate*>(QDeclarativeBasePositionerPrivate::get(this)); int c = m_columns; int r = m_rows; //Is allocating the extra QPODVector too much overhead? @@ -976,7 +1013,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) end = widthSum; int xoffset=0; - if(m_layoutDirection == Qt::RightToLeft) + if(!d->isLeftToRight()) xoffset=end; int yoffset=0; int curRow =0; @@ -984,7 +1021,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) for (int i = 0; i < visibleItems.count(); ++i) { const PositionedItem &child = visibleItems.at(i); int childXOffset = xoffset; - if(m_layoutDirection == Qt::RightToLeft) + if(!d->isLeftToRight()) childXOffset -= QGraphicsItemPrivate::get(child.item)->width(); if((child.item->x()!=childXOffset)||(child.item->y()!=yoffset)){ positionX(childXOffset, child); @@ -992,7 +1029,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) } if (m_flow == LeftToRight) { - if(m_layoutDirection == Qt::LeftToRight) + if(d->isLeftToRight()) xoffset+=maxColWidth[curCol]+spacing(); else xoffset-=maxColWidth[curCol]+spacing(); @@ -1000,7 +1037,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) curCol%=c; if (!curCol){ yoffset+=maxRowHeight[curRow]+spacing(); - if(m_layoutDirection == Qt::LeftToRight) + if(d->isLeftToRight()) xoffset=0; else xoffset=end; @@ -1013,7 +1050,7 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize) curRow++; curRow%=r; if (!curRow){ - if(m_layoutDirection == Qt::LeftToRight) + if(d->isLeftToRight()) xoffset+=maxColWidth[curCol]+spacing(); else xoffset-=maxColWidth[curCol]+spacing(); @@ -1148,12 +1185,10 @@ class QDeclarativeFlowPrivate : public QDeclarativeBasePositionerPrivate public: QDeclarativeFlowPrivate() - : QDeclarativeBasePositionerPrivate(), flow(QDeclarativeFlow::LeftToRight), - layoutDirection(Qt::LeftToRight) + : QDeclarativeBasePositionerPrivate(), flow(QDeclarativeFlow::LeftToRight) {} QDeclarativeFlow::Flow flow; - Qt::LayoutDirection layoutDirection; }; QDeclarativeFlow::QDeclarativeFlow(QDeclarativeItem *parent) @@ -1202,11 +1237,11 @@ void QDeclarativeFlow::setFlow(Flow flow) Possible values are: \list - \o Qt.LeftToRight (default) - Items are positioned beginning - from the top, left anchor. The flow direction is dependent - on the \l Flow::flow property. - \o Qt.RightToLeft - Items are positioned beginning from the - top, right anchor. The flow direction is dependent on the + \o Qt.LeftToRight (default) - Items are positioned from the top to bottom, + and left to right. The flow direction is dependent on the + \l Flow::flow property. + \o Qt.RightToLeft - Items are positioned from the top to bottom, + and right to left. The flow direction is dependent on the \l Flow::flow property. \endlist @@ -1226,9 +1261,26 @@ void QDeclarativeFlow::setLayoutDirection(Qt::LayoutDirection layoutDirection) d->layoutDirection = layoutDirection; prePositioning(); emit layoutDirectionChanged(); + emit effectiveLayoutDirectionChanged(); } } +/*! + \qmlproperty enumeration Flow::effectiveLayoutDirection + This property holds the effective layout direction of the flow positioner. + + When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + the visual layout direction of the grid positioner will be mirrored. However, the + property \l {Flow::layoutDirection}{layoutDirection} will remain unchanged. + + \sa Flow::layoutDirection, {LayoutMirroring}{LayoutMirroring} +*/ + +Qt::LayoutDirection QDeclarativeFlow::effectiveLayoutDirection() const +{ + return QDeclarativeBasePositionerPrivate::getEffectiveLayoutDirection(this); +} + void QDeclarativeFlow::doPositioning(QSizeF *contentSize) { Q_D(QDeclarativeFlow); @@ -1258,7 +1310,7 @@ void QDeclarativeFlow::doPositioning(QSizeF *contentSize) } } - if(d->layoutDirection == Qt::LeftToRight){ + if(d->isLeftToRight()){ if(child.item->x() != hoffset) positionX(hoffset, child); }else{ @@ -1281,7 +1333,7 @@ void QDeclarativeFlow::doPositioning(QSizeF *contentSize) } } - if(d->layoutDirection == Qt::LeftToRight) + if(d->isLeftToRight()) return; int end; diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h index 55d8fa1..214c04f 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h +++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h @@ -130,20 +130,22 @@ class Q_AUTOTEST_EXPORT QDeclarativeRow: public QDeclarativeBasePositioner { Q_OBJECT Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) + Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1) public: QDeclarativeRow(QDeclarativeItem *parent=0); Qt::LayoutDirection layoutDirection() const; void setLayoutDirection (Qt::LayoutDirection); + Qt::LayoutDirection effectiveLayoutDirection() const; Q_SIGNALS: Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void effectiveLayoutDirectionChanged(); protected: virtual void doPositioning(QSizeF *contentSize); virtual void reportConflictingAnchors(); private: - Qt::LayoutDirection m_layoutDirection; Q_DISABLE_COPY(QDeclarativeRow) }; @@ -154,7 +156,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeGrid : public QDeclarativeBasePositioner Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged) Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged) Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) - + Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1) public: QDeclarativeGrid(QDeclarativeItem *parent=0); @@ -171,12 +173,14 @@ public: Qt::LayoutDirection layoutDirection() const; void setLayoutDirection (Qt::LayoutDirection); + Qt::LayoutDirection effectiveLayoutDirection() const; Q_SIGNALS: void rowsChanged(); void columnsChanged(); void flowChanged(); Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void effectiveLayoutDirectionChanged(); protected: virtual void doPositioning(QSizeF *contentSize); @@ -186,7 +190,6 @@ private: int m_rows; int m_columns; Flow m_flow; - Qt::LayoutDirection m_layoutDirection; Q_DISABLE_COPY(QDeclarativeGrid) }; @@ -194,8 +197,9 @@ class QDeclarativeFlowPrivate; class Q_AUTOTEST_EXPORT QDeclarativeFlow: public QDeclarativeBasePositioner { Q_OBJECT - Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged) + Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1) + Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1) public: QDeclarativeFlow(QDeclarativeItem *parent=0); @@ -206,10 +210,11 @@ public: Qt::LayoutDirection layoutDirection() const; void setLayoutDirection (Qt::LayoutDirection); - + Qt::LayoutDirection effectiveLayoutDirection() const; Q_SIGNALS: void flowChanged(); Q_REVISION(1) void layoutDirectionChanged(); + Q_REVISION(1) void effectiveLayoutDirectionChanged(); protected: virtual void doPositioning(QSizeF *contentSize); diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h index df105c6..e80129d 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepositioners_p_p.h @@ -75,7 +75,7 @@ public: QDeclarativeBasePositionerPrivate() : spacing(0), type(QDeclarativeBasePositioner::None) , moveTransition(0), addTransition(0), queuedPositioning(false) - , doingPositioning(false), anchorConflict(false) + , doingPositioning(false), anchorConflict(false), layoutDirection(Qt::LeftToRight) { } @@ -100,6 +100,9 @@ public: bool doingPositioning : 1; bool anchorConflict : 1; + Qt::LayoutDirection layoutDirection; + + void schedulePositioning() { Q_Q(QDeclarativeBasePositioner); @@ -109,6 +112,18 @@ public: } } + void mirrorChange() { + Q_Q(QDeclarativeBasePositioner); + if (type != QDeclarativeBasePositioner::Vertical) + q->prePositioning(); + } + bool isLeftToRight() const { + if (type == QDeclarativeBasePositioner::Vertical) + return true; + else + return effectiveLayoutMirror ? layoutDirection == Qt::RightToLeft : layoutDirection == Qt::LeftToRight; + } + virtual void itemSiblingOrderChanged(QDeclarativeItem* other) { Q_UNUSED(other); @@ -139,6 +154,19 @@ public: Q_Q(QDeclarativeBasePositioner); q->positionedItems.removeOne(QDeclarativeBasePositioner::PositionedItem(item)); } + + static Qt::LayoutDirection getLayoutDirection(const QDeclarativeBasePositioner *positioner) + { + return positioner->d_func()->layoutDirection; + } + + static Qt::LayoutDirection getEffectiveLayoutDirection(const QDeclarativeBasePositioner *positioner) + { + if (positioner->d_func()->effectiveLayoutMirror) + return positioner->d_func()->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft; + else + return positioner->d_func()->layoutDirection; + } }; QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp index 79e233b..0442350 100644 --- a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp +++ b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp @@ -279,7 +279,7 @@ qreal offsetParentRTL(QDeclarativeItem *rootItem, const char * itemString) { void mirrorAnchors(QDeclarativeItem *item) { QDeclarativeItemPrivate *itemPrivate = QDeclarativeItemPrivate::get(item); - itemPrivate->anchors()->setLayoutDirection(Qt::RightToLeft); + itemPrivate->setLayoutMirror(true); } void tst_qdeclarativeanchors::basicAnchorsRTL() @@ -290,9 +290,19 @@ void tst_qdeclarativeanchors::basicAnchorsRTL() qApp->processEvents(); QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(view->rootObject()); + foreach(QObject *child, rootItem->children()) { + bool mirrored = QDeclarativeItemPrivate::get(qobject_cast<QDeclarativeItem*>(child))->anchors()->property("mirrored").toBool(); + QCOMPARE(mirrored, false); + } + foreach(QObject *child, rootItem->children()) mirrorAnchors(qobject_cast<QDeclarativeItem*>(child)); + foreach(QObject *child, rootItem->children()) { + bool mirrored = QDeclarativeItemPrivate::get(qobject_cast<QDeclarativeItem*>(child))->anchors()->property("mirrored").toBool(); + QCOMPARE(mirrored, true); + } + //sibling horizontal QCOMPARE(childItem(rootItem, "rect1")->x(), offsetMasterRTL(rootItem, "rect1")-26.0); QCOMPARE(childItem(rootItem, "rect2")->x(), offsetMasterRTL(rootItem, "rect2")-122.0); diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml index 164103d..69eaa47 100644 --- a/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml +++ b/tests/auto/declarative/qdeclarativegridview/data/gridview-enforcerange.qml @@ -1,4 +1,4 @@ -import QtQuick 1.0 +import QtQuick 1.1 Rectangle { width: 240 diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml index 1f5943d..caa28d6 100644 --- a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml +++ b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml @@ -1,4 +1,4 @@ -import QtQuick 1.0 +import QtQuick 1.1 Rectangle { id: root diff --git a/tests/auto/declarative/qdeclarativegridview/data/mirroring.qml b/tests/auto/declarative/qdeclarativegridview/data/mirroring.qml new file mode 100644 index 0000000..54de16b --- /dev/null +++ b/tests/auto/declarative/qdeclarativegridview/data/mirroring.qml @@ -0,0 +1,43 @@ +// This example demonstrates how item positioning +// changes in right-to-left layout direction + +import QtQuick 1.1 + +Rectangle { + color: "lightgray" + width: 340 + height: 370 + + VisualItemModel { + id: itemModel + objectName: "itemModel" + Rectangle { + objectName: "item1" + height: 110; width: 120; color: "#FFFEF0" + Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + objectName: "item2" + height: 130; width: 150; color: "#F0FFF7" + Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + Rectangle { + objectName: "item3" + height: 170; width: 190; color: "#F4F0FF" + Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent } + } + } + + GridView { + id: view + objectName: "view" + cellWidth: 190 + cellHeight: 170 + anchors.fill: parent + anchors.bottomMargin: 30 + model: itemModel + highlightRangeMode: "StrictlyEnforceRange" + flow: GridView.TopToBottom + flickDeceleration: 2000 + } +} diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 4fcaed6..5ced02b 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -46,6 +46,7 @@ #include <QtDeclarative/qdeclarativecomponent.h> #include <QtDeclarative/qdeclarativecontext.h> #include <QtDeclarative/qdeclarativeexpression.h> +#include <QtDeclarative/private/qdeclarativeitem_p.h> #include <QtDeclarative/private/qlistmodelinterface_p.h> #include <QtDeclarative/private/qdeclarativegridview_p.h> #include <QtDeclarative/private/qdeclarativetext_p.h> @@ -79,6 +80,7 @@ private slots: void modelChanges(); void positionViewAtIndex(); void positionViewAtIndex_rightToLeft(); + void mirroring(); void snapping(); void resetModel(); void enforceRange(); @@ -1347,6 +1349,67 @@ void tst_QDeclarativeGridView::snapping() } +void tst_QDeclarativeGridView::mirroring() +{ + QDeclarativeView *canvasA = createView(); + canvasA->setSource(QUrl::fromLocalFile(SRCDIR "/data/mirroring.qml")); + QDeclarativeGridView *gridviewA = findItem<QDeclarativeGridView>(canvasA->rootObject(), "view"); + QTRY_VERIFY(gridviewA != 0); + + QDeclarativeView *canvasB = createView(); + canvasB->setSource(QUrl::fromLocalFile(SRCDIR "/data/mirroring.qml")); + QDeclarativeGridView *gridviewB = findItem<QDeclarativeGridView>(canvasB->rootObject(), "view"); + QTRY_VERIFY(gridviewA != 0); + qApp->processEvents(); + + QList<QString> objectNames; + objectNames << "item1" << "item2"; // << "item3" + + gridviewA->setProperty("layoutDirection", Qt::LeftToRight); + gridviewB->setProperty("layoutDirection", Qt::RightToLeft); + QCOMPARE(gridviewA->layoutDirection(), gridviewA->effectiveLayoutDirection()); + + // LTR != RTL + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(gridviewA, objectName)->x() != findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + gridviewA->setProperty("layoutDirection", Qt::LeftToRight); + gridviewB->setProperty("layoutDirection", Qt::LeftToRight); + + // LTR == LTR + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(gridviewA, objectName)->x(), findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + QVERIFY(gridviewB->layoutDirection() == gridviewB->effectiveLayoutDirection()); + QDeclarativeItemPrivate::get(gridviewB)->setLayoutMirror(true); + QVERIFY(gridviewB->layoutDirection() != gridviewB->effectiveLayoutDirection()); + + // LTR != LTR+mirror + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(gridviewA, objectName)->x() != findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + gridviewA->setProperty("layoutDirection", Qt::RightToLeft); + + // RTL == LTR+mirror + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(gridviewA, objectName)->x(), findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + gridviewB->setProperty("layoutDirection", Qt::RightToLeft); + + // RTL != RTL+mirror + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(gridviewA, objectName)->x() != findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + gridviewA->setProperty("layoutDirection", Qt::LeftToRight); + + // LTR == RTL+mirror + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(gridviewA, objectName)->x(), findItem<QDeclarativeItem>(gridviewB, objectName)->x()); + + delete canvasA; + delete canvasB; +} + void tst_QDeclarativeGridView::positionViewAtIndex_rightToLeft() { QDeclarativeView *canvas = createView(); @@ -1535,6 +1598,7 @@ void tst_QDeclarativeGridView::enforceRange() canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview-enforcerange.qml")); qApp->processEvents(); + QVERIFY(canvas->rootObject() != 0); QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); QTRY_VERIFY(gridview != 0); @@ -1590,6 +1654,7 @@ void tst_QDeclarativeGridView::enforceRange_rightToLeft() canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview-enforcerange.qml")); qApp->processEvents(); + QVERIFY(canvas->rootObject() != 0); QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); QTRY_VERIFY(gridview != 0); diff --git a/tests/auto/declarative/qdeclarativeitem/data/layoutmirroring.qml b/tests/auto/declarative/qdeclarativeitem/data/layoutmirroring.qml new file mode 100644 index 0000000..866b615 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeitem/data/layoutmirroring.qml @@ -0,0 +1,54 @@ +import QtQuick 1.1 + +Item { + property bool childrenInherit: true + Item { + objectName: "mirrored1" + LayoutMirroring.enabled: true + LayoutMirroring.childrenInherit: parent.childrenInherit + Item { + Item { + objectName: "notMirrored1" + LayoutMirroring.enabled: false + Item { + objectName: "inheritedMirror1" + } + } + Item { + objectName: "inheritedMirror2" + } + } + } + Item { + objectName: "mirrored2" + LayoutMirroring.enabled: true + LayoutMirroring.childrenInherit: false + Item { + objectName: "notMirrored2" + } + } + Item { + LayoutMirroring.enabled: true + LayoutMirroring.childrenInherit: true + Loader { + id: loader + } + } + states: State { + name: "newContent" + PropertyChanges { + target: loader + sourceComponent: component + } + } + Component { + id: component + Item { + objectName: "notMirrored3" + LayoutMirroring.enabled: false + Item { + objectName: "inheritedMirror3" + } + } + } +} diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 137522d..f83207c 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -66,6 +66,8 @@ private slots: void keysProcessingOrder(); void keyNavigation(); void keyNavigation_skipNotVisible(); + void layoutMirroring(); + void layoutMirroringIllegalParent(); void smooth(); void clip(); void mapCoordinates(); @@ -87,13 +89,33 @@ private slots: void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); void qtbug_16871(); - private: - template<typename T> - T *findItem(QGraphicsObject *parent, const QString &objectName); QDeclarativeEngine engine; }; +template<typename T> +T *findItem(QGraphicsObject *parent, const QString &objectName) +{ + if (!parent) + return 0; + + const QMetaObject &mo = T::staticMetaObject; + //qDebug() << parent->QGraphicsObject::children().count() << "children"; + for (int i = 0; i < parent->childItems().count(); ++i) { + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent->childItems().at(i)); + if(!item) + continue; + //qDebug() << "try" << item; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) + return static_cast<T*>(item); + item = findItem<T>(item, objectName); + if (item) + return static_cast<T*>(item); + } + + return 0; +} + class KeysTestObject : public QObject { Q_OBJECT @@ -380,6 +402,132 @@ void tst_QDeclarativeItem::keysProcessingOrder() delete testObject; } +QDeclarativeItemPrivate *childPrivate(QGraphicsObject *rootItem, const char * itemString) +{ + QDeclarativeItem *item = findItem<QDeclarativeItem>(rootItem, QString(QLatin1String(itemString))); + QDeclarativeItemPrivate* itemPrivate = QDeclarativeItemPrivate::get(item); + return itemPrivate; +} + +QVariant childProperty(QGraphicsObject *rootItem, const char * itemString, const char * property) +{ + QDeclarativeItem *item = findItem<QDeclarativeItem>(rootItem, QString(QLatin1String(itemString))); + return item->property(property); +} + +bool anchorsMirrored(QGraphicsObject *rootItem, const char * itemString) +{ + QDeclarativeItem *item = findItem<QDeclarativeItem>(rootItem, QString(QLatin1String(itemString))); + QDeclarativeItemPrivate* itemPrivate = QDeclarativeItemPrivate::get(item); + return itemPrivate->anchors()->mirrored(); +} + +void tst_QDeclarativeItem::layoutMirroring() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/layoutmirroring.qml")); + canvas->show(); + + QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject()); + QVERIFY(rootItem); + QDeclarativeItemPrivate *rootPrivate = QDeclarativeItemPrivate::get(rootItem); + QVERIFY(rootPrivate); + + QCOMPARE(childPrivate(rootItem, "mirrored1")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "mirrored2")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->effectiveLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "notMirrored2")->effectiveLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->effectiveLayoutMirror, true); + + QCOMPARE(anchorsMirrored(rootItem, "mirrored1"), true); + QCOMPARE(anchorsMirrored(rootItem, "mirrored2"), true); + QCOMPARE(anchorsMirrored(rootItem, "notMirrored1"), false); + QCOMPARE(anchorsMirrored(rootItem, "notMirrored2"), false); + QCOMPARE(anchorsMirrored(rootItem, "inheritedMirror1"), true); + QCOMPARE(anchorsMirrored(rootItem, "inheritedMirror2"), true); + + QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "mirrored2")->inheritedLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "notMirrored2")->inheritedLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritedLayoutMirror, true); + + QCOMPARE(childPrivate(rootItem, "mirrored1")->isMirrorImplicit, false); + QCOMPARE(childPrivate(rootItem, "mirrored2")->isMirrorImplicit, false); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->isMirrorImplicit, false); + QCOMPARE(childPrivate(rootItem, "notMirrored2")->isMirrorImplicit, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->isMirrorImplicit, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->isMirrorImplicit, true); + + QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritMirrorFromParent, true); + QCOMPARE(childPrivate(rootItem, "mirrored2")->inheritMirrorFromParent, false); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritMirrorFromParent, true); + QCOMPARE(childPrivate(rootItem, "notMirrored2")->inheritMirrorFromParent, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->inheritMirrorFromParent, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritMirrorFromParent, true); + + QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritMirrorFromItem, true); + QCOMPARE(childPrivate(rootItem, "mirrored2")->inheritMirrorFromItem, false); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritMirrorFromItem, false); + QCOMPARE(childPrivate(rootItem, "notMirrored2")->inheritMirrorFromItem, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->inheritMirrorFromItem, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritMirrorFromItem, false); + + // load dynamic content using Loader that needs to inherit mirroring + rootItem->setProperty("state", "newContent"); + QCOMPARE(childPrivate(rootItem, "notMirrored3")->effectiveLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror3")->effectiveLayoutMirror, true); + + QCOMPARE(childPrivate(rootItem, "notMirrored3")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror3")->inheritedLayoutMirror, true); + + QCOMPARE(childPrivate(rootItem, "notMirrored3")->isMirrorImplicit, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror3")->isMirrorImplicit, true); + + QCOMPARE(childPrivate(rootItem, "notMirrored3")->inheritMirrorFromParent, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror3")->inheritMirrorFromParent, true); + + QCOMPARE(childPrivate(rootItem, "notMirrored3")->inheritMirrorFromItem, false); + QCOMPARE(childPrivate(rootItem, "notMirrored3")->inheritMirrorFromItem, false); + + // disable inheritance + rootItem->setProperty("childrenInherit", false); + + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->effectiveLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->effectiveLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "mirrored1")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->effectiveLayoutMirror, false); + + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->inheritedLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritedLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritedLayoutMirror, false); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritedLayoutMirror, false); + + // re-enable inheritance + rootItem->setProperty("childrenInherit", true); + + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "mirrored1")->effectiveLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->effectiveLayoutMirror, false); + + QCOMPARE(childPrivate(rootItem, "inheritedMirror1")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritedLayoutMirror, true); + QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritedLayoutMirror, true); +} + +void tst_QDeclarativeItem::layoutMirroringIllegalParent() +{ + QDeclarativeComponent component(&engine); + component.setData("import QtQuick 1.1; QtObject { LayoutMirroring.enabled: true; LayoutMirroring.childrenInherit: true }", QUrl::fromLocalFile("")); + QTest::ignoreMessage(QtWarningMsg, "file::1:21: QML QtObject: LayoutDirection attached property only works with Items"); + QObject *object = component.create(); + QVERIFY(object != 0); +} + void tst_QDeclarativeItem::keyNavigation() { QDeclarativeView *canvas = new QDeclarativeView(0); @@ -1003,32 +1151,6 @@ void tst_QDeclarativeItem::qtbug_16871() delete o; } - -template<typename T> -T *tst_QDeclarativeItem::findItem(QGraphicsObject *parent, const QString &objectName) -{ - if (!parent) - return 0; - - const QMetaObject &mo = T::staticMetaObject; - //qDebug() << parent->QGraphicsObject::children().count() << "children"; - for (int i = 0; i < parent->childItems().count(); ++i) { - QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent->childItems().at(i)); - if(!item) - continue; - //qDebug() << "try" << item; - if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) - return static_cast<T*>(item); - item = findItem<T>(item, objectName); - if (item) - return static_cast<T*>(item); - } - - return 0; -} - - - QTEST_MAIN(tst_QDeclarativeItem) #include "tst_qdeclarativeitem.moc" diff --git a/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml b/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml index e31d923..1e92bb3 100644 --- a/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml +++ b/tests/auto/declarative/qdeclarativelistview/data/rightToLeft.qml @@ -1,11 +1,11 @@ -// This example demonstrates placing items in a view using -// a VisualItemModel +// This example demonstrates how item positioning +// changes in right-to-left layout direction -import QtQuick 1.0 +import QtQuick 1.1 Rectangle { color: "lightgray" - width: 240 + width: 640 height: 320 VisualItemModel { diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 02c8dad..bba86c3 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -45,6 +45,7 @@ #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecontext.h> #include <QtDeclarative/qdeclarativeexpression.h> +#include <QtDeclarative/private/qdeclarativeitem_p.h> #include <QtDeclarative/private/qdeclarativelistview_p.h> #include <QtDeclarative/private/qdeclarativetext_p.h> #include <QtDeclarative/private/qdeclarativevisualitemmodel_p.h> @@ -116,6 +117,7 @@ private slots: void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); void rightToLeft(); + void test_mirroring(); private: template <class T> void items(); @@ -1697,8 +1699,6 @@ void tst_QDeclarativeListView::manualHighlight() QDeclarativeView *canvas = new QDeclarativeView(0); canvas->setFixedSize(240,320); - QDeclarativeContext *ctxt = canvas->rootContext(); - QString filename(SRCDIR "/data/manual-highlight.qml"); canvas->setSource(QUrl::fromLocalFile(filename)); @@ -1829,8 +1829,6 @@ void tst_QDeclarativeListView::header() TestModel model; - QDeclarativeContext *ctxt = canvas->rootContext(); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header1.qml")); qApp->processEvents(); @@ -2303,10 +2301,10 @@ void tst_QDeclarativeListView::testQtQuick11Attributes_data() void tst_QDeclarativeListView::rightToLeft() { QDeclarativeView *canvas = createView(); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/rightToLeft.qml")); qApp->processEvents(); + QVERIFY(canvas->rootObject() != 0); QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "view"); QTRY_VERIFY(listview != 0); @@ -2341,6 +2339,67 @@ void tst_QDeclarativeListView::rightToLeft() delete canvas; } +void tst_QDeclarativeListView::test_mirroring() +{ + QDeclarativeView *canvasA = createView(); + canvasA->setSource(QUrl::fromLocalFile(SRCDIR "/data/rightToLeft.qml")); + QDeclarativeListView *listviewA = findItem<QDeclarativeListView>(canvasA->rootObject(), "view"); + QTRY_VERIFY(listviewA != 0); + + QDeclarativeView *canvasB = createView(); + canvasB->setSource(QUrl::fromLocalFile(SRCDIR "/data/rightToLeft.qml")); + QDeclarativeListView *listviewB = findItem<QDeclarativeListView>(canvasB->rootObject(), "view"); + QTRY_VERIFY(listviewA != 0); + qApp->processEvents(); + + QList<QString> objectNames; + objectNames << "item1" << "item2"; // << "item3" + + listviewA->setProperty("layoutDirection", Qt::LeftToRight); + listviewB->setProperty("layoutDirection", Qt::RightToLeft); + QCOMPARE(listviewA->layoutDirection(), listviewA->effectiveLayoutDirection()); + + // LTR != RTL + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(listviewA, objectName)->x() != findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + listviewA->setProperty("layoutDirection", Qt::LeftToRight); + listviewB->setProperty("layoutDirection", Qt::LeftToRight); + + // LTR == LTR + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(listviewA, objectName)->x(), findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + QVERIFY(listviewB->layoutDirection() == listviewB->effectiveLayoutDirection()); + QDeclarativeItemPrivate::get(listviewB)->setLayoutMirror(true); + QVERIFY(listviewB->layoutDirection() != listviewB->effectiveLayoutDirection()); + + // LTR != LTR+mirror + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(listviewA, objectName)->x() != findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + listviewA->setProperty("layoutDirection", Qt::RightToLeft); + + // RTL == LTR+mirror + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(listviewA, objectName)->x(), findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + listviewB->setProperty("layoutDirection", Qt::RightToLeft); + + // RTL != RTL+mirror + foreach(const QString objectName, objectNames) + QVERIFY(findItem<QDeclarativeItem>(listviewA, objectName)->x() != findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + listviewA->setProperty("layoutDirection", Qt::LeftToRight); + + // LTR == RTL+mirror + foreach(const QString objectName, objectNames) + QCOMPARE(findItem<QDeclarativeItem>(listviewA, objectName)->x(), findItem<QDeclarativeItem>(listviewB, objectName)->x()); + + delete canvasA; + delete canvasB; +} + void tst_QDeclarativeListView::qListModelInterface_items() { items<TestModel>(); diff --git a/tests/auto/declarative/qdeclarativepositioners/data/grid-righttoleft.qml b/tests/auto/declarative/qdeclarativepositioners/data/grid-righttoleft.qml deleted file mode 100644 index 0ec1f37..0000000 --- a/tests/auto/declarative/qdeclarativepositioners/data/grid-righttoleft.qml +++ /dev/null @@ -1,41 +0,0 @@ -import QtQuick 1.1 - -Item { - width: 640 - height: 480 - Grid { - objectName: "grid" - columns: 3 - layoutDirection: Qt.RightToLeft - Rectangle { - objectName: "one" - color: "red" - width: 50 - height: 50 - } - Rectangle { - objectName: "two" - color: "green" - width: 20 - height: 50 - } - Rectangle { - objectName: "three" - color: "blue" - width: 50 - height: 20 - } - Rectangle { - objectName: "four" - color: "cyan" - width: 50 - height: 50 - } - Rectangle { - objectName: "five" - color: "magenta" - width: 10 - height: 10 - } - } -} diff --git a/tests/auto/declarative/qdeclarativepositioners/data/gridtest.qml b/tests/auto/declarative/qdeclarativepositioners/data/gridtest.qml index f3b17dd..929b726 100644 --- a/tests/auto/declarative/qdeclarativepositioners/data/gridtest.qml +++ b/tests/auto/declarative/qdeclarativepositioners/data/gridtest.qml @@ -1,9 +1,11 @@ -import QtQuick 1.0 +import QtQuick 1.1 Item { width: 640 height: 480 + property bool testRightToLeft: false Grid { + layoutDirection: testRightToLeft ? Qt.RightToLeft : Qt.LeftToRight objectName: "grid" columns: 3 Rectangle { @@ -21,7 +23,7 @@ Item { Rectangle { objectName: "three" color: "blue" - width: 50 + width: 30 height: 20 } Rectangle { diff --git a/tests/auto/declarative/qdeclarativepositioners/data/horizontal.qml b/tests/auto/declarative/qdeclarativepositioners/data/horizontal.qml index e1a9652..d35c02d 100644 --- a/tests/auto/declarative/qdeclarativepositioners/data/horizontal.qml +++ b/tests/auto/declarative/qdeclarativepositioners/data/horizontal.qml @@ -4,7 +4,6 @@ Item { width: 640 height: 480 property bool testRightToLeft: false - Row { objectName: "row" layoutDirection: testRightToLeft ? Qt.RightToLeft : Qt.LeftToRight diff --git a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp index 40e533d..92ab722 100644 --- a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp +++ b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp @@ -45,6 +45,7 @@ #include <private/qdeclarativerectangle_p.h> #include <private/qdeclarativepositioners_p.h> #include <private/qdeclarativetransition_p.h> +#include <private/qdeclarativeitem_p.h> #include <qdeclarativeexpression.h> #include <QtGui/qgraphicswidget.h> #include "../../../shared/util.h" @@ -87,6 +88,7 @@ private slots: void test_flow_implicit_resize(); void test_conflictinganchors(); void test_vertical_qgraphicswidget(); + void test_mirroring(); void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); private: @@ -452,7 +454,7 @@ void tst_QDeclarativePositioners::test_grid() QDeclarativeGrid *grid = canvas->rootObject()->findChild<QDeclarativeGrid*>("grid"); QCOMPARE(grid->flow(), QDeclarativeGrid::LeftToRight); - QCOMPARE(grid->width(), 120.0); + QCOMPARE(grid->width(), 100.0); QCOMPARE(grid->height(), 100.0); delete canvas; @@ -494,7 +496,9 @@ void tst_QDeclarativePositioners::test_grid_topToBottom() void tst_QDeclarativePositioners::test_grid_rightToLeft() { - QDeclarativeView *canvas = createView(SRCDIR "/data/grid-righttoleft.qml"); + QDeclarativeView *canvas = createView(SRCDIR "/data/gridtest.qml"); + + canvas->rootObject()->setProperty("testRightToLeft", true); QDeclarativeRectangle *one = canvas->rootObject()->findChild<QDeclarativeRectangle*>("one"); QVERIFY(one != 0); @@ -507,20 +511,20 @@ void tst_QDeclarativePositioners::test_grid_rightToLeft() QDeclarativeRectangle *five = canvas->rootObject()->findChild<QDeclarativeRectangle*>("five"); QVERIFY(five != 0); - QCOMPARE(one->x(), 70.0); + QCOMPARE(one->x(), 50.0); QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 50.0); + QCOMPARE(two->x(), 30.0); QCOMPARE(two->y(), 0.0); QCOMPARE(three->x(), 0.0); QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 70.0); + QCOMPARE(four->x(), 50.0); QCOMPARE(four->y(), 50.0); - QCOMPARE(five->x(), 60.0); + QCOMPARE(five->x(), 40.0); QCOMPARE(five->y(), 50.0); QDeclarativeGrid *grid = canvas->rootObject()->findChild<QDeclarativeGrid*>("grid"); QCOMPARE(grid->layoutDirection(), Qt::RightToLeft); - QCOMPARE(grid->width(), 120.0); + QCOMPARE(grid->width(), 100.0); QCOMPARE(grid->height(), 100.0); delete canvas; @@ -1198,6 +1202,66 @@ void tst_QDeclarativePositioners::test_vertical_qgraphicswidget() delete canvas; } +void tst_QDeclarativePositioners::test_mirroring() +{ + QList<QString> qmlFiles; + qmlFiles << "horizontal.qml" << "gridtest.qml" << "flowtest.qml"; + QList<QString> objectNames; + objectNames << "one" << "two" << "three" << "four" << "five"; + + foreach(const QString qmlFile, qmlFiles) { + QDeclarativeView *canvasA = createView(QString(SRCDIR) + "/data/" + qmlFile); + QDeclarativeItem *rootA = qobject_cast<QDeclarativeItem*>(canvasA->rootObject()); + + QDeclarativeView *canvasB = createView(QString(SRCDIR) + "/data/" + qmlFile); + QDeclarativeItem *rootB = qobject_cast<QDeclarativeItem*>(canvasB->rootObject()); + + rootA->setProperty("testRightToLeft", true); // layoutDirection: Qt.RightToLeft + + // LTR != RTL + foreach(const QString objectName, objectNames) { + // horizontal.qml only has three items + if (qmlFile == QString("horizontal.qml") && objectName == QString("four")) + break; + QDeclarativeItem *itemA = rootA->findChild<QDeclarativeItem*>(objectName); + QDeclarativeItem *itemB = rootB->findChild<QDeclarativeItem*>(objectName); + QVERIFY(itemA->x() != itemB->x()); + } + + QDeclarativeItemPrivate* rootPrivateB = QDeclarativeItemPrivate::get(rootB); + + rootPrivateB->effectiveLayoutMirror = true; // LayoutMirroring.enabled: true + rootPrivateB->isMirrorImplicit = false; + rootPrivateB->inheritMirrorFromItem = true; // LayoutMirroring.childrenInherit: true + rootPrivateB->resolveLayoutMirror(); + + // RTL == mirror + foreach(const QString objectName, objectNames) { + // horizontal.qml only has three items + if (qmlFile == QString("horizontal.qml") && objectName == QString("four")) + break; + QDeclarativeItem *itemA = rootA->findChild<QDeclarativeItem*>(objectName); + QDeclarativeItem *itemB = rootB->findChild<QDeclarativeItem*>(objectName); + QCOMPARE(itemA->x(), itemB->x()); + } + + rootA->setProperty("testRightToLeft", false); // layoutDirection: Qt.LeftToRight + rootB->setProperty("testRightToLeft", true); // layoutDirection: Qt.RightToLeft + + // LTR == RTL + mirror + foreach(const QString objectName, objectNames) { + // horizontal.qml only has three items + if (qmlFile == QString("horizontal.qml") && objectName == QString("four")) + break; + QDeclarativeItem *itemA = rootA->findChild<QDeclarativeItem*>(objectName); + QDeclarativeItem *itemB = rootB->findChild<QDeclarativeItem*>(objectName); + QCOMPARE(itemA->x(), itemB->x()); + } + delete canvasA; + delete canvasB; + } +} + void tst_QDeclarativePositioners::testQtQuick11Attributes() { QFETCH(QString, code); diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 2220b6d..20e2640 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -818,7 +818,7 @@ void tst_qdeclarativestates::anchorChanges5() void mirrorAnchors(QDeclarativeItem *item) { QDeclarativeItemPrivate *itemPrivate = QDeclarativeItemPrivate::get(item); - itemPrivate->anchors()->setLayoutDirection(Qt::RightToLeft); + itemPrivate->setLayoutMirror(true); } qreal offsetRTL(QDeclarativeItem *anchorItem, QDeclarativeItem *item) { -- cgit v0.12 From d5c72c6fb75357061c5f9e0d0d2efdaff9140741 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 1 Mar 2011 12:57:14 +1000 Subject: Reverse KeyNavigation left and right properties when the layout mirroring is enabled Task-number: QTBUG-15882 Reviewed-by: Martin Jones Change-Id: I4c9f0b48e089b30ced5e7fefa5d6e97b3155f3b2 --- src/declarative/graphicsitems/qdeclarativeitem.cpp | 32 +++++++++---- .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 54 ++++++++++++++++++++++ 2 files changed, 76 insertions(+), 10 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index d16025d..867a16d 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -615,19 +615,28 @@ void QDeclarativeKeyNavigationAttached::keyPressed(QKeyEvent *event, bool post) return; } + bool mirror = false; switch(event->key()) { - case Qt::Key_Left: - if (d->left) { - setFocusNavigation(d->left, "left"); + case Qt::Key_Left: { + if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent())) + mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror; + QDeclarativeItem* leftItem = mirror ? d->right : d->left; + if (leftItem) { + setFocusNavigation(leftItem, mirror ? "right" : "left"); event->accept(); } break; - case Qt::Key_Right: - if (d->right) { - setFocusNavigation(d->right, "right"); + } + case Qt::Key_Right: { + if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent())) + mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror; + QDeclarativeItem* rightItem = mirror ? d->left : d->right; + if (rightItem) { + setFocusNavigation(rightItem, mirror ? "left" : "right"); event->accept(); } break; + } case Qt::Key_Up: if (d->up) { setFocusNavigation(d->up, "up"); @@ -669,16 +678,19 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event, bool post) return; } + bool mirror = false; switch(event->key()) { case Qt::Key_Left: - if (d->left) { + if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent())) + mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror; + if (mirror ? d->right : d->left) event->accept(); - } break; case Qt::Key_Right: - if (d->right) { + if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent())) + mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror; + if (mirror ? d->left : d->right) event->accept(); - } break; case Qt::Key_Up: if (d->up) { diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index f83207c..2d14e66 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -65,6 +65,7 @@ private slots: void keys(); void keysProcessingOrder(); void keyNavigation(); + void keyNavigation_RightToLeft(); void keyNavigation_skipNotVisible(); void layoutMirroring(); void layoutMirroringIllegalParent(); @@ -608,6 +609,59 @@ void tst_QDeclarativeItem::keyNavigation() delete canvas; } +void tst_QDeclarativeItem::keyNavigation_RightToLeft() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setFixedSize(240,320); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/keynavigationtest.qml")); + canvas->show(); + qApp->processEvents(); + + QDeclarativeItem *rootItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject()); + QVERIFY(rootItem); + QDeclarativeItemPrivate* rootItemPrivate = QDeclarativeItemPrivate::get(rootItem); + + rootItemPrivate->effectiveLayoutMirror = true; // LayoutMirroring.mirror: true + rootItemPrivate->isMirrorImplicit = false; + rootItemPrivate->inheritMirrorFromItem = true; // LayoutMirroring.inherit: true + rootItemPrivate->resolveLayoutMirror(); + + QEvent wa(QEvent::WindowActivate); + QApplication::sendEvent(canvas, &wa); + QFocusEvent fe(QEvent::FocusIn); + QApplication::sendEvent(canvas, &fe); + + QDeclarativeItem *item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1"); + QVERIFY(item); + QVERIFY(item->hasActiveFocus()); + + QVariant result; + QVERIFY(QMetaObject::invokeMethod(canvas->rootObject(), "verify", + Q_RETURN_ARG(QVariant, result))); + QVERIFY(result.toBool()); + + // right + QKeyEvent key(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier, "", false, 1); + QApplication::sendEvent(canvas, &key); + QVERIFY(key.isAccepted()); + + item = findItem<QDeclarativeItem>(canvas->rootObject(), "item2"); + QVERIFY(item); + QVERIFY(item->hasActiveFocus()); + + // left + key = QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1); + QApplication::sendEvent(canvas, &key); + QVERIFY(key.isAccepted()); + + item = findItem<QDeclarativeItem>(canvas->rootObject(), "item1"); + QVERIFY(item); + QVERIFY(item->hasActiveFocus()); + + delete canvas; +} + void tst_QDeclarativeItem::keyNavigation_skipNotVisible() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From 88253db8a7d7910e1393b1948fb3747117538c92 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 1 Mar 2011 12:51:27 +1000 Subject: Make sure horizontal QML editor text aligment always returns the actual alignment Also, implicit empty text alignment now follows the Application's default layout direction traditionally set by the locale. Task-number: QTBUG-15880 Reviewed-by: Martin Jones Change-Id: I88340513d489290bafd393072786a19731097b77 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 67 +++++++++++++------- src/declarative/graphicsitems/qdeclarativetext_p.h | 3 +- .../graphicsitems/qdeclarativetext_p_p.h | 2 + .../graphicsitems/qdeclarativetextedit.cpp | 52 ++++++++++++++- .../graphicsitems/qdeclarativetextedit_p.h | 3 +- .../graphicsitems/qdeclarativetextedit_p_p.h | 7 ++- .../graphicsitems/qdeclarativetextinput.cpp | 73 +++++++++++++++++----- .../graphicsitems/qdeclarativetextinput_p.h | 3 +- .../graphicsitems/qdeclarativetextinput_p_p.h | 24 +++---- .../qdeclarativetext/tst_qdeclarativetext.cpp | 34 ++++++++-- .../tst_qdeclarativetextedit.cpp | 37 +++++++++-- .../tst_qdeclarativetextinput.cpp | 37 ++++++++++- 12 files changed, 274 insertions(+), 68 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 4c6c34f..af7e4a1 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -97,17 +97,18 @@ DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE); QString QDeclarativeTextPrivate::elideChar = QString(0x2026); QDeclarativeTextPrivate::QDeclarativeTextPrivate() -: color((QRgb)0), style(QDeclarativeText::Normal), hAlign(QDeclarativeText::AlignLeft), +: color((QRgb)0), style(QDeclarativeText::Normal), hAlign(QDeclarativeText::AlignLeft), vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone), format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap), lineHeight(1), - lineHeightMode(QDeclarativeText::ProportionalHeight), - lineCount(1), truncated(false), maximumLineCount(INT_MAX), + lineHeightMode(QDeclarativeText::ProportionalHeight), lineCount(1), truncated(false), maximumLineCount(INT_MAX), maximumLineCountValid(false), imageCacheDirty(true), updateOnComponentComplete(true), richText(false), singleline(false), - cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), naturalWidth(0), doc(0) + cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true), naturalWidth(0), doc(0) { cacheAllTextAsImage = enableImageCache(); QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton; QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents; + if (QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeText::AlignRight; } QTextDocumentWithImageResources::QTextDocumentWithImageResources(QDeclarativeText *parent) @@ -211,6 +212,21 @@ qreal QDeclarativeTextPrivate::implicitWidth() const return mImplicitWidth; } +void QDeclarativeTextPrivate::determineHorizontalAlignment() +{ + Q_Q(QDeclarativeText); + if (hAlignImplicit && q->isComponentComplete()) { + // if no explicit alignment has been set, follow the natural layout direction of the text + QDeclarativeText::HAlignment previousAlign = hAlign; + if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeText::AlignRight; + else + hAlign = text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft; + if (previousAlign != hAlign) + emit q->horizontalAlignmentChanged(hAlign); + } +} + void QDeclarativeTextPrivate::updateLayout() { Q_Q(QDeclarativeText); @@ -367,17 +383,6 @@ QSize QDeclarativeTextPrivate::setupTextLayout() textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); layout.setTextOption(textOption); - QDeclarativeText::HAlignment hAlignment = hAlign; - if(text.isRightToLeft()) { - if ((hAlign == QDeclarativeText::AlignLeft) || (hAlign == QDeclarativeText::AlignJustify)) { - hAlignment = QDeclarativeText::AlignRight; - } else if (hAlign == QDeclarativeText::AlignRight) { - hAlignment = QDeclarativeText::AlignLeft; - } else { - hAlignment = hAlign; - } - } - bool elideText = false; bool truncate = false; @@ -423,10 +428,10 @@ QSize QDeclarativeTextPrivate::setupTextLayout() // Need to correct for alignment line.setLineWidth(lineWidth-elideWidth); int x = line.naturalTextWidth(); - if (hAlignment == QDeclarativeText::AlignRight) { + if (hAlign == QDeclarativeText::AlignRight) { x = q->width()-elideWidth; - } else if (hAlignment == QDeclarativeText::AlignHCenter) { - x = (q->width()+line.naturalTextWidth()-elideWidth)/2; + } else if (hAlign == QDeclarativeText::AlignHCenter) { + x = (q->width()+line.naturalTextWidth() - elideWidth)/2; } elidePos = QPointF(x, y + fm.ascent()); elideText = true; @@ -472,13 +477,13 @@ QSize QDeclarativeTextPrivate::setupTextLayout() height += (lineHeightMode == QDeclarativeText::FixedHeight) ? lineHeight : line.height() * lineHeight; if (!cacheAllTextAsImage) { - if ((hAlignment == QDeclarativeText::AlignLeft) || (hAlignment == QDeclarativeText::AlignJustify)) { + if ((hAlign == QDeclarativeText::AlignLeft) || (hAlign == QDeclarativeText::AlignJustify)) { x = 0; - } else if (hAlignment == QDeclarativeText::AlignRight) { + } else if (hAlign == QDeclarativeText::AlignRight) { x = layoutWidth - line.naturalTextWidth(); if (elideText && i == layout.lineCount()-1) x -= elideWidth; // Correct for when eliding multilines - } else if (hAlignment == QDeclarativeText::AlignHCenter) { + } else if (hAlign == QDeclarativeText::AlignHCenter) { x = (layoutWidth - line.naturalTextWidth()) / 2; if (elideText && i == layout.lineCount()-1) x -= elideWidth/2; // Correct for when eliding multilines @@ -946,6 +951,7 @@ void QDeclarativeText::setText(const QString &n) } d->text = n; + d->determineHorizontalAlignment(); d->updateLayout(); emit textChanged(d->text); @@ -1064,7 +1070,9 @@ void QDeclarativeText::setStyleColor(const QColor &color) \qmlproperty enumeration Text::verticalAlignment Sets the horizontal and vertical alignment of the text within the Text items - width and height. By default, the text is top-left aligned. + width and height. By default, the text is vertically aligned to the top. Horizontal + alignment follows the natural alignment of the text, for example text that is read + from left to right will be aligned to the left. The valid values for \c horizontalAlignment are \c Text.AlignLeft, \c Text.AlignRight, \c Text.AlignHCenter and \c Text.AlignJustify. The valid values for \c verticalAlignment are \c Text.AlignTop, \c Text.AlignBottom @@ -1084,6 +1092,7 @@ QDeclarativeText::HAlignment QDeclarativeText::hAlign() const void QDeclarativeText::setHAlign(HAlignment align) { Q_D(QDeclarativeText); + d->hAlignImplicit = false; if (d->hAlign == align) return; @@ -1096,6 +1105,19 @@ void QDeclarativeText::setHAlign(HAlignment align) emit horizontalAlignmentChanged(align); } +void QDeclarativeText::resetHAlign() +{ + Q_D(QDeclarativeText); + d->hAlignImplicit = true; + QDeclarativeText::HAlignment oldAlignment = d->hAlign; + d->determineHorizontalAlignment(); + if (oldAlignment != d->hAlign) { + prepareGeometryChange(); + d->updateLayout(); + emit horizontalAlignmentChanged(d->hAlign); + } +} + QDeclarativeText::VAlignment QDeclarativeText::vAlign() const { Q_D(const QDeclarativeText); @@ -1556,6 +1578,7 @@ void QDeclarativeText::componentComplete() QDeclarativeItem::componentComplete(); if (d->updateOnComponentComplete) { d->updateOnComponentComplete = false; + d->determineHorizontalAlignment(); if (d->richText) { d->ensureDoc(); d->doc->setText(d->text); diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h index b8835d1..92c2eab 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p.h @@ -69,7 +69,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeText : public QDeclarativeImplici Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) Q_PROPERTY(TextStyle style READ style WRITE setStyle NOTIFY styleChanged) Q_PROPERTY(QColor styleColor READ styleColor WRITE setStyleColor NOTIFY styleColorChanged) - Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign NOTIFY horizontalAlignmentChanged) + Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged) Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged) Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1) @@ -133,6 +133,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); + void resetHAlign(); VAlignment vAlign() const; void setVAlign(VAlignment align); diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 36ae123..6886d91 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -76,6 +76,7 @@ public: void updateSize(); void updateLayout(); + void determineHorizontalAlignment(); QString text; QFont font; @@ -110,6 +111,7 @@ public: bool cacheAllTextAsImage:1; bool internalWidthUpdate:1; bool requireImplicitWidth:1; + bool hAlignImplicit:1; QSize layedOutTextSize; QSize paintedSize; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 87a49bd..35716d0 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -249,6 +249,7 @@ void QDeclarativeTextEdit::setText(const QString &text) Q_D(QDeclarativeTextEdit); if (QDeclarativeTextEdit::text() == text) return; + d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text)); if (d->richText) { #ifndef QT_NO_TEXTHTMLPARSER @@ -457,7 +458,9 @@ void QDeclarativeTextEdit::setSelectedTextColor(const QColor &color) \qmlproperty enumeration TextEdit::verticalAlignment Sets the horizontal and vertical alignment of the text within the TextEdit item's - width and height. By default, the text is top-left aligned. + width and height. By default, the text alignment follows the natural alignment + of the text, for example text that is read from left to right will be aligned to + the left. Valid values for \c horizontalAlignment are: \list @@ -483,6 +486,7 @@ QDeclarativeTextEdit::HAlignment QDeclarativeTextEdit::hAlign() const void QDeclarativeTextEdit::setHAlign(QDeclarativeTextEdit::HAlignment alignment) { Q_D(QDeclarativeTextEdit); + d->hAlignImplicit = false; if (alignment == d->hAlign) return; d->hAlign = alignment; @@ -491,6 +495,19 @@ void QDeclarativeTextEdit::setHAlign(QDeclarativeTextEdit::HAlignment alignment) emit horizontalAlignmentChanged(d->hAlign); } +void QDeclarativeTextEdit::resetHAlign() +{ + Q_D(QDeclarativeTextEdit); + d->hAlignImplicit = true; + QDeclarativeTextEdit::HAlignment oldAlignment = d->hAlign; + d->determineHorizontalAlignment(); + if (oldAlignment != d->hAlign) { + d->updateDefaultTextOption(); + updateSize(); + + } +} + QDeclarativeTextEdit::VAlignment QDeclarativeTextEdit::vAlign() const { Q_D(const QDeclarativeTextEdit); @@ -948,6 +965,8 @@ void QDeclarativeTextEdit::componentComplete() Q_D(QDeclarativeTextEdit); QDeclarativePaintedItem::componentComplete(); if (d->dirty) { + d->determineHorizontalAlignment(); + d->updateDefaultTextOption(); updateSize(); d->dirty = false; } @@ -1438,6 +1457,9 @@ void QDeclarativeTextEditPrivate::init() document->setDocumentMargin(textMargin); document->setUndoRedoEnabled(false); // flush undo buffer. document->setUndoRedoEnabled(true); + + if (QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeTextEdit::AlignRight; updateDefaultTextOption(); } @@ -1445,6 +1467,9 @@ void QDeclarativeTextEdit::q_textChanged() { Q_D(QDeclarativeTextEdit); d->text = text(); + d->rightToLeftText = d->text.isRightToLeft(); + d->determineHorizontalAlignment(); + d->updateDefaultTextOption(); updateSize(); updateTotalLines(); updateMicroFocus(); @@ -1461,6 +1486,21 @@ void QDeclarativeTextEdit::moveCursorDelegate() d->cursor->setY(cursorRect.y()); } +void QDeclarativeTextEditPrivate::determineHorizontalAlignment() +{ + Q_Q(QDeclarativeTextEdit); + if (hAlignImplicit && q->isComponentComplete()) { + // if no explicit alignment has been set, follow the natural layout direction of the text + QDeclarativeTextEdit::HAlignment previousAlign = hAlign; + if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeTextEdit::AlignRight; + else + hAlign = rightToLeftText ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft; + if (previousAlign != hAlign) + emit q->horizontalAlignmentChanged(hAlign); + } +} + void QDeclarativeTextEditPrivate::updateSelection() { Q_Q(QDeclarativeTextEdit); @@ -1611,7 +1651,15 @@ void QDeclarativeTextEditPrivate::updateDefaultTextOption() { QTextOption opt = document->defaultTextOption(); int oldAlignment = opt.alignment(); - opt.setAlignment((Qt::Alignment)(int)(hAlign | vAlign)); + + QDeclarativeTextEdit::HAlignment horizontalAlignment = hAlign; + if (rightToLeftText) { + if (hAlign == QDeclarativeTextEdit::AlignLeft) + horizontalAlignment = QDeclarativeTextEdit::AlignRight; + else if (hAlign == QDeclarativeTextEdit::AlignRight) + horizontalAlignment = QDeclarativeTextEdit::AlignLeft; + } + opt.setAlignment((Qt::Alignment)(int)(horizontalAlignment | vAlign)); QTextOption::WrapMode oldWrapMode = opt.wrapMode(); opt.setWrapMode(QTextOption::WrapMode(wrapMode)); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 7785a7a..c7dc2f6 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -72,7 +72,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextEdit : public QDeclarativeImplicitSizePa Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor NOTIFY selectionColorChanged) Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) - Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign NOTIFY horizontalAlignmentChanged) + Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged) Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged) Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1) @@ -152,6 +152,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); + void resetHAlign(); VAlignment vAlign() const; void setVAlign(VAlignment align); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h index 111cc02..f4a6c0e 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h @@ -71,8 +71,8 @@ public: : color("black"), hAlign(QDeclarativeTextEdit::AlignLeft), vAlign(QDeclarativeTextEdit::AlignTop), imgDirty(true), dirty(false), richText(false), cursorVisible(false), focusOnPress(true), showInputPanelOnFocus(true), clickCausedFocus(false), persistentSelection(true), requireImplicitWidth(false), - textMargin(0.0), lastSelectionStart(0), lastSelectionEnd(0), cursorComponent(0), cursor(0), - format(QDeclarativeTextEdit::AutoText), document(0), wrapMode(QDeclarativeTextEdit::NoWrap), + hAlignImplicit(true), rightToLeftText(false), textMargin(0.0), lastSelectionStart(0), lastSelectionEnd(0), + cursorComponent(0), cursor(0), format(QDeclarativeTextEdit::AutoText), document(0), wrapMode(QDeclarativeTextEdit::NoWrap), mouseSelectionMode(QDeclarativeTextEdit::SelectCharacters), selectByMouse(false), canPaste(false), yoff(0) { @@ -88,6 +88,7 @@ public: void updateDefaultTextOption(); void relayoutDocument(); void updateSelection(); + void determineHorizontalAlignment(); qreal implicitWidth() const; void focusChanged(bool); @@ -112,6 +113,8 @@ public: bool clickCausedFocus : 1; bool persistentSelection : 1; bool requireImplicitWidth:1; + bool hAlignImplicit:1; + bool rightToLeftText:1; qreal textMargin; int lastSelectionStart; int lastSelectionEnd; diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index e7c2ac7..adc2860 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -327,7 +327,9 @@ void QDeclarativeTextInput::setSelectedTextColor(const QColor &color) \qmlproperty enumeration TextInput::horizontalAlignment Sets the horizontal alignment of the text within the TextInput item's - width and height. By default, the text is left aligned. + width and height. By default, the text alignment follows the natural alignment + of the text, for example text that is read from left to right will be aligned to + the left. TextInput does not have vertical alignment, as the natural height is exactly the height of the single line of text. If you set the height @@ -347,7 +349,8 @@ QDeclarativeTextInput::HAlignment QDeclarativeTextInput::hAlign() const void QDeclarativeTextInput::setHAlign(HAlignment align) { Q_D(QDeclarativeTextInput); - if(align == d->hAlign) + d->hAlignImplicit = false; + if(align == d->hAlign || align > QDeclarativeTextInput::AlignHCenter) // justify not supported return; d->hAlign = align; updateRect(); @@ -355,6 +358,19 @@ void QDeclarativeTextInput::setHAlign(HAlignment align) emit horizontalAlignmentChanged(d->hAlign); } +void QDeclarativeTextInput::resetHAlign() +{ + Q_D(QDeclarativeTextInput); + d->hAlignImplicit = true; + QDeclarativeTextInput::HAlignment oldAlignment = d->hAlign; + d->determineHorizontalAlignment(); + if (oldAlignment != d->hAlign) { + updateRect(); + d->updateHorizontalScroll(); + emit horizontalAlignmentChanged(d->hAlign); + } +} + /*! \qmlproperty bool TextInput::readOnly @@ -961,16 +977,21 @@ void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev) keyPressPreHandler(ev); if (ev->isAccepted()) return; - if (((ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Down) && ev->modifiers() == Qt::NoModifier) // Don't allow MacOSX up/down support, and we don't allow a completer. - || (((d->control->cursor() == 0 && ev->key() == Qt::Key_Left) - || (d->control->cursor() == d->control->text().length() - && ev->key() == Qt::Key_Right)) - && (d->lastSelectionStart == d->lastSelectionEnd))) - { - //ignore when moving off the end - //unless there is a selection, because then moving will do something (deselect) + + // Don't allow MacOSX up/down support, and we don't allow a completer. + bool ignore = (ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Down) && ev->modifiers() == Qt::NoModifier; + if (!ignore && (d->lastSelectionStart == d->lastSelectionEnd) && (ev->key() == Qt::Key_Right || ev->key() == Qt::Key_Left)) { + // Ignore when moving off the end unless there is a selection, + // because then moving will do something (deselect). + int cursorPosition = d->control->cursor(); + if (cursorPosition == 0) + ignore = ev->key() == (d->control->text().mid(cursorPosition,1).isRightToLeft() ? Qt::Key_Right : Qt::Key_Left); + if (cursorPosition == d->control->text().length()) + ignore = ev->key() == (d->control->text().mid(cursorPosition-1,1).isRightToLeft() ? Qt::Key_Left : Qt::Key_Right); + } + if (ignore) { ev->ignore(); - }else{ + } else { d->control->processKeyEvent(ev); } if (!ev->isAccepted()) @@ -1129,11 +1150,11 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() int cix = qRound(control->cursorToX(control->cursor() + preeditLength)); QRect br(q->boundingRect().toRect()); int widthUsed = calculateTextWidth(); - Qt::Alignment va = QStyle::visualAlignment(control->layoutDirection(), QFlag(Qt::Alignment(hAlign))); + if (autoScroll) { if (widthUsed <= br.width()) { // text fits in br; use hscroll for alignment - switch (va & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { + switch (hAlign & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { case Qt::AlignRight: hscroll = widthUsed - br.width() - 1; break; @@ -1165,11 +1186,11 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() hscroll = cix; } } else { - switch (va & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { - case Qt::AlignRight: + switch (hAlign) { + case QDeclarativeTextInput::AlignRight: hscroll = q->width() - widthUsed; break; - case Qt::AlignHCenter: + case QDeclarativeTextInput::AlignHCenter: hscroll = (q->width() - widthUsed) / 2; break; default: @@ -1180,6 +1201,22 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() } } +void QDeclarativeTextInputPrivate::determineHorizontalAlignment() +{ + Q_Q(QDeclarativeTextInput); + if (hAlignImplicit) { + QString text = control->text(); + // if no explicit alignment has been set, follow the natural layout direction of the text + QDeclarativeTextInput::HAlignment previousAlign = hAlign; + if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeTextInput::AlignRight; + else + hAlign = text.isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft; + if (previousAlign != hAlign) + emit q->horizontalAlignmentChanged(hAlign); + } +} + void QDeclarativeTextInput::drawContents(QPainter *p, const QRect &r) { Q_D(QDeclarativeTextInput); @@ -1671,6 +1708,9 @@ void QDeclarativeTextInputPrivate::init() QPalette p = control->palette(); selectedTextColor = p.color(QPalette::HighlightedText); selectionColor = p.color(QPalette::Highlight); + + if (QApplication::layoutDirection() == Qt::RightToLeft) + hAlign = QDeclarativeTextInput::AlignRight; } void QDeclarativeTextInput::cursorPosChanged() @@ -1719,6 +1759,7 @@ void QDeclarativeTextInput::q_textChanged() Q_D(QDeclarativeTextInput); updateSize(); d->updateHorizontalScroll(); + d->determineHorizontalAlignment(); updateMicroFocus(); emit textChanged(); emit displayTextChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index e1e66a9..a3e8d29 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -70,7 +70,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextInput : public QDeclarativeImplicitSizeP Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor NOTIFY selectionColorChanged) Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) - Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign NOTIFY horizontalAlignmentChanged) + Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged) Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged) @@ -146,6 +146,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); + void resetHAlign(); bool isReadOnly() const; void setReadOnly(bool); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h index f7446b4..321d124 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h @@ -74,9 +74,9 @@ public: color((QRgb)0), style(QDeclarativeText::Normal), styleColor((QRgb)0), hAlign(QDeclarativeTextInput::AlignLeft), mouseSelectionMode(QDeclarativeTextInput::SelectCharacters), - hscroll(0), oldScroll(0), focused(false), focusOnPress(true), + hscroll(0), oldScroll(0), oldValidity(false), focused(false), focusOnPress(true), showInputPanelOnFocus(true), clickCausedFocus(false), cursorVisible(false), - autoScroll(true), selectByMouse(false), canPaste(false) + autoScroll(true), selectByMouse(false), canPaste(false), hAlignImplicit(true) { #ifdef Q_OS_SYMBIAN if (QSysInfo::symbianVersion() == QSysInfo::SV_SF_1 || QSysInfo::symbianVersion() == QSysInfo::SV_SF_3) { @@ -103,6 +103,7 @@ public: void startCreatingCursor(); void focusChanged(bool hasFocus); void updateHorizontalScroll(); + void determineHorizontalAlignment(); int calculateTextWidth(); QLineControl* control; @@ -124,17 +125,18 @@ public: int lastSelectionEnd; int oldHeight; int oldWidth; - bool oldValidity; int hscroll; int oldScroll; - bool focused; - bool focusOnPress; - bool showInputPanelOnFocus; - bool clickCausedFocus; - bool cursorVisible; - bool autoScroll; - bool selectByMouse; - bool canPaste; + bool oldValidity:1; + bool focused:1; + bool focusOnPress:1; + bool showInputPanelOnFocus:1; + bool clickCausedFocus:1; + bool cursorVisible:1; + bool autoScroll:1; + bool selectByMouse:1; + bool canPaste:1; + bool hAlignImplicit:1; static inline QDeclarativeTextInputPrivate *get(QDeclarativeTextInput *t) { return t->d_func(); diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 05546cb..33c8b89 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -517,18 +517,44 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QDeclarativeTextPrivate *textPrivate = QDeclarativeTextPrivate::get(text); QVERIFY(textPrivate != 0); + // implicit alignment should follow the reading direction of RTL text + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); - // "Right" aligned + // explicitly left aligned + text->setHAlign(QDeclarativeText::AlignLeft); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + + // explicitly right aligned text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); - // Center aligned + // explicitly center aligned text->setHAlign(QDeclarativeText::AlignHCenter); QCOMPARE(text->hAlign(), QDeclarativeText::AlignHCenter); QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); - QVERIFY(textPrivate->layout.lineAt(0).x() + textPrivate->layout.lineAt(0).width() > canvas->width()/2); + + // reseted alignment should go back to following the text reading direction + text->resetHAlign(); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); + + // English text should be implicitly left aligned + text->setText("Hello world!"); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + + // empty text should implicitly follow the layout direction + QApplication::setLayoutDirection(Qt::RightToLeft); + text->setText(""); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + text->setHAlign(QDeclarativeText::AlignLeft); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + + // set layout direction back to LTR to avoid affecting other autotests + QApplication::setLayoutDirection(Qt::LeftToRight); delete canvas; } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 87c2c60..eb02936 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -438,20 +438,47 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QVERIFY(textEdit != 0); canvas->show(); + // implicit alignment should follow the reading direction of RTL text + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); - // "Right" align + // explicitly left aligned + textEdit->setHAlign(QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + + // explicitly right aligned textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); - // Center align - // Note that position 0 is on the right-hand side + // explicitly center aligned textEdit->setHAlign(QDeclarativeTextEdit::AlignHCenter); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignHCenter); - QVERIFY(textEdit->positionToRectangle(0).x() - textEdit->width() < canvas->width()/2); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + // reseted alignment should go back to following the text reading direction + textEdit->resetHAlign(); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + + // English text should be implicitly left aligned + textEdit->setText("Hello world!"); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + + // empty text should implicitly follow the layout direction + QApplication::setLayoutDirection(Qt::RightToLeft); + textEdit->setText(""); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + textEdit->setHAlign(QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + + // set layout direction back to LTR to avoid affecting other autotests + QApplication::setLayoutDirection(Qt::LeftToRight); + delete canvas; } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 7753f11..45f2cf7 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -914,17 +914,48 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QVERIFY(textInputPrivate != 0); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); - // "Right" Align - textInput->setHAlign(QDeclarativeTextInput::AlignRight); + // implicit alignment should follow the reading direction of RTL text QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + + // explicitly left aligned + textInput->setHAlign(QDeclarativeTextInput::AlignLeft); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); - // Center Align + // explicitly right aligned + textInput->setHAlign(QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + + // explicitly center aligned textInput->setHAlign(QDeclarativeTextInput::AlignHCenter); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignHCenter); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); QVERIFY(-textInputPrivate->hscroll + textInputPrivate->width() > canvas->width()/2); + // reseted alignment should go back to following the text reading direction + textInput->resetHAlign(); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + + // English text should be implicitly left aligned + textInput->setText("Hello world!"); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); + QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + + // empty text should implicitly follow the layout direction + QApplication::setLayoutDirection(Qt::RightToLeft); + textInput->setText(""); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + textInput->setHAlign(QDeclarativeTextInput::AlignLeft); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); + QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + + // set layout direction back to LTR to avoid affecting other autotests + QApplication::setLayoutDirection(Qt::LeftToRight); + delete canvas; } -- cgit v0.12 From 463cee77f75d20760f9f74f52e1dfccb44fcb862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 24 Feb 2011 12:27:20 +0100 Subject: Lighthouse: Xlib added QXlibDisplay type We still use the nativeDisplay all over the place. Maybe we should? --- src/plugins/platforms/xlib/qxlibclipboard.cpp | 77 ++++++++++++----------- src/plugins/platforms/xlib/qxlibcursor.cpp | 39 ++++++------ src/plugins/platforms/xlib/qxlibdisplay.cpp | 37 +++++++++++ src/plugins/platforms/xlib/qxlibdisplay.h | 22 +++++++ src/plugins/platforms/xlib/qxlibintegration.cpp | 3 +- src/plugins/platforms/xlib/qxlibkeyboard.cpp | 3 +- src/plugins/platforms/xlib/qxlibscreen.cpp | 73 ++++++++++++--------- src/plugins/platforms/xlib/qxlibscreen.h | 16 ++--- src/plugins/platforms/xlib/qxlibstatic.cpp | 15 ++--- src/plugins/platforms/xlib/qxlibwindow.cpp | 67 ++++++++++---------- src/plugins/platforms/xlib/qxlibwindowsurface.cpp | 14 ++--- src/plugins/platforms/xlib/xlib.pro | 6 +- 12 files changed, 228 insertions(+), 144 deletions(-) create mode 100644 src/plugins/platforms/xlib/qxlibdisplay.cpp create mode 100644 src/plugins/platforms/xlib/qxlibdisplay.h diff --git a/src/plugins/platforms/xlib/qxlibclipboard.cpp b/src/plugins/platforms/xlib/qxlibclipboard.cpp index 7930fcb..49b2dc7 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.cpp +++ b/src/plugins/platforms/xlib/qxlibclipboard.cpp @@ -43,6 +43,7 @@ #include "qxlibscreen.h" #include "qxlibmime.h" +#include "qxlibdisplay.h" #include <private/qapplication_p.h> @@ -92,7 +93,7 @@ protected: if (targets[i] == 0) continue; - QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display(),targets[i]); + QStringList formatsForAtom = mimeFormatsForAtom(m_clipboard->screen()->display()->nativeDisplay(),targets[i]); for (int j = 0; j < formatsForAtom.size(); ++j) { if (!formatList.contains(formatsForAtom.at(j))) that->formatList.append(formatsForAtom.at(j)); @@ -124,17 +125,17 @@ protected: atoms.append(targets[i]); QByteArray encoding; - Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display(),fmt, requestedType, atoms, &encoding); + Atom fmtatom = mimeAtomForFormat(m_clipboard->screen()->display()->nativeDisplay(),fmt, requestedType, atoms, &encoding); if (fmtatom == 0) return QVariant(); - return mimeConvertToFormat(m_clipboard->screen()->display(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); + return mimeConvertToFormat(m_clipboard->screen()->display()->nativeDisplay(),fmtatom, m_clipboard->getDataInFormat(modeAtom,fmtatom), fmt, requestedType, encoding); } private: bool empty() const { - Window win = XGetSelectionOwner(m_clipboard->screen()->display(), modeAtom); + Window win = XGetSelectionOwner(m_clipboard->screen()->display()->nativeDisplay(), modeAtom); return win == XNone; } @@ -167,7 +168,7 @@ const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const QXlibClipboard *that = const_cast<QXlibClipboard *>(this); that->m_xClipboard = new QXlibClipboardMime(mode,that); } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); + Window clipboardOwner = XGetSelectionOwner(screen()->display()->nativeDisplay(),QXlibStatic::atom(QXlibStatic::CLIPBOARD)); if (clipboardOwner == owner()) { return m_clientClipboard; } else { @@ -178,7 +179,7 @@ const QMimeData * QXlibClipboard::mimeData(QClipboard::Mode mode) const QXlibClipboard *that = const_cast<QXlibClipboard *>(this); that->m_xSelection = new QXlibClipboardMime(mode,that); } - Window clipboardOwner = XGetSelectionOwner(screen()->display(),XA_PRIMARY); + Window clipboardOwner = XGetSelectionOwner(screen()->display()->nativeDisplay(),XA_PRIMARY); if (clipboardOwner == owner()) { return m_clientSelection; } else { @@ -218,9 +219,9 @@ void QXlibClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) *d = data; } - XSetSelectionOwner(m_screen->display(), modeAtom, newOwner, CurrentTime); + XSetSelectionOwner(m_screen->display()->nativeDisplay(), modeAtom, newOwner, CurrentTime); - if (XGetSelectionOwner(m_screen->display(), modeAtom) != newOwner) { + if (XGetSelectionOwner(m_screen->display()->nativeDisplay(), modeAtom) != newOwner) { qWarning("QClipboard::setData: Cannot set X11 selection owner"); } @@ -244,7 +245,7 @@ Window QXlibClipboard::requestor() const if (!m_requestor) { int x = 0, y = 0, w = 3, h = 3; QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + Window window = XCreateSimpleWindow(m_screen->display()->nativeDisplay(), m_screen->rootWindow(), x, y, w, h, 0 /*border_width*/, m_screen->blackPixel(), m_screen->whitePixel()); that->setRequestor(window); @@ -255,7 +256,7 @@ Window QXlibClipboard::requestor() const void QXlibClipboard::setRequestor(Window window) { if (m_requestor != XNone) { - XDestroyWindow(m_screen->display(),m_requestor); + XDestroyWindow(m_screen->display()->nativeDisplay(),m_requestor); } m_requestor = window; } @@ -265,7 +266,7 @@ Window QXlibClipboard::owner() const if (!m_owner) { int x = 0, y = 0, w = 3, h = 3; QXlibClipboard *that = const_cast<QXlibClipboard *>(this); - Window window = XCreateSimpleWindow(m_screen->display(), m_screen->rootWindow(), + Window window = XCreateSimpleWindow(m_screen->display()->nativeDisplay(), m_screen->rootWindow(), x, y, w, h, 0 /*border_width*/, m_screen->blackPixel(), m_screen->whitePixel()); that->setOwner(window); @@ -276,7 +277,7 @@ Window QXlibClipboard::owner() const void QXlibClipboard::setOwner(Window window) { if (m_owner != XNone){ - XDestroyWindow(m_screen->display(),m_owner); + XDestroyWindow(m_screen->display()->nativeDisplay(),m_owner); } m_owner = window; } @@ -286,7 +287,7 @@ Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom prop QVector<Atom> types; QStringList formats = QInternalMimeData::formatsHelper(d); for (int i = 0; i < formats.size(); ++i) { - QList<Atom> atoms = QXlibMime::mimeAtomsForFormat(screen()->display(),formats.at(i)); + QList<Atom> atoms = QXlibMime::mimeAtomsForFormat(screen()->display()->nativeDisplay(),formats.at(i)); for (int j = 0; j < atoms.size(); ++j) { if (!types.contains(atoms.at(j))) types.append(atoms.at(j)); @@ -297,7 +298,7 @@ Atom QXlibClipboard::sendTargetsSelection(QMimeData *d, Window window, Atom prop types.append(QXlibStatic::atom(QXlibStatic::TIMESTAMP)); types.append(QXlibStatic::atom(QXlibStatic::SAVE_TARGETS)); - XChangeProperty(screen()->display(), window, property, XA_ATOM, 32, + XChangeProperty(screen()->display()->nativeDisplay(), window, property, XA_ATOM, 32, PropModeReplace, (uchar *) types.data(), types.size()); return property; } @@ -308,14 +309,14 @@ Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Ato int dataFormat = 0; QByteArray data; - QString fmt = QXlibMime::mimeAtomToString(screen()->display(), target); + QString fmt = QXlibMime::mimeAtomToString(screen()->display()->nativeDisplay(), target); if (fmt.isEmpty()) { // Not a MIME type we have qDebug() << "QClipboard: send_selection(): converting to type '%s' is not supported" << fmt.data(); return XNone; } qDebug() << "QClipboard: send_selection(): converting to type '%s'" << fmt.data(); - if (QXlibMime::mimeDataForAtom(screen()->display(),target, d, &data, &atomFormat, &dataFormat)) { + if (QXlibMime::mimeDataForAtom(screen()->display()->nativeDisplay(),target, d, &data, &atomFormat, &dataFormat)) { // don't allow INCR transfers when using MULTIPLE or to // Motif clients (since Motif doesn't support INCR) @@ -323,10 +324,10 @@ Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Ato bool allow_incr = property != motif_clip_temporary; // X_ChangeProperty protocol request is 24 bytes - const int increment = (XMaxRequestSize(screen()->display()) * 4) - 24; + const int increment = (XMaxRequestSize(screen()->display()->nativeDisplay()) * 4) - 24; if (data.size() > increment && allow_incr) { long bytes = data.size(); - XChangeProperty(screen()->display(), window, property, + XChangeProperty(screen()->display()->nativeDisplay(), window, property, QXlibStatic::atom(QXlibStatic::INCR), 32, PropModeReplace, (uchar *) &bytes, 1); // (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment); @@ -339,7 +340,7 @@ Atom QXlibClipboard::sendSelection(QMimeData *d, Atom target, Window window, Ato return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend? int dataSize = data.size() / (dataFormat / 8); // use a single request to transfer data - XChangeProperty(screen()->display(), window, property, atomFormat, + XChangeProperty(screen()->display()->nativeDisplay(), window, property, atomFormat, dataFormat, PropModeReplace, (uchar *) data.data(), dataSize); } @@ -371,13 +372,13 @@ void QXlibClipboard::handleSelectionRequest(XEvent *xevent) d = m_clientClipboard; } else { qWarning("QClipboard: Unknown selection '%lx'", req->selection); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + XSendEvent(screen()->display()->nativeDisplay(), req->requestor, False, NoEventMask, &event); return; } if (!d) { qWarning("QClipboard: Cannot transfer data, no data available"); - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + XSendEvent(screen()->display()->nativeDisplay(), req->requestor, False, NoEventMask, &event); return; } @@ -399,7 +400,7 @@ void QXlibClipboard::handleSelectionRequest(XEvent *xevent) 0, &multi_type, &multi_format) || multi_format != 32) { // MULTIPLE property not formatted correctly - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + XSendEvent(screen()->display()->nativeDisplay(), req->requestor, False, NoEventMask, &event); return; } nmulti = multi_data.size()/sizeof(*multi); @@ -427,7 +428,7 @@ void QXlibClipboard::handleSelectionRequest(XEvent *xevent) ; } else if (target == xa_timestamp) { // if (d->timestamp != CurrentTime) { -// XChangeProperty(screen()->display(), req->requestor, property, XA_INTEGER, 32, +// XChangeProperty(screen()->display()->nativeDisplay(), req->requestor, property, XA_INTEGER, 32, // PropModeReplace, CurrentTime, 1); // ret = property; // } else { @@ -454,7 +455,7 @@ void QXlibClipboard::handleSelectionRequest(XEvent *xevent) if (multi_writeback) { // according to ICCCM 2.6.2 says to put None back // into the original property on the requestor window - XChangeProperty(screen()->display(), req->requestor, req->property, multi_type, 32, + XChangeProperty(screen()->display()->nativeDisplay(), req->requestor, req->property, multi_type, 32, PropModeReplace, (uchar *) multi, nmulti * 2); } @@ -463,7 +464,7 @@ void QXlibClipboard::handleSelectionRequest(XEvent *xevent) } // send selection notify to requestor - XSendEvent(screen()->display(), req->requestor, False, NoEventMask, &event); + XSendEvent(screen()->display()->nativeDisplay(), req->requestor, False, NoEventMask, &event); } static inline int maxSelectionIncr(Display *dpy) @@ -471,7 +472,7 @@ static inline int maxSelectionIncr(Display *dpy) bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool deleteProperty, QByteArray *buffer, int *size, Atom *type, int *format) const { - int maxsize = maxSelectionIncr(screen()->display()); + int maxsize = maxSelectionIncr(screen()->display()->nativeDisplay()); ulong bytes_left; // bytes_after ulong length; // nitems uchar *data; @@ -485,7 +486,7 @@ bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool delet format = &dummy_format; // Don't read anything, just get the size of the property data - r = XGetWindowProperty(screen()->display(), win, property, 0, 0, False, + r = XGetWindowProperty(screen()->display()->nativeDisplay(), win, property, 0, 0, False, AnyPropertyType, type, format, &length, &bytes_left, &data); if (r != Success || (type && *type == XNone)) { @@ -524,7 +525,7 @@ bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool delet while (bytes_left) { // more to read... - r = XGetWindowProperty(screen()->display(), win, property, offset, maxsize/4, + r = XGetWindowProperty(screen()->display()->nativeDisplay(), win, property, offset, maxsize/4, False, AnyPropertyType, type, format, &length, &bytes_left, &data); if (r != Success || (type && *type == XNone)) @@ -559,7 +560,7 @@ bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool delet char **list_ret = 0; int count; - if (XmbTextPropertyToTextList(screen()->display(), &textprop, &list_ret, + if (XmbTextPropertyToTextList(screen()->display()->nativeDisplay(), &textprop, &list_ret, &count) == Success && count && list_ret) { offset = buffer_offset = strlen(list_ret[0]); buffer->resize(offset); @@ -574,9 +575,9 @@ bool QXlibClipboard::clipboardReadProperty(Window win, Atom property, bool delet *size = buffer_offset; if (deleteProperty) - XDeleteProperty(screen()->display(), win, property); + XDeleteProperty(screen()->display()->nativeDisplay(), win, property); - XFlush(screen()->display()); + screen()->display()->flush(); return ok; } @@ -600,7 +601,7 @@ QByteArray QXlibClipboard::clipboardReadIncrementalProperty(Window win, Atom pro } for (;;) { - XFlush(screen()->display()); + screen()->display()->flush(); if (!screen()->waitForClipboardEvent(win,PropertyNotify,&event,clipboard_timeout)) break; if (event.xproperty.atom != property || @@ -645,11 +646,11 @@ QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) Window win = requestor(); - XSelectInput(screen()->display(), win, NoEventMask); // don't listen for any events + XSelectInput(screen()->display()->nativeDisplay(), win, NoEventMask); // don't listen for any events - XDeleteProperty(screen()->display(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); - XConvertSelection(screen()->display(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); - XSync(screen()->display(), false); + XDeleteProperty(screen()->display()->nativeDisplay(), win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION)); + XConvertSelection(screen()->display()->nativeDisplay(), modeAtom, fmtatom, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), win, CurrentTime); + screen()->display()->sync(); XEvent xevent; if (!screen()->waitForClipboardEvent(win,SelectionNotify,&xevent,clipboard_timeout) || @@ -658,7 +659,7 @@ QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) } Atom type; - XSelectInput(screen()->display(), win, PropertyChangeMask); + XSelectInput(screen()->display()->nativeDisplay(), win, PropertyChangeMask); if (clipboardReadProperty(win, QXlibStatic::atom(QXlibStatic::_QT_SELECTION), true, &buf, 0, &type, 0)) { if (type == QXlibStatic::atom(QXlibStatic::INCR)) { @@ -667,7 +668,7 @@ QByteArray QXlibClipboard::getDataInFormat(Atom modeAtom, Atom fmtatom) } } - XSelectInput(screen()->display(), win, NoEventMask); + XSelectInput(screen()->display()->nativeDisplay(), win, NoEventMask); return buf; diff --git a/src/plugins/platforms/xlib/qxlibcursor.cpp b/src/plugins/platforms/xlib/qxlibcursor.cpp index e4d248c..074d2f7 100644 --- a/src/plugins/platforms/xlib/qxlibcursor.cpp +++ b/src/plugins/platforms/xlib/qxlibcursor.cpp @@ -44,6 +44,7 @@ #include "qxlibintegration.h" #include "qxlibscreen.h" #include "qxlibwindow.h" +#include "qxlibdisplay.h" #include <QtGui/QBitmap> @@ -121,11 +122,11 @@ Cursor QXlibCursor::createCursorBitmap(QCursor * cursor) memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); } - Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, mapBits, width, height); - Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display(), rootwin, maskBits, width, height); - Cursor c = XCreatePixmapCursor(testLiteScreen()->display(), cp, mp, &fg, &bg, spot.x(), spot.y()); - XFreePixmap(testLiteScreen()->display(), cp); - XFreePixmap(testLiteScreen()->display(), mp); + Pixmap cp = XCreateBitmapFromData(testLiteScreen()->display()->nativeDisplay(), rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(testLiteScreen()->display()->nativeDisplay(), rootwin, maskBits, width, height); + Cursor c = XCreatePixmapCursor(testLiteScreen()->display()->nativeDisplay(), cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(testLiteScreen()->display()->nativeDisplay(), cp); + XFreePixmap(testLiteScreen()->display()->nativeDisplay(), mp); delete[] mapBits; delete[] maskBits; @@ -141,48 +142,48 @@ Cursor QXlibCursor::createCursorShape(int cshape) switch (cshape) { case Qt::ArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_left_ptr); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_left_ptr); break; case Qt::UpArrowCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_center_ptr); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_center_ptr); break; case Qt::CrossCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_crosshair); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_crosshair); break; case Qt::WaitCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_watch); break; case Qt::IBeamCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_xterm); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_xterm); break; case Qt::SizeAllCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_fleur); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_fleur); break; case Qt::PointingHandCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_hand2); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_hand2); break; case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_top_right_corner); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_top_right_corner); break; case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_bottom_right_corner); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_bottom_right_corner); break; case Qt::SizeVerCursor: case Qt::SplitVCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_v_double_arrow); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_sb_v_double_arrow); break; case Qt::SizeHorCursor: case Qt::SplitHCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_sb_h_double_arrow); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_sb_h_double_arrow); break; case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_question_arrow); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_question_arrow); break; case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_circle); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_circle); break; case Qt::BusyCursor: - cursor = XCreateFontCursor(testLiteScreen()->display(), XC_watch); + cursor = XCreateFontCursor(testLiteScreen()->display()->nativeDisplay(), XC_watch); break; default: //default cursor for all the rest diff --git a/src/plugins/platforms/xlib/qxlibdisplay.cpp b/src/plugins/platforms/xlib/qxlibdisplay.cpp new file mode 100644 index 0000000..3b60af2 --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibdisplay.cpp @@ -0,0 +1,37 @@ +#include "qxlibdisplay.h" + +QXlibDisplay::QXlibDisplay(Display *display) + : mDisplay(display) +{ + if (!mDisplay) { + qFatal("Cannot connect to X server"); + } + mDisplayName = QString::fromLocal8Bit(DisplayString(mDisplay)); +} + +QXlibDisplay::~QXlibDisplay() +{ + XCloseDisplay(mDisplay); +} + +QString QXlibDisplay::displayName() const +{ + { return mDisplayName; } +} + + + +Display * QXlibDisplay::nativeDisplay() const +{ + return mDisplay; +} + +void QXlibDisplay::sync() const +{ + XSync(mDisplay, False); +} + +void QXlibDisplay::flush() const +{ + XFlush(mDisplay); +} diff --git a/src/plugins/platforms/xlib/qxlibdisplay.h b/src/plugins/platforms/xlib/qxlibdisplay.h new file mode 100644 index 0000000..f2cca9e --- /dev/null +++ b/src/plugins/platforms/xlib/qxlibdisplay.h @@ -0,0 +1,22 @@ +#ifndef QXLIBDISPLAY_H +#define QXLIBDISPLAY_H + +#include "qxlibintegration.h" + +class QXlibDisplay +{ +public: + QXlibDisplay(Display *display); + ~QXlibDisplay(); + QString displayName() const; + + Display *nativeDisplay() const; + + void sync() const; + void flush() const; +private: + Display *mDisplay; + QString mDisplayName; +}; + +#endif // QXLIBDISPLAY_H diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp index 46eabbf..e3ebb13 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.cpp +++ b/src/plugins/platforms/xlib/qxlibintegration.cpp @@ -48,6 +48,7 @@ #include "qgenericunixfontdatabase.h" #include "qxlibscreen.h" #include "qxlibclipboard.h" +#include "qxlibdisplay.h" #if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) @@ -143,7 +144,7 @@ bool QXlibIntegration::hasOpenGL() const const QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); EGLint major, minor; eglBindAPI(EGL_OPENGL_ES_API); - EGLDisplay disp = eglGetDisplay(screen->display()); + EGLDisplay disp = eglGetDisplay(screen->display()->nativeDisplay()); wasEglInitialized = eglInitialize(disp,&major,&minor); } return wasEglInitialized; diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.cpp b/src/plugins/platforms/xlib/qxlibkeyboard.cpp index a1e38b0..690d273 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.cpp +++ b/src/plugins/platforms/xlib/qxlibkeyboard.cpp @@ -42,6 +42,7 @@ #include "qxlibkeyboard.h" #include "qxlibscreen.h" +#include "qxlibdisplay.h" #include <QtGui/QWindowSystemInterface> @@ -951,7 +952,7 @@ QXlibKeyboard::QXlibKeyboard(QXlibScreen *screen) void QXlibKeyboard::changeLayout() { - XkbDescPtr xkbDesc = XkbGetMap(m_screen->display(), XkbAllClientInfoMask, XkbUseCoreKbd); + XkbDescPtr xkbDesc = XkbGetMap(m_screen->display()->nativeDisplay(), XkbAllClientInfoMask, XkbUseCoreKbd); for (int i = xkbDesc->min_key_code; i < xkbDesc->max_key_code; ++i) { const uint mask = xkbDesc->map->modmap ? xkbDesc->map->modmap[i] : 0; if (mask == 0) { diff --git a/src/plugins/platforms/xlib/qxlibscreen.cpp b/src/plugins/platforms/xlib/qxlibscreen.cpp index ef04fb2..5a9aca9 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.cpp +++ b/src/plugins/platforms/xlib/qxlibscreen.cpp @@ -46,6 +46,7 @@ #include "qxlibkeyboard.h" #include "qxlibstatic.h" #include "qxlibclipboard.h" +#include "qxlibdisplay.h" #include <QtCore/QDebug> #include <QtCore/QSocketNotifier> @@ -192,36 +193,32 @@ QXlibScreen::QXlibScreen() : mFormat(QImage::Format_RGB32) { char *display_name = getenv("DISPLAY"); - mDisplay = XOpenDisplay(display_name); - mDisplayName = QString::fromLocal8Bit(display_name); - if (!mDisplay) { - fprintf(stderr, "Cannot connect to X server: %s\n", - display_name); - exit(1); - } + Display *display = XOpenDisplay(display_name); + mDisplay = new QXlibDisplay(display); + #ifndef DONT_USE_MIT_SHM - Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay); + Status MIT_SHM_extension_supported = XShmQueryExtension (mDisplay->nativeDisplay()); Q_ASSERT(MIT_SHM_extension_supported == True); #endif original_x_errhandler = XSetErrorHandler(qt_x_errhandler); if (qgetenv("DO_X_SYNCHRONIZE").toInt()) - XSynchronize(mDisplay, true); + XSynchronize(mDisplay->nativeDisplay(), true); - mScreen = DefaultScreen(mDisplay); - XSelectInput(mDisplay,rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); - int width = DisplayWidth(mDisplay, mScreen); - int height = DisplayHeight(mDisplay, mScreen); + mScreen = DefaultScreen(mDisplay->nativeDisplay()); + XSelectInput(mDisplay->nativeDisplay(),rootWindow(), KeymapStateMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask); + int width = DisplayWidth(mDisplay->nativeDisplay(), mScreen); + int height = DisplayHeight(mDisplay->nativeDisplay(), mScreen); mGeometry = QRect(0,0,width,height); - int physicalWidth = DisplayWidthMM(mDisplay, mScreen); - int physicalHeight = DisplayHeightMM(mDisplay, mScreen); + int physicalWidth = DisplayWidthMM(mDisplay->nativeDisplay(), mScreen); + int physicalHeight = DisplayHeightMM(mDisplay->nativeDisplay(), mScreen); mPhysicalSize = QSize(physicalWidth,physicalHeight); - int xSocketNumber = XConnectionNumber(mDisplay); + int xSocketNumber = XConnectionNumber(mDisplay->nativeDisplay()); - mDepth = DefaultDepth(mDisplay,mScreen); + mDepth = DefaultDepth(mDisplay->nativeDisplay(),mScreen); #ifdef MYX11_DEBUG qDebug() << "X socket:"<< xSocketNumber; #endif @@ -235,7 +232,22 @@ QXlibScreen::QXlibScreen() QXlibScreen::~QXlibScreen() { delete mCursor; - XCloseDisplay(mDisplay); + delete mDisplay; +} + +Window QXlibScreen::rootWindow() +{ + return RootWindow(mDisplay->nativeDisplay(), mScreen); +} + +unsigned long QXlibScreen::blackPixel() +{ + return BlackPixel(mDisplay->nativeDisplay(), mScreen); +} + +unsigned long QXlibScreen::whitePixel() +{ + return WhitePixel(mDisplay->nativeDisplay(), mScreen); } #ifdef KeyPress @@ -358,15 +370,15 @@ bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int QElapsedTimer timer; timer.start(); do { - if (XCheckTypedWindowEvent(mDisplay,win,type,event)) + if (XCheckTypedWindowEvent(mDisplay->nativeDisplay(),win,type,event)) return true; // process other clipboard events, since someone is probably requesting data from us XEvent e; - if (XCheckIfEvent(mDisplay, &e, checkForClipboardEvents, 0)) + if (XCheckIfEvent(mDisplay->nativeDisplay(), &e, checkForClipboardEvents, 0)) handleEvent(&e); - XFlush(mDisplay); + mDisplay->flush(); // sleep 50 ms, so we don't use up CPU cycles all the time. struct timeval usleep_tv; @@ -379,11 +391,11 @@ bool QXlibScreen::waitForClipboardEvent(Window win, int type, XEvent *event, int void QXlibScreen::eventDispatcher() { - ulong marker = XNextRequest(mDisplay); + ulong marker = XNextRequest(mDisplay->nativeDisplay()); // int i = 0; - while (XPending(mDisplay)) { + while (XPending(mDisplay->nativeDisplay())) { XEvent event; - XNextEvent(mDisplay, &event); + XNextEvent(mDisplay->nativeDisplay(), &event); /* done = */ handleEvent(&event); @@ -392,7 +404,7 @@ void QXlibScreen::eventDispatcher() qDebug() << "potential livelock averted"; #endif #if 0 - if (XEventsQueued(mDisplay, QueuedAfterFlush)) { + if (XEventsQueued(mDisplay->nativeDisplay(), QueuedAfterFlush)) { qDebug() << " with events queued"; QTimer::singleShot(0, this, SLOT(eventDispatcher())); } @@ -412,7 +424,7 @@ QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) window = rootWindow(); XWindowAttributes window_attr; - if (!XGetWindowAttributes(mDisplay, window, &window_attr)) + if (!XGetWindowAttributes(mDisplay->nativeDisplay(), window, &window_attr)) return QImage(); if (w < 0) @@ -424,7 +436,7 @@ QImage QXlibScreen::grabWindow(Window window, int x, int y, int w, int h) // that it's "unsafe" to go outside the screen, so we can ignore that problem. //We're definitely not optimizing for speed... - XImage *xi = XGetImage(mDisplay, window, x, y, w, h, AllPlanes, ZPixmap); + XImage *xi = XGetImage(mDisplay->nativeDisplay(), window, x, y, w, h, AllPlanes, ZPixmap); if (!xi) return QImage(); @@ -443,7 +455,7 @@ QXlibScreen * QXlibScreen::testLiteScreenForWidget(QWidget *widget) return static_cast<QXlibScreen *>(platformScreen); } -Display * QXlibScreen::display() const +QXlibDisplay * QXlibScreen::display() const { return mDisplay; } @@ -453,6 +465,11 @@ int QXlibScreen::xScreenNumber() const return mScreen; } +Visual * QXlibScreen::defaultVisual() const +{ + DefaultVisual(display()->nativeDisplay(), xScreenNumber()); +} + QXlibKeyboard * QXlibScreen::keyboard() const { return mKeyboard; diff --git a/src/plugins/platforms/xlib/qxlibscreen.h b/src/plugins/platforms/xlib/qxlibscreen.h index c8043fb..8dac41d 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.h +++ b/src/plugins/platforms/xlib/qxlibscreen.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE class QXlibCursor; class QXlibKeyboard; +class QXlibDisplay; class QXlibScreen : public QPlatformScreen { @@ -58,16 +59,14 @@ public: ~QXlibScreen(); - QString displayName() const { return mDisplayName; } - QRect geometry() const { return mGeometry; } int depth() const { return mDepth; } QImage::Format format() const { return mFormat; } QSize physicalSize() const { return mPhysicalSize; } - Window rootWindow() { return RootWindow(mDisplay, mScreen); } - unsigned long blackPixel() { return BlackPixel(mDisplay, mScreen); } - unsigned long whitePixel() { return WhitePixel(mDisplay, mScreen); } + Window rootWindow(); + unsigned long blackPixel(); + unsigned long whitePixel(); bool handleEvent(XEvent *xe); bool waitForClipboardEvent(Window win, int type, XEvent *event, int timeout); @@ -76,9 +75,11 @@ public: static QXlibScreen *testLiteScreenForWidget(QWidget *widget); - Display *display() const; + QXlibDisplay *display() const; int xScreenNumber() const; + Visual *defaultVisual() const; + QXlibKeyboard *keyboard() const; public slots: @@ -87,7 +88,6 @@ public slots: private: void handleSelectionRequest(XEvent *event); - QString mDisplayName; QRect mGeometry; QSize mPhysicalSize; int mDepth; @@ -95,7 +95,7 @@ private: QXlibCursor *mCursor; QXlibKeyboard *mKeyboard; - Display * mDisplay; + QXlibDisplay * mDisplay; int mScreen; }; diff --git a/src/plugins/platforms/xlib/qxlibstatic.cpp b/src/plugins/platforms/xlib/qxlibstatic.cpp index 3ce5768..f67fbdc 100644 --- a/src/plugins/platforms/xlib/qxlibstatic.cpp +++ b/src/plugins/platforms/xlib/qxlibstatic.cpp @@ -41,6 +41,7 @@ #include "qxlibstatic.h" #include "qxlibscreen.h" +#include "qxlibdisplay.h" #include <qplatformdefs.h> @@ -366,7 +367,7 @@ private: Q_ASSERT(i == QXlibStatic::NPredefinedAtoms); QByteArray settings_atom_name("_QT_SETTINGS_TIMESTAMP_"); - settings_atom_name += XDisplayName(qPrintable(screen->displayName())); + settings_atom_name += XDisplayName(qPrintable(screen->display()->displayName())); names[i++] = settings_atom_name; Q_ASSERT(i == QXlibStatic::NAtoms); @@ -374,7 +375,7 @@ private: XInternAtoms(screen->display(), (char **)names, i, False, m_allAtoms); #else for (i = 0; i < QXlibStatic::NAtoms; ++i) - m_allAtoms[i] = XInternAtom(screen->display(), (char *)names[i], False); + m_allAtoms[i] = XInternAtom(screen->display()->nativeDisplay(), (char *)names[i], False); #endif } @@ -386,7 +387,7 @@ private: unsigned long nitems, after; unsigned char *data = 0; - int e = XGetWindowProperty(screen->display(), screen->rootWindow(), + int e = XGetWindowProperty(screen->display()->nativeDisplay(), screen->rootWindow(), this->atom(QXlibStatic::_NET_SUPPORTED), 0, 0, False, XA_ATOM, &type, &format, &nitems, &after, &data); if (data) @@ -397,7 +398,7 @@ private: ts.open(QIODevice::WriteOnly); while (after > 0) { - XGetWindowProperty(screen->display(), screen->rootWindow(), + XGetWindowProperty(screen->display()->nativeDisplay(), screen->rootWindow(), this->atom(QXlibStatic::_NET_SUPPORTED), offset, 1024, False, XA_ATOM, &type, &format, &nitems, &after, &data); @@ -427,7 +428,7 @@ private: { #ifndef QT_NO_XFIXES // See if Xfixes is supported on the connected display - if (XQueryExtension(screen->display(), "XFIXES", &xfixes_major, + if (XQueryExtension(screen->display()->nativeDisplay(), "XFIXES", &xfixes_major, &xfixes_eventbase, &xfixes_errorbase)) { ptrXFixesQueryExtension = XFIXES_LOAD_V1(XFixesQueryExtension); ptrXFixesQueryVersion = XFIXES_LOAD_V1(XFixesQueryVersion); @@ -435,7 +436,7 @@ private: ptrXFixesSelectSelectionInput = XFIXES_LOAD_V2(XFixesSelectSelectionInput); if(ptrXFixesQueryExtension && ptrXFixesQueryVersion - && ptrXFixesQueryExtension(screen->display(), &xfixes_eventbase, + && ptrXFixesQueryExtension(screen->display()->nativeDisplay(), &xfixes_eventbase, &xfixes_errorbase)) { // Xfixes is supported. // Note: the XFixes protocol version is negotiated using QueryVersion. @@ -446,7 +447,7 @@ private: // X server when it receives an XFixes request is undefined. int major = 3; int minor = 0; - ptrXFixesQueryVersion(screen->display(), &major, &minor); + ptrXFixesQueryVersion(screen->display()->nativeDisplay(), &major, &minor); use_xfixes = (major >= 1); xfixes_major = major; } diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp index ddd4002..90b36cf 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.cpp +++ b/src/plugins/platforms/xlib/qxlibwindow.cpp @@ -45,6 +45,7 @@ #include "qxlibscreen.h" #include "qxlibkeyboard.h" #include "qxlibstatic.h" +#include "qxlibdisplay.h" #include <QtGui/QWindowSystemInterface> #include <QSocketNotifier> @@ -86,9 +87,9 @@ QXlibWindow::QXlibWindow(QWidget *window) #else QPlatformWindowFormat windowFormat = correctColorBuffers(window->platformWindowFormat()); - EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()); + EGLDisplay eglDisplay = eglGetDisplay(mScreen->display()->nativeDisplay()); EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,windowFormat); - VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display(),eglConfig); + VisualID id = QXlibEglIntegration::getCompatibleVisualId(mScreen->display()->nativeDisplay(),eglConfig); XVisualInfo visualInfoTemplate; memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); @@ -96,14 +97,14 @@ QXlibWindow::QXlibWindow(QWidget *window) XVisualInfo *visualInfo; int matchingCount = 0; - visualInfo = XGetVisualInfo(mScreen->display(), VisualIDMask, &visualInfoTemplate, &matchingCount); + visualInfo = XGetVisualInfo(mScreen->display()->nativeDisplay(), VisualIDMask, &visualInfoTemplate, &matchingCount); #endif //!defined(QT_OPENGL_ES_2) if (visualInfo) { - Colormap cmap = XCreateColormap(mScreen->display(),mScreen->rootWindow(),visualInfo->visual,AllocNone); + Colormap cmap = XCreateColormap(mScreen->display()->nativeDisplay(),mScreen->rootWindow(),visualInfo->visual,AllocNone); XSetWindowAttributes a; a.colormap = cmap; - x_window = XCreateWindow(mScreen->display(), mScreen->rootWindow(),x, y, w, h, + x_window = XCreateWindow(mScreen->display()->nativeDisplay(), mScreen->rootWindow(),x, y, w, h, 0, visualInfo->depth, InputOutput, visualInfo->visual, CWColormap, &a); } else { @@ -111,7 +112,7 @@ QXlibWindow::QXlibWindow(QWidget *window) } #endif //!defined(QT_NO_OPENGL) } else { - x_window = XCreateSimpleWindow(mScreen->display(), mScreen->rootWindow(), + x_window = XCreateSimpleWindow(mScreen->display()->nativeDisplay(), mScreen->rootWindow(), x, y, w, h, 0 /*border_width*/, mScreen->blackPixel(), mScreen->whitePixel()); } @@ -120,9 +121,9 @@ QXlibWindow::QXlibWindow(QWidget *window) qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; #endif - XSetWindowBackgroundPixmap(mScreen->display(), x_window, XNone); + XSetWindowBackgroundPixmap(mScreen->display()->nativeDisplay(), x_window, XNone); - XSelectInput(mScreen->display(), x_window, + XSelectInput(mScreen->display()->nativeDisplay(), x_window, ExposureMask | KeyPressMask | KeyReleaseMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | @@ -141,7 +142,7 @@ QXlibWindow::QXlibWindow(QWidget *window) #endif // QT_NO_XSYNC if (window->windowFlags() & Qt::WindowContextHelpButtonHint) protocols[n++] = QXlibStatic::atom(QXlibStatic::_NET_WM_CONTEXT_HELP); - XSetWMProtocols(mScreen->display(), x_window, protocols, n); + XSetWMProtocols(mScreen->display()->nativeDisplay(), x_window, protocols, n); } @@ -152,8 +153,8 @@ QXlibWindow::~QXlibWindow() qDebug() << "~QTestLiteWindow" << hex << x_window; #endif delete mGLContext; - XFreeGC(mScreen->display(), gc); - XDestroyWindow(mScreen->display(), x_window); + XFreeGC(mScreen->display()->nativeDisplay(), gc); + XDestroyWindow(mScreen->display()->nativeDisplay(), x_window); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -245,7 +246,7 @@ void QXlibWindow::handleFocusOutEvent() void QXlibWindow::setGeometry(const QRect &rect) { - XMoveResizeWindow(mScreen->display(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); + XMoveResizeWindow(mScreen->display()->nativeDisplay(), x_window, rect.x(), rect.y(), rect.width(), rect.height()); QPlatformWindow::setGeometry(rect); } @@ -263,17 +264,17 @@ WId QXlibWindow::winId() const void QXlibWindow::setParent(const QPlatformWindow *window) { QPoint topLeft = geometry().topLeft(); - XReparentWindow(mScreen->display(),x_window,window->winId(),topLeft.x(),topLeft.y()); + XReparentWindow(mScreen->display()->nativeDisplay(),x_window,window->winId(),topLeft.x(),topLeft.y()); } void QXlibWindow::raise() { - XRaiseWindow(mScreen->display(), x_window); + XRaiseWindow(mScreen->display()->nativeDisplay(), x_window); } void QXlibWindow::lower() { - XLowerWindow(mScreen->display(), x_window); + XLowerWindow(mScreen->display()->nativeDisplay(), x_window); } void QXlibWindow::setWindowTitle(const QString &title) @@ -285,14 +286,14 @@ void QXlibWindow::setWindowTitle(const QString &title) windowName.format = 8; windowName.nitems = ba.length(); - XSetWMName(mScreen->display(), x_window, &windowName); + XSetWMName(mScreen->display()->nativeDisplay(), x_window, &windowName); } GC QXlibWindow::createGC() { GC gc; - gc = XCreateGC(mScreen->display(), x_window, 0, 0); + gc = XCreateGC(mScreen->display()->nativeDisplay(), x_window, 0, 0); if (gc < 0) { qWarning("QTestLiteWindow::createGC() could not create GC"); } @@ -311,7 +312,7 @@ void QXlibWindow::paintEvent() void QXlibWindow::requestActivateWindow() { - XSetInputFocus(mScreen->display(), x_window, XRevertToParent, CurrentTime); + XSetInputFocus(mScreen->display()->nativeDisplay(), x_window, XRevertToParent, CurrentTime); } void QXlibWindow::resizeEvent(XConfigureEvent *e) @@ -365,7 +366,7 @@ QXlibMWMHints QXlibWindow::getMWMHints() const ulong nitems, bytesLeft; uchar *data = 0; Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); - if ((XGetWindowProperty(mScreen->display(), x_window, atomForMotifWmHints, 0, 5, false, + if ((XGetWindowProperty(mScreen->display()->nativeDisplay(), x_window, atomForMotifWmHints, 0, 5, false, atomForMotifWmHints, &type, &format, &nitems, &bytesLeft, &data) == Success) && (type == atomForMotifWmHints @@ -390,11 +391,11 @@ void QXlibWindow::setMWMHints(const QXlibMWMHints &mwmhints) { Atom atomForMotifWmHints = QXlibStatic::atom(QXlibStatic::_MOTIF_WM_HINTS); if (mwmhints.flags != 0l) { - XChangeProperty(mScreen->display(), x_window, + XChangeProperty(mScreen->display()->nativeDisplay(), x_window, atomForMotifWmHints, atomForMotifWmHints, 32, PropModeReplace, (unsigned char *) &mwmhints, 5); } else { - XDeleteProperty(mScreen->display(), x_window, atomForMotifWmHints); + XDeleteProperty(mScreen->display()->nativeDisplay(), x_window, atomForMotifWmHints); } } @@ -421,7 +422,7 @@ QVector<Atom> QXlibWindow::getNetWmState() const ulong propertyLength; ulong bytesLeft; uchar *propertyData = 0; - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, + if (XGetWindowProperty(mScreen->display()->nativeDisplay(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, 0, False, XA_ATOM, &actualType, &actualFormat, &propertyLength, &bytesLeft, &propertyData) == Success && actualType == XA_ATOM && actualFormat == 32) { @@ -429,7 +430,7 @@ QVector<Atom> QXlibWindow::getNetWmState() const XFree((char*) propertyData); // fetch all data - if (XGetWindowProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, + if (XGetWindowProperty(mScreen->display()->nativeDisplay(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), 0, returnValue.size(), False, XA_ATOM, &actualType, &actualFormat, &propertyLength, &bytesLeft, &propertyData) != Success) { returnValue.clear(); @@ -591,11 +592,11 @@ Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) } if (!netWmState.isEmpty()) { - XChangeProperty(mScreen->display(), x_window, + XChangeProperty(mScreen->display()->nativeDisplay(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE), XA_ATOM, 32, PropModeReplace, (unsigned char *) netWmState.data(), netWmState.size()); } else { - XDeleteProperty(mScreen->display(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); + XDeleteProperty(mScreen->display()->nativeDisplay(), x_window, QXlibStatic::atom(QXlibStatic::_NET_WM_STATE)); } //##### only if initializeWindow??? @@ -609,7 +610,7 @@ Qt::WindowFlags QXlibWindow::setWindowFlags(Qt::WindowFlags flags) wsa.override_redirect = True; wsa.save_under = True; - XChangeWindowAttributes(mScreen->display(), x_window, CWOverrideRedirect | CWSaveUnder, + XChangeWindowAttributes(mScreen->display()->nativeDisplay(), x_window, CWOverrideRedirect | CWSaveUnder, &wsa); } else { #ifdef MYX11_DEBUG @@ -634,22 +635,22 @@ void QXlibWindow::setVisible(bool visible) parentXWindow = parentWidnow->x_window; } } - XSetTransientForHint(mScreen->display(),x_window,parentXWindow); + XSetTransientForHint(mScreen->display()->nativeDisplay(),x_window,parentXWindow); } if (visible) { //ensure that the window is viewed in correct position. doSizeHints(); - XMapWindow(mScreen->display(), x_window); + XMapWindow(mScreen->display()->nativeDisplay(), x_window); } else { - XUnmapWindow(mScreen->display(), x_window); + XUnmapWindow(mScreen->display()->nativeDisplay(), x_window); } } void QXlibWindow::setCursor(const Cursor &cursor) { - XDefineCursor(mScreen->display(), x_window, cursor); - XFlush(mScreen->display()); + XDefineCursor(mScreen->display()->nativeDisplay(), x_window, cursor); + mScreen->display()->flush(); } QPlatformGLContext *QXlibWindow::glContext() const @@ -662,7 +663,7 @@ QPlatformGLContext *QXlibWindow::glContext() const #if !defined(QT_OPENGL_ES_2) that->mGLContext = new QGLXContext(x_window, mScreen,widget()->platformWindowFormat()); #else - EGLDisplay display = eglGetDisplay(mScreen->display()); + EGLDisplay display = eglGetDisplay(mScreen->display()->nativeDisplay()); QPlatformWindowFormat windowFormat = correctColorBuffers(widget()->platformWindowFormat()); @@ -706,7 +707,7 @@ void QXlibWindow::doSizeHints() s.flags |= PSize; s.flags |= PWinGravity; s.win_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity; - XSetWMNormalHints(mScreen->display(), x_window, &s); + XSetWMNormalHints(mScreen->display()->nativeDisplay(), x_window, &s); } QPlatformWindowFormat QXlibWindow::correctColorBuffers(const QPlatformWindowFormat &platformWindowFormat) const diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp index 92e1793..fa1e197 100644 --- a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp @@ -47,6 +47,7 @@ #include "qxlibwindow.h" #include "qxlibscreen.h" +#include "qxlibdisplay.h" # include <sys/ipc.h> # include <sys/shm.h> @@ -88,12 +89,11 @@ void QXlibWindowSurface::resizeShmImage(int width, int height) if (image_info) image_info->destroy(); else - image_info = new QXlibShmImageInfo(screen->display()); + image_info = new QXlibShmImageInfo(screen->display()->nativeDisplay()); - Visual *visual = DefaultVisual(screen->display(), screen->xScreenNumber()); + Visual *visual = screen->defaultVisual(); - - XImage *image = XShmCreateImage (screen->display(), visual, 24, ZPixmap, 0, + XImage *image = XShmCreateImage (screen->display()->nativeDisplay(), visual, 24, ZPixmap, 0, &image_info->shminfo, width, height); @@ -105,7 +105,7 @@ void QXlibWindowSurface::resizeShmImage(int width, int height) image_info->image = image; - Status shm_attach_status = XShmAttach(screen->display(), &image_info->shminfo); + Status shm_attach_status = XShmAttach(screen->display()->nativeDisplay(), &image_info->shminfo); Q_ASSERT(shm_attach_status == True); @@ -185,11 +185,11 @@ void QXlibWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPo // We could set send_event to true, and then use the ShmCompletion to synchronize, // but let's do like Qt/11 and just use XSync - XShmPutImage (screen->display(), window, gc, image_info->image, 0, 0, + XShmPutImage (screen->display()->nativeDisplay(), window, gc, image_info->image, 0, 0, x, y, image_info->image->width, image_info->image->height, /*send_event*/ False); - XSync(screen->display(), False); + screen->display()->sync(); } #endif } diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro index 999621b..dc22b80 100644 --- a/src/plugins/platforms/xlib/xlib.pro +++ b/src/plugins/platforms/xlib/xlib.pro @@ -13,7 +13,8 @@ SOURCES = \ qxlibkeyboard.cpp \ qxlibclipboard.cpp \ qxlibmime.cpp \ - qxlibstatic.cpp + qxlibstatic.cpp \ + qxlibdisplay.cpp HEADERS = \ qxlibintegration.h \ @@ -24,7 +25,8 @@ HEADERS = \ qxlibkeyboard.h \ qxlibclipboard.h \ qxlibmime.h \ - qxlibstatic.h + qxlibstatic.h \ + qxlibdisplay.h LIBS += -lX11 -lXext -- cgit v0.12 From 7629130b24c01d406f5dee8e6600538db666cfa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 24 Feb 2011 17:43:52 +0100 Subject: Lighthouse: Adding EGL support to the xcb plugin --- .../eglconvenience/qxlibeglintegration.cpp | 186 +++++++++++++++++++++ .../platforms/eglconvenience/qxlibeglintegration.h | 53 ++++++ src/plugins/platforms/xcb/qxcbconnection.cpp | 6 +- src/plugins/platforms/xcb/qxcbconnection.h | 4 +- src/plugins/platforms/xcb/qxcbintegration.cpp | 18 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 53 ++++-- src/plugins/platforms/xcb/qxcbwindow.h | 6 +- src/plugins/platforms/xcb/xcb.pro | 27 ++- src/plugins/platforms/xlib/qxlibeglintegration.cpp | 186 --------------------- src/plugins/platforms/xlib/qxlibeglintegration.h | 54 ------ src/plugins/platforms/xlib/qxlibwindow.cpp | 2 +- src/plugins/platforms/xlib/xlib.pro | 4 +- 12 files changed, 328 insertions(+), 271 deletions(-) create mode 100644 src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp create mode 100644 src/plugins/platforms/eglconvenience/qxlibeglintegration.h delete mode 100644 src/plugins/platforms/xlib/qxlibeglintegration.cpp delete mode 100644 src/plugins/platforms/xlib/qxlibeglintegration.h diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp b/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp new file mode 100644 index 0000000..1135d2f --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxlibeglintegration.h" + +static int countBits(unsigned long mask) +{ + int count = 0; + while (mask != 0) { + if (mask & 1) + ++count; + mask >>= 1; + } + return count; +} + +VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) +{ + VisualID visualId = 0; + EGLint eglValue = 0; + + EGLDisplay eglDisplay = eglGetDisplay(display); + + EGLint configRedSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); + + EGLint configGreenSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); + + EGLint configBlueSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); + + EGLint configAlphaSize = 0; + eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); + + eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); + int configId = eglValue; + + // See if EGL provided a valid VisualID: + eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); + visualId = (VisualID)eglValue; + if (visualId) { + // EGL has suggested a visual id, so get the rest of the visual info for that id: + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = visualId; + + XVisualInfo *chosenVisualInfo; + int matchingCount = 0; + chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); + if (chosenVisualInfo) { + // Skip size checks if implementation supports non-matching visual + // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). + if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { + XFree(chosenVisualInfo); + return visualId; + } + + int visualRedSize = countBits(chosenVisualInfo->red_mask); + int visualGreenSize = countBits(chosenVisualInfo->green_mask); + int visualBlueSize = countBits(chosenVisualInfo->blue_mask); + int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size + + bool visualMatchesConfig = false; + if ( visualRedSize == configRedSize && + visualGreenSize == configGreenSize && + visualBlueSize == configBlueSize ) + { + // We need XRender to check the alpha channel size of the visual. If we don't have + // the alpha size, we don't check it against the EGL config's alpha size. + if (visualAlphaSize >= 0) + visualMatchesConfig = visualAlphaSize == configAlphaSize; + else + visualMatchesConfig = true; + } + + if (!visualMatchesConfig) { + if (visualAlphaSize >= 0) { + qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", + (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, + configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); + } else { + qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", + (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, + configId, configRedSize, configGreenSize, configBlueSize); + } + visualId = 0; + } + } else { + qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", + (int)visualId, configId); + visualId = 0; + } + XFree(chosenVisualInfo); + } +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + else + qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); +#endif + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + if (configAlphaSize > 0) + qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); + else + qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); +#endif + return visualId; + } + + // Finally, try to + // use XGetVisualInfo and only use the bit depths to match on: + if (!visualId) { + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + XVisualInfo *matchingVisuals; + int matchingCount = 0; + + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + if (!matchingVisuals) { + // Try again without taking the alpha channel into account: + visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; + matchingVisuals = XGetVisualInfo(display, + VisualDepthMask, + &visualInfoTemplate, + &matchingCount); + } + + if (matchingVisuals) { + visualId = matchingVisuals[0].visualid; + XFree(matchingVisuals); + } + } + + if (visualId) { +#ifdef QT_DEBUG_X11_VISUAL_SELECTION + qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); +#endif + return visualId; + } + + qWarning("Unable to find an X11 visual which matches EGL config %d", configId); + return (VisualID)0; +} diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.h b/src/plugins/platforms/eglconvenience/qxlibeglintegration.h new file mode 100644 index 0000000..f62dce4 --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qxlibeglintegration.h @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEEGLINTEGRATION_H +#define QTESTLITEEGLINTEGRATION_H + +#include "qeglconvenience.h" + +class QXlibEglIntegration +{ +public: + static VisualID getCompatibleVisualId(Display *display, EGLConfig config); +}; + +#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 0696ed3..967aa4d 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -49,7 +49,7 @@ #include <stdio.h> -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB #include <X11/Xlib.h> #include <X11/Xlib-xcb.h> #endif @@ -59,7 +59,7 @@ QXcbConnection::QXcbConnection(const char *displayName) { int primaryScreen = 0; -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB Display *dpy = XOpenDisplay(m_displayName.constData()); primaryScreen = DefaultScreen(dpy); m_connection = XGetXCBConnection(dpy); @@ -91,7 +91,7 @@ QXcbConnection::~QXcbConnection() { qDeleteAll(m_screens); -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB XCloseDisplay((Display *)m_xlib_display); #else xcb_disconnect(xcb_connection()); diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 8a225c2..6a472a7 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -232,7 +232,7 @@ public: QXcbKeyboard *keyboard() const { return m_keyboard; } -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB void *xlib_display() const { return m_xlib_display; } #endif @@ -254,7 +254,7 @@ private: QXcbKeyboard *m_keyboard; -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB void *m_xlib_display; #endif }; diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 89a6154..6dc5a5c 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -53,6 +53,10 @@ #include <stdio.h> +#ifdef XCB_USE_EGL +#include <EGL/egl.h> +#endif + QXcbIntegration::QXcbIntegration() : m_connection(new QXcbConnection) { @@ -118,8 +122,20 @@ QPixmap QXcbIntegration::grabWindow(WId window, int x, int y, int width, int hei bool QXcbIntegration::hasOpenGL() const { -#ifdef XCB_USE_XLIB_FOR_GLX +#if defined(XCB_USE_GLX) return true; +#elif defined(XCB_USE_EGL) + static bool eglHasbeenInitialized = false; + static bool wasEglInitialized = false; + if (!eglHasbeenInitialized) { + eglHasbeenInitialized = true; + const QXcbScreen *screen = static_cast<const QXcbScreen *>(m_screens.at(0)); + EGLint major, minor; + eglBindAPI(EGL_OPENGL_ES_API); + EGLDisplay disp = eglGetDisplay((Display*)screen->connection()->xlib_display()); + wasEglInitialized = eglInitialize(disp,&major,&minor); + } + return wasEglInitialized; #else return false; #endif diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 78cba1c..bb856f2 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -53,10 +53,17 @@ #include <stdio.h> -#ifdef XCB_USE_XLIB_FOR_GLX +#ifdef XCB_USE_XLIB #include <X11/Xlib.h> #include <X11/Xutil.h> +#endif + +#if defined(XCB_USE_GLX) #include "qglxintegration.h" +#elif defined(XCB_USE_EGL) +#include "../eglconvenience/qeglplatformcontext.h" +#include "../eglconvenience/qeglconvenience.h" +#include "../eglconvenience/qxlibeglintegration.h" #endif // Returns true if we should set WM_TRANSIENT_FOR on \a w @@ -74,9 +81,7 @@ static inline bool isTransient(const QWidget *w) QXcbWindow::QXcbWindow(QWidget *tlw) : QPlatformWindow(tlw) -#ifdef XCB_USE_XLIB_FOR_GLX - , m_glx_context(0) -#endif + , m_context(0) { m_screen = static_cast<QXcbScreen *>(QPlatformScreen::platformScreenForWidget(tlw)); @@ -100,10 +105,24 @@ QXcbWindow::QXcbWindow(QWidget *tlw) | XCB_EVENT_MASK_FOCUS_CHANGE }; -#ifdef XCB_USE_XLIB_FOR_GLX +#if defined(XCB_USE_GLX) || defined(XCB_USE_EGL) if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#if defined(XCB_USE_GLX) XVisualInfo *visualInfo = QGLXContext::findVisualInfo(m_screen, tlw->platformWindowFormat()); +#elif defined(XCB_USE_EGL) + EGLDisplay eglDisplay = eglGetDisplay(DISPLAY_FROM_XCB(this)); + EGLConfig eglConfig = q_configFromQPlatformWindowFormat(eglDisplay,tlw->platformWindowFormat(),true); + VisualID id = QXlibEglIntegration::getCompatibleVisualId(DISPLAY_FROM_XCB(this),eglConfig); + + XVisualInfo visualInfoTemplate; + memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); + visualInfoTemplate.visualid = id; + + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(DISPLAY_FROM_XCB(this), VisualIDMask, &visualInfoTemplate, &matchingCount); +#endif //XCB_USE_GLX if (visualInfo) { Colormap cmap = XCreateColormap(DISPLAY_FROM_XCB(this), m_screen->root(), visualInfo->visual, AllocNone); @@ -395,21 +414,31 @@ void QXcbWindow::requestActivateWindow() QPlatformGLContext *QXcbWindow::glContext() const { -#ifdef XCB_USE_XLIB_FOR_GLX if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) { printf("no opengl\n"); return 0; } - - if (!m_glx_context) { +#if defined(XCB_USE_GLX) + if (!m_context) { QXcbWindow *that = const_cast<QXcbWindow *>(this); - that->m_glx_context = new QGLXContext(m_window, m_screen, widget()->platformWindowFormat()); + that->m_context = new QGLXContext(m_window, m_screen, widget()->platformWindowFormat()); } +#elif defined(XCB_USE_EGL) + if (!m_context) { + EGLDisplay display = eglGetDisplay(DISPLAY_FROM_XCB(this)); - return m_glx_context; -#else - return 0; + EGLConfig config = q_configFromQPlatformWindowFormat(display,widget()->platformWindowFormat(),true); + QVector<EGLint> eglContextAttrs; + eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + eglContextAttrs.append(2); + eglContextAttrs.append(EGL_NONE); + + EGLSurface eglSurface = eglCreateWindowSurface(display,config,(EGLNativeWindowType)m_window,0); + QXcbWindow *that = const_cast<QXcbWindow *>(this); + that->m_context = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); + } #endif + return m_context; } void QXcbWindow::handleExposeEvent(const xcb_expose_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 8db1a1e..2e8238b 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -43,12 +43,12 @@ #define QXCBWINDOW_H #include <QtGui/QPlatformWindow> +#include <QtGui/QPlatformWindowFormat> #include <xcb/xcb.h> #include "qxcbobject.h" -class QGLXContext; class QXcbScreen; class QXcbWindow : public QXcbObject, public QPlatformWindow @@ -92,9 +92,7 @@ private: QXcbScreen *m_screen; xcb_window_t m_window; -#ifdef XCB_USE_XLIB_FOR_GLX - QGLXContext *m_glx_context; -#endif + QPlatformGLContext *m_context; }; #endif diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index a6e92ef..b5850e4 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -21,14 +21,29 @@ HEADERS = \ qxcbwindow.h \ qxcbwindowsurface.h -contains(QT_CONFIG, opengl):DEFINES += XCB_USE_XLIB_FOR_GLX - -contains(DEFINES, XCB_USE_XLIB_FOR_GLX) { +contains(QT_CONFIG, opengl) { QT += opengl - - HEADERS += qglxintegration.h - SOURCES += qglxintegration.cpp + DEFINES += XCB_USE_XLIB LIBS += -lX11 -lX11-xcb + + contains(QT_CONFIG, opengles2) { + DEFINES += XCB_USE_EGL + HEADERS += \ + ../eglconvenience/qeglplatformcontext.h \ + ../eglconvenience/qeglconvenience.h \ + ../eglconvenience/qxlibeglintegration.h + + SOURCES += \ + ../eglconvenience/qeglplatformcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + ../eglconvenience/qxlibeglintegration.cpp + + LIBS += -lEGL + } else { + DEFINES += XCB_USE_GLX + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp + } } LIBS += -lxcb -lxcb-image -lxcb-keysyms -lxcb-icccm diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.cpp b/src/plugins/platforms/xlib/qxlibeglintegration.cpp deleted file mode 100644 index 1135d2f..0000000 --- a/src/plugins/platforms/xlib/qxlibeglintegration.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qxlibeglintegration.h" - -static int countBits(unsigned long mask) -{ - int count = 0; - while (mask != 0) { - if (mask & 1) - ++count; - mask >>= 1; - } - return count; -} - -VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLConfig config) -{ - VisualID visualId = 0; - EGLint eglValue = 0; - - EGLDisplay eglDisplay = eglGetDisplay(display); - - EGLint configRedSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_RED_SIZE, &configRedSize); - - EGLint configGreenSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_GREEN_SIZE, &configGreenSize); - - EGLint configBlueSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_BLUE_SIZE, &configBlueSize); - - EGLint configAlphaSize = 0; - eglGetConfigAttrib(eglDisplay, config, EGL_ALPHA_SIZE, &configAlphaSize); - - eglGetConfigAttrib(eglDisplay, config, EGL_CONFIG_ID, &eglValue); - int configId = eglValue; - - // See if EGL provided a valid VisualID: - eglGetConfigAttrib(eglDisplay, config, EGL_NATIVE_VISUAL_ID, &eglValue); - visualId = (VisualID)eglValue; - if (visualId) { - // EGL has suggested a visual id, so get the rest of the visual info for that id: - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - visualInfoTemplate.visualid = visualId; - - XVisualInfo *chosenVisualInfo; - int matchingCount = 0; - chosenVisualInfo = XGetVisualInfo(display, VisualIDMask, &visualInfoTemplate, &matchingCount); - if (chosenVisualInfo) { - // Skip size checks if implementation supports non-matching visual - // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). - if (q_hasEglExtension(eglDisplay,"EGL_NV_post_convert_rounding")) { - XFree(chosenVisualInfo); - return visualId; - } - - int visualRedSize = countBits(chosenVisualInfo->red_mask); - int visualGreenSize = countBits(chosenVisualInfo->green_mask); - int visualBlueSize = countBits(chosenVisualInfo->blue_mask); - int visualAlphaSize = -1; // Need XRender to tell us the alpha channel size - - bool visualMatchesConfig = false; - if ( visualRedSize == configRedSize && - visualGreenSize == configGreenSize && - visualBlueSize == configBlueSize ) - { - // We need XRender to check the alpha channel size of the visual. If we don't have - // the alpha size, we don't check it against the EGL config's alpha size. - if (visualAlphaSize >= 0) - visualMatchesConfig = visualAlphaSize == configAlphaSize; - else - visualMatchesConfig = true; - } - - if (!visualMatchesConfig) { - if (visualAlphaSize >= 0) { - qWarning("Warning: EGL suggested using X Visual ID %d (ARGB%d%d%d%d) for EGL config %d (ARGB%d%d%d%d), but this is incompatable", - (int)visualId, visualAlphaSize, visualRedSize, visualGreenSize, visualBlueSize, - configId, configAlphaSize, configRedSize, configGreenSize, configBlueSize); - } else { - qWarning("Warning: EGL suggested using X Visual ID %d (RGB%d%d%d) for EGL config %d (RGB%d%d%d), but this is incompatable", - (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, - configId, configRedSize, configGreenSize, configBlueSize); - } - visualId = 0; - } - } else { - qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID", - (int)visualId, configId); - visualId = 0; - } - XFree(chosenVisualInfo); - } -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - else - qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId); -#endif - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - if (configAlphaSize > 0) - qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId); - else - qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId); -#endif - return visualId; - } - - // Finally, try to - // use XGetVisualInfo and only use the bit depths to match on: - if (!visualId) { - XVisualInfo visualInfoTemplate; - memset(&visualInfoTemplate, 0, sizeof(XVisualInfo)); - XVisualInfo *matchingVisuals; - int matchingCount = 0; - - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize + configAlphaSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - if (!matchingVisuals) { - // Try again without taking the alpha channel into account: - visualInfoTemplate.depth = configRedSize + configGreenSize + configBlueSize; - matchingVisuals = XGetVisualInfo(display, - VisualDepthMask, - &visualInfoTemplate, - &matchingCount); - } - - if (matchingVisuals) { - visualId = matchingVisuals[0].visualid; - XFree(matchingVisuals); - } - } - - if (visualId) { -#ifdef QT_DEBUG_X11_VISUAL_SELECTION - qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId); -#endif - return visualId; - } - - qWarning("Unable to find an X11 visual which matches EGL config %d", configId); - return (VisualID)0; -} diff --git a/src/plugins/platforms/xlib/qxlibeglintegration.h b/src/plugins/platforms/xlib/qxlibeglintegration.h deleted file mode 100644 index 6a94b8e..0000000 --- a/src/plugins/platforms/xlib/qxlibeglintegration.h +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTESTLITEEGLINTEGRATION_H -#define QTESTLITEEGLINTEGRATION_H - -#include "qxlibstatic.h" -#include "../eglconvenience/qeglconvenience.h" - -class QXlibEglIntegration -{ -public: - static VisualID getCompatibleVisualId(Display *display, EGLConfig config); -}; - -#endif // QTESTLITEEGLINTEGRATION_H diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp index 90b36cf..b0d32d9 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.cpp +++ b/src/plugins/platforms/xlib/qxlibwindow.cpp @@ -61,7 +61,7 @@ #else #include "../eglconvenience/qeglconvenience.h" #include "../eglconvenience/qeglplatformcontext.h" -#include "qxlibeglintegration.h" +#include "../eglconvenience/qxlibeglintegration.h" #endif //QT_OPENGL_ES_2 #endif //QT_NO_OPENGL diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro index dc22b80..159fdbe 100644 --- a/src/plugins/platforms/xlib/xlib.pro +++ b/src/plugins/platforms/xlib/xlib.pro @@ -45,12 +45,12 @@ contains(QT_CONFIG, opengl) { HEADERS += \ ../eglconvenience/qeglplatformcontext.h \ ../eglconvenience/qeglconvenience.h \ - qxlibeglintegration.h + ../eglconvenience/qxlibeglintegration.h SOURCES += \ ../eglconvenience/qeglplatformcontext.cpp \ ../eglconvenience/qeglconvenience.cpp \ - qxlibeglintegration.cpp + ../eglconvenience/qxlibeglintegration.cpp LIBS += -lEGL } } -- cgit v0.12 From 93e0fc1476757331d25b9fe2d357e930eda55331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 10:06:31 +0100 Subject: Lighthouse: Xcb. implement dri2 context handling --- src/plugins/platforms/xcb/qdri2context.cpp | 224 ++++++++++++++++++++++++++ src/plugins/platforms/xcb/qdri2context.h | 34 ++++ src/plugins/platforms/xcb/qxcbconnection.cpp | 131 ++++++++++++++- src/plugins/platforms/xcb/qxcbconnection.h | 23 ++- src/plugins/platforms/xcb/qxcbintegration.cpp | 9 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 16 +- src/plugins/platforms/xcb/xcb.pro | 48 +++--- 7 files changed, 460 insertions(+), 25 deletions(-) create mode 100644 src/plugins/platforms/xcb/qdri2context.cpp create mode 100644 src/plugins/platforms/xcb/qdri2context.h diff --git a/src/plugins/platforms/xcb/qdri2context.cpp b/src/plugins/platforms/xcb/qdri2context.cpp new file mode 100644 index 0000000..44b8fc2 --- /dev/null +++ b/src/plugins/platforms/xcb/qdri2context.cpp @@ -0,0 +1,224 @@ +#include "qdri2context.h" + +#include "qxcbwindow.h" +#include "qxcbconnection.h" + +#include <QtCore/QDebug> +#include <QtGui/QWidget> + +#include <xcb/dri2.h> +#include <xcb/xfixes.h> + +#define MESA_EGL_NO_X11_HEADERS +#define EGL_EGLEXT_PROTOTYPES +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#define GL_GLEXT_PROTOTYPES +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +class QDri2ContextPrivate +{ +public: + QDri2ContextPrivate(QXcbWindow *window) + : qXcbWindow(window) + , windowFormat(window->widget()->platformWindowFormat()) + , image(0) + { + } + + xcb_window_t xcbWindow() { return qXcbWindow->window(); } + xcb_connection_t *xcbConnection() { return qXcbWindow->xcb_connection(); } + + QXcbWindow *qXcbWindow; + QPlatformWindowFormat windowFormat; + + EGLContext eglContext; + + EGLImageKHR image; + + GLuint fbo; + GLuint rbo; + GLuint depth; + + QSize size; +}; + +QDri2Context::QDri2Context(QXcbWindow *window) + : d_ptr(new QDri2ContextPrivate(window)) +{ + Q_D(QDri2Context); + + static const EGLint contextAttribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + + eglBindAPI(EGL_OPENGL_ES_API); + + EGLContext shareContext = EGL_NO_CONTEXT; + if (window->widget()->platformWindowFormat().sharedGLContext()) { + QDri2Context *context = static_cast<QDri2Context *>(window->widget()->platformWindowFormat().sharedGLContext()); + shareContext = context->d_func()->eglContext; + } + d->eglContext = eglCreateContext(EGL_DISPLAY_FROM_XCB(d->qXcbWindow), NULL, + shareContext, contextAttribs); + + if (d->eglContext == EGL_NO_CONTEXT) { + qDebug() << "No eglContext!" << eglGetError(); + } + + EGLBoolean makeCurrentSuccess = eglMakeCurrent(EGL_DISPLAY_FROM_XCB(d->qXcbWindow),EGL_NO_SURFACE,EGL_NO_SURFACE,d->eglContext); + if (!makeCurrentSuccess) { + qDebug() << "eglMakeCurrent failed!" << eglGetError(); + } + + xcb_dri2_create_drawable (d->xcbConnection(), d->xcbWindow()); + + glGenFramebuffers(1,&d->fbo); + glBindFramebuffer(GL_FRAMEBUFFER,d->fbo); + glActiveTexture(GL_TEXTURE0); + + glGenRenderbuffers(1, &d->rbo); + glBindRenderbuffer(GL_RENDERBUFFER, d->rbo); + + glGenRenderbuffers(1,&d->depth); + glBindRenderbuffer(GL_RENDERBUFFER, d->depth); + + resize(d->qXcbWindow->widget()->geometry().size()); + + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, d->rbo); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERER,d->depth); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERER,d->depth); + + //restore the old current context + const QPlatformGLContext *currentContext = QPlatformGLContext::currentContext(); + if (currentContext) + const_cast<QPlatformGLContext*>(currentContext)->makeCurrent(); +} + +QDri2Context::~QDri2Context() +{ + //cleanup +} + +void QDri2Context::makeCurrent() +{ + QPlatformGLContext::makeCurrent(); + Q_D(QDri2Context); + + eglMakeCurrent(EGL_DISPLAY_FROM_XCB(d->qXcbWindow),EGL_NO_SURFACE,EGL_NO_SURFACE,d->eglContext); + glBindFramebuffer(GL_FRAMEBUFFER,d->fbo); + +} + +void QDri2Context::doneCurrent() +{ + QPlatformGLContext::doneCurrent(); + Q_D(QDri2Context); + eglMakeCurrent(EGL_DISPLAY_FROM_XCB(d->qXcbWindow),EGL_NO_SURFACE,EGL_NO_SURFACE,EGL_NO_CONTEXT); +} + +void QDri2Context::swapBuffers() +{ + Q_D(QDri2Context); + xcb_rectangle_t rectangle; + rectangle.x = 0; + rectangle.y = 0; + rectangle.width = d->qXcbWindow->widget()->geometry().width(); + rectangle.height = d->qXcbWindow->widget()->geometry().height(); + + xcb_xfixes_region_t xfixesRegion = xcb_generate_id(d->xcbConnection()); + xcb_xfixes_create_region(d->xcbConnection(), xfixesRegion, + 1, &rectangle); + + xcb_dri2_copy_region_cookie_t cookie = xcb_dri2_copy_region_unchecked(d->xcbConnection(), + d->qXcbWindow->window(), + xfixesRegion, + XCB_DRI2_ATTACHMENT_BUFFER_FRONT_LEFT, + XCB_DRI2_ATTACHMENT_BUFFER_BACK_LEFT); + + xcb_dri2_copy_region_reply_t *reply = xcb_dri2_copy_region_reply(d->xcbConnection(),cookie,NULL); + + //cleanup + delete reply; + xcb_xfixes_destroy_region(d->xcbConnection(), xfixesRegion); + +} + +void * QDri2Context::getProcAddress(const QString &procName) +{ + return (void *)eglGetProcAddress(qPrintable(procName)); +} + +void QDri2Context::resize(const QSize &size) +{ + Q_D(QDri2Context); + d->size= size; + + glBindFramebuffer(GL_FRAMEBUFFER,d->fbo); + + xcb_dri2_dri2_buffer_t *backBfr = backBuffer(); + + if (d->image) { + qDebug() << "destroing image"; + eglDestroyImageKHR(EGL_DISPLAY_FROM_XCB(d->qXcbWindow),d->image); + } + + EGLint imgAttribs[] = { + EGL_WIDTH, d->size.width(), + EGL_HEIGHT, d->size.height(), + EGL_DRM_BUFFER_STRIDE_MESA, backBfr->pitch /4, + EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, + EGL_NONE + }; + + d->image = eglCreateImageKHR(EGL_DISPLAY_FROM_XCB(d->qXcbWindow), + EGL_NO_CONTEXT, + EGL_DRM_BUFFER_MESA, + (EGLClientBuffer) backBfr->name, + imgAttribs); + + glBindRenderbuffer(GL_RENDERBUFFER, d->rbo); + glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, + d->image); + + glBindRenderbuffer(GL_RENDERBUFFER, d->depth); + glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH24_STENCIL8_OES,d->size.width(), d->size.height()); + +} + +QPlatformWindowFormat QDri2Context::platformWindowFormat() const +{ + Q_D(const QDri2Context); + return d->windowFormat; +} + +xcb_dri2_dri2_buffer_t * QDri2Context::backBuffer() +{ + Q_D(QDri2Context); + + unsigned int backBufferAttachment = XCB_DRI2_ATTACHMENT_BUFFER_BACK_LEFT; + xcb_dri2_get_buffers_cookie_t cookie = xcb_dri2_get_buffers_unchecked (d->xcbConnection(), + d->xcbWindow(), + 1, 1, &backBufferAttachment); + + xcb_dri2_get_buffers_reply_t *reply = xcb_dri2_get_buffers_reply (d->xcbConnection(), cookie, NULL); + if (!reply) { + qDebug() << "failed to get buffers reply"; + return 0; + } + + xcb_dri2_dri2_buffer_t *buffers = xcb_dri2_get_buffers_buffers (reply); + if (!buffers) { + qDebug() << "failed to get buffers"; + return 0; + } + + Q_ASSERT(reply->count == 1); + + delete reply; + + return buffers; +} diff --git a/src/plugins/platforms/xcb/qdri2context.h b/src/plugins/platforms/xcb/qdri2context.h new file mode 100644 index 0000000..5646565 --- /dev/null +++ b/src/plugins/platforms/xcb/qdri2context.h @@ -0,0 +1,34 @@ +#ifndef QDRI2CONTEXT_H +#define QDRI2CONTEXT_H + +#include <QtGui/QPlatformGLContext> + +class QXcbWindow; +class QDri2ContextPrivate; + +struct xcb_dri2_dri2_buffer_t; + +class QDri2Context : public QPlatformGLContext +{ + Q_DECLARE_PRIVATE(QDri2Context); +public: + QDri2Context(QXcbWindow *window); + ~QDri2Context(); + + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void* getProcAddress(const QString& procName); + + void resize(const QSize &size); + + QPlatformWindowFormat platformWindowFormat() const; + +protected: + xcb_dri2_dri2_buffer_t *backBuffer(); + QScopedPointer<QDri2ContextPrivate> d_ptr; +private: + Q_DISABLE_COPY(QDri2Context) +}; + +#endif // QDRI2CONTEXT_H diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 967aa4d..06e4d13 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -46,16 +46,38 @@ #include <QtAlgorithms> #include <QSocketNotifier> +#include <QtGui/private/qapplication_p.h> + +#include <QtCore/QDebug> #include <stdio.h> +#include <errno.h> #ifdef XCB_USE_XLIB #include <X11/Xlib.h> #include <X11/Xlib-xcb.h> #endif +#ifdef XCB_USE_DRI2 +#include <xcb/dri2.h> +#include <xcb/xfixes.h> +extern "C" { +#include <xf86drm.h> +} +#define MESA_EGL_NO_X11_HEADERS +#define EGL_EGLEXT_PROTOTYPES +#include <EGL/egl.h> +#include <EGL/eglext.h> +#endif + QXcbConnection::QXcbConnection(const char *displayName) : m_displayName(displayName ? QByteArray(displayName) : qgetenv("DISPLAY")) +#ifdef XCB_USE_DRI2 + , m_dri2_major(0) + , m_dri2_minor(0) + , m_dri2_support_probed(false) + , m_has_support_for_dri2(false) +#endif { int primaryScreen = 0; @@ -67,8 +89,8 @@ QXcbConnection::QXcbConnection(const char *displayName) m_xlib_display = dpy; #else m_connection = xcb_connect(m_displayName.constData(), &primaryScreen); -#endif +#endif //XCB_USE_XLIB m_setup = xcb_get_setup(xcb_connection()); xcb_screen_iterator_t it = xcb_setup_roots_iterator(m_setup); @@ -85,6 +107,10 @@ QXcbConnection::QXcbConnection(const char *displayName) m_keyboard = new QXcbKeyboard(this); initializeAllAtoms(); + +#ifdef XCB_USE_DRI2 + initializeDri2(); +#endif } QXcbConnection::~QXcbConnection() @@ -124,7 +150,7 @@ break; } \ break; -#define XCB_EVENT_DEBUG +//#define XCB_EVENT_DEBUG void printXcbEvent(const char *message, xcb_generic_event_t *event) { @@ -405,3 +431,104 @@ void QXcbConnection::initializeAllAtoms() { for (i = 0; i < QXcbAtom::NAtoms; ++i) m_allAtoms[i] = xcb_intern_atom_reply(xcb_connection(), cookies[i], 0)->atom; } + +#ifdef XCB_USE_DRI2 +void QXcbConnection::initializeDri2() +{ + xcb_dri2_connect_cookie_t connect_cookie = xcb_dri2_connect_unchecked (m_connection, + m_screens[0]->root(), + XCB_DRI2_DRIVER_TYPE_DRI); + + xcb_dri2_connect_reply_t *connect = xcb_dri2_connect_reply (m_connection, + connect_cookie, NULL); + + if (! connect || connect->driver_name_length + connect->device_name_length == 0) { + qDebug() << "Failed to connect to dri2"; + return; + } + + QString dri2DeviceName = QString::fromLocal8Bit(xcb_dri2_connect_device_name (connect), + xcb_dri2_connect_device_name_length (connect)); + delete connect; + + int fd = open(qPrintable(dri2DeviceName), O_RDWR); + if (fd < 0) { + qDebug() << "InitializeDri2: Could'nt open device << dri2DeviceName"; + return; + } + + drm_magic_t magic; + if (drmGetMagic(fd, &magic)) { + qDebug() << "Failed to get drmMagic"; + return; + } + + xcb_dri2_authenticate_cookie_t authenticate_cookie = xcb_dri2_authenticate_unchecked(m_connection, + m_screens[0]->root(), magic); + xcb_dri2_authenticate_reply_t *authenticate = xcb_dri2_authenticate_reply(m_connection, + authenticate_cookie, NULL); + if (authenticate == NULL || !authenticate->authenticated) { + fprintf(stderr, "DRI2: failed to authenticate\n"); + free(authenticate); + return; + } + + delete authenticate; + + EGLDisplay display = eglGetDRMDisplayMESA(fd); + if (!display) { + fprintf(stderr, "failed to create display\n"); + return; + } + + m_egl_display = display; + EGLint major,minor; + if (!eglInitialize(display, &major, &minor)) { + fprintf(stderr, "failed to initialize display\n"); + return; + } +} + +bool QXcbConnection::hasSupportForDri2() const +{ + if (!m_dri2_support_probed) { + xcb_generic_error_t *error = 0; + + xcb_prefetch_extension_data (m_connection, &xcb_xfixes_id); + xcb_prefetch_extension_data (m_connection, &xcb_dri2_id); + + xcb_xfixes_query_version_cookie_t xfixes_query_cookie = xcb_xfixes_query_version(m_connection, + XCB_XFIXES_MAJOR_VERSION, + XCB_XFIXES_MINOR_VERSION); + + xcb_dri2_query_version_cookie_t dri2_query_cookie = xcb_dri2_query_version (m_connection, + XCB_DRI2_MAJOR_VERSION, + XCB_DRI2_MINOR_VERSION); + + xcb_xfixes_query_version_reply_t *xfixes_query = xcb_xfixes_query_version_reply (m_connection, + xfixes_query_cookie, &error); + if (!xfixes_query || error || xfixes_query->major_version < 2) { + delete error; + delete xfixes_query; + return false; + } + delete xfixes_query; + + xcb_dri2_query_version_reply_t *dri2_query = xcb_dri2_query_version_reply (m_connection, + dri2_query_cookie, &error); + if (!dri2_query || error) { + delete error; + delete dri2_query; + return false; + } + + QXcbConnection *that = const_cast<QXcbConnection *>(this); + that->m_dri2_major = dri2_query->major_version; + that->m_dri2_minor = dri2_query->minor_version; + + that->m_has_support_for_dri2 = true; + that->m_dri2_support_probed = true; + } + return m_has_support_for_dri2; +} +#endif //XCB_USE_DRI2 diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 6a472a7..3aa36db 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -236,11 +236,19 @@ public: void *xlib_display() const { return m_xlib_display; } #endif +#ifdef XCB_USE_DRI2 + bool hasSupportForDri2() const; + void *egl_display() const { return m_egl_display; } +#endif + private slots: void eventDispatcher(); private: void initializeAllAtoms(); +#ifdef XCB_USE_DRI2 + void initializeDri2(); +#endif xcb_connection_t *m_connection; const xcb_setup_t *m_setup; @@ -254,11 +262,24 @@ private: QXcbKeyboard *m_keyboard; -#ifdef XCB_USE_XLIB +#if defined(XCB_USE_XLIB) void *m_xlib_display; #endif + +#ifdef XCB_USE_DRI2 + uint32_t m_dri2_major; + uint32_t m_dri2_minor; + bool m_dri2_support_probed; + bool m_has_support_for_dri2; + void *m_egl_display; +#endif + }; #define DISPLAY_FROM_XCB(object) ((Display *)(object->connection()->xlib_display())) +#ifdef XCB_USE_DRI2 +#define EGL_DISPLAY_FROM_XCB(object) ((EGLDisplay)(object->connection()->egl_display())) +#endif //endifXCB_USE_DRI2 + #endif diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 6dc5a5c..7f6d4c5 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -136,7 +136,12 @@ bool QXcbIntegration::hasOpenGL() const wasEglInitialized = eglInitialize(disp,&major,&minor); } return wasEglInitialized; -#else - return false; +#elif defined(XCB_USE_DRI2) + if (m_connection->hasSupportForDri2()) { + return true; + } #endif + return false; +} + } diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index bb856f2..005aa0e 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -43,6 +43,9 @@ #include "qxcbconnection.h" #include "qxcbscreen.h" +#ifdef XCB_USE_DRI2 +#include "qdri2context.h" +#endif #include <xcb/xcb_icccm.h> @@ -137,7 +140,7 @@ QXcbWindow::QXcbWindow(QWidget *tlw) qFatal("no window!"); } } else -#endif +#endif //defined(XCB_USE_GLX) || defined(XCB_USE_EGL) { m_window = xcb_generate_id(xcb_connection()); @@ -437,6 +440,12 @@ QPlatformGLContext *QXcbWindow::glContext() const QXcbWindow *that = const_cast<QXcbWindow *>(this); that->m_context = new QEGLPlatformContext(display, config, eglContextAttrs.data(), eglSurface, EGL_OPENGL_ES_API); } +#elif defined(XCB_USE_DRI2) + if (!m_context) { + QXcbWindow *that = const_cast<QXcbWindow *>(this); + that->m_context = new QDri2Context(that); + } + #endif return m_context; } @@ -474,6 +483,11 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t * QPlatformWindow::setGeometry(rect); QWindowSystemInterface::handleGeometryChange(widget(), rect); + +#if XCB_USE_DRI2 + if (m_context) + static_cast<QDri2Context *>(m_context)->resize(rect.size()); +#endif } static Qt::MouseButtons translateMouseButtons(int s) diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index b5850e4..9a3f735 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -23,26 +23,36 @@ HEADERS = \ contains(QT_CONFIG, opengl) { QT += opengl - DEFINES += XCB_USE_XLIB - LIBS += -lX11 -lX11-xcb - - contains(QT_CONFIG, opengles2) { - DEFINES += XCB_USE_EGL - HEADERS += \ - ../eglconvenience/qeglplatformcontext.h \ - ../eglconvenience/qeglconvenience.h \ - ../eglconvenience/qxlibeglintegration.h - - SOURCES += \ - ../eglconvenience/qeglplatformcontext.cpp \ - ../eglconvenience/qeglconvenience.cpp \ - ../eglconvenience/qxlibeglintegration.cpp - - LIBS += -lEGL + + DEFINES += XCB_USE_DRI2 + contains(DEFINES, XCB_USE_DRI2) { + LIBS += -lxcb-dri2 -lxcb-xfixes -lEGL + + HEADERS += qdri2context.h + SOURCES += qdri2context.cpp + } else { - DEFINES += XCB_USE_GLX - HEADERS += qglxintegration.h - SOURCES += qglxintegration.cpp + DEFINES += XCB_USE_XLIB + LIBS += -lX11 -lX11-xcb + + contains(QT_CONFIG, opengles2) { + DEFINES += XCB_USE_EGL + HEADERS += \ + ../eglconvenience/qeglplatformcontext.h \ + ../eglconvenience/qeglconvenience.h \ + ../eglconvenience/qxlibeglintegration.h + + SOURCES += \ + ../eglconvenience/qeglplatformcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp \ + ../eglconvenience/qxlibeglintegration.cpp + + LIBS += -lEGL + } else { + DEFINES += XCB_USE_GLX + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp + } } } -- cgit v0.12 From 044e06d5a40e3f8d5ae6861341b1f5449e3c0afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 10:09:18 +0100 Subject: Lighthouse: Add a native interface. Sometimes in applications code you need to get the native handles for displays, egl displays etc. The native interface class is how you access these handles. Reviewed-by: paul --- src/gui/kernel/kernel.pri | 6 ++- src/gui/kernel/qplatformintegration_qpa.cpp | 5 ++ src/gui/kernel/qplatformintegration_qpa.h | 4 +- src/gui/kernel/qplatformnativeinterface_qpa.cpp | 70 +++++++++++++++++++++++++ src/gui/kernel/qplatformnativeinterface_qpa.h | 68 ++++++++++++++++++++++++ 5 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 src/gui/kernel/qplatformnativeinterface_qpa.cpp create mode 100644 src/gui/kernel/qplatformnativeinterface_qpa.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 0ff3d88..32fa3d3 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -223,7 +223,8 @@ qpa { kernel/qdesktopwidget_qpa_p.h \ kernel/qplatformeventloopintegration_qpa.h \ kernel/qplatformcursor_qpa.h \ - kernel/qplatformclipboard_qpa.h + kernel/qplatformclipboard_qpa.h \ + kernel/qplatformnativeinterface_qpa.h SOURCES += \ kernel/qapplication_qpa.cpp \ @@ -246,7 +247,8 @@ qpa { kernel/qplatformeventloopintegration_qpa.cpp \ kernel/qplatformglcontext_qpa.cpp \ kernel/qplatformcursor_qpa.cpp \ - kernel/qplatformclipboard_qpa.cpp + kernel/qplatformclipboard_qpa.cpp \ + kernel/qplatformnativeinterface_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 0cac57d..9f62538 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -111,6 +111,11 @@ QPlatformClipboard *QPlatformIntegration::clipboard() const return clipboard; } +QPlatformNativeInterface * QPlatformIntegration::nativeInterface() const +{ + return 0; +} + /*! \class QPlatformIntegration \since 4.8 diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 7050245..f01d462 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -60,6 +60,7 @@ class QWidget; class QPlatformEventLoopIntegration; class QPlatformFontDatabase; class QPlatformClipboard; +class QPlatformNativeInterface; class Q_GUI_EXPORT QPlatformIntegration { @@ -89,7 +90,8 @@ public: //jl:XXX should it be hasGLContext and do we need it at all? virtual bool hasOpenGL() const; - +// Access native handles. The window handle is allready available from Wid; + virtual QPlatformNativeInterface *nativeInterface() const; }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.cpp b/src/gui/kernel/qplatformnativeinterface_qpa.cpp new file mode 100644 index 0000000..67406cd --- /dev/null +++ b/src/gui/kernel/qplatformnativeinterface_qpa.cpp @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformnativeinterface_qpa.h" + +QT_BEGIN_NAMESPACE + +void * QPlatformNativeInterface::nativeDisplayForWidget(QWidget *widget) +{ + Q_UNUSED(widget); + return 0; +} + +void * QPlatformNativeInterface::eglDisplayForWidget(QWidget *widget) +{ + Q_UNUSED(widget); + return 0; +} + +void * QPlatformNativeInterface::nativeConnectionForWidget(QWidget *widget) +{ + Q_UNUSED(widget); + return 0; +} + +void * QPlatformNativeInterface::nativeScreenForWidget(QWidget *widget) +{ + Q_UNUSED(widget); + return 0; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.h b/src/gui/kernel/qplatformnativeinterface_qpa.h new file mode 100644 index 0000000..d576297 --- /dev/null +++ b/src/gui/kernel/qplatformnativeinterface_qpa.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMNATIVEINTERFACE_QPA_H +#define QPLATFORMNATIVEINTERFACE_QPA_H + +#include <QtGui/qwindowdefs.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QWidget; + +class Q_GUI_EXPORT QPlatformNativeInterface +{ +public: + virtual void *nativeDisplayForWidget(QWidget *widget); + virtual void *eglDisplayForWidget(QWidget *widget); + virtual void *nativeConnectionForWidget(QWidget *widget); + virtual void *nativeScreenForWidget(QWidget *widget); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMNATIVEINTERFACE_QPA_H -- cgit v0.12 From 4d803a3493d15fdf7374689b774d02662dbd43b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 10:11:36 +0100 Subject: Lighthouse: Xcb, implement native interface --- src/plugins/platforms/xcb/qxcbintegration.cpp | 5 +++ src/plugins/platforms/xcb/qxcbintegration.h | 3 ++ src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 50 +++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbnativeinterface.h | 20 +++++++++ src/plugins/platforms/xcb/xcb.pro | 6 ++- 5 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/plugins/platforms/xcb/qxcbnativeinterface.cpp create mode 100644 src/plugins/platforms/xcb/qxcbnativeinterface.h diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 7f6d4c5..b6df550 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -44,6 +44,7 @@ #include "qxcbscreen.h" #include "qxcbwindow.h" #include "qxcbwindowsurface.h" +#include "qxcbnativeinterface.h" #include <xcb/xcb.h> @@ -64,6 +65,7 @@ QXcbIntegration::QXcbIntegration() m_screens << screen; m_fontDatabase = new QGenericUnixFontDatabase(); + m_nativeInterface = new QXcbNativeInterface; } QXcbIntegration::~QXcbIntegration() @@ -144,4 +146,7 @@ bool QXcbIntegration::hasOpenGL() const return false; } +QPlatformNativeInterface * QXcbIntegration::nativeInterface() const +{ + return m_nativeInterface; } diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index 80f70fb..eab6949 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -67,11 +67,14 @@ public: QPlatformFontDatabase *fontDatabase() const; bool hasOpenGL() const; + QPlatformNativeInterface *nativeInterface()const; + private: QList<QPlatformScreen *> m_screens; QXcbConnection *m_connection; QPlatformFontDatabase *m_fontDatabase; + QPlatformNativeInterface *m_nativeInterface; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp new file mode 100644 index 0000000..859b6c3 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -0,0 +1,50 @@ +#include "qxcbnativeinterface.h" + +#include "qxcbscreen.h" + +#include <QtGui/private/qapplication_p.h> + +QXcbScreen *QXcbNativeInterface::screenForWidget(QWidget *widget) +{ + QXcbScreen *screen; + if (widget) { + screen = static_cast<QXcbScreen *>(QPlatformScreen::platformScreenForWidget(widget)); + }else { + screen = static_cast<QXcbScreen *>(QApplicationPrivate::platformIntegration()->screens()[0]); + } + return screen; +} + +void * QXcbNativeInterface::nativeDisplayForWidget(QWidget *widget) +{ +#if defined(XCB_USE_XLIB) + QXcbScreen *screen = screenForWidget(widget); + return screen->connection()->xlib_display(); +#else + Q_UNUSED(widget); + return 0; +#endif +} + +void * QXcbNativeInterface::eglDisplayForWidget(QWidget *widget) +{ +#if defined(XCB_USE_DRI2) + QXcbScreen *screen = screenForWidget(widget); + return screen->connection()->egl_display(); +#else + Q_UNUSED(widget) + return 0; +#endif +} + +void * QXcbNativeInterface::nativeConnectionForWidget(QWidget *widget) +{ + QXcbScreen *screen = screenForWidget(widget); + return screen->xcb_connection(); +} + +void * QXcbNativeInterface::nativeScreenForWidget(QWidget *widget) +{ + QXcbScreen *screen = screenForWidget(widget); + return screen->screen(); +} diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h new file mode 100644 index 0000000..fb48833 --- /dev/null +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -0,0 +1,20 @@ +#ifndef QXCBNATIVEINTERFACE_H +#define QXCBNATIVEINTERFACE_H + +#include <QtGui/QPlatformNativeInterface> + +class QWidget; +class QXcbScreen; + +class QXcbNativeInterface : public QPlatformNativeInterface +{ + void * nativeDisplayForWidget(QWidget *widget); + void * eglDisplayForWidget(QWidget *widget); + void * nativeConnectionForWidget(QWidget *widget); + void * nativeScreenForWidget(QWidget *widget); + +private: + static QXcbScreen *screenForWidget(QWidget *widget); +}; + +#endif // QXCBNATIVEINTERFACE_H diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 9a3f735..2237cee 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -10,7 +10,8 @@ SOURCES = \ qxcbscreen.cpp \ qxcbwindow.cpp \ qxcbwindowsurface.cpp \ - main.cpp + main.cpp \ + qxcbnativeinterface.cpp HEADERS = \ qxcbconnection.h \ @@ -19,7 +20,8 @@ HEADERS = \ qxcbobject.h \ qxcbscreen.h \ qxcbwindow.h \ - qxcbwindowsurface.h + qxcbwindowsurface.h \ + qxcbnativeinterface.h contains(QT_CONFIG, opengl) { QT += opengl -- cgit v0.12 From b67d537070e88feb708d13b46cd1468e2c0dc0e8 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta <gunnar.sletta@nokia.com> Date: Thu, 10 Feb 2011 16:10:57 +1000 Subject: Allow using QPixmap outside GUI thread when using raster --- src/gui/image/qpixmap.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index f896572..b276180 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -98,12 +98,21 @@ static bool qt_pixmap_thread_test() qFatal("QPixmap: Must construct a QApplication before a QPaintDevice"); return false; } -#ifndef Q_WS_WIN - if (!QApplication::testAttribute(Qt::AA_X11InitThreads) && qApp->thread() != QThread::currentThread()) { - qWarning("QPixmap: It is not safe to use pixmaps outside the GUI thread"); - return false; - } + + if (qApp->thread() != QThread::currentThread()) { + bool fail = false; +#if defined (Q_WS_X11) + if (!QApplication::testAttribute(Qt::AA_X11InitThreads)) + fail = true; +#else + if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) + fail = true; #endif + if (fail) { + qWarning("QPixmap: It is not safe to use pixmaps outside the GUI thread"); + return false; + } + } return true; } -- cgit v0.12 From 327f4c8e3894ccf34e7629a8a840f92bd3ff8dd0 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta <gunnar.sletta@nokia.com> Date: Mon, 21 Feb 2011 12:57:34 +0100 Subject: added capabilites to QPlatformIntegration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/gui/image/qpixmap.cpp | 9 +++++++++ src/gui/kernel/qplatformintegration_qpa.cpp | 10 ++++++++++ src/gui/kernel/qplatformintegration_qpa.h | 6 ++++++ src/plugins/platforms/cocoa/qcocoaintegration.h | 1 + src/plugins/platforms/cocoa/qcocoaintegration.mm | 12 +++++++++++- src/plugins/platforms/eglfs/qeglfsintegration.cpp | 8 ++++++++ src/plugins/platforms/eglfs/qeglfsintegration.h | 1 + src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp | 9 +++++++++ src/plugins/platforms/linuxfb/qlinuxfbintegration.h | 2 ++ src/plugins/platforms/minimal/qminimalintegration.cpp | 8 ++++++++ src/plugins/platforms/minimal/qminimalintegration.h | 2 ++ src/plugins/platforms/openkode/qopenkodeintegration.cpp | 9 +++++++++ src/plugins/platforms/openkode/qopenkodeintegration.h | 2 ++ src/plugins/platforms/vnc/qvncintegration.cpp | 9 +++++++++ src/plugins/platforms/vnc/qvncintegration.h | 1 + src/plugins/platforms/wayland/qwaylandintegration.cpp | 10 ++++++++-- src/plugins/platforms/wayland/qwaylandintegration.h | 1 + 17 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index b276180..90d9a90 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -71,6 +71,10 @@ # include "private/qpixmap_mac_p.h" #endif +#ifdef Q_WS_QPA +# include "qplatformintegration_qpa.h" +#endif + #if defined(Q_WS_X11) # include "qx11info_x11.h" # include <private/qt_x11_p.h> @@ -104,6 +108,11 @@ static bool qt_pixmap_thread_test() #if defined (Q_WS_X11) if (!QApplication::testAttribute(Qt::AA_X11InitThreads)) fail = true; +#elif defined (Q_WS_QPA) + if (!QApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedPixmaps)) { + printf("Lighthouse plugin does not support threaded pixmaps!\n"); + fail = true; + } #else if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) fail = true; diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 9f62538..f43e141 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -216,4 +216,14 @@ QPlatformNativeInterface * QPlatformIntegration::nativeInterface() const QRect(x,y,width,height). */ + +bool QPlatformIntegration::hasCapability(Capability cap) const +{ + return false; +} + + + + + QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index f01d462..1d69af4 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -65,8 +65,14 @@ class QPlatformNativeInterface; class Q_GUI_EXPORT QPlatformIntegration { public: + enum Capability { + ThreadedPixmaps = 1, + }; + virtual ~QPlatformIntegration() { } + virtual bool hasCapability(Capability cap) const; + // GraphicsSystem functions virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index e7ecf2a..b94bcb9 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -75,6 +75,7 @@ public: QCocoaIntegration(); ~QCocoaIntegration(); + bool hasCapability(QPlatformIntegration::Capability cap) const; QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index 28e894c..a75b88c 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -94,9 +94,19 @@ QCocoaIntegration::~QCocoaIntegration() delete mPool; } +bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + + + QPixmapData *QCocoaIntegration::createPixmapData(QPixmapData::PixelType type) const { - return new QRasterPixmapData(type); + return new QRasterPixmapData(type); } QPlatformWindow *QCocoaIntegration::createPlatformWindow(QWidget *widget, WId winId) const diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index a48fde8..257490d 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -65,6 +65,14 @@ QEglFSIntegration::QEglFSIntegration() #endif } +bool QEglFSIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + QPixmapData *QEglFSIntegration::createPixmapData(QPixmapData::PixelType type) const { #ifdef QEGL_EXTRA_DEBUG diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h index 0342539..ce231f2 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.h +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -56,6 +56,7 @@ class QEglFSIntegration : public QPlatformIntegration public: QEglFSIntegration(); + bool hasCapability(QPlatformIntegration::Capability cap) const; QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index aa1d401..af5a337 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -782,6 +782,15 @@ void QLinuxFbIntegration::blank(bool on) d_ptr->blank = on; } +bool QLinuxFbIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + + QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index e93495c..ddf8873 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -77,6 +77,8 @@ public: QLinuxFbIntegration(); ~QLinuxFbIntegration(); + bool hasCapability(QPlatformIntegration::Capability cap) const; + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const; diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index c90e92e..0f11edd 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -56,6 +56,14 @@ QMinimalIntegration::QMinimalIntegration() mScreens.append(mPrimaryScreen); } +bool QMinimalIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h index 95b952e..aab6fe3 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.h +++ b/src/plugins/platforms/minimal/qminimalintegration.h @@ -69,6 +69,8 @@ class QMinimalIntegration : public QPlatformIntegration public: QMinimalIntegration(); + bool hasCapability(QPlatformIntegration::Capability cap) const; + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 763e69e..2d17f33 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -185,6 +185,15 @@ QOpenKODEIntegration::~QOpenKODEIntegration() delete mFontDb; } + +bool QOpenKODEIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QGLPixmapData(type); diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index a067491..2304f27 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -90,6 +90,8 @@ public: QOpenKODEIntegration(); ~QOpenKODEIntegration(); + bool hasCapability(QPlatformIntegration::Capability cap) const; + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index b36ff33..56cbe4b 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -152,6 +152,15 @@ QVNCIntegration::QVNCIntegration(const QStringList& paramList) screen->setDirty(screenRect); } +bool QVNCIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + + QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index dfc0e6b..80338a1 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -81,6 +81,7 @@ class QVNCIntegration : public QPlatformIntegration public: QVNCIntegration(const QStringList& paramList); + bool hasCapability(QPlatformIntegration::Capability cap) const; QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 7c0f69e..3383410 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -71,6 +71,14 @@ QWaylandIntegration::screens() const return mDisplay->screens(); } +bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + QPixmapData *QWaylandIntegration::createPixmapData(QPixmapData::PixelType type) const { #ifdef QT_WAYLAND_GL_SUPPORT @@ -80,8 +88,6 @@ QPixmapData *QWaylandIntegration::createPixmapData(QPixmapData::PixelType type) return new QRasterPixmapData(type); } - - QPlatformWindow *QWaylandIntegration::createPlatformWindow(QWidget *widget, WId winId) const { Q_UNUSED(winId); diff --git a/src/plugins/platforms/wayland/qwaylandintegration.h b/src/plugins/platforms/wayland/qwaylandintegration.h index d707612..c3919ab 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.h +++ b/src/plugins/platforms/wayland/qwaylandintegration.h @@ -54,6 +54,7 @@ class QWaylandIntegration : public QPlatformIntegration public: QWaylandIntegration(bool useOpenGL = false); + bool hasCapability(QPlatformIntegration::Capability cap) const; QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; -- cgit v0.12 From adeec26e3bd67183e329cee4a0d1e8b7f6c454c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 12:32:24 +0100 Subject: Lighthouse: Native Interface, added graphicsDevice --- src/gui/kernel/qplatformnativeinterface_qpa.cpp | 14 ++++++++++---- src/gui/kernel/qplatformnativeinterface_qpa.h | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.cpp b/src/gui/kernel/qplatformnativeinterface_qpa.cpp index 67406cd..8f128ee 100644 --- a/src/gui/kernel/qplatformnativeinterface_qpa.cpp +++ b/src/gui/kernel/qplatformnativeinterface_qpa.cpp @@ -43,25 +43,31 @@ QT_BEGIN_NAMESPACE -void * QPlatformNativeInterface::nativeDisplayForWidget(QWidget *widget) +void *QPlatformNativeInterface::nativeDisplayForWidget(QWidget *widget) { Q_UNUSED(widget); return 0; } -void * QPlatformNativeInterface::eglDisplayForWidget(QWidget *widget) +void *QPlatformNativeInterface::eglDisplayForWidget(QWidget *widget) { Q_UNUSED(widget); return 0; } -void * QPlatformNativeInterface::nativeConnectionForWidget(QWidget *widget) +void *QPlatformNativeInterface::nativeConnectionForWidget(QWidget *widget) { Q_UNUSED(widget); return 0; } -void * QPlatformNativeInterface::nativeScreenForWidget(QWidget *widget) +void *QPlatformNativeInterface::nativeScreenForWidget(QWidget *widget) +{ + Q_UNUSED(widget); + return 0; +} + +void *QPlatformNativeInterface::nativeGraphicsDeviceForWidget(QWidget *widget) { Q_UNUSED(widget); return 0; diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.h b/src/gui/kernel/qplatformnativeinterface_qpa.h index d576297..80d6229 100644 --- a/src/gui/kernel/qplatformnativeinterface_qpa.h +++ b/src/gui/kernel/qplatformnativeinterface_qpa.h @@ -59,6 +59,7 @@ public: virtual void *eglDisplayForWidget(QWidget *widget); virtual void *nativeConnectionForWidget(QWidget *widget); virtual void *nativeScreenForWidget(QWidget *widget); + virtual void *nativeGraphicsDeviceForWidget(QWidget *widget); }; QT_END_NAMESPACE -- cgit v0.12 From 17a4f332f0d416af842145f0ebc7f2ebe7f33527 Mon Sep 17 00:00:00 2001 From: Chris Kawano <808christian@gmail.com> Date: Tue, 1 Mar 2011 13:12:37 +0100 Subject: Fix QTextStream::pos() causes buffer offset issues on large text files. When reading large files that are greater in size than the TEXTSTREAM_BUFFERSIZE buffer, calling pos() caused erroneous buffer positioning. The cause of this was QTextStreamPrivate::readBufferOffset value being updated, but QTextStreamPrivate::readConverterSavedStateOffset was not. Usually, if pos() is called, it is called multiple times. Since QTextStreamPrivate::readConverterSavedStateOffset was never reset, QTextStreamPrivate::readBufferOffset would accumulate the wrong position and QTextStreamPrivate::consume() will 'discard' the wrong number of bytes from the buffer. Task-number: QTBUG-9814 Merge-request: 2569 Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com> --- src/corelib/io/qtextstream.cpp | 1 + tests/auto/qtextstream/tst_qtextstream.cpp | 36 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index b630502..a5837cb 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -1264,6 +1264,7 @@ qint64 QTextStream::pos() const return qint64(-1); } thatd->readBufferOffset = oldReadBufferOffset; + thatd->readConverterSavedStateOffset = 0; // Return the device position. return d->device->pos(); diff --git a/tests/auto/qtextstream/tst_qtextstream.cpp b/tests/auto/qtextstream/tst_qtextstream.cpp index 99f2556..2d7c24d 100644 --- a/tests/auto/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/qtextstream/tst_qtextstream.cpp @@ -208,6 +208,7 @@ private slots: void seek(); void pos(); void pos2(); + void pos3LargeFile(); void readStdin(); void readAllFromStdin(); void readLineFromStdin(); @@ -1502,6 +1503,41 @@ void tst_QTextStream::pos2() } // ------------------------------------------------------------------------------ +void tst_QTextStream::pos3LargeFile() +{ + { + QFile file(TestFileName); + file.open(QIODevice::WriteOnly | QIODevice::Text); + QTextStream out( &file ); + // NOTE: The unusual spacing is to ensure non-1-character whitespace. + QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n"; + // Approximate 50kb text file + const int NbLines = (50*1024) / lineString.length() + 1; + for (int line = 0; line < NbLines; ++line) + out << lineString; + // File is automatically flushed and closed on destruction. + } + QFile file(TestFileName); + file.open(QIODevice::ReadOnly | QIODevice::Text); + QTextStream in( &file ); + const int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int value; + while (true) { + in.pos(); + for ( int i = 0; i < 10; ++i ) { + in >> value; + if (in.status() != QTextStream::Ok) { + // End case, i == 0 && eof reached. + QCOMPARE(i, 0); + QCOMPARE(in.status(), QTextStream::ReadPastEnd); + return; + } + QCOMPARE(value, testValues[i]); + } + } +} + +// ------------------------------------------------------------------------------ void tst_QTextStream::readStdin() { #if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) -- cgit v0.12 From 124cc3c0dfe18c2e5027a0eee430ac03b48807c0 Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Tue, 1 Mar 2011 14:10:08 +0100 Subject: Wrap qPrintable inside QString QString() is a no-op if string is already a QString And it fixes the compilation if other types are use that do not have toLocal8Bit such as QStringBuilder. WebKit trunk has an instance of such usage. Reviewed-by: Joao --- src/corelib/global/qglobal.h | 2 +- tests/auto/qstringbuilder1/stringbuilder.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 67ccf4d..2ddb91d 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -1667,7 +1667,7 @@ inline void qUnused(T &x) { (void)x; } #endif #ifndef qPrintable -# define qPrintable(string) (string).toLocal8Bit().constData() +# define qPrintable(string) QString(string).toLocal8Bit().constData() #endif Q_CORE_EXPORT void qDebug(const char *, ...) /* print debug message */ diff --git a/tests/auto/qstringbuilder1/stringbuilder.cpp b/tests/auto/qstringbuilder1/stringbuilder.cpp index b4f6334..1ea7347 100644 --- a/tests/auto/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/qstringbuilder1/stringbuilder.cpp @@ -110,4 +110,6 @@ void runScenario() r = string P ba; QCOMPARE(r, r2); #endif + + QCOMPARE(QByteArray(qPrintable(string P string)), QByteArray(string.toLatin1() + string.toLatin1())); } -- cgit v0.12 From ccb623188369be7bf4b991ff8a1f81d27137984c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 13:58:53 +0100 Subject: Lighthouse: Make Native Interface slightly more agile We realised that we couldn't keep on adding virtual functions for all specific needs so we made one virtual function which takes a string parameter which enables the implementation to return anything. It seems a bit odd to have a virtual function as an accessor for a class with only 1 virtual function. But the idea is that we don't want a void * in the core lighthouse api. Also, the implementations should decleare more functions to do the heavy lifting of getting the handles Reviewed-by: paul --- src/gui/kernel/qplatformnativeinterface_qpa.cpp | 27 ++----------------------- src/gui/kernel/qplatformnativeinterface_qpa.h | 6 +----- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.cpp b/src/gui/kernel/qplatformnativeinterface_qpa.cpp index 8f128ee..ace4a7b 100644 --- a/src/gui/kernel/qplatformnativeinterface_qpa.cpp +++ b/src/gui/kernel/qplatformnativeinterface_qpa.cpp @@ -43,32 +43,9 @@ QT_BEGIN_NAMESPACE -void *QPlatformNativeInterface::nativeDisplayForWidget(QWidget *widget) -{ - Q_UNUSED(widget); - return 0; -} - -void *QPlatformNativeInterface::eglDisplayForWidget(QWidget *widget) -{ - Q_UNUSED(widget); - return 0; -} - -void *QPlatformNativeInterface::nativeConnectionForWidget(QWidget *widget) -{ - Q_UNUSED(widget); - return 0; -} - -void *QPlatformNativeInterface::nativeScreenForWidget(QWidget *widget) -{ - Q_UNUSED(widget); - return 0; -} - -void *QPlatformNativeInterface::nativeGraphicsDeviceForWidget(QWidget *widget) +void *QPlatformNativeInterface::nativeResourceForWidget(const QByteArray &resource, QWidget *widget) { + Q_UNUSED(resource); Q_UNUSED(widget); return 0; } diff --git a/src/gui/kernel/qplatformnativeinterface_qpa.h b/src/gui/kernel/qplatformnativeinterface_qpa.h index 80d6229..5ea2c13 100644 --- a/src/gui/kernel/qplatformnativeinterface_qpa.h +++ b/src/gui/kernel/qplatformnativeinterface_qpa.h @@ -55,11 +55,7 @@ class QWidget; class Q_GUI_EXPORT QPlatformNativeInterface { public: - virtual void *nativeDisplayForWidget(QWidget *widget); - virtual void *eglDisplayForWidget(QWidget *widget); - virtual void *nativeConnectionForWidget(QWidget *widget); - virtual void *nativeScreenForWidget(QWidget *widget); - virtual void *nativeGraphicsDeviceForWidget(QWidget *widget); + virtual void *nativeResourceForWidget(const QByteArray &resource, QWidget *widget); }; QT_END_NAMESPACE -- cgit v0.12 From 53741ff1983a9d0085658b96743b125daaa5e680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Tue, 1 Mar 2011 14:01:43 +0100 Subject: Lighthouse: Implement the new Native Interface api in the xcb plugin --- src/plugins/platforms/xcb/qxcbconnection.cpp | 5 +- src/plugins/platforms/xcb/qxcbconnection.h | 2 + src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 74 ++++++++++++++++++++--- src/plugins/platforms/xcb/qxcbnativeinterface.h | 22 +++++-- 4 files changed, 87 insertions(+), 16 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 06e4d13..a2f985e 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -447,13 +447,14 @@ void QXcbConnection::initializeDri2() return; } - QString dri2DeviceName = QString::fromLocal8Bit(xcb_dri2_connect_device_name (connect), + m_dri2_device_name = QByteArray(xcb_dri2_connect_device_name (connect), xcb_dri2_connect_device_name_length (connect)); delete connect; - int fd = open(qPrintable(dri2DeviceName), O_RDWR); + int fd = open(m_dri2_device_name.constData(), O_RDWR); if (fd < 0) { qDebug() << "InitializeDri2: Could'nt open device << dri2DeviceName"; + m_dri2_device_name = QByteArray(); return; } diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 3aa36db..8a0f3d7 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -239,6 +239,7 @@ public: #ifdef XCB_USE_DRI2 bool hasSupportForDri2() const; void *egl_display() const { return m_egl_display; } + QByteArray dri2DeviceName() const { return m_dri2_device_name; } #endif private slots: @@ -272,6 +273,7 @@ private: bool m_dri2_support_probed; bool m_has_support_for_dri2; void *m_egl_display; + QByteArray m_dri2_device_name; #endif }; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index 859b6c3..f379580 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -3,8 +3,52 @@ #include "qxcbscreen.h" #include <QtGui/private/qapplication_p.h> +#include <QtCore/QMap> -QXcbScreen *QXcbNativeInterface::screenForWidget(QWidget *widget) +class QXcbResourceMap : public QMap<QByteArray, QXcbNativeInterface::ResourceType> +{ +public: + QXcbResourceMap() + :QMap<QByteArray, QXcbNativeInterface::ResourceType>() + { + insert("display",QXcbNativeInterface::Display); + insert("egldisplay",QXcbNativeInterface::EglDisplay); + insert("connection",QXcbNativeInterface::Connection); + insert("screen",QXcbNativeInterface::Screen); + insert("graphicsdevice",QXcbNativeInterface::GraphicsDevice); + } +}; + +Q_GLOBAL_STATIC(QXcbResourceMap, qXcbResourceMap) + +void *QXcbNativeInterface::nativeResourceForWidget(const QByteArray &resourceString, QWidget *widget) +{ + QByteArray lowerCaseResource = resourceString.toLower(); + ResourceType resource = qXcbResourceMap()->value(lowerCaseResource); + void *result = 0; + switch(resource) { + case Display: + result = displayForWidget(widget); + break; + case EglDisplay: + result = eglDisplayForWidget(widget); + break; + case Connection: + result = connectionForWidget(widget); + break; + case Screen: + result = qPlatformScreenForWidget(widget); + break; + case GraphicsDevice: + result = graphicsDeviceForWidget(widget); + break; + default: + result = 0; + } + return result; +} + +QXcbScreen *QXcbNativeInterface::qPlatformScreenForWidget(QWidget *widget) { QXcbScreen *screen; if (widget) { @@ -15,10 +59,10 @@ QXcbScreen *QXcbNativeInterface::screenForWidget(QWidget *widget) return screen; } -void * QXcbNativeInterface::nativeDisplayForWidget(QWidget *widget) +void *QXcbNativeInterface::displayForWidget(QWidget *widget) { #if defined(XCB_USE_XLIB) - QXcbScreen *screen = screenForWidget(widget); + QXcbScreen *screen = qPlatformScreenForWidget(widget); return screen->connection()->xlib_display(); #else Q_UNUSED(widget); @@ -26,10 +70,10 @@ void * QXcbNativeInterface::nativeDisplayForWidget(QWidget *widget) #endif } -void * QXcbNativeInterface::eglDisplayForWidget(QWidget *widget) +void *QXcbNativeInterface::eglDisplayForWidget(QWidget *widget) { #if defined(XCB_USE_DRI2) - QXcbScreen *screen = screenForWidget(widget); + QXcbScreen *screen = qPlatformScreenForWidget(widget); return screen->connection()->egl_display(); #else Q_UNUSED(widget) @@ -37,14 +81,26 @@ void * QXcbNativeInterface::eglDisplayForWidget(QWidget *widget) #endif } -void * QXcbNativeInterface::nativeConnectionForWidget(QWidget *widget) +void *QXcbNativeInterface::connectionForWidget(QWidget *widget) { - QXcbScreen *screen = screenForWidget(widget); + QXcbScreen *screen = qPlatformScreenForWidget(widget); return screen->xcb_connection(); } -void * QXcbNativeInterface::nativeScreenForWidget(QWidget *widget) +void *QXcbNativeInterface::screenForWidget(QWidget *widget) { - QXcbScreen *screen = screenForWidget(widget); + QXcbScreen *screen = qPlatformScreenForWidget(widget); return screen->screen(); } + +void *QXcbNativeInterface::graphicsDeviceForWidget(QWidget *widget) +{ +#if defined(XCB_USE_DRI2) + QXcbScreen *screen = qPlatformScreenForWidget(widget); + QByteArray deviceName = screen->connection()->dri2DeviceName(); + return deviceName.data(); +#else + return 0; +#endif + +} diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index fb48833..9815381 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -8,13 +8,25 @@ class QXcbScreen; class QXcbNativeInterface : public QPlatformNativeInterface { - void * nativeDisplayForWidget(QWidget *widget); - void * eglDisplayForWidget(QWidget *widget); - void * nativeConnectionForWidget(QWidget *widget); - void * nativeScreenForWidget(QWidget *widget); +public: + enum ResourceType { + Display, + EglDisplay, + Connection, + Screen, + GraphicsDevice + }; + + void *nativeResourceForWidget(const QByteArray &resourceString, QWidget *widget); + + void *displayForWidget(QWidget *widget); + void *eglDisplayForWidget(QWidget *widget); + void *connectionForWidget(QWidget *widget); + void *screenForWidget(QWidget *widget); + void *graphicsDeviceForWidget(QWidget *widget); private: - static QXcbScreen *screenForWidget(QWidget *widget); + static QXcbScreen *qPlatformScreenForWidget(QWidget *widget); }; #endif // QXCBNATIVEINTERFACE_H -- cgit v0.12 From 12573a8860d10cf023246e9d3d7f5739d83aabe4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete <paul.tvete@nokia.com> Date: Wed, 2 Mar 2011 09:50:10 +0100 Subject: Build fixes for the Wayland plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add qmake.conf variables, and use the generic font plugin. Reviewed-by: Jørgen --- mkspecs/common/linux.conf | 5 +++++ src/plugins/platforms/wayland/qwaylandinputdevice.cpp | 15 ++++++++++++--- src/plugins/platforms/wayland/qwaylandintegration.cpp | 4 ++-- src/plugins/platforms/wayland/wayland.pro | 10 ++++++---- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf index e443be1..283cf83 100644 --- a/mkspecs/common/linux.conf +++ b/mkspecs/common/linux.conf @@ -35,6 +35,11 @@ QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 QMAKE_LIBS_OPENVG = -lOpenVG QMAKE_LIBS_THREAD = -lpthread +QMAKE_CFLAGS_WAYLAND = +QMAKE_INCDIR_WAYLAND = +QMAKE_LIBS_WAYLAND = -lwayland-client -lxkbcommon +QMAKE_DEFINES_WAYLAND = + QMAKE_MOC = $$[QT_INSTALL_BINS]/moc QMAKE_UIC = $$[QT_INSTALL_BINS]/uic diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp index 102a213..47f9c91 100644 --- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp +++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp @@ -52,8 +52,11 @@ #include <unistd.h> #include <fcntl.h> + +#ifndef QT_NO_WAYLAND_XKB #include <X11/extensions/XKBcommon.h> #include <X11/keysym.h> +#endif QWaylandInputDevice::QWaylandInputDevice(struct wl_display *display, uint32_t id) @@ -63,13 +66,13 @@ QWaylandInputDevice::QWaylandInputDevice(struct wl_display *display, , mKeyboardFocus(NULL) , mButtons(0) { - struct xkb_rule_names names; - wl_input_device_add_listener(mInputDevice, &inputDeviceListener, this); wl_input_device_set_user_data(mInputDevice, this); +#ifndef QT_NO_WAYLAND_XKB + struct xkb_rule_names names; names.rules = "evdev"; names.model = "pc105"; names.layout = "us"; @@ -77,6 +80,7 @@ QWaylandInputDevice::QWaylandInputDevice(struct wl_display *display, names.options = ""; mXkb = xkb_compile_keymap_from_rules(&names); +#endif } void QWaylandInputDevice::inputHandleMotion(void *data, @@ -135,6 +139,7 @@ void QWaylandInputDevice::inputHandleButton(void *data, inputDevice->mButtons); } +#ifndef QT_NO_WAYLAND_XKB static Qt::KeyboardModifiers translateModifiers(int s) { const uchar qt_alt_mask = XKB_COMMON_MOD1_MASK; @@ -201,11 +206,13 @@ static uint32_t translateKey(uint32_t sym, char *string, size_t size) return toupper(sym); } } +#endif void QWaylandInputDevice::inputHandleKey(void *data, struct wl_input_device *input_device, uint32_t time, uint32_t key, uint32_t state) { +#ifndef QT_NO_WAYLAND_XKB Q_UNUSED(input_device); QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data; QWaylandWindow *window = inputDevice->mKeyboardFocus; @@ -244,6 +251,7 @@ void QWaylandInputDevice::inputHandleKey(void *data, inputDevice->mModifiers, QString::fromLatin1(s)); } +#endif } void QWaylandInputDevice::inputHandlePointerFocus(void *data, @@ -280,6 +288,7 @@ void QWaylandInputDevice::inputHandleKeyboardFocus(void *data, struct wl_surface *surface, struct wl_array *keys) { +#ifndef QT_NO_WAYLAND_XKB Q_UNUSED(input_device); Q_UNUSED(time); QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data; @@ -303,7 +312,7 @@ void QWaylandInputDevice::inputHandleKeyboardFocus(void *data, inputDevice->mKeyboardFocus = NULL; QWindowSystemInterface::handleWindowActivated(0); } - +#endif } const struct wl_input_device_listener QWaylandInputDevice::inputDeviceListener = { diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 3383410..267a037 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -47,7 +47,7 @@ #include "qwaylandshmwindow.h" #include "qwaylandeglwindow.h" -#include "qfontconfigdatabase.h" +#include "qgenericunixfontdatabase.h" #include <QtGui/QWindowSystemInterface> #include <QtGui/QPlatformCursor> @@ -59,7 +59,7 @@ #endif QWaylandIntegration::QWaylandIntegration(bool useOpenGL) - : mFontDb(new QFontconfigDatabase()) + : mFontDb(new QGenericUnixFontDatabase()) , mDisplay(new QWaylandDisplay()) , mUseOpenGL(useOpenGL) { diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 9faa59b..face860 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -4,6 +4,7 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms DEFINES += Q_PLATFORM_WAYLAND +DEFINES += $$QMAKE_DEFINES_WAYLAND SOURCES = main.cpp \ qwaylandintegration.cpp \ @@ -27,8 +28,9 @@ HEADERS = qwaylandintegration.h \ qwaylandeglwindow.h \ qwaylandshmwindow.h -LIBS += -lwayland-client -LIBS += -lxkbcommon +INCLUDEPATH += $$QMAKE_INCDIR_WAYLAND +LIBS += $$QMAKE_LIBS_WAYLAND +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_WAYLAND contains(QT_CONFIG, opengles2) { QT += opengl @@ -45,12 +47,12 @@ contains(QT_CONFIG, opengles2) { DEFINES += QT_WAYLAND_GL_SUPPORT } -unix { +unix:isEmpty(QMAKE_INCDIR_WAYLAND) { CONFIG += link_pkgconfig PKGCONFIG += libdrm } -include (../fontdatabases/fontconfig/fontconfig.pri) +include (../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -- cgit v0.12 From f37a9b29a4113e57da1756019935dd14d1c722bf Mon Sep 17 00:00:00 2001 From: Olivier Goffart <olivier.goffart@nokia.com> Date: Wed, 2 Mar 2011 11:18:36 +0100 Subject: Fix qstringbuilder test. when QT_NO_CAST_FROM_ASCII is not defined, the string is assigned to an string with more than ascii. So if the codecForLocale is not latin1, it would fail. --- tests/auto/qstringbuilder1/stringbuilder.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qstringbuilder1/stringbuilder.cpp b/tests/auto/qstringbuilder1/stringbuilder.cpp index 1ea7347..6faff35 100644 --- a/tests/auto/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/qstringbuilder1/stringbuilder.cpp @@ -111,5 +111,6 @@ void runScenario() QCOMPARE(r, r2); #endif + string = QString::fromLatin1(LITERAL); QCOMPARE(QByteArray(qPrintable(string P string)), QByteArray(string.toLatin1() + string.toLatin1())); } -- cgit v0.12 From 571946141df5428c08221381b2f18302e004825f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete <paul.tvete@nokia.com> Date: Wed, 2 Mar 2011 15:31:28 +0100 Subject: Compile with glx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen --- src/plugins/platforms/xlib/qglxintegration.cpp | 29 +++++++++++++------------ src/plugins/platforms/xlib/qxlibintegration.cpp | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/plugins/platforms/xlib/qglxintegration.cpp b/src/plugins/platforms/xlib/qglxintegration.cpp index 5ba4f0d..89cd768 100644 --- a/src/plugins/platforms/xlib/qglxintegration.cpp +++ b/src/plugins/platforms/xlib/qglxintegration.cpp @@ -45,6 +45,7 @@ #include "qxlibwindow.h" #include "qxlibscreen.h" +#include "qxlibdisplay.h" #if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2) #include <X11/Xlib.h> @@ -122,7 +123,7 @@ GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWi QVector<int> spec = buildSpec(reducedFormat); int confcount = 0; GLXFBConfig *configs; - configs = glXChooseFBConfig(screen->display(),screen->xScreenNumber(),spec.constData(),&confcount); + configs = glXChooseFBConfig(screen->display()->nativeDisplay(),screen->xScreenNumber(),spec.constData(),&confcount); if (confcount) { for (int i = 0; i < confcount; i++) { @@ -130,7 +131,7 @@ GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWi // Make sure we try to get an ARGB visual if the format asked for an alpha: if (reducedFormat.alpha()) { int alphaSize; - glXGetFBConfigAttrib(screen->display(),configs[i],GLX_ALPHA_SIZE,&alphaSize); + glXGetFBConfigAttrib(screen->display()->nativeDisplay(),configs[i],GLX_ALPHA_SIZE,&alphaSize); if (alphaSize > 0) break; } else { @@ -152,7 +153,7 @@ GLXFBConfig QGLXContext::findConfig(const QXlibScreen *screen, const QPlatformWi XVisualInfo *QGLXContext::findVisualInfo(const QXlibScreen *screen, const QPlatformWindowFormat &format) { GLXFBConfig config = QGLXContext::findConfig(screen,format); - XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display()->nativeDisplay(),config); return visualInfo; } @@ -264,8 +265,8 @@ QGLXContext::QGLXContext(Window window, QXlibScreen *screen, const QPlatformWind shareGlxContext = static_cast<const QGLXContext*>(sharePlatformContext)->glxContext(); GLXFBConfig config = findConfig(screen,format); - m_context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,shareGlxContext,TRUE); - m_windowFormat = QGLXContext::platformWindowFromGLXFBConfig(screen->display(),config,m_context); + m_context = glXCreateNewContext(screen->display()->nativeDisplay(),config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + m_windowFormat = QGLXContext::platformWindowFromGLXFBConfig(screen->display()->nativeDisplay(),config,m_context); #ifdef MYX11_DEBUG qDebug() << "QGLXGLContext::create context" << m_context; @@ -282,7 +283,7 @@ QGLXContext::~QGLXContext() { if (m_context) { qDebug("Destroying GLX context 0x%p", m_context); - glXDestroyContext(m_screen->display(), m_context); + glXDestroyContext(m_screen->display()->nativeDisplay(), m_context); } } @@ -297,15 +298,15 @@ void QGLXContext::createDefaultSharedContex(QXlibScreen *screen) GLXContext context; GLXFBConfig config = findConfig(screen,format); if (config) { - XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display(),config); - Colormap cmap = XCreateColormap(screen->display(),screen->rootWindow(),visualInfo->visual,AllocNone); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(screen->display()->nativeDisplay(),config); + Colormap cmap = XCreateColormap(screen->display()->nativeDisplay(),screen->rootWindow(),visualInfo->visual,AllocNone); XSetWindowAttributes a; a.colormap = cmap; - Window sharedWindow = XCreateWindow(screen->display(), screen->rootWindow(),x, y, w, h, + Window sharedWindow = XCreateWindow(screen->display()->nativeDisplay(), screen->rootWindow(),x, y, w, h, 0, visualInfo->depth, InputOutput, visualInfo->visual, CWColormap, &a); - context = glXCreateNewContext(screen->display(),config,GLX_RGBA_TYPE,0,TRUE); + context = glXCreateNewContext(screen->display()->nativeDisplay(),config,GLX_RGBA_TYPE,0,TRUE); QPlatformGLContext *sharedContext = new QGLXContext(screen,sharedWindow,context); QPlatformGLContext::setDefaultSharedContext(sharedContext); } else { @@ -319,18 +320,18 @@ void QGLXContext::makeCurrent() #ifdef MYX11_DEBUG qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context); #endif - glXMakeCurrent(m_screen->display(), m_drawable, m_context); + glXMakeCurrent(m_screen->display()->nativeDisplay(), m_drawable, m_context); } void QGLXContext::doneCurrent() { QPlatformGLContext::doneCurrent(); - glXMakeCurrent(m_screen->display(), 0, 0); + glXMakeCurrent(m_screen->display()->nativeDisplay(), 0, 0); } void QGLXContext::swapBuffers() { - glXSwapBuffers(m_screen->display(), m_drawable); + glXSwapBuffers(m_screen->display()->nativeDisplay(), m_drawable); } void* QGLXContext::getProcAddress(const QString& procName) @@ -342,7 +343,7 @@ void* QGLXContext::getProcAddress(const QString& procName) if (resolved && !glXGetProcAddressARB) return 0; if (!glXGetProcAddressARB) { - QList<QByteArray> glxExt = QByteArray(glXGetClientString(m_screen->display(), GLX_EXTENSIONS)).split(' '); + QList<QByteArray> glxExt = QByteArray(glXGetClientString(m_screen->display()->nativeDisplay(), GLX_EXTENSIONS)).split(' '); if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp index e3ebb13..c207eb2 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.cpp +++ b/src/plugins/platforms/xlib/qxlibintegration.cpp @@ -135,7 +135,7 @@ bool QXlibIntegration::hasOpenGL() const #if !defined(QT_NO_OPENGL) #if !defined(QT_OPENGL_ES_2) QXlibScreen *screen = static_cast<const QXlibScreen *>(mScreens.at(0)); - return glXQueryExtension(screen->display(), 0, 0) != 0; + return glXQueryExtension(screen->display()->nativeDisplay(), 0, 0) != 0; #else static bool eglHasbeenInitialized = false; static bool wasEglInitialized = false; -- cgit v0.12 From 4ec935b3e738f79d76b708773c49471cffc46f65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Wed, 2 Mar 2011 16:15:47 +0100 Subject: Lighthouse: Make wayland configure check use pkg-config Reviewed-by: paul --- config.tests/qpa/wayland/wayland.pro | 6 ++---- configure | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/config.tests/qpa/wayland/wayland.pro b/config.tests/qpa/wayland/wayland.pro index 266e4d6..0c2b899 100644 --- a/config.tests/qpa/wayland/wayland.pro +++ b/config.tests/qpa/wayland/wayland.pro @@ -1,6 +1,4 @@ SOURCES = wayland.cpp CONFIG -= qt - -QMAKE_CXXFLAGS += $$QT_CFLAGS_WAYLAND -LIBS += $$QT_LIBS_WAYLAND -lfreetype -lfontconfig -lwayland-client - +INCLUDEPATH += $$QMAKE_INCDIR_WAYLAND +LIBS += $$QMAKE_LIBS_WAYLAND diff --git a/configure b/configure index b95baab..664af92 100755 --- a/configure +++ b/configure @@ -6171,10 +6171,23 @@ if [ "$PLATFORM_QPA" = "yes" ]; then CFG_LIBFREETYPE=system fi - if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/wayland "Wayland" $L_FLAGS $I_FLAGS $l_FLAGS; then - QT_CONFIG="$QT_CONFIG wayland" - fi + fi + + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists wayland-client 2>/dev/null; then + QMAKE_CFLAGS_WAYLAND=`$PKG_CONFIG --cflags wayland-client 2>/dev/null` + QMAKE_LIBS_WAYLAND=`$PKG_CONFIG --libs wayland-client 2>/dev/null` + QMAKE_INCDIR_WAYLAND=`$PKG_CONFIG --variable=includedir wayland-client 2>/dev/null` + fi + + # QMake variables set here override those in the mkspec. Therefore we only set the variables here if they are not zero. + if [ -n "$QMAKE_CFLAGS_WAYLAND" ] || [ -n "$QMAKE_LIBS_WAYLAND" ]; then + QMakeVar set QMAKE_CFLAGS_WAYLAND "$QMAKE_CFLAGS_WAYLAND" + QMakeVar set QMAKE_INCDIR_WAYLAND "$QMAKE_INCDIR_WAYLAND" + QMakeVar set QMAKE_LIBS_WAYLAND "$QMAKE_LIBS_WAYLAND" + fi + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/wayland "Wayland" $L_FLAGS $I_FLAGS $l_FLAGS $QMAKE_CFLAGS_WAYLAND -I$QMAKE_INCDIR_WAYLAND $QMAKE_LIBS_WAYLAND; then + QT_CONFIG="$QT_CONFIG wayland" fi if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/coreservices "CoreServices" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then -- cgit v0.12 From 6aaf7b3c93687b857ff7cac0f2ad2ee510b2813b Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 3 Mar 2011 14:43:42 +1000 Subject: Add a way to query the reading direction of QML editor text Task-number: QTBUG-17490 Reviewed-by: Martin Jones Change-Id: I3dd3854f820860d32e822605ed547150d5f17eb2 --- .../graphicsitems/qdeclarativetextedit.cpp | 17 +++++++ .../graphicsitems/qdeclarativetextedit_p.h | 1 + .../graphicsitems/qdeclarativetextinput.cpp | 17 +++++++ .../graphicsitems/qdeclarativetextinput_p.h | 1 + .../tst_qdeclarativetextedit.cpp | 59 ++++++++++++++++++++++ .../tst_qdeclarativetextinput.cpp | 59 ++++++++++++++++++++++ 6 files changed, 154 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 3c2684c..5e1459c 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1235,6 +1235,23 @@ void QDeclarativeTextEdit::select(int start, int end) updateSelectionMarkers(); } +/*! + \qmlmethod void TextEdit::isRightToLeft(int start, int end) + + Returns true if the natural reading direction of the editor text + found between positions \a start and \a end is right to left. +*/ +bool QDeclarativeTextEdit::isRightToLeft(int start, int end) +{ + Q_D(QDeclarativeTextEdit); + if (start > end) { + qmlInfo(this) << "isRightToLeft(start, end) called with the end property being smaller than the start."; + return false; + } else { + return d->text.mid(start, end - start).isRightToLeft(); + } +} + #ifndef QT_NO_CLIPBOARD /*! \qmlmethod TextEdit::cut() diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index a8d9fe2..471b201 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -253,6 +253,7 @@ public Q_SLOTS: void selectWord(); void select(int start, int end); Q_REVISION(1) void deselect(); + Q_REVISION(1) bool isRightToLeft(int start, int end); #ifndef QT_NO_CLIPBOARD void cut(); void copy(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index cb7f739..09404ce 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1370,6 +1370,23 @@ void QDeclarativeTextInput::selectAll() d->control->setSelection(0, d->control->text().length()); } +/*! + \qmlmethod void TextInput::isRightToLeft(int start, int end) + + Returns true if the natural reading direction of the editor text + found between positions \a start and \a end is right to left. +*/ +bool QDeclarativeTextInput::isRightToLeft(int start, int end) +{ + Q_D(QDeclarativeTextInput); + if (start > end) { + qmlInfo(this) << "isRightToLeft(start, end) called with the end property being smaller than the start."; + return false; + } else { + return d->control->text().mid(start, end - start).isRightToLeft(); + } +} + #ifndef QT_NO_CLIPBOARD /*! \qmlmethod TextInput::cut() diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index c057f1f..ce5f267 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -262,6 +262,7 @@ public Q_SLOTS: void selectWord(); void select(int start, int end); Q_REVISION(1) void deselect(); + Q_REVISION(1) bool isRightToLeft(int start, int end); #ifndef QT_NO_CLIPBOARD void cut(); void copy(); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index c5e2a11..6d5750f 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -110,6 +110,8 @@ private slots: void persistentSelection(); void focusOnPress(); void selection(); + void isRightToLeft_data(); + void isRightToLeft(); void moveCursorSelection_data(); void moveCursorSelection(); void moveCursorSelectionSequence_data(); @@ -787,6 +789,63 @@ void tst_qdeclarativetextedit::selection() QVERIFY(textEditObject->selectedText().isNull()); } +void tst_qdeclarativetextedit::isRightToLeft_data() +{ + QTest::addColumn<QString>("text"); + QTest::addColumn<bool>("emptyString"); + QTest::addColumn<bool>("firstCharacter"); + QTest::addColumn<bool>("lastCharacter"); + QTest::addColumn<bool>("middleCharacter"); + QTest::addColumn<bool>("startString"); + QTest::addColumn<bool>("midString"); + QTest::addColumn<bool>("endString"); + + const quint16 arabic_str[] = { 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0647}; + QTest::newRow("Empty") << "" << false << false << false << false << false << false << false; + QTest::newRow("Neutral") << "23244242" << false << false << false << false << false << false << false; + QTest::newRow("LTR") << "Hello world" << false << false << false << false << false << false << false; + QTest::newRow("RTL") << QString::fromUtf16(arabic_str, 11) << false << true << true << true << true << true << true; + QTest::newRow("Bidi RTL + LTR + RTL") << QString::fromUtf16(arabic_str, 11) + QString("Hello world") + QString::fromUtf16(arabic_str, 11) << false << true << true << false << true << true << true; + QTest::newRow("Bidi LTR + RTL + LTR") << QString("Hello world") + QString::fromUtf16(arabic_str, 11) + QString("Hello world") << false << false << false << true << false << false << false; +} + +void tst_qdeclarativetextedit::isRightToLeft() +{ + QFETCH(QString, text); + QFETCH(bool, emptyString); + QFETCH(bool, firstCharacter); + QFETCH(bool, lastCharacter); + QFETCH(bool, middleCharacter); + QFETCH(bool, startString); + QFETCH(bool, midString); + QFETCH(bool, endString); + + QDeclarativeTextEdit textEdit; + textEdit.setText(text); + + // first test that the right string is delivered to the QString::isRightToLeft() + QCOMPARE(textEdit.isRightToLeft(0,0), text.mid(0,0).isRightToLeft()); + QCOMPARE(textEdit.isRightToLeft(0,1), text.mid(0,1).isRightToLeft()); + QCOMPARE(textEdit.isRightToLeft(text.count()-2, text.count()-1), text.mid(text.count()-2, text.count()-1).isRightToLeft()); + QCOMPARE(textEdit.isRightToLeft(text.count()/2, text.count()/2 + 1), text.mid(text.count()/2, text.count()/2 + 1).isRightToLeft()); + QCOMPARE(textEdit.isRightToLeft(0,text.count()/4), text.mid(0,text.count()/4).isRightToLeft()); + QCOMPARE(textEdit.isRightToLeft(text.count()/4,3*text.count()/4), text.mid(text.count()/4,3*text.count()/4).isRightToLeft()); + if (text.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextEdit: isRightToLeft(start, end) called with the end property being smaller than the start."); + QCOMPARE(textEdit.isRightToLeft(3*text.count()/4,text.count()-1), text.mid(3*text.count()/4,text.count()-1).isRightToLeft()); + + // then test that the feature actually works + QCOMPARE(textEdit.isRightToLeft(0,0), emptyString); + QCOMPARE(textEdit.isRightToLeft(0,1), firstCharacter); + QCOMPARE(textEdit.isRightToLeft(text.count()-2, text.count()-1), lastCharacter); + QCOMPARE(textEdit.isRightToLeft(text.count()/2, text.count()/2 + 1), middleCharacter); + QCOMPARE(textEdit.isRightToLeft(0,text.count()/4), startString); + QCOMPARE(textEdit.isRightToLeft(text.count()/4,3*text.count()/4), midString); + if (text.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextEdit: isRightToLeft(start, end) called with the end property being smaller than the start."); + QCOMPARE(textEdit.isRightToLeft(3*text.count()/4,text.count()-1), endString); +} + void tst_qdeclarativetextedit::moveCursorSelection_data() { QTest::addColumn<QString>("testStr"); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 65be327..585479c 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -89,6 +89,8 @@ private slots: void font(); void color(); void selection(); + void isRightToLeft_data(); + void isRightToLeft(); void moveCursorSelection_data(); void moveCursorSelection(); void moveCursorSelectionSequence_data(); @@ -435,6 +437,63 @@ void tst_qdeclarativetextinput::selection() delete textinputObject; } +void tst_qdeclarativetextinput::isRightToLeft_data() +{ + QTest::addColumn<QString>("text"); + QTest::addColumn<bool>("emptyString"); + QTest::addColumn<bool>("firstCharacter"); + QTest::addColumn<bool>("lastCharacter"); + QTest::addColumn<bool>("middleCharacter"); + QTest::addColumn<bool>("startString"); + QTest::addColumn<bool>("midString"); + QTest::addColumn<bool>("endString"); + + const quint16 arabic_str[] = { 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0647}; + QTest::newRow("Empty") << "" << false << false << false << false << false << false << false; + QTest::newRow("Neutral") << "23244242" << false << false << false << false << false << false << false; + QTest::newRow("LTR") << "Hello world" << false << false << false << false << false << false << false; + QTest::newRow("RTL") << QString::fromUtf16(arabic_str, 11) << false << true << true << true << true << true << true; + QTest::newRow("Bidi RTL + LTR + RTL") << QString::fromUtf16(arabic_str, 11) + QString("Hello world") + QString::fromUtf16(arabic_str, 11) << false << true << true << false << true << true << true; + QTest::newRow("Bidi LTR + RTL + LTR") << QString("Hello world") + QString::fromUtf16(arabic_str, 11) + QString("Hello world") << false << false << false << true << false << false << false; +} + +void tst_qdeclarativetextinput::isRightToLeft() +{ + QFETCH(QString, text); + QFETCH(bool, emptyString); + QFETCH(bool, firstCharacter); + QFETCH(bool, lastCharacter); + QFETCH(bool, middleCharacter); + QFETCH(bool, startString); + QFETCH(bool, midString); + QFETCH(bool, endString); + + QDeclarativeTextInput textInput; + textInput.setText(text); + + // first test that the right string is delivered to the QString::isRightToLeft() + QCOMPARE(textInput.isRightToLeft(0,0), text.mid(0,0).isRightToLeft()); + QCOMPARE(textInput.isRightToLeft(0,1), text.mid(0,1).isRightToLeft()); + QCOMPARE(textInput.isRightToLeft(text.count()-2, text.count()-1), text.mid(text.count()-2, text.count()-1).isRightToLeft()); + QCOMPARE(textInput.isRightToLeft(text.count()/2, text.count()/2 + 1), text.mid(text.count()/2, text.count()/2 + 1).isRightToLeft()); + QCOMPARE(textInput.isRightToLeft(0,text.count()/4), text.mid(0,text.count()/4).isRightToLeft()); + QCOMPARE(textInput.isRightToLeft(text.count()/4,3*text.count()/4), text.mid(text.count()/4,3*text.count()/4).isRightToLeft()); + if (text.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextInput: isRightToLeft(start, end) called with the end property being smaller than the start."); + QCOMPARE(textInput.isRightToLeft(3*text.count()/4,text.count()-1), text.mid(3*text.count()/4,text.count()-1).isRightToLeft()); + + // then test that the feature actually works + QCOMPARE(textInput.isRightToLeft(0,0), emptyString); + QCOMPARE(textInput.isRightToLeft(0,1), firstCharacter); + QCOMPARE(textInput.isRightToLeft(text.count()-2, text.count()-1), lastCharacter); + QCOMPARE(textInput.isRightToLeft(text.count()/2, text.count()/2 + 1), middleCharacter); + QCOMPARE(textInput.isRightToLeft(0,text.count()/4), startString); + QCOMPARE(textInput.isRightToLeft(text.count()/4,3*text.count()/4), midString); + if (text.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML TextInput: isRightToLeft(start, end) called with the end property being smaller than the start."); + QCOMPARE(textInput.isRightToLeft(3*text.count()/4,text.count()-1), endString); +} + void tst_qdeclarativetextinput::moveCursorSelection_data() { QTest::addColumn<QString>("testStr"); -- cgit v0.12 From 2b9660c4cb264dc7b8abe4c753e31c48a50b92af Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Thu, 3 Mar 2011 11:47:48 +0100 Subject: SSL tests: Be more verbose in on-demand cert test --- .../tst_qsslsocket_onDemandCertificates_member.cpp | 2 +- .../tst_qsslsocket_onDemandCertificates_static.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp b/tests/auto/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp index 2a1358d..abdd550 100644 --- a/tests/auto/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp +++ b/tests/auto/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp @@ -209,7 +209,7 @@ void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMe QSslSocketPtr socket = newSocket(); this->socket = socket; socket->connectToHostEncrypted(host, 443); - QVERIFY(socket->waitForEncrypted()); + QVERIFY2(socket->waitForEncrypted(), qPrintable(socket->errorString())); // not using any root certs again -> should not work QSslSocketPtr socket3 = newSocket(); diff --git a/tests/auto/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp b/tests/auto/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp index 8259977..5003b5c 100644 --- a/tests/auto/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp +++ b/tests/auto/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp @@ -210,7 +210,7 @@ void tst_QSslSocket_onDemandCertificates_static::onDemandRootCertLoadingStaticMe QSslSocketPtr socket2 = newSocket(); this->socket = socket2; socket2->connectToHostEncrypted(host, 443); - QVERIFY(socket2->waitForEncrypted()); + QVERIFY2(socket2->waitForEncrypted(), qPrintable(socket2->errorString())); // not using any root certs again -> should not work QSslSocket::setDefaultCaCertificates(QList<QSslCertificate>()); -- cgit v0.12 From 61dfa74bb542f495eb5ff25e3f91b9065eb1cfdd Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Mon, 21 Feb 2011 15:35:03 +0100 Subject: Do not handle posted events in QSplashScreen. When QSplashScreen waits for the window to be fully shown, we shouldn't re-enter the event loop by processing posted events. Reviewed-by: axis Reviewed-by: Olivier Goffart --- src/gui/kernel/qwidget_x11.cpp | 10 ++++++++-- src/gui/widgets/qsplashscreen.cpp | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 4bff5ac..c6753fc 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -346,7 +346,7 @@ Q_GUI_EXPORT void qt_x11_enforce_cursor(QWidget * w) qt_x11_enforce_cursor(w, false); } -Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w) +void qt_x11_wait_for_window_manager(QWidget *w, bool sendPostedEvents) { if (!w || (!w->isWindow() && !w->internalWinId())) return; @@ -361,7 +361,8 @@ Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w) WId winid = w->internalWinId(); // first deliver events that are already in the local queue - QApplication::sendPostedEvents(); + if (sendPostedEvents) + QApplication::sendPostedEvents(); // the normal sequence is: // ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose @@ -396,6 +397,11 @@ Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w) } while(1); } +Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget *w) +{ + qt_x11_wait_for_window_manager(w, true); +} + void qt_change_net_wm_state(const QWidget* w, bool set, Atom one, Atom two = 0) { if (!w->isVisible()) // not managed by the window manager diff --git a/src/gui/widgets/qsplashscreen.cpp b/src/gui/widgets/qsplashscreen.cpp index 75280cb..9c486bf 100644 --- a/src/gui/widgets/qsplashscreen.cpp +++ b/src/gui/widgets/qsplashscreen.cpp @@ -223,8 +223,8 @@ void QSplashScreen::finish(QWidget *mainWin) { if (mainWin) { #if defined(Q_WS_X11) - extern void qt_x11_wait_for_window_manager(QWidget *mainWin); - qt_x11_wait_for_window_manager(mainWin); + extern void qt_x11_wait_for_window_manager(QWidget *mainWin, bool); + qt_x11_wait_for_window_manager(mainWin, false); #endif } close(); -- cgit v0.12 From 47e8fc1c237adb9742140f834226e9da9f60c2f2 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Wed, 2 Mar 2011 17:21:12 +0100 Subject: Improve handling QByteArray with QStringBuilder Instead of relying on the old behavior of the deprecated QString(QByteArray) constructor which stops copying the byte array at the null termination character if there is one embedded in the array, we copy the whole provided QByteArray object into the QString when QStringBuilder is used. Reviewed-by: Harald Fernengel --- src/corelib/tools/qstringbuilder.cpp | 4 ++-- src/corelib/tools/qstringbuilder.h | 5 +++-- tests/auto/qstringbuilder1/stringbuilder.cpp | 26 +++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/corelib/tools/qstringbuilder.cpp b/src/corelib/tools/qstringbuilder.cpp index 53368eb..7d75de7 100644 --- a/src/corelib/tools/qstringbuilder.cpp +++ b/src/corelib/tools/qstringbuilder.cpp @@ -150,8 +150,8 @@ QT_BEGIN_NAMESPACE void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out) { #ifndef QT_NO_TEXTCODEC - if (QString::codecForCStrings) { - QString tmp = QString::fromAscii(a); + if (QString::codecForCStrings && len) { + QString tmp = QString::fromAscii(a, len > 0 ? len - 1 : -1); memcpy(out, reinterpret_cast<const char *>(tmp.constData()), sizeof(QChar) * tmp.size()); out += tmp.length(); return; diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h index 8d9537c..d230d67 100644 --- a/src/corelib/tools/qstringbuilder.h +++ b/src/corelib/tools/qstringbuilder.h @@ -270,10 +270,11 @@ template <> struct QConcatenable<QByteArray> : private QAbstractConcatenable { typedef QByteArray type; enum { ExactSize = false }; - static int size(const QByteArray &ba) { return qstrnlen(ba.constData(), ba.size()); } + static int size(const QByteArray &ba) { return ba.size(); } static inline void appendTo(const QByteArray &ba, QChar *&out) { - QAbstractConcatenable::convertFromAscii(ba.constData(), -1, out); + // adding 1 because convertFromAscii expects the size including the null-termination + QAbstractConcatenable::convertFromAscii(ba.constData(), ba.size() + 1, out); } }; #endif diff --git a/tests/auto/qstringbuilder1/stringbuilder.cpp b/tests/auto/qstringbuilder1/stringbuilder.cpp index 6faff35..f3c0ea9 100644 --- a/tests/auto/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/qstringbuilder1/stringbuilder.cpp @@ -40,9 +40,13 @@ ****************************************************************************/ #define LITERAL "some literal" +#define LITERAL_LEN (sizeof(LITERAL)-1) +#define LITERAL_EXTRA "some literal" "EXTRA" // "some literal", but replacing all vocals by their umlauted UTF-8 string :) #define UTF8_LITERAL "s\xc3\xb6m\xc3\xab l\xc3\xaft\xc3\xabr\xc3\xa4l" +#define UTF8_LITERAL_LEN (sizeof(UTF8_LITERAL)-1) +#define UTF8_LITERAL_EXTRA "s\xc3\xb6m\xc3\xab l\xc3\xaft\xc3\xabr\xc3\xa4l" "EXTRA" //fix for gcc4.0: if the operator+ does not exist without QT_USE_FAST_OPERATOR_PLUS @@ -65,7 +69,6 @@ void runScenario() QLatin1Char achar('c'); QString r2(QLatin1String(LITERAL LITERAL)); QString r; - QByteArray ba(LITERAL); r = l1literal Q l1literal; QCOMPARE(r, r2); @@ -86,6 +89,15 @@ void runScenario() QCOMPARE(r, r2); r = LITERAL P string; QCOMPARE(r, r2); + + QByteArray ba = QByteArray(LITERAL); + r = ba P string; + QCOMPARE(r, r2); + r = string P ba; + QCOMPARE(r, r2); + + static const char badata[] = LITERAL_EXTRA; + ba = QByteArray::fromRawData(badata, LITERAL_LEN); r = ba P string; QCOMPARE(r, r2); r = string P ba; @@ -109,6 +121,18 @@ void runScenario() QCOMPARE(r, r2); r = string P ba; QCOMPARE(r, r2); + + ba = QByteArray::fromRawData(UTF8_LITERAL_EXTRA, UTF8_LITERAL_LEN); + r = ba P string; + QCOMPARE(r, r2); + r = string P ba; + QCOMPARE(r, r2); + + ba = QByteArray(); // empty + r = ba P string; + QCOMPARE(r, string); + r = string P ba; + QCOMPARE(r, string); #endif string = QString::fromLatin1(LITERAL); -- cgit v0.12 From d9f95d7c2635d99ede9ae5a4218b4a34808badf7 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko <denis.dzyubenko@nokia.com> Date: Thu, 3 Mar 2011 10:53:27 +0100 Subject: Fixed documentation for QByteArray The data returned by constData() will not be null-terminated if the QByteArray was created from an existing raw data with QByteArray::fromRawData(). Reviewed-by: Oswald Buddenhagen --- src/corelib/tools/qbytearray.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp index b281c1b..4799abd 100644 --- a/src/corelib/tools/qbytearray.cpp +++ b/src/corelib/tools/qbytearray.cpp @@ -687,12 +687,12 @@ QByteArray::Data QByteArray::shared_empty = { Q_BASIC_ATOMIC_INITIALIZER(1), values. To set all the bytes to a particular value, call fill(). To obtain a pointer to the actual character data, call data() or - constData(). These functions return a pointer to the beginning of - the data. The pointer is guaranteed to remain valid until a - non-const function is called on the QByteArray. It is also - guaranteed that the data ends with a '\\0' byte. This '\\0' byte - is automatically provided by QByteArray and is not counted in - size(). + constData(). These functions return a pointer to the beginning of the data. + The pointer is guaranteed to remain valid until a non-const function is + called on the QByteArray. It is also guaranteed that the data ends with a + '\\0' byte unless the QByteArray was created from a \l{fromRawData()}{raw + data}. This '\\0' byte is automatically provided by QByteArray and is not + counted in size(). QByteArray provides the following basic functions for modifying the byte data: append(), prepend(), insert(), replace(), and @@ -925,11 +925,13 @@ QByteArray &QByteArray::operator=(const char *str) Returns the number of bytes in this byte array. - The last byte in the byte array is at position size() - 1. In - addition, QByteArray ensures that the byte at position size() is - always '\\0', so that you can use the return value of data() and - constData() as arguments to functions that expect '\\0'-terminated - strings. + The last byte in the byte array is at position size() - 1. In addition, + QByteArray ensures that the byte at position size() is always '\\0', so + that you can use the return value of data() and constData() as arguments to + functions that expect '\\0'-terminated strings. If the QByteArray object + was created from a \l{fromRawData()}{raw data} that didn't include the + trailing null-termination character then QByteArray doesn't add it + automaticall unless the \l{deep copy} is created. Example: \snippet doc/src/snippets/code/src_corelib_tools_qbytearray.cpp 6 @@ -1060,10 +1062,11 @@ QByteArray &QByteArray::operator=(const char *str) /*! \fn const char *QByteArray::constData() const - Returns a pointer to the data stored in the byte array. The - pointer can be used to access the bytes that compose the array. - The data is '\\0'-terminated. The pointer remains valid as long - as the byte array isn't reallocated or destroyed. + Returns a pointer to the data stored in the byte array. The pointer can be + used to access the bytes that compose the array. The data is + '\\0'-terminated unless the QByteArray object was created from raw data. + The pointer remains valid as long as the byte array isn't reallocated or + destroyed. This function is mostly useful to pass a byte array to a function that accepts a \c{const char *}. @@ -1072,7 +1075,7 @@ QByteArray &QByteArray::operator=(const char *str) but most functions that take \c{char *} arguments assume that the data ends at the first '\\0' they encounter. - \sa data(), operator[]() + \sa data(), operator[](), fromRawData() */ /*! \fn void QByteArray::detach() -- cgit v0.12 From b2544e10f4b575b41ff91ad72d2d7186ac3109e5 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 3 Mar 2011 16:01:45 +0100 Subject: Disable capabilities example for symbian-gcce due to a bug in elf2e32 Phonon exports template instantiations. These exports get weak symbol binding, which is correct according to the C++ ABI, but the problem is that elf2e32 has a bug which does not transfer the weak symbols correctly to the dso file. Therefore, the example will work if you have a prebuilt Qt version and use GCCE, but not if you build Qt from scratch using GCCE. For normal non-template symbols it is not a problem since they get global bindings. RVCT also produces global bindings. RevBy: Shane Kearns --- examples/phonon/phonon.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/phonon/phonon.pro b/examples/phonon/phonon.pro index aa6ac13..c6a0bff 100644 --- a/examples/phonon/phonon.pro +++ b/examples/phonon/phonon.pro @@ -3,6 +3,9 @@ CONFIG += ordered SUBDIRS = qmusicplayer \ capabilities +# Disable capabilities example for symbian-gcce due to a bug in elf2e32. +symbian-gcce:SUBDIRS -= capabilities + # install target.path = $$[QT_INSTALL_EXAMPLES]/phonon sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS phonon.pro README -- cgit v0.12 From d585a66127f9ea13a07675e87fe0066037643df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 3 Mar 2011 16:24:23 +0100 Subject: Lighthouse: Make xcb backen usable for anyone else again --- src/plugins/platforms/xcb/xcb.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 2237cee..fdbe2cd 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -26,10 +26,13 @@ HEADERS = \ contains(QT_CONFIG, opengl) { QT += opengl - DEFINES += XCB_USE_DRI2 +# DEFINES += XCB_USE_DRI2 contains(DEFINES, XCB_USE_DRI2) { LIBS += -lxcb-dri2 -lxcb-xfixes -lEGL + CONFIG += link_pkgconfig + PKGCONFIG += libdrm + HEADERS += qdri2context.h SOURCES += qdri2context.cpp -- cgit v0.12 From 85b3a869fd69cfe14d05edd1fd17f913ba73dd52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 3 Mar 2011 18:40:42 +0100 Subject: Lighthouse: Add xkbcommon to pkg-config configuration of wayland --- configure | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 664af92..1922728 100755 --- a/configure +++ b/configure @@ -6173,10 +6173,10 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi - if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists wayland-client 2>/dev/null; then - QMAKE_CFLAGS_WAYLAND=`$PKG_CONFIG --cflags wayland-client 2>/dev/null` - QMAKE_LIBS_WAYLAND=`$PKG_CONFIG --libs wayland-client 2>/dev/null` - QMAKE_INCDIR_WAYLAND=`$PKG_CONFIG --variable=includedir wayland-client 2>/dev/null` + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists wayland-client xkbcommon 2>/dev/null; then + QMAKE_CFLAGS_WAYLAND=`$PKG_CONFIG --cflags wayland-client xkbcommon 2>/dev/null` + QMAKE_LIBS_WAYLAND=`$PKG_CONFIG --libs wayland-client xkbcommon 2>/dev/null` + QMAKE_INCDIR_WAYLAND=`$PKG_CONFIG --variable=includedir wayland-client xkbcommon 2>/dev/null` fi # QMake variables set here override those in the mkspec. Therefore we only set the variables here if they are not zero. -- cgit v0.12 From 9f674617daf03026d78f8ce18328cbe6c31b689d Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Fri, 4 Mar 2011 13:26:12 +1000 Subject: Remove text alignment of empty QML editors following the layout direction Task-number: QTBUG-15880 Reviewed-by: Martin Jones Removed implicit text alignment of empty text in QML editor following the application's default layout direction. Change was originally made few days ago in the commit 88253db8a7d7910e1393b1948fb3747117538c92. Aligning empty and neutral text to the right for RTL locales requires much more comprehensive changes to the Qt's internal text classes than initially thought. Change-Id: I93a26df259b87dff47d57423949270656746c9a7 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 5 +---- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 5 +---- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 5 +---- .../declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 10 +++------- .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 12 ++++-------- .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 12 ++++-------- 6 files changed, 14 insertions(+), 35 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 66a2355..3988f7f 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -218,10 +218,7 @@ void QDeclarativeTextPrivate::determineHorizontalAlignment() if (hAlignImplicit && q->isComponentComplete()) { // if no explicit alignment has been set, follow the natural layout direction of the text QDeclarativeText::HAlignment previousAlign = hAlign; - if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeText::AlignRight; - else - hAlign = text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft; + hAlign = text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft; if (previousAlign != hAlign) emit q->horizontalAlignmentChanged(hAlign); } diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 5e1459c..78729aa 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1547,10 +1547,7 @@ void QDeclarativeTextEditPrivate::determineHorizontalAlignment() if (hAlignImplicit && q->isComponentComplete()) { // if no explicit alignment has been set, follow the natural layout direction of the text QDeclarativeTextEdit::HAlignment previousAlign = hAlign; - if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeTextEdit::AlignRight; - else - hAlign = rightToLeftText ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft; + hAlign = rightToLeftText ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft; if (previousAlign != hAlign) emit q->horizontalAlignmentChanged(hAlign); } diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index d9d9335..670a6ea 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1283,10 +1283,7 @@ void QDeclarativeTextInputPrivate::determineHorizontalAlignment() QString text = control->text(); // if no explicit alignment has been set, follow the natural layout direction of the text QDeclarativeTextInput::HAlignment previousAlign = hAlign; - if (text.isEmpty() && QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeTextInput::AlignRight; - else - hAlign = text.isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft; + hAlign = text.isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft; if (previousAlign != hAlign) emit q->horizontalAlignmentChanged(hAlign); } diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 6c9998e..2aeb425 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -547,15 +547,11 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); - // empty text should implicitly follow the layout direction - QApplication::setLayoutDirection(Qt::RightToLeft); + // empty text is also implicitly left aligned text->setText(""); - QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - text->setHAlign(QDeclarativeText::AlignLeft); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); - - // set layout direction back to LTR to avoid affecting other autotests - QApplication::setLayoutDirection(Qt::LeftToRight); + text->setHAlign(QDeclarativeText::AlignRight); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); delete canvas; } diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 6d5750f..ff52167 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -474,17 +474,13 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); - // empty text should implicitly follow the layout direction - QApplication::setLayoutDirection(Qt::RightToLeft); + // empty text is also implicitly left aligned textEdit->setText(""); - QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); - QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); - textEdit->setHAlign(QDeclarativeTextEdit::AlignLeft); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); - - // set layout direction back to LTR to avoid affecting other autotests - QApplication::setLayoutDirection(Qt::LeftToRight); + textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); delete canvas; } diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 72e8b11..666bbc8 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1078,17 +1078,13 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); - // empty text should implicitly follow the layout direction - QApplication::setLayoutDirection(Qt::RightToLeft); + // empty text is also implicitly left aligned textInput->setText(""); - QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); - QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); - textInput->setHAlign(QDeclarativeTextInput::AlignLeft); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); - - // set layout direction back to LTR to avoid affecting other autotests - QApplication::setLayoutDirection(Qt::LeftToRight); + textInput->setHAlign(QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); delete canvas; } -- cgit v0.12 From 6daa12f8bcc16947a059747ebd985934163068eb Mon Sep 17 00:00:00 2001 From: Benjamin Franzke <benjaminfranzke@googlemail.com> Date: Thu, 3 Mar 2011 17:01:01 +0100 Subject: Lighthouse: Fix a block for wayland with gl support The initialial readable iteration, needs to be done before initializing egl, or it will be done inside egl. The readable iteration after initialzing egl would block forever otherwise. --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index c3e87a1..d0a0725 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -185,7 +185,13 @@ QWaylandDisplay::QWaylandDisplay(void) #ifdef QT_WAYLAND_GL_SUPPORT mNativeEglDisplay = wl_egl_display_create(mDisplay); +#else + mNativeEglDisplay = 0; +#endif + + eventDispatcher(); +#ifdef QT_WAYLAND_GL_SUPPORT mEglDisplay = eglGetDisplay((EGLNativeDisplayType)mNativeEglDisplay); if (mEglDisplay == NULL) { qWarning("EGL not available"); @@ -196,12 +202,9 @@ QWaylandDisplay::QWaylandDisplay(void) } } #else - mNativeEglDisplay = 0; mEglDisplay = 0; #endif - eventDispatcher(); - int fd = wl_display_get_fd(mDisplay, sourceUpdate, this); mReadNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); connect(mReadNotifier, -- cgit v0.12 From 7cdd849b50f0314d0eb227e1d0c92627f2be555b Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Fri, 4 Mar 2011 14:33:30 +1000 Subject: Fix RTL multiline Text drawing We handled horizontal alignment ourselves, but this neglected some RTL layouting issues (e.g. trailing spaces). Allow QTextLayout to do the aligning for us. Also fix eliding of multiline text for RTL language - in this case the eliding should be to the left. Change-Id: I487137b123ae66c1f5fc358a8d8a013049d05818 Reviewed-by: Joona Petrell --- src/declarative/graphicsitems/qdeclarativetext.cpp | 75 ++++++---------------- .../qdeclarativetext/tst_qdeclarativetext.cpp | 12 ++-- 2 files changed, 26 insertions(+), 61 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 3988f7f..890e481 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -364,19 +364,16 @@ QSize QDeclarativeTextPrivate::setupTextLayout() Q_Q(QDeclarativeText); layout.setCacheEnabled(true); - qreal height = 0; qreal widthUsed = 0; qreal lineWidth = 0; - int visibleTextLength = 0; int visibleCount = 0; //set manual width - if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid()) + if (q->widthValid()) lineWidth = q->width(); QTextOption textOption = layout.textOption(); - if (hAlign == QDeclarativeText::AlignJustify) - textOption.setAlignment(Qt::Alignment(hAlign)); + textOption.setAlignment(Qt::Alignment(hAlign)); textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); layout.setTextOption(textOption); @@ -384,7 +381,6 @@ QSize QDeclarativeTextPrivate::setupTextLayout() bool truncate = false; QFontMetrics fm(layout.font()); - qreal elideWidth = fm.width(elideChar); elidePos = QPointF(); if (requireImplicitWidth && q->widthValid()) { @@ -407,36 +403,35 @@ QSize QDeclarativeTextPrivate::setupTextLayout() layout.beginLayout(); if (!lineWidth) lineWidth = INT_MAX; - int y = 0; int linesLeft = maximumLineCount; + int visibleTextLength = 0; while (linesLeft > 0) { QTextLine line = layout.createLine(); if (!line.isValid()) break; visibleCount++; - line.setLineWidth(lineWidth); + if (lineWidth) + line.setLineWidth(lineWidth); visibleTextLength += line.textLength(); if (--linesLeft == 0) { if (visibleTextLength < text.length()) { truncate = true; if (elideMode==QDeclarativeText::ElideRight && q->widthValid()) { + qreal elideWidth = fm.width(elideChar); // Need to correct for alignment line.setLineWidth(lineWidth-elideWidth); - int x = line.naturalTextWidth(); - if (hAlign == QDeclarativeText::AlignRight) { - x = q->width()-elideWidth; - } else if (hAlign == QDeclarativeText::AlignHCenter) { - x = (q->width()+line.naturalTextWidth() - elideWidth)/2; + if (layout.text().mid(line.textStart(), line.textLength()).isRightToLeft()) { + line.setPosition(QPointF(line.position().x() + elideWidth, line.position().y())); + elidePos.setX(line.naturalTextRect().left() - elideWidth); + } else { + elidePos.setX(line.naturalTextRect().right()); } - elidePos = QPointF(x, y + fm.ascent()); elideText = true; } } } - - y += line.height(); } layout.endLayout(); @@ -458,36 +453,20 @@ QSize QDeclarativeTextPrivate::setupTextLayout() layout.endLayout(); } + qreal height = 0; for (int i = 0; i < layout.lineCount(); ++i) { QTextLine line = layout.lineAt(i); - widthUsed = qMax(widthUsed, line.naturalTextWidth()); + // calc width + widthUsed = qMax(widthUsed, line.naturalTextRect().right()); + // set line spacing + line.setPosition(QPointF(line.position().x(), height)); + if (elideText && i == layout.lineCount()-1) + elidePos.setY(height + fm.ascent()); + height += (lineHeightMode == QDeclarativeText::FixedHeight) ? lineHeight : line.height() * lineHeight; } - qreal layoutWidth = q->widthValid() ? q->width() : widthUsed; if (!q->widthValid()) - naturalWidth = layoutWidth; - - qreal x = 0; - for (int i = 0; i < layout.lineCount(); ++i) { - QTextLine line = layout.lineAt(i); - line.setPosition(QPointF(0, height)); - height += (lineHeightMode == QDeclarativeText::FixedHeight) ? lineHeight : line.height() * lineHeight; - - if (!cacheAllTextAsImage) { - if ((hAlign == QDeclarativeText::AlignLeft) || (hAlign == QDeclarativeText::AlignJustify)) { - x = 0; - } else if (hAlign == QDeclarativeText::AlignRight) { - x = layoutWidth - line.naturalTextWidth(); - if (elideText && i == layout.lineCount()-1) - x -= elideWidth; // Correct for when eliding multilines - } else if (hAlign == QDeclarativeText::AlignHCenter) { - x = (layoutWidth - line.naturalTextWidth()) / 2; - if (elideText && i == layout.lineCount()-1) - x -= elideWidth/2; // Correct for when eliding multilines - } - line.setPosition(QPointF(x, line.y())); - } - } + naturalWidth = widthUsed; //Update the number of visible lines if (lineCount != visibleCount) { @@ -506,20 +485,6 @@ QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle) { //do layout QSize size = layedOutTextSize; - - qreal x = 0; - for (int i = 0; i < layout.lineCount(); ++i) { - QTextLine line = layout.lineAt(i); - if ((hAlign == QDeclarativeText::AlignLeft) || (hAlign == QDeclarativeText::AlignJustify)) { - x = 0; - } else if (hAlign == QDeclarativeText::AlignRight) { - x = size.width() - line.naturalTextWidth(); - } else if (hAlign == QDeclarativeText::AlignHCenter) { - x = (size.width() - line.naturalTextWidth()) / 2; - } - line.setPosition(QPointF(x, line.y())); - } - //paint text QPixmap img(size); if (!size.isEmpty()) { diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 2aeb425..f27fc07 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -520,32 +520,32 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() // implicit alignment should follow the reading direction of RTL text QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); // explicitly left aligned text->setHAlign(QDeclarativeText::AlignLeft); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); - QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); // explicitly right aligned text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); // explicitly center aligned text->setHAlign(QDeclarativeText::AlignHCenter); QCOMPARE(text->hAlign(), QDeclarativeText::AlignHCenter); - QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); // reseted alignment should go back to following the text reading direction text->resetHAlign(); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - QVERIFY(textPrivate->layout.lineAt(0).x() > canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); // English text should be implicitly left aligned text->setText("Hello world!"); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); - QVERIFY(textPrivate->layout.lineAt(0).x() < canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); // empty text is also implicitly left aligned text->setText(""); -- cgit v0.12 From 86a0b3749a336181c241dd239c863f4ddbbd4ad2 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Fri, 4 Mar 2011 16:50:02 +1000 Subject: Removal of text alignment layout direction dependency was missing couple of changes Task-number: QTBUG-15880 Reviewed-by: Martin Jones Change-Id: I1ea87b05c483e5c9339fc47cf719c22d001ef52b --- src/declarative/graphicsitems/qdeclarativetext.cpp | 2 -- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 3 --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 3 --- 3 files changed, 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 890e481..e66a83e 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -107,8 +107,6 @@ QDeclarativeTextPrivate::QDeclarativeTextPrivate() cacheAllTextAsImage = enableImageCache(); QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton; QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents; - if (QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeText::AlignRight; } QTextDocumentWithImageResources::QTextDocumentWithImageResources(QDeclarativeText *parent) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 78729aa..e4cd66c 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1512,9 +1512,6 @@ void QDeclarativeTextEditPrivate::init() document->setDocumentMargin(textMargin); document->setUndoRedoEnabled(false); // flush undo buffer. document->setUndoRedoEnabled(true); - - if (QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeTextEdit::AlignRight; updateDefaultTextOption(); } diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 670a6ea..0c021db 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1827,9 +1827,6 @@ void QDeclarativeTextInputPrivate::init() QPalette p = control->palette(); selectedTextColor = p.color(QPalette::HighlightedText); selectionColor = p.color(QPalette::Highlight); - - if (QApplication::layoutDirection() == Qt::RightToLeft) - hAlign = QDeclarativeTextInput::AlignRight; } void QDeclarativeTextInput::cursorPosChanged() -- cgit v0.12 From 7872985cc2eb21ae9283aa8e6779f490b500dff0 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Thu, 3 Mar 2011 11:06:13 +1000 Subject: Update QtDeclarative def files Symbols introduced in Qt Quick 1.1 layout mirroring support. Task-number: QTBUG-17280 Reviewed-by: Martin Jones --- src/s60installs/bwins/QtDeclarativeu.def | 5 +++++ src/s60installs/eabi/QtDeclarativeu.def | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 8b23b63..5490f0d 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -1888,4 +1888,9 @@ EXPORTS ??1QDeclarativeRefCount@@UAE@XZ @ 1887 NONAME ; QDeclarativeRefCount::~QDeclarativeRefCount(void) ?addref@QDeclarativeRefCount@@QAEXXZ @ 1888 NONAME ; void QDeclarativeRefCount::addref(void) ?release@QDeclarativeRefCount@@QAEXXZ @ 1889 NONAME ; void QDeclarativeRefCount::release(void) + ?resolveLayoutMirror@QDeclarativeItemPrivate@@QAEXXZ @ 1890 NONAME ; void QDeclarativeItemPrivate::resolveLayoutMirror(void) + ?mirrorChange@QDeclarativeItemPrivate@@UAEXXZ @ 1891 NONAME ; void QDeclarativeItemPrivate::mirrorChange(void) + ?setLayoutMirror@QDeclarativeItemPrivate@@QAEX_N@Z @ 1892 NONAME ; void QDeclarativeItemPrivate::setLayoutMirror(bool) + ?setImplicitLayoutMirror@QDeclarativeItemPrivate@@QAEX_N0@Z @ 1893 NONAME ; void QDeclarativeItemPrivate::setImplicitLayoutMirror(bool, bool) + ?isMirrored@QDeclarativeItemPrivate@@QBE_NXZ @ 1894 NONAME ; bool QDeclarativeItemPrivate::isMirrored(void) const diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 130e2d5..2849068 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -1930,4 +1930,7 @@ EXPORTS _ZN20QDeclarativeRefCountD2Ev @ 1929 NONAME _ZTI20QDeclarativeRefCount @ 1930 NONAME _ZTV20QDeclarativeRefCount @ 1931 NONAME + _ZN23QDeclarativeItemPrivate15setLayoutMirrorEb @ 1932 NONAME + _ZN23QDeclarativeItemPrivate19resolveLayoutMirrorEv @ 1933 NONAME + _ZN23QDeclarativeItemPrivate23setImplicitLayoutMirrorEbb @ 1934 NONAME -- cgit v0.12 From 8dbe38632307d6cbe07f95db929e42ec01304324 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Mon, 21 Feb 2011 08:30:06 +0100 Subject: don't print debug output --- src/gui/text/qplatformfontdatabase_qpa.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index afe762a..136130f 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -214,7 +214,7 @@ QFontEngine *QPlatformFontDatabase::fontEngine(const QFontDef &fontDef, QUnicode Q_UNUSED(handle); QByteArray *fileDataPtr = static_cast<QByteArray *>(handle); QFontEngineQPA *engine = new QFontEngineQPA(fontDef,*fileDataPtr); - qDebug() << fontDef.pixelSize << fontDef.weight << fontDef.style << fontDef.stretch << fontDef.styleHint << fontDef.styleStrategy << fontDef.family << script; + //qDebug() << fontDef.pixelSize << fontDef.weight << fontDef.style << fontDef.stretch << fontDef.styleHint << fontDef.styleStrategy << fontDef.family << script; return engine; } -- cgit v0.12 From 0be49f7c6719d3cfafb7e73a33dfd3f86aa8fb7c Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Wed, 16 Feb 2011 10:27:08 +0100 Subject: Do not explicitly process events before running event loop integration. Processing posted Qt events before the event loop integration is started may lead to the process being killed for taking too long time before the native event loop is running. Since event loop integrations are required to install a timer that does processEvents anyhow, the Qt events will be processed even without doing it explicitly in advance. --- src/gui/kernel/qeventdispatcher_qpa.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index 519d2a6..f75cc0d 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -172,7 +172,6 @@ public: { if (qApp && (qApp->thread() == QThread::currentThread())) { m_isEventLoopIntegrationRunning = true; - QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents); eventLoopIntegration->startEventLoop(); } } -- cgit v0.12 From 4c06d1956cc072f5bc52ed8128cf19d4cd7f8715 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 4 Mar 2011 11:29:18 +0100 Subject: Moved the default dependency targets to default_post.prf. The file that they were in would not be parsed if CONFIG -= qt, but it always needs to be parsed, otherwise apps that don't use Qt will fail the sis file creation. RevBy: Miikka Heikkinen Conflicts: mkspecs/features/symbian/default_post.prf --- mkspecs/features/symbian/default_post.prf | 47 +++++++++++++++++++++++++++++++ mkspecs/features/symbian/qt.prf | 47 ------------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index 126981e..a17e760 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,6 +53,53 @@ isEmpty(TARGET.UID2) { } } +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH + +# Add dependency to Qt package to all other projects besides Qt libs. +# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, +# while self-signed version typically has temporary UID3 of 0xE001E61C. +contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { + qt_pkg_name = Qt + pkg_depends_qt += \ + "; Default dependency to Qt libraries" \ + "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" + + # Projects linking to webkit need dependency to webkit + contains(QT, webkit): { + # these can be overridden by mkspecs/modules/qt_webkit.pri + isEmpty(QT_WEBKIT_MAJOR_VERSION) { + QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} + QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} + QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} + } + + webkit_pkg_name = QtWebKit + pkg_depends_webkit += \ + "; Dependency to Qt Webkit" \ + "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" + } else { + default_deployment.pkg_prerules -= pkg_depends_webkit + } +} else { + default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt +} + +isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 +isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 + # Supports Symbian^3 and Symbian^4 by default and also S60 3.1, 3.2, and 5.0 if built against any of those. platform_product_id = S60ProductID platform_product_id = $$addLanguageDependentPkgItem(platform_product_id) diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index c8f97aa..c376b64 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -6,53 +6,6 @@ CONFIG += qtmain load(qt) -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - -# Add dependency to Qt package to all other projects besides Qt libs. -# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, -# while self-signed version typically has temporary UID3 of 0xE001E61C. -contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { - qt_pkg_name = Qt - pkg_depends_qt += \ - "; Default dependency to Qt libraries" \ - "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" - - # Projects linking to webkit need dependency to webkit - contains(QT, webkit): { - # these can be overridden by mkspecs/modules/qt_webkit.pri - isEmpty(QT_WEBKIT_MAJOR_VERSION) { - QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} - QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} - QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} - } - - webkit_pkg_name = QtWebKit - pkg_depends_webkit += \ - "; Dependency to Qt Webkit" \ - "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" - } else { - default_deployment.pkg_prerules -= pkg_depends_webkit - } -} else { - default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt -} - -isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 -isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 - # Workaround for the fact that Gnupoc and Symbian chose different approaches to # the letter casing of headers. contains(CONFIG, is_using_gnupoc) { -- cgit v0.12 From 5db6d32c57bad7da554363bc7e1e71e24e05c2fa Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 21 Dec 2010 10:46:26 +0100 Subject: Fixed PREPEND_INCLUDEPATH being executed too early. It used to be carried out inside qt.prf, but was moved to default_post.prf. However, since qt.prf is executed after default_post.prf, it would still prepend its own include paths at the very front, which is wrong. Fixed by introducing a new feature profile for PREPEND_INCLUDEPATH, which is run after qt.prf (features in $$CONFIG are executed in reverse order). RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 2 +- mkspecs/features/symbian/default_post.prf | 15 --------------- mkspecs/features/symbian/prepend_includepath.prf | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 mkspecs/features/symbian/prepend_includepath.prf diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 0bb3a29..e733ade 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -3,7 +3,7 @@ # TEMPLATE = app -CONFIG += qt warn_on release incremental link_prl sis_targets run_on_phone +CONFIG += prepend_includepath qt warn_on release incremental link_prl sis_targets run_on_phone QT += core gui QMAKE_INCREMENTAL_STYLE = sublib diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index a17e760..a05ff25 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,21 +53,6 @@ isEmpty(TARGET.UID2) { } } -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - # Add dependency to Qt package to all other projects besides Qt libs. # Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, # while self-signed version typically has temporary UID3 of 0xE001E61C. diff --git a/mkspecs/features/symbian/prepend_includepath.prf b/mkspecs/features/symbian/prepend_includepath.prf new file mode 100644 index 0000000..d9fd4fe --- /dev/null +++ b/mkspecs/features/symbian/prepend_includepath.prf @@ -0,0 +1,14 @@ +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH -- cgit v0.12 From b83cbadc80b24107433709f4827e1619a0e7561b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 20 Jan 2011 16:39:41 +0100 Subject: Made the translations dependency work for shadow builds. RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index e733ade..9a0287a 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -238,7 +238,7 @@ defineTest(matchSymbianLanguages) { language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) { SYMBIAN_MATCHED_LANGUAGES += $$language - SYMBIAN_MATCHED_TRANSLATIONS += $$translation + SYMBIAN_MATCHED_TRANSLATIONS += $$_PRO_FILE_PWD_/$$translation } } -- cgit v0.12 From 2ad80c0149477a6ca7dd69a7243c2055d208c98d Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 20 Jan 2011 10:41:11 +0100 Subject: Added Symbian deployment localization for makefile build system. This is a complement to the 16575f7aef840b6aae0dc767468ab713fbcfd7a6 commit, which adds localization based on TRANSLATIONS keywords for Raptor and abld. In addition, since the __PRODUCT_INCLUDE__ define was creating a lot of trouble regarding < and >, it was refactored into its own source file, which is automatically included before every source file. Task: QTBUG-15292 RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian-makefile.conf | 12 ++- mkspecs/common/symbian/symbianincludes.h | 17 ++++ mkspecs/features/symbian/symbian_building.prf | 124 +++++++++++++++++--------- mkspecs/symbian-armcc/qmake.conf | 5 +- qmake/generators/symbian/symbiancommon.cpp | 3 +- 5 files changed, 108 insertions(+), 53 deletions(-) create mode 100644 mkspecs/common/symbian/symbianincludes.h diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index 899f8c2..f429c1a 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -25,9 +25,15 @@ QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 is_using_gnupoc { - DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh>\" -} else { - DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh>\" + DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ +} +QMAKE_SYMBIAN_INCLUDES = $$[QT_INSTALL_DATA]/mkspecs/common/symbian/symbianincludes.h +symbian-armcc { + QMAKE_CFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES + QMAKE_CXXFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES +} else:symbian-gcce { + QMAKE_CFLAGS += -include $$QMAKE_SYMBIAN_INCLUDES + QMAKE_CXXFLAGS += -include $$QMAKE_SYMBIAN_INCLUDES } DEFINES *= \ __SYMBIAN32__ \ diff --git a/mkspecs/common/symbian/symbianincludes.h b/mkspecs/common/symbian/symbianincludes.h new file mode 100644 index 0000000..4c0ffa6 --- /dev/null +++ b/mkspecs/common/symbian/symbianincludes.h @@ -0,0 +1,17 @@ +#ifndef __PRODUCT_INCLUDE__ +# ifdef __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ +# define __PRODUCT_INCLUDE__ <variant/symbian_os.hrh> +# else +# define __PRODUCT_INCLUDE__ <variant/Symbian_OS.hrh> +# endif +#endif + +#ifndef __QT_SYMBIAN_RESOURCE__ +# if defined(__ARMCC__) || defined(__CC_ARM) +# ifdef __QT_RVCT_HEADER_IS_2_2__ +# include <rvct2_2.h> +# else +# include <rvct.h> +# endif +# endif +#endif diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 7f8570e..545cb81 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -242,6 +242,7 @@ symbian-armcc: { symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I") symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I") symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D") +symbian_resources_DEFINES += -D__QT_SYMBIAN_RESOURCE__ symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "") symbian_resources_INCLUDES += "-I$$symbian_resources_RCC_DIR" @@ -256,6 +257,7 @@ for(symbian_resource, SYMBIAN_RESOURCES) { symbianresources.input = SYMBIAN_RESOURCES symbianresources.output = $$symbian_resources_RCC_DIR/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg symbianresources.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ $$symbian_resources_INCLUDES \ $$symbian_resources_DEFINES \ ${QMAKE_FILE_NAME} \ @@ -271,46 +273,79 @@ symbianresources.CONFIG = no_link target_predeps QMAKE_EXTRA_COMPILERS += symbianresources +# This section generates the rsg and rsc files for symbian. contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { - # Make our own extra target in order to get dependencies for generated - # files right. This also avoids the warning about files not found. - symbianGenResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - symbianGenResource.commands = cpp -nostdinc -undef \ - $$symbian_resources_INCLUDES \ - $$symbian_resources_DEFINES \ - $${baseTarget}.rss \ - > $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \ - && rcomp -u -m045,046,047 \ - -s$${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \ - -o$${symbianDestdir}/$${baseTarget}.rsc \ - -h$${symbian_resources_RCC_DIR}/$${baseTarget}.rsg \ - -i$${baseTarget}.rss - silent:symbianGenResource.commands = @echo rcomp $${baseTarget}.rss && $$symbianGenResource.commands - symbianGenResource.depends = $${baseTarget}.rss - PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp - QMAKE_DISTCLEAN += $${baseTarget}.rss - QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.rsc - - symbianGenRegResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - symbianGenRegResource.commands = cpp -nostdinc -undef \ - $$symbian_resources_INCLUDES \ - $$symbian_resources_DEFINES \ - $${baseTarget}_reg.rss \ - > $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \ - && rcomp -u -m045,046,047 \ - -s$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \ - -o$${symbianDestdir}/$${baseTarget}_reg.rsc \ - -h$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg \ - -i$${baseTarget}_reg.rss - silent:symbianGenRegResource.commands = @echo rcomp $${baseTarget}_reg.rss && $$symbianGenRegResource.commands - symbianGenRegResource.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp - QMAKE_DISTCLEAN += $${baseTarget}_reg.rss - QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}_reg.rsc + # Look for extra languages for the resources, and then generate a target for each one. + localize_deployment:symbianGenResourceLanguages = $$SYMBIAN_MATCHED_LANGUAGES default + else:symbianGenResourceLanguages = default + for(language, symbianGenResourceLanguages) { + # Special languages get their language number appended to the filename. + contains(language, default) { + symbianGenResource_DEFINES = $$symbian_resources_DEFINES + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp + rsc = $${symbianDestdir}/$${baseTarget}.rsc + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg + } else { + languageNo = $$eval(SYMBIAN_LANG.$$language) + symbianGenResource_DEFINES = $$symbian_resources_DEFINES -DLANGUAGE_$${languageNo} + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rpp + rsc = $${symbianDestdir}/$${baseTarget}.r$${languageNo} + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rsg + } + + # Make our own extra target in order to get dependencies for generated + # files right. This also avoids the warning about files not found. + eval(symbianGenResource_$${language}.target = $$rsg) + eval(symbianGenResource_$${language}.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ + $$symbian_resources_INCLUDES \ + $$symbianGenResource_DEFINES \ + $${baseTarget}.rss \ + > $$rpp \ + && rcomp -u -m045,046,047 \ + -s$$rpp \ + -o$$rsc \ + -h$$rsg \ + -i$${baseTarget}.rss) + silent:eval(symbianGenResource_$${language}.commands = @echo rcomp $${baseTarget}.rss && $$eval(symbianGenResource_$${language}.commands)) + eval(symbianGenResource_$${language}.depends = $${baseTarget}.rss) + PRE_TARGETDEPS += $$rsg + QMAKE_CLEAN += $$rsg $$rpp + QMAKE_DISTCLEAN += $$rsc + + QMAKE_EXTRA_TARGETS += symbianGenResource_$${language} + + # Note that we depend on the base rsg file, even if dealing with a specific language. + # hence we don't use $$rsg on the next line. + eval(symbianGenRegResource_$${language}.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg) + contains(language, default) { + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp + rsc = $${symbianDestdir}/$${baseTarget}_reg.rsc + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg + } else { + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rpp + rsc = $${symbianDestdir}/$${baseTarget}_reg.r$${languageNo} + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rsg + } + eval(symbianGenRegResource_$${language}.target = $$rsg) + eval(symbianGenRegResource_$${language}.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ + $$symbian_resources_INCLUDES \ + $$symbianGenResource_DEFINES \ + $${baseTarget}_reg.rss \ + > $$rpp \ + && rcomp -u -m045,046,047 \ + -s$$rpp \ + -o$$rsc \ + -h$$rsg \ + -i$${baseTarget}_reg.rss) + silent:eval(symbianGenRegResource_$${language}.commands = @echo rcomp $${baseTarget}_reg.rss && $$eval(symbianGenRegResource_$${language}.commands)) + PRE_TARGETDEPS += $$rsg + QMAKE_CLEAN += $$rsg $$rpp + QMAKE_DISTCLEAN += $$rsc + + QMAKE_EXTRA_TARGETS += symbianGenRegResource_$${language} + } # Trick to get qmake to create the RCC_DIR for us. symbianRccDirCreation.input = SOURCES @@ -318,14 +353,15 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { symbianRccDirCreation.output = $${symbian_resources_RCC_DIR}/symbian_resource_dummy symbianRccDirCreation.CONFIG = no_link combine - QMAKE_EXTRA_TARGETS += symbianGenResource symbianGenRegResource QMAKE_EXTRA_COMPILERS += symbianRccDirCreation - QMAKE_DISTCLEAN += $${baseTarget}.loc + QMAKE_DISTCLEAN += $${baseTarget}.rss \ + $${baseTarget}_reg.rss \ + $${baseTarget}.loc } # Generated pkg files -QMAKE_DISTCLEAN += $${baseTarget}_template.pkg -QMAKE_DISTCLEAN += $${baseTarget}_installer.pkg -QMAKE_DISTCLEAN += $${baseTarget}_stub.pkg +QMAKE_DISTCLEAN += $${baseTarget}_template.pkg \ + $${baseTarget}_installer.pkg \ + $${baseTarget}_stub.pkg diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf index be6af39..77a1966 100644 --- a/mkspecs/symbian-armcc/qmake.conf +++ b/mkspecs/symbian-armcc/qmake.conf @@ -53,10 +53,7 @@ INCLUDEPATH = $${EPOCROOT}epoc32/include \ exists($${EPOCROOT}epoc32/include/rvct2_2) { INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 - QMAKE_CFLAGS += --preinclude rvct2_2.h - QMAKE_CXXFLAGS += --preinclude rvct2_2.h + DEFINES *= __QT_RVCT_HEADER_IS_2_2__ } else { INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct - QMAKE_CFLAGS += --preinclude rvct.h - QMAKE_CXXFLAGS += --preinclude rvct.h } diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 96d7725..c0afaaf 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -394,8 +394,7 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, t << manufacturerStr << endl; } - // ### FIXME: remove epocBuild check once makefile based mkspecs support localized resource generation - if (epocBuild && symbianLocalizationList.size()) { + if (symbianLocalizationList.size()) { // Add localized resources to DEPLOYMENT if default resource deployment is done addLocalizedResourcesToDeployment("default_resource_deployment.sources", symbianLocalizationList); addLocalizedResourcesToDeployment("default_reg_deployment.sources", symbianLocalizationList); -- cgit v0.12 From 38e094fd2b333e960ca76cf9c86429ec29a07a29 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 4 Mar 2011 11:35:54 +0100 Subject: Unified the usage of $${EPOCROOT} for symbian. RevBy: Miikka Heikkinen Conflicts: mkspecs/symbian-gcce/qmake.conf --- mkspecs/features/symbian/qt_config.prf | 2 +- mkspecs/symbian-gcce/qmake.conf | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mkspecs/features/symbian/qt_config.prf b/mkspecs/features/symbian/qt_config.prf index 2f446dc..82c1862 100644 --- a/mkspecs/features/symbian/qt_config.prf +++ b/mkspecs/features/symbian/qt_config.prf @@ -3,7 +3,7 @@ load(qt_config) !contains(QMAKE_HOST.os, "Windows") { # Test for the existence of lower cased headers, a sign of using Gnupoc. # Note that the qmake "exists" test won't do because it is case insensitive. - system("test -f $${EPOCROOT}/epoc32/include/akndoc.h") { + system("test -f $${EPOCROOT}epoc32/include/akndoc.h") { CONFIG += is_using_gnupoc } } diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 4b54421..5d0deb7 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -57,19 +57,19 @@ QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB -gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script +gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script QMAKE_CFLAGS += $${gcceExtraFlags} QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden #If we are not going to link to Qt or qtmain.lib, we need to include this at least once. isEmpty(QT):contains(TEMPLATE, app) { - QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h + QMAKE_CXXFLAGS += --include=$${EPOCROOT}epoc32/include/stdapis/staticlibinit_gcce.h } QMAKE_LFLAGS += --target1-abs \ --no-undefined \ --nostdlib -QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/udeb/ # g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) @@ -83,11 +83,11 @@ for(line, QMAKE_GCC_SEARCH_DIRS) { } } -QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ - $${EPOCROOT}/epoc32/include/variant \ - $${EPOCROOT}/epoc32/include/stdapis \ - $${EPOCROOT}/epoc32/include/gcce \ +INCLUDEPATH = $${EPOCROOT}epoc32/include/ \ + $${EPOCROOT}epoc32/include/variant \ + $${EPOCROOT}epoc32/include/stdapis \ + $${EPOCROOT}epoc32/include/gcce \ $$INCLUDEPATH -- cgit v0.12 From 3afec58f28a6fbe1cd23fc5bbb5a2f71844a0cfa Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 28 Jan 2011 09:13:01 +0100 Subject: Added missing header. --- mkspecs/common/symbian/symbianincludes.h | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/mkspecs/common/symbian/symbianincludes.h b/mkspecs/common/symbian/symbianincludes.h index 4c0ffa6..5d7f488 100644 --- a/mkspecs/common/symbian/symbianincludes.h +++ b/mkspecs/common/symbian/symbianincludes.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef __PRODUCT_INCLUDE__ # ifdef __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ # define __PRODUCT_INCLUDE__ <variant/symbian_os.hrh> -- cgit v0.12 From 5b3f54a344a6e228389989ecf4fc9e770287db3a Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 23 Dec 2010 15:52:38 +0100 Subject: Fixed a bug in elf2e32_qtwrapper regarding spaces in def files. It would not parse the line correctly if a space was missing between the "@" and the ordinal number. RevBy: Trust me --- bin/elf2e32_qtwrapper.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index 4eeb098..64d485b 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -106,7 +106,7 @@ while (1) { $origDefLine = <$origDefFile>; if (defined($origDefLine)) { $origDefLine =~ s/[\n\r]//; - if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($origDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $origSym = $1; $origOrdinal = $2; $origExtraData = $3; @@ -121,7 +121,7 @@ while (1) { if ($savedNewDefFileLine) { # This happens if the new def file was missing an entry. $newDefLine = $savedNewDefFileLine; - $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen"); + $newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i or die("$0: Shouldn't happen"); $newSym = $1; $newOrdinal = $2; $newExtraData = $3; @@ -131,7 +131,7 @@ while (1) { $newDefLine = <$newDefFile>; if (defined($newDefLine)) { $newDefLine =~ s/[\n\r]//; - if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $newSym = $1; $newOrdinal = $2; $newExtraData = $3; -- cgit v0.12 From dfa811b18b588b09ec7b5c648c7b143d54ddc825 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 19 Oct 2010 08:47:29 +0200 Subject: Fixed some tools definitions and properties in symbian profiles. This is needed for Symbian development on Windows using makefiles. RevBy: Trust me --- mkspecs/common/armcc.conf | 1 + mkspecs/common/symbian/symbian.conf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mkspecs/common/armcc.conf b/mkspecs/common/armcc.conf index 2c765bc..4f178d7 100644 --- a/mkspecs/common/armcc.conf +++ b/mkspecs/common/armcc.conf @@ -37,5 +37,6 @@ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_THREAD += QMAKE_AR = armar --create +QMAKE_LIB = armar --create QMAKE_RANLIB = diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 9a0287a..c59f751 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -117,11 +117,11 @@ contains(QMAKE_HOST.os,Windows) { } QMAKE_IDL = midl -QMAKE_LIB = ar -ru -QMAKE_RC = windres QMAKE_ZIP = zip -r -9 QMAKE_UNZIP = unzip -o +QMAKE_WRITE_DEFAULT_RC = 1 + QMAKE_TAR = tar -cf QMAKE_GZIP = gzip -9f -- cgit v0.12 From bd07beb56cda3d6c37c0d0f9204247f16586cd27 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 19 Oct 2010 08:51:04 +0200 Subject: Added Symbian makefile building support using MinGW backend. RevBy: Oswald Buddenhagen --- mkspecs/common/symbian/symbian-makefile.conf | 6 +++++- qmake/generators/metamakefile.cpp | 4 +++- qmake/generators/win32/mingw_make.h | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index f429c1a..4fc5812 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -2,7 +2,11 @@ # qmake configuration for makefile based symbian # -MAKEFILE_GENERATOR = SYMBIAN_UNIX +contains(QMAKE_HOST.os,Windows) { + MAKEFILE_GENERATOR = SYMBIAN_MINGW +} else { + MAKEFILE_GENERATOR = SYMBIAN_UNIX +} include(symbian.conf) diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index 6c43b6f..26d587d 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -488,6 +488,8 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO) mkfile = new SymbianSbsv2MakefileGenerator; } else if(gen == "SYMBIAN_UNIX") { mkfile = new SymbianMakefileTemplate<UnixMakefileGenerator>; + } else if(gen == "SYMBIAN_MINGW") { + mkfile = new SymbianMakefileTemplate<MingwMakefileGenerator>; } else { fprintf(stderr, "Unknown generator specified: %s\n", gen.toLatin1().constData()); } @@ -544,7 +546,7 @@ MetaMakefileGenerator::modesForGenerator(const QString &gen, } else if (gen == "PROJECTBUILDER" || gen == "XCODE") { *host_mode = Option::HOST_MACX_MODE; *target_mode = Option::TARG_MACX_MODE; - } else if (gen == "SYMBIAN_ABLD" || gen == "SYMBIAN_SBSV2" || gen == "SYMBIAN_UNIX") { + } else if (gen == "SYMBIAN_ABLD" || gen == "SYMBIAN_SBSV2" || gen == "SYMBIAN_UNIX" || gen == "SYMBIAN_MINGW") { #if defined(Q_OS_MAC) *host_mode = Option::HOST_MACX_MODE; #elif defined(Q_OS_UNIX) diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h index 007b48b..5bc9c7b 100644 --- a/qmake/generators/win32/mingw_make.h +++ b/qmake/generators/win32/mingw_make.h @@ -54,17 +54,17 @@ public: protected: QString escapeDependencyPath(const QString &path) const; QString getLibTarget(); + bool writeMakefile(QTextStream &); + void init(); private: bool isWindowsShell() const; void writeMingwParts(QTextStream &); void writeIncPart(QTextStream &t); void writeLibsPart(QTextStream &t); void writeLibDirPart(QTextStream &t); - bool writeMakefile(QTextStream &); void writeObjectsPart(QTextStream &t); void writeBuildRulesPart(QTextStream &t); void writeRcFilePart(QTextStream &t); - void init(); void processPrlVariable(const QString &var, const QStringList &l); QStringList &findDependencies(const QString &file); -- cgit v0.12 From 153b79efac39c33e528650cca35f832e47f7302b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Tue, 19 Oct 2010 10:10:08 +0200 Subject: Added object script support to RVCT when using MinGW qmake generator. RevBy: Oswald Buddenhagen --- mkspecs/common/symbian/symbian-makefile.conf | 2 ++ qmake/generators/win32/mingw_make.cpp | 46 +++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index 4fc5812..cffc859 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -28,6 +28,8 @@ CONFIG *= no_plugin_name_prefix QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 +QMAKE_LINK_OBJECT_SCRIPT = objects + is_using_gnupoc { DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ } diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index ea9e9e1..006a7d5 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -199,6 +199,23 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co } } +void createRvctObjectScriptFile(const QString &fileName, const QStringList &objList) +{ + QString filePath = Option::output_dir + QDir::separator() + fileName; + QFile file(filePath); + if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream t(&file); + for (QStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) { + if (QDir::isRelativePath(*it)) + t << "./" << *it << endl; + else + t << *it << endl; + } + t.flush(); + file.close(); + } +} + void MingwMakefileGenerator::writeMingwParts(QTextStream &t) { writeStandardParts(t); @@ -367,20 +384,33 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) if (!var("BUILD_NAME").isEmpty()) { ar_script_file += "." + var("BUILD_NAME"); } - createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); // QMAKE_LIB is used for win32, including mingw, whereas QMAKE_AR is used on Unix. - // Strip off any options since the ar commands will be read from file. - QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; - if (ar_cmd.isEmpty()) - ar_cmd = "ar"; - objectsLinkLine = ar_cmd + " -M < " + ar_script_file; + if (project->isActiveConfig("rvct_linker")) { + createRvctObjectScriptFile(ar_script_file, project->values("OBJECTS")); + QString ar_cmd = project->values("QMAKE_LIB").join(" "); + if (ar_cmd.isEmpty()) + ar_cmd = "armar --create"; + objectsLinkLine = ar_cmd + " " + var("DEST_TARGET") + " --via " + ar_script_file; + } else { + // Strip off any options since the ar commands will be read from file. + QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; + if (ar_cmd.isEmpty()) + ar_cmd = "ar"; + createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); + objectsLinkLine = ar_cmd + " -M < " + ar_script_file; + } } else { QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); if (!var("BUILD_NAME").isEmpty()) { ld_script_file += "." + var("BUILD_NAME"); } - createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); - objectsLinkLine = ld_script_file; + if (project->isActiveConfig("rvct_linker")) { + createRvctObjectScriptFile(ld_script_file, project->values("OBJECTS")); + objectsLinkLine = QString::fromLatin1("--via ") + ld_script_file; + } else { + createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); + objectsLinkLine = ld_script_file; + } } Win32MakefileGenerator::writeObjectsPart(t); } -- cgit v0.12 From 5624b39aff84ddde76a4f42ab6fad9d6a90d8526 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 23 Dec 2010 16:24:06 +0100 Subject: Fixed include in network module on Symbian. --- src/network/kernel/qnetworkinterface_symbian.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/kernel/qnetworkinterface_symbian.cpp b/src/network/kernel/qnetworkinterface_symbian.cpp index 03133d0..8e5db3c 100644 --- a/src/network/kernel/qnetworkinterface_symbian.cpp +++ b/src/network/kernel/qnetworkinterface_symbian.cpp @@ -43,7 +43,7 @@ #include "qnetworkinterface.h" #include "qnetworkinterface_p.h" -#include "../corelib/kernel/qcore_symbian_p.h" +#include <private/qcore_symbian_p.h> #ifndef QT_NO_NETWORKINTERFACE -- cgit v0.12 From a298545dfbd9bbfeac67ff17547d40acae8480a9 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 23 Dec 2010 16:24:57 +0100 Subject: Fixed a build library deployment issue in sqlite. Make did not understand that sqlite3.dso, which the link relies on, is the same as $$OBJECTS_DIR/sqlite3.dso, which is extracted by the profile. RevBy: Trust me --- src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index ebeccc9..b7a87f3 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -34,6 +34,12 @@ silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_dso + # Workaround for the fact that make doesn't understand that sqlite3.dso + # is the same as $OBJECTS_DIR/sqlite3.dso + symbian_sqlite3_dso_standalone.target = sqlite3.dso + symbian_sqlite3_dso_standalone.depends = $$symbian_sqlite3_dso.output + QMAKE_EXTRA_TARGETS += symbian_sqlite3_dso_standalone + symbian_sqlite3_ver_dso.input = symbian_sqlite3_zip_file symbian_sqlite3_ver_dso.output = sqlite3{00060003}.dso !isEmpty(OBJECTS_DIR):symbian_sqlite3_ver_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_ver_dso.output -- cgit v0.12 From bc627fbe248c2efe9b05784182bf0da3b9c486d7 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 11 Nov 2010 13:52:28 +0100 Subject: Fixed a typo in src profile. RevBy: Trust me --- src/src.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src.pro b/src/src.pro index 060f48b..868e22f 100644 --- a/src/src.pro +++ b/src/src.pro @@ -108,7 +108,7 @@ src_webkit_declarative.target = sub-webkitdeclarative src_phonon.depends = src_gui src_multimedia.depends = src_gui contains(QT_CONFIG, opengl):src_multimedia.depends += src_opengl - src_tools_activeqt.depends = src_tools_idc src_gui + src_activeqt.depends = src_tools_idc src_gui src_declarative.depends = src_gui src_script src_network src_plugins.depends = src_gui src_sql src_svg contains(QT_CONFIG, multimedia):src_plugins.depends += src_multimedia -- cgit v0.12 From c9704566aa9186369bfdabd835b0f6723839310b Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 07:39:08 +0100 Subject: Stopped honoring the RVCT22INC variable on symbian-armcc mkspec. This usually points to the RVCT include directory, but those headers are not appropriate for Symbian. RevBy: Trust me --- mkspecs/features/symbian/symbian_building.prf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 545cb81..28046b4 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -1,6 +1,11 @@ symbian-armcc { QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC + # This is to prevent inclusion of the shipped RVCT headers, which are often in the + # environment variable RVCTxxINC by default. -J prevents the searching of that location, + # but needs a path, so just specify somewhere guaranteed not to contain header files. + QMAKE_CFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path + QMAKE_CXXFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path } else:symbian-gcce { QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE @@ -235,12 +240,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { } # Symbian resource files -symbian-armcc: { - SYMBIAN_RVCT22INC=$$(RVCT22INC) - !isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC} -} -symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I") -symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I") +symbian_resources_INCLUDES = $$join(INCLUDEPATH, " -I", "-I") symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D") symbian_resources_DEFINES += -D__QT_SYMBIAN_RESOURCE__ symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "") -- cgit v0.12 From 775f98e2fe20cf381f9df3a4ff3aca3910c7d05c Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 07:47:12 +0100 Subject: Added .lib/.dso dependency tracking to Symbian with MinGW generator. This is just a mirror of the way the UNIX generator does it. See commits aaf189b084f52 and bdff51768dfe. RevBy: Oswald Buddenhagen --- qmake/generators/win32/mingw_make.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 006a7d5..fc8cfa0 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -218,6 +218,12 @@ void createRvctObjectScriptFile(const QString &fileName, const QStringList &objL void MingwMakefileGenerator::writeMingwParts(QTextStream &t) { + if (!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) { + t << "vpath %.dso " << project->values("QMAKE_LIBDIR").join(";") << endl; + t << "vpath %.lib " << project->values("QMAKE_LIBDIR").join(";") << endl; + t << "\n\n"; + } + writeStandardParts(t); if (!preCompHeaderOut.isEmpty()) { -- cgit v0.12 From 7dacac5ad465fe5c3aea8e2e09d7910a1ed58079 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 07:53:13 +0100 Subject: Avoided some MinGW specific codepaths when building Symbian libs. RevBy: Trust me --- qmake/generators/win32/mingw_make.cpp | 4 ++-- qmake/generators/win32/winmakefile.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index fc8cfa0..a772b38 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -290,7 +290,7 @@ void MingwMakefileGenerator::init() if(configs.indexOf("qt") == -1) configs.append("qt"); - if(project->isActiveConfig("dll")) { + if(project->isActiveConfig("dll") && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) { QString destDir = ""; if(!project->first("DESTDIR").isEmpty()) destDir = Option::fixPathToTargetOS(project->first("DESTDIR") + Option::dir_sep, false, false); @@ -299,7 +299,7 @@ void MingwMakefileGenerator::init() project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB")); } - if(!project->values("DEF_FILE").isEmpty()) + if(!project->values("DEF_FILE").isEmpty() && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) project->values("QMAKE_LFLAGS").append(QString("-Wl,") + project->first("DEF_FILE")); MakefileGenerator::init(); diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index d92eb69..f2bf7d4 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -303,7 +303,8 @@ void Win32MakefileGenerator::processVars() // TARGET_VERSION_EXT will be used to add a version number onto the target name if (project->values("TARGET_VERSION_EXT").isEmpty() - && !project->values("VER_MAJ").isEmpty()) + && !project->values("VER_MAJ").isEmpty() + && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) project->values("TARGET_VERSION_EXT").append(project->values("VER_MAJ").first()); if(project->isEmpty("QMAKE_COPY_FILE")) -- cgit v0.12 From 85005fb1ee135b33ef2e97396d469112845f3e6c Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 07:56:19 +0100 Subject: Added support for rvct_linker config in qmake's MinGW generator. RevBy: Trust me --- qmake/generators/win32/mingw_make.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index a772b38..f1043bc 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -368,17 +368,25 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t) t << "LIBS = "; if(!project->values("QMAKE_LIBDIR").isEmpty()) writeLibDirPart(t); - t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' - << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl; + if (project->isActiveConfig("rvct_linker")) { + t << var("QMAKE_LIBS") << ' ' + << var("QMAKE_LIBS_PRIVATE") << endl; + } else { + t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' + << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl; + } } } void MingwMakefileGenerator::writeLibDirPart(QTextStream &t) { QStringList libDirs = project->values("QMAKE_LIBDIR"); + QString libArg = QString::fromLatin1("-L"); + if (project->isActiveConfig("rvct_linker")) + libArg = QString::fromLatin1("--userlibpath "); for (int i = 0; i < libDirs.size(); ++i) libDirs[i].remove("\""); - t << valGlue(libDirs,"-L"+quote,quote+" -L" +quote,quote) << " "; + t << valGlue(libDirs, libArg+quote, quote+" "+libArg+quote, quote) << " "; } void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) -- cgit v0.12 From 7caa55505704cd907bbd19a2e79fb9e604a86675 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 08:09:01 +0100 Subject: Added support for various special compiler/linker flags on MinGW. This enables you to use QMAKE_xxx_yyy, where xxx is either CFLAGS, CXXFLAGS or LFLAGS, and yyy is either APP, SHLIB or PLUGIN. It is basically the same as the one in the UNIX generator. RevBy: Oswald Buddenhagen --- qmake/generators/win32/winmakefile.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index f2bf7d4..7f81b54 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -332,6 +332,24 @@ void Win32MakefileGenerator::processVars() if(!(*libDir_it).isEmpty()) (*libDir_it) = Option::fixPathToTargetOS((*libDir_it), false, false); } + + if (project->values("TEMPLATE").contains("app")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_APP"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_APP"); + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_APP"); + } else if (project->values("TEMPLATE").contains("lib") && project->isActiveConfig("dll")) { + if(!project->isActiveConfig("plugin") || !project->isActiveConfig("plugin_no_share_shlib_cflags")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_SHLIB"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_SHLIB"); + } + if (project->isActiveConfig("plugin")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_PLUGIN"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_PLUGIN"); + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_PLUGIN"); + } else { + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_SHLIB"); + } + } } void Win32MakefileGenerator::fixTargetExt() -- cgit v0.12 From dbbf06e51eafe25d63cf2d0d21a1d92bde5475cc Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 7 Jan 2011 08:24:41 +0100 Subject: Added MinGW support for adding lib prefix and extension via profile. RevBy: Oswald Buddenhagen --- mkspecs/win32-g++/qmake.conf | 2 ++ qmake/generators/win32/mingw_make.cpp | 5 +---- qmake/generators/win32/winmakefile.cpp | 22 +++++++++++++++++----- qmake/generators/win32/winmakefile.h | 1 + 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf index 2d9833b..e5e4996 100644 --- a/mkspecs/win32-g++/qmake.conf +++ b/mkspecs/win32-g++/qmake.conf @@ -62,6 +62,8 @@ QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script +QMAKE_PREFIX_STATICLIB = lib +QMAKE_EXTENSION_STATICLIB = a QMAKE_LIBS = diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index f1043bc..9eea98f 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -335,12 +335,9 @@ void MingwMakefileGenerator::init() void MingwMakefileGenerator::fixTargetExt() { if (project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") { - project->values("TARGET_EXT").append(".a"); project->values("QMAKE_LFLAGS").append("-static"); - project->values("TARGET").first() = "lib" + project->first("TARGET"); - } else { - Win32MakefileGenerator::fixTargetExt(); } + Win32MakefileGenerator::fixTargetExt(); } void MingwMakefileGenerator::writeIncPart(QTextStream &t) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 7f81b54..bfe3e09 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -57,6 +57,14 @@ Win32MakefileGenerator::Win32MakefileGenerator() : MakefileGenerator() { } +void Win32MakefileGenerator::init() +{ + if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) + project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); + if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) + project->values("QMAKE_EXTENSION_SHLIB").append("lib"); +} + int Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem, const QString &ext) { @@ -354,12 +362,16 @@ void Win32MakefileGenerator::processVars() void Win32MakefileGenerator::fixTargetExt() { - if (!project->values("QMAKE_APP_FLAG").isEmpty()) + if (!project->values("QMAKE_APP_FLAG").isEmpty()) { project->values("TARGET_EXT").append(".exe"); - else if (project->isActiveConfig("shared")) - project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + ".dll"); - else - project->values("TARGET_EXT").append(".lib"); + } else if (project->isActiveConfig("shared")) { + project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + "." + + project->first("QMAKE_EXTENSION_SHLIB")); + project->values("TARGET").first() = project->first("QMAKE_PREFIX_SHLIB") + project->first("TARGET"); + } else { + project->values("TARGET_EXT").append("." + project->first("QMAKE_EXTENSION_STATICLIB")); + project->values("TARGET").first() = project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET"); + } } void Win32MakefileGenerator::processRcFileVar() diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index fa3f292..7f7d2f3 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -59,6 +59,7 @@ class Win32MakefileGenerator : public MakefileGenerator public: Win32MakefileGenerator(); ~Win32MakefileGenerator(); + void init(); protected: virtual QString defaultInstall(const QString &); virtual void writeCleanParts(QTextStream &t); -- cgit v0.12 From 728f0f7d5c1c84ca713cfb34c3d32b65018028d4 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 28 Jan 2011 10:27:33 +0100 Subject: Fixed GCCE libdir handling if the paths have spaces in them. RevBy: Trust me --- mkspecs/symbian-gcce/qmake.conf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 5d0deb7..e83f435 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -72,16 +72,16 @@ QMAKE_LFLAGS += --target1-abs \ QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/udeb/ # g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile -QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) -for(line, QMAKE_GCC_SEARCH_DIRS) { - contains(line, "libraries:") { - foundIt="1" - } else { - contains(foundIt, "1") { - QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") - } - } +QMAKE_GCC_SEARCH_DIRS = $$system($$QMAKE_CXX -print-search-dirs) +QMAKE_GCC_SEARCH_DIRS = "$$join(QMAKE_GCC_SEARCH_DIRS, " ")" +QMAKE_GCC_SEARCH_DIRS = $$replace(QMAKE_GCC_SEARCH_DIRS, ".*libraries: *", "") +QMAKE_GCC_SEARCH_DIRS = $$replace(QMAKE_GCC_SEARCH_DIRS, "=", "") +contains(QMAKE_HOST.os,Windows) { + QMAKE_GCC_SEARCH_DIRS = $$split(QMAKE_GCC_SEARCH_DIRS, ;) +} else { + QMAKE_GCC_SEARCH_DIRS = $$split(QMAKE_GCC_SEARCH_DIRS, :) } +for(line, QMAKE_GCC_SEARCH_DIRS):QMAKE_LIBDIR += $$line QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -- cgit v0.12 From 7a53c676479c5531880793f79f0fb2e74b31fae1 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 28 Jan 2011 10:28:23 +0100 Subject: Made qmake strip trailing \ from libdirs. This was done because trailing \ would confuse the command line parser if the path was also quoted. RevBy: Oswald Buddenhagen --- qmake/generators/win32/mingw_make.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 9eea98f..6064080 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -381,8 +381,11 @@ void MingwMakefileGenerator::writeLibDirPart(QTextStream &t) QString libArg = QString::fromLatin1("-L"); if (project->isActiveConfig("rvct_linker")) libArg = QString::fromLatin1("--userlibpath "); - for (int i = 0; i < libDirs.size(); ++i) + for (int i = 0; i < libDirs.size(); ++i) { libDirs[i].remove("\""); + if (libDirs[i].endsWith("\\")) + libDirs[i].chop(1); + } t << valGlue(libDirs, libArg+quote, quote+" "+libArg+quote, quote) << " "; } -- cgit v0.12 From 9ca5cdd1242deaba10bd1005bcd0774da35d9779 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 31 Jan 2011 14:39:23 +0100 Subject: Fixed win32-msvc2008 build regression. We needed to move the code in the init() function to the fixTargetExt() function, which is where the variables are actually used. The reason is that fixTargetExt() runs before init(). RevBy: Miikka Heikkinen --- qmake/generators/win32/winmakefile.cpp | 13 +++++-------- qmake/generators/win32/winmakefile.h | 1 - 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index bfe3e09..fd20452 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -57,14 +57,6 @@ Win32MakefileGenerator::Win32MakefileGenerator() : MakefileGenerator() { } -void Win32MakefileGenerator::init() -{ - if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) - project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); - if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) - project->values("QMAKE_EXTENSION_SHLIB").append("lib"); -} - int Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem, const QString &ext) { @@ -362,6 +354,11 @@ void Win32MakefileGenerator::processVars() void Win32MakefileGenerator::fixTargetExt() { + if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) + project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); + if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) + project->values("QMAKE_EXTENSION_SHLIB").append("dll"); + if (!project->values("QMAKE_APP_FLAG").isEmpty()) { project->values("TARGET_EXT").append(".exe"); } else if (project->isActiveConfig("shared")) { diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index 7f7d2f3..fa3f292 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -59,7 +59,6 @@ class Win32MakefileGenerator : public MakefileGenerator public: Win32MakefileGenerator(); ~Win32MakefileGenerator(); - void init(); protected: virtual QString defaultInstall(const QString &); virtual void writeCleanParts(QTextStream &t); -- cgit v0.12 From 1d80690e9e52c5dff1392bf7694abf65dd51a3b8 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 24 Feb 2011 13:46:01 +0100 Subject: Fixed incorrect referral to an include file. Better to make it relative to the profile. That way it is always found, regardless of where Qt is located. RevBy: Liang Qi --- mkspecs/common/symbian/symbian-makefile.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index cffc859..b248117 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -33,7 +33,7 @@ QMAKE_LINK_OBJECT_SCRIPT = objects is_using_gnupoc { DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ } -QMAKE_SYMBIAN_INCLUDES = $$[QT_INSTALL_DATA]/mkspecs/common/symbian/symbianincludes.h +QMAKE_SYMBIAN_INCLUDES = $$IN_PWD/symbianincludes.h symbian-armcc { QMAKE_CFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES QMAKE_CXXFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES -- cgit v0.12 From 156b4810dd39c14c16c604ba24b36a1f641d3891 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 24 Feb 2011 17:28:56 +0100 Subject: Corrected a mismerge in GCCE link parameters. RevBy: Trust me --- mkspecs/symbian-gcce/qmake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index e83f435..2c90a00 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -54,7 +54,7 @@ DEFINES += __GCCE__ \ UNICODE QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll +QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry=_E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -- cgit v0.12 From 2e0fab04343cdc938d7870520b8c92631a0abc87 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 25 Feb 2011 10:24:58 +0100 Subject: Removed javascript-jit from default symbian-gcce build. It fails the build anyway. RevBy: Liang Qi --- configure | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure b/configure index fb1ee4c..c1099f7 100755 --- a/configure +++ b/configure @@ -6434,6 +6434,8 @@ if [ "$CFG_JAVASCRIPTCORE_JIT" = "yes" ] || [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" if [ $? != "0" ]; then CFG_JAVASCRIPTCORE_JIT=no fi + elif [ "$XPLATFORM" = "symbian-gcce" ]; then + CFG_JAVASCRIPTCORE_JIT=no fi fi -- cgit v0.12 From edca06ea839bf17cbadad3daddc00e636d38addb Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 25 Feb 2011 13:31:27 +0100 Subject: Fixed mkspec detection for Symbian. RevBy: Liang Qi --- configure | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/configure b/configure index c1099f7..163ebc4 100755 --- a/configure +++ b/configure @@ -7115,11 +7115,10 @@ EOF canBuildWebKit="no" canBuildQtConcurrent="no" ;; - symbian/*-gcce) + symbian-gcce) canBuildWebKit="no" canBuildQtConcurrent="no" - ;; - symbian/*-armcc) + symbian-armcc) canBuildQtConcurrent="no" ;; esac -- cgit v0.12 From e05e6802a6873f1ba48148ed3b9cc8cfcbeb3d83 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Mon, 28 Feb 2011 08:45:10 +0100 Subject: Readded a ';;' that was removed by mistake. RevBy: Trust me --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index 163ebc4..d064240 100755 --- a/configure +++ b/configure @@ -7118,6 +7118,7 @@ EOF symbian-gcce) canBuildWebKit="no" canBuildQtConcurrent="no" + ;; symbian-armcc) canBuildQtConcurrent="no" ;; -- cgit v0.12 From 0d9cf6f4f4b1b9c51102773ba705aa0b68bb5f7f Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Thu, 3 Mar 2011 16:01:45 +0100 Subject: Disable capabilities example for symbian-gcce due to a bug in elf2e32 Phonon exports template instantiations. These exports get weak symbol binding, which is correct according to the C++ ABI, but the problem is that elf2e32 has a bug which does not transfer the weak symbols correctly to the dso file. Therefore, the example will work if you have a prebuilt Qt version and use GCCE, but not if you build Qt from scratch using GCCE. For normal non-template symbols it is not a problem since they get global bindings. RVCT also produces global bindings. RevBy: Shane Kearns --- examples/phonon/phonon.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/phonon/phonon.pro b/examples/phonon/phonon.pro index aa6ac13..c6a0bff 100644 --- a/examples/phonon/phonon.pro +++ b/examples/phonon/phonon.pro @@ -3,6 +3,9 @@ CONFIG += ordered SUBDIRS = qmusicplayer \ capabilities +# Disable capabilities example for symbian-gcce due to a bug in elf2e32. +symbian-gcce:SUBDIRS -= capabilities + # install target.path = $$[QT_INSTALL_EXAMPLES]/phonon sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS phonon.pro README -- cgit v0.12 From 7458c4bb9a0f6f925cb6002d3b664bbbc21e75ef Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Fri, 4 Mar 2011 12:13:20 +0100 Subject: QNAM HTTP: Fix the ioPostToHttpFromSocket auto test Introduced a ClosingState for the channel to better track the state of the socket. Reviewed-by: Markus Goetz --- src/network/access/qhttpnetworkconnection.cpp | 2 +- src/network/access/qhttpnetworkconnectionchannel.cpp | 20 +++++++++++++++----- src/network/access/qhttpnetworkconnectionchannel_p.h | 3 ++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 3502113..35c3a67 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -765,7 +765,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() //resend the necessary ones. for (int i = 0; i < channelCount; ++i) { - if (channels[i].resendCurrent) { + if (channels[i].resendCurrent && (channels[i].state != QHttpNetworkConnectionChannel::ClosingState)) { channels[i].resendCurrent = false; channels[i].state = QHttpNetworkConnectionChannel::IdleState; diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 41bc64a..60094b0 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -145,10 +145,12 @@ void QHttpNetworkConnectionChannel::init() void QHttpNetworkConnectionChannel::close() { - socket->blockSignals(true); + if (socket->state() == QAbstractSocket::UnconnectedState) + state = QHttpNetworkConnectionChannel::IdleState; + else + state = QHttpNetworkConnectionChannel::ClosingState; + socket->close(); - socket->blockSignals(false); - state = QHttpNetworkConnectionChannel::IdleState; } @@ -679,7 +681,8 @@ void QHttpNetworkConnectionChannel::allDone() reconnectAttempts = 2; // now the channel can be seen as free/idle again, all signal emissions for the reply have been done - this->state = QHttpNetworkConnectionChannel::IdleState; + if (state != QHttpNetworkConnectionChannel::ClosingState) + state = QHttpNetworkConnectionChannel::IdleState; // if it does not need to be sent again we can set it to 0 // the previous code did not do that and we had problems with accidental re-sending of a @@ -729,7 +732,8 @@ void QHttpNetworkConnectionChannel::allDone() QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); } else if (alreadyPipelinedRequests.isEmpty()) { if (connectionCloseEnabled) - close(); + if (socket->state() != QAbstractSocket::UnconnectedState) + close(); if (qobject_cast<QHttpNetworkConnection*>(connection)) QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); } @@ -936,6 +940,12 @@ void QHttpNetworkConnectionChannel::_q_bytesWritten(qint64 bytes) void QHttpNetworkConnectionChannel::_q_disconnected() { + if (state == QHttpNetworkConnectionChannel::ClosingState) { + state = QHttpNetworkConnectionChannel::IdleState; + QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); + return; + } + // read the available data before closing if (isSocketWaiting() || isSocketReading()) { if (reply) { diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 8cbc689..893d75e 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -95,7 +95,8 @@ public: WritingState = 2, // writing the data WaitingState = 4, // waiting for reply ReadingState = 8, // reading the reply - BusyState = (ConnectingState|WritingState|WaitingState|ReadingState) + ClosingState = 16, + BusyState = (ConnectingState|WritingState|WaitingState|ReadingState|ClosingState) }; QAbstractSocket *socket; bool ssl; -- cgit v0.12 From 206b614f2e9623d792e6f398bf11765a44c272f5 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 1 Mar 2011 16:58:30 +0100 Subject: SSL backend: check at runtime for the right OpenSSL version for SNI SNI = Server Name Indication. The function "SSL_ctrl()" has been there since always in OpenSSL, but not with the specific enum SSL_CTRL_SET_TLSEXT_HOSTNAME, so let's avoid the call for older versions. Additionally, fix the resolving of SSL_CTX_load_verify_locations for Symbian (is not used in Symbian yet). Reviewed-by: Markus Goetz --- src/network/ssl/qsslsocket_openssl.cpp | 5 +++-- src/network/ssl/qsslsocket_openssl_p.h | 1 + src/network/ssl/qsslsocket_openssl_symbols.cpp | 5 ++++- src/network/ssl/qsslsocket_openssl_symbols_p.h | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 455a49f1..646889c 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -393,14 +393,15 @@ init_context: } #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) - if (client) { + if (client && q_SSLeay() >= 0x00090806fL) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName; if (tlsHostName.isEmpty()) tlsHostName = hostName; QByteArray ace = QUrl::toAce(tlsHostName); if (!ace.isEmpty()) { - q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.constData()); + if (!q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.constData())) + qWarning("could not set SSL_CTRL_SET_TLSEXT_HOSTNAME, Server Name Indication disabled"); } } #endif diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index 02d70f9..ca49fab 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -79,6 +79,7 @@ #include <openssl/x509_vfy.h> #include <openssl/dsa.h> #include <openssl/rsa.h> +#include <openssl/crypto.h> #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) #include <openssl/tls1.h> #endif diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 732fc86..b1310cc 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -266,6 +266,7 @@ DEFINEFUNC3(DSA *, d2i_DSAPrivateKey, DSA **a, a, unsigned char **b, b, long c, DEFINEFUNC(void, OPENSSL_add_all_algorithms_noconf, void, DUMMYARG, return, DUMMYARG) DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG) DEFINEFUNC3(int, SSL_CTX_load_verify_locations, SSL_CTX *ctx, ctx, const char *CAfile, CAfile, const char *CApath, CApath, return 0, return) +DEFINEFUNC(long, SSLeay, void, DUMMYARG, return 0, return) #ifdef Q_OS_SYMBIAN #define RESOLVEFUNC(func, ordinal, lib) \ @@ -606,6 +607,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(SSLv3_server_method, 197, libs.first ) RESOLVEFUNC(SSLv23_server_method, 191, libs.first ) RESOLVEFUNC(TLSv1_server_method, 200, libs.first ) + RESOLVEFUNC(SSL_CTX_load_verify_locations, 34, libs.first ) RESOLVEFUNC(X509_NAME_oneline, 1830, libs.second ) RESOLVEFUNC(X509_PUBKEY_get, 1844, libs.second ) RESOLVEFUNC(X509_STORE_free, 1939, libs.second ) @@ -637,7 +639,7 @@ bool q_resolveOpenSslSymbols() #endif RESOLVEFUNC(OPENSSL_add_all_algorithms_noconf, 1153, libs.second ) RESOLVEFUNC(OPENSSL_add_all_algorithms_conf, 1152, libs.second ) - RESOLVEFUNC(SSL_CTX_load_verify_locations, 34, libs.second ) + RESOLVEFUNC(SSLeay, 1504, libs.second ) #else // Q_OS_SYMBIAN #ifdef SSLEAY_MACROS RESOLVEFUNC(ASN1_dup) @@ -766,6 +768,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(OPENSSL_add_all_algorithms_noconf) RESOLVEFUNC(OPENSSL_add_all_algorithms_conf) RESOLVEFUNC(SSL_CTX_load_verify_locations) + RESOLVEFUNC(SSLeay) #endif // Q_OS_SYMBIAN symbolsResolved = true; delete libs.first; diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index 5aab8d7..49830ac 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -416,6 +416,7 @@ DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length); void q_OPENSSL_add_all_algorithms_noconf(); void q_OPENSSL_add_all_algorithms_conf(); int q_SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath); +long q_SSLeay(); // Helper function class QDateTime; -- cgit v0.12 From 8238ca7f3d89d409221c96706eeae196199109c6 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Thu, 3 Mar 2011 15:21:56 +0100 Subject: Inconsistency between ini case sensitivity between OS_MAC and WS_QPA. QPA sets CaseSensitive unconditionally, so if OS_MAC tries to use CaseInsensitive QSettings will assert. The patch leaves the non-QPA case unchanged. --- src/corelib/io/qsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 92f7636..b084ca5 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -1004,7 +1004,7 @@ void QConfFileSettingsPrivate::initFormat() readFunc = 0; writeFunc = 0; #if defined(Q_OS_MAC) - caseSensitivity = (format == QSettings::NativeFormat) ? Qt::CaseSensitive : Qt::CaseInsensitive; + caseSensitivity = (format == QSettings::NativeFormat) ? Qt::CaseSensitive : IniCaseSensitivity; #else caseSensitivity = IniCaseSensitivity; #endif -- cgit v0.12 From d45c67d01ce28f4fb85eace1116ca751a8f02827 Mon Sep 17 00:00:00 2001 From: axis <qt-info@nokia.com> Date: Fri, 4 Mar 2011 13:13:40 +0100 Subject: Removed reference to nonexistant profile. Probably this was a result of backporting symbian-gcce support from 4.8 to 4.7. RevBy: Liang Qi --- mkspecs/symbian-gcce/qmake.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 2c90a00..62a079b 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -4,7 +4,6 @@ include(../common/symbian/symbian-makefile.conf) -include(../common/gcc-base.conf) include(../common/g++.conf) QMAKE_CC = arm-none-symbianelf-gcc -- cgit v0.12 From 27e4302b7f45f22180693d26747f419177c81e27 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 7 Mar 2011 13:10:08 +1000 Subject: Reverse horizontal alignment of QML editors when the layout mirroring is enabled Task-number: QTBUG-15880 Reviewed-by: Martin Jones Change-Id: Ie9cebd7bc6d40f5f555bfd83ddc3a24a55c6cb4d --- src/declarative/graphicsitems/qdeclarativetext.cpp | 95 ++++++++++++++------- src/declarative/graphicsitems/qdeclarativetext_p.h | 3 + .../graphicsitems/qdeclarativetext_p_p.h | 4 +- .../graphicsitems/qdeclarativetextedit.cpp | 98 ++++++++++++++++------ .../graphicsitems/qdeclarativetextedit_p.h | 3 + .../graphicsitems/qdeclarativetextedit_p_p.h | 4 +- .../graphicsitems/qdeclarativetextinput.cpp | 96 +++++++++++++++------ .../graphicsitems/qdeclarativetextinput_p.h | 4 +- .../graphicsitems/qdeclarativetextinput_p_p.h | 4 +- .../qdeclarativetext/tst_qdeclarativetext.cpp | 29 +++++++ .../tst_qdeclarativetextedit.cpp | 24 ++++++ .../tst_qdeclarativetextinput.cpp | 30 +++++++ 12 files changed, 309 insertions(+), 85 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index e66a83e..4a931fd 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -210,18 +210,6 @@ qreal QDeclarativeTextPrivate::implicitWidth() const return mImplicitWidth; } -void QDeclarativeTextPrivate::determineHorizontalAlignment() -{ - Q_Q(QDeclarativeText); - if (hAlignImplicit && q->isComponentComplete()) { - // if no explicit alignment has been set, follow the natural layout direction of the text - QDeclarativeText::HAlignment previousAlign = hAlign; - hAlign = text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft; - if (previousAlign != hAlign) - emit q->horizontalAlignmentChanged(hAlign); - } -} - void QDeclarativeTextPrivate::updateLayout() { Q_Q(QDeclarativeText); @@ -305,7 +293,7 @@ void QDeclarativeTextPrivate::updateSize() ensureDoc(); doc->setDefaultFont(font); QTextOption option; - option.setAlignment((Qt::Alignment)int(hAlign | vAlign)); + option.setAlignment((Qt::Alignment)int(q->effectiveHAlign() | vAlign)); option.setWrapMode(QTextOption::WrapMode(wrapMode)); doc->setDefaultTextOption(option); if (requireImplicitWidth && q->widthValid()) { @@ -371,7 +359,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() lineWidth = q->width(); QTextOption textOption = layout.textOption(); - textOption.setAlignment(Qt::Alignment(hAlign)); + textOption.setAlignment(Qt::Alignment(q->effectiveHAlign())); textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); layout.setTextOption(textOption); @@ -1049,6 +1037,7 @@ void QDeclarativeText::setStyleColor(const QColor &color) /*! \qmlproperty enumeration Text::horizontalAlignment \qmlproperty enumeration Text::verticalAlignment + \qmlproperty enumeration Text::effectiveHorizontalAlignment Sets the horizontal and vertical alignment of the text within the Text items width and height. By default, the text is vertically aligned to the top. Horizontal @@ -1063,6 +1052,11 @@ void QDeclarativeText::setStyleColor(const QColor &color) all alignments are equivalent. If you want the text to be, say, centered in its parent, then you will need to either modify the Item::anchors, or set horizontalAlignment to Text.AlignHCenter and bind the width to that of the parent. + + When using the attached property LayoutMirroring::enabled to mirror application + layouts, the horizontal alignment of text will also be mirrored. However, the property + \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment + of Text, use the read-only property \c effectiveHorizontalAlignment. */ QDeclarativeText::HAlignment QDeclarativeText::hAlign() const { @@ -1073,29 +1067,72 @@ QDeclarativeText::HAlignment QDeclarativeText::hAlign() const void QDeclarativeText::setHAlign(HAlignment align) { Q_D(QDeclarativeText); + bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror; d->hAlignImplicit = false; - if (d->hAlign == align) - return; - - if (isComponentComplete()) - prepareGeometryChange(); - - d->hAlign = align; - d->updateLayout(); - - emit horizontalAlignmentChanged(align); + if (d->setHAlign(align, forceAlign) && isComponentComplete()) + d->updateLayout(); } void QDeclarativeText::resetHAlign() { Q_D(QDeclarativeText); d->hAlignImplicit = true; - QDeclarativeText::HAlignment oldAlignment = d->hAlign; - d->determineHorizontalAlignment(); - if (oldAlignment != d->hAlign) { - prepareGeometryChange(); + if (d->determineHorizontalAlignment() && isComponentComplete()) d->updateLayout(); - emit horizontalAlignmentChanged(d->hAlign); +} + +QDeclarativeText::HAlignment QDeclarativeText::effectiveHAlign() const +{ + Q_D(const QDeclarativeText); + QDeclarativeText::HAlignment effectiveAlignment = d->hAlign; + if (!d->hAlignImplicit && d->effectiveLayoutMirror) { + switch (d->hAlign) { + case QDeclarativeText::AlignLeft: + effectiveAlignment = QDeclarativeText::AlignRight; + break; + case QDeclarativeText::AlignRight: + effectiveAlignment = QDeclarativeText::AlignLeft; + break; + default: + break; + } + } + return effectiveAlignment; +} + +bool QDeclarativeTextPrivate::setHAlign(QDeclarativeText::HAlignment alignment, bool forceAlign) +{ + Q_Q(QDeclarativeText); + if (hAlign != alignment || forceAlign) { + QDeclarativeText::HAlignment oldEffectiveHAlign = q->effectiveHAlign(); + hAlign = alignment; + + emit q->horizontalAlignmentChanged(hAlign); + if (oldEffectiveHAlign != q->effectiveHAlign()) + emit q->effectiveHorizontalAlignmentChanged(); + return true; + } + return false; +} + +bool QDeclarativeTextPrivate::determineHorizontalAlignment() +{ + Q_Q(QDeclarativeText); + if (hAlignImplicit && q->isComponentComplete()) { + // if no explicit alignment has been set, follow the natural layout direction of the text + return setHAlign(text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft); + } + return false; +} + +void QDeclarativeTextPrivate::mirrorChange() +{ + Q_Q(QDeclarativeText); + if (q->isComponentComplete()) { + if (!hAlignImplicit && (hAlign == QDeclarativeText::AlignRight || hAlign == QDeclarativeText::AlignLeft)) { + updateLayout(); + emit q->effectiveHorizontalAlignmentChanged(); + } } } diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h index 92c2eab..a1153c2 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p.h @@ -70,6 +70,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeText : public QDeclarativeImplici Q_PROPERTY(TextStyle style READ style WRITE setStyle NOTIFY styleChanged) Q_PROPERTY(QColor styleColor READ styleColor WRITE setStyleColor NOTIFY styleColorChanged) Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) + Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1) Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged) Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged) Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1) @@ -134,6 +135,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); void resetHAlign(); + HAlignment effectiveHAlign() const; VAlignment vAlign() const; void setVAlign(VAlignment align); @@ -189,6 +191,7 @@ Q_SIGNALS: void paintedSizeChanged(); Q_REVISION(1) void lineHeightChanged(qreal lineHeight); Q_REVISION(1) void lineHeightModeChanged(LineHeightMode mode); + Q_REVISION(1) void effectiveHorizontalAlignmentChanged(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 6886d91..0864c8f 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -76,7 +76,9 @@ public: void updateSize(); void updateLayout(); - void determineHorizontalAlignment(); + bool determineHorizontalAlignment(); + bool setHAlign(QDeclarativeText::HAlignment, bool forceAlign = false); + void mirrorChange(); QString text; QFont font; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index e4cd66c..7a75ece 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -458,6 +458,7 @@ void QDeclarativeTextEdit::setSelectedTextColor(const QColor &color) /*! \qmlproperty enumeration TextEdit::horizontalAlignment \qmlproperty enumeration TextEdit::verticalAlignment + \qmlproperty enumeration TextEdit::effectiveHorizontalAlignment Sets the horizontal and vertical alignment of the text within the TextEdit item's width and height. By default, the text alignment follows the natural alignment @@ -476,8 +477,13 @@ void QDeclarativeTextEdit::setSelectedTextColor(const QColor &color) \list \o TextEdit.AlignTop (default) \o TextEdit.AlignBottom - \c TextEdit.AlignVCenter + \o TextEdit.AlignVCenter \endlist + + When using the attached property LayoutMirroring::enabled to mirror application + layouts, the horizontal alignment of text will also be mirrored. However, the property + \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment + of TextEdit, use the read-only property \c effectiveHorizontalAlignment. */ QDeclarativeTextEdit::HAlignment QDeclarativeTextEdit::hAlign() const { @@ -485,28 +491,79 @@ QDeclarativeTextEdit::HAlignment QDeclarativeTextEdit::hAlign() const return d->hAlign; } -void QDeclarativeTextEdit::setHAlign(QDeclarativeTextEdit::HAlignment alignment) +void QDeclarativeTextEdit::setHAlign(HAlignment align) { Q_D(QDeclarativeTextEdit); + bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror; d->hAlignImplicit = false; - if (alignment == d->hAlign) - return; - d->hAlign = alignment; - d->updateDefaultTextOption(); - updateSize(); - emit horizontalAlignmentChanged(d->hAlign); + if (d->setHAlign(align, forceAlign) && isComponentComplete()) { + d->updateDefaultTextOption(); + updateSize(); + } } void QDeclarativeTextEdit::resetHAlign() { Q_D(QDeclarativeTextEdit); d->hAlignImplicit = true; - QDeclarativeTextEdit::HAlignment oldAlignment = d->hAlign; - d->determineHorizontalAlignment(); - if (oldAlignment != d->hAlign) { + if (d->determineHorizontalAlignment() && isComponentComplete()) { d->updateDefaultTextOption(); updateSize(); + } +} +QDeclarativeTextEdit::HAlignment QDeclarativeTextEdit::effectiveHAlign() const +{ + Q_D(const QDeclarativeTextEdit); + QDeclarativeTextEdit::HAlignment effectiveAlignment = d->hAlign; + if (!d->hAlignImplicit && d->effectiveLayoutMirror) { + switch (d->hAlign) { + case QDeclarativeTextEdit::AlignLeft: + effectiveAlignment = QDeclarativeTextEdit::AlignRight; + break; + case QDeclarativeTextEdit::AlignRight: + effectiveAlignment = QDeclarativeTextEdit::AlignLeft; + break; + default: + break; + } + } + return effectiveAlignment; +} + +bool QDeclarativeTextEditPrivate::setHAlign(QDeclarativeTextEdit::HAlignment alignment, bool forceAlign) +{ + Q_Q(QDeclarativeTextEdit); + if (hAlign != alignment || forceAlign) { + QDeclarativeTextEdit::HAlignment oldEffectiveHAlign = q->effectiveHAlign(); + hAlign = alignment; + emit q->horizontalAlignmentChanged(alignment); + if (oldEffectiveHAlign != q->effectiveHAlign()) + emit q->effectiveHorizontalAlignmentChanged(); + return true; + } + return false; +} + +bool QDeclarativeTextEditPrivate::determineHorizontalAlignment() +{ + Q_Q(QDeclarativeTextEdit); + if (hAlignImplicit && q->isComponentComplete()) { + // if no explicit alignment has been set, follow the natural layout direction of the text + return setHAlign(text.isRightToLeft() ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); + } + return false; +} + +void QDeclarativeTextEditPrivate::mirrorChange() +{ + Q_Q(QDeclarativeTextEdit); + if (q->isComponentComplete()) { + if (!hAlignImplicit && (hAlign == QDeclarativeTextEdit::AlignRight || hAlign == QDeclarativeTextEdit::AlignLeft)) { + updateDefaultTextOption(); + q->updateSize(); + emit q->effectiveHorizontalAlignmentChanged(); + } } } @@ -1538,18 +1595,6 @@ void QDeclarativeTextEdit::moveCursorDelegate() d->cursor->setY(cursorRect.y()); } -void QDeclarativeTextEditPrivate::determineHorizontalAlignment() -{ - Q_Q(QDeclarativeTextEdit); - if (hAlignImplicit && q->isComponentComplete()) { - // if no explicit alignment has been set, follow the natural layout direction of the text - QDeclarativeTextEdit::HAlignment previousAlign = hAlign; - hAlign = rightToLeftText ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft; - if (previousAlign != hAlign) - emit q->horizontalAlignmentChanged(hAlign); - } -} - void QDeclarativeTextEditPrivate::updateSelection() { Q_Q(QDeclarativeTextEdit); @@ -1698,14 +1743,15 @@ void QDeclarativeTextEdit::updateTotalLines() void QDeclarativeTextEditPrivate::updateDefaultTextOption() { + Q_Q(QDeclarativeTextEdit); QTextOption opt = document->defaultTextOption(); int oldAlignment = opt.alignment(); - QDeclarativeTextEdit::HAlignment horizontalAlignment = hAlign; + QDeclarativeTextEdit::HAlignment horizontalAlignment = q->effectiveHAlign(); if (rightToLeftText) { - if (hAlign == QDeclarativeTextEdit::AlignLeft) + if (horizontalAlignment == QDeclarativeTextEdit::AlignLeft) horizontalAlignment = QDeclarativeTextEdit::AlignRight; - else if (hAlign == QDeclarativeTextEdit::AlignRight) + else if (horizontalAlignment == QDeclarativeTextEdit::AlignRight) horizontalAlignment = QDeclarativeTextEdit::AlignLeft; } opt.setAlignment((Qt::Alignment)(int)(horizontalAlignment | vAlign)); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p.h index 471b201..25ca1e7 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p.h @@ -73,6 +73,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextEdit : public QDeclarativeImplicitSizePa Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) + Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1) Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged) Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged) Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1) @@ -154,6 +155,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); void resetHAlign(); + HAlignment effectiveHAlign() const; VAlignment vAlign() const; void setVAlign(VAlignment align); @@ -247,6 +249,7 @@ Q_SIGNALS: Q_REVISION(1) void linkActivated(const QString &link); Q_REVISION(1) void canPasteChanged(); Q_REVISION(1) void inputMethodComposingChanged(); + Q_REVISION(1) void effectiveHorizontalAlignmentChanged(); public Q_SLOTS: void selectAll(); diff --git a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h index f4a6c0e..36e1b51 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextedit_p_p.h @@ -88,7 +88,9 @@ public: void updateDefaultTextOption(); void relayoutDocument(); void updateSelection(); - void determineHorizontalAlignment(); + bool determineHorizontalAlignment(); + bool setHAlign(QDeclarativeTextEdit::HAlignment, bool forceAlign = false); + void mirrorChange(); qreal implicitWidth() const; void focusChanged(bool); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 0c021db..0deffe9 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -326,6 +326,7 @@ void QDeclarativeTextInput::setSelectedTextColor(const QColor &color) /*! \qmlproperty enumeration TextInput::horizontalAlignment + \qmlproperty enumeration TextInput::effectiveHorizontalAlignment Sets the horizontal alignment of the text within the TextInput item's width and height. By default, the text alignment follows the natural alignment @@ -340,6 +341,11 @@ void QDeclarativeTextInput::setSelectedTextColor(const QColor &color) The valid values for \c horizontalAlignment are \c TextInput.AlignLeft, \c TextInput.AlignRight and \c TextInput.AlignHCenter. + + When using the attached property LayoutMirroring::enabled to mirror application + layouts, the horizontal alignment of text will also be mirrored. However, the property + \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment + of TextInput, use the read-only property \c effectiveHorizontalAlignment. */ QDeclarativeTextInput::HAlignment QDeclarativeTextInput::hAlign() const { @@ -350,25 +356,75 @@ QDeclarativeTextInput::HAlignment QDeclarativeTextInput::hAlign() const void QDeclarativeTextInput::setHAlign(HAlignment align) { Q_D(QDeclarativeTextInput); + bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror; d->hAlignImplicit = false; - if(align == d->hAlign || align > QDeclarativeTextInput::AlignHCenter) // justify not supported - return; - d->hAlign = align; - updateRect(); - d->updateHorizontalScroll(); - emit horizontalAlignmentChanged(d->hAlign); + if (d->setHAlign(align, forceAlign) && isComponentComplete()) { + updateRect(); + d->updateHorizontalScroll(); + } } void QDeclarativeTextInput::resetHAlign() { Q_D(QDeclarativeTextInput); d->hAlignImplicit = true; - QDeclarativeTextInput::HAlignment oldAlignment = d->hAlign; - d->determineHorizontalAlignment(); - if (oldAlignment != d->hAlign) { + if (d->determineHorizontalAlignment() && isComponentComplete()) { updateRect(); d->updateHorizontalScroll(); - emit horizontalAlignmentChanged(d->hAlign); + } +} + +QDeclarativeTextInput::HAlignment QDeclarativeTextInput::effectiveHAlign() const +{ + Q_D(const QDeclarativeTextInput); + QDeclarativeTextInput::HAlignment effectiveAlignment = d->hAlign; + if (!d->hAlignImplicit && d->effectiveLayoutMirror) { + switch (d->hAlign) { + case QDeclarativeTextInput::AlignLeft: + effectiveAlignment = QDeclarativeTextInput::AlignRight; + break; + case QDeclarativeTextInput::AlignRight: + effectiveAlignment = QDeclarativeTextInput::AlignLeft; + break; + default: + break; + } + } + return effectiveAlignment; +} + +bool QDeclarativeTextInputPrivate::setHAlign(QDeclarativeTextInput::HAlignment alignment, bool forceAlign) +{ + Q_Q(QDeclarativeTextInput); + if ((hAlign != alignment || forceAlign) && alignment <= QDeclarativeTextInput::AlignHCenter) { // justify not supported + QDeclarativeTextInput::HAlignment oldEffectiveHAlign = q->effectiveHAlign(); + hAlign = alignment; + return true; + emit q->horizontalAlignmentChanged(alignment); + if (oldEffectiveHAlign != q->effectiveHAlign()) + emit q->effectiveHorizontalAlignmentChanged(); + } + return false; +} + +bool QDeclarativeTextInputPrivate::determineHorizontalAlignment() +{ + if (hAlignImplicit) { + // if no explicit alignment has been set, follow the natural layout direction of the text + return setHAlign(control->text().isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft); + } + return false; +} + +void QDeclarativeTextInputPrivate::mirrorChange() +{ + Q_Q(QDeclarativeTextInput); + if (q->isComponentComplete()) { + if (!hAlignImplicit && (hAlign == QDeclarativeTextInput::AlignRight || hAlign == QDeclarativeTextInput::AlignLeft)) { + q->updateRect(); + updateHorizontalScroll(); + emit q->effectiveHorizontalAlignmentChanged(); + } } } @@ -1226,10 +1282,11 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() QRect br(q->boundingRect().toRect()); int widthUsed = calculateTextWidth(); + QDeclarativeTextInput::HAlignment effectiveHAlign = q->effectiveHAlign(); if (autoScroll) { if (widthUsed <= br.width()) { // text fits in br; use hscroll for alignment - switch (hAlign & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { + switch (effectiveHAlign & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) { case Qt::AlignRight: hscroll = widthUsed - br.width() - 1; break; @@ -1261,7 +1318,7 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() hscroll = cix; } } else { - switch (hAlign) { + switch (effectiveHAlign) { case QDeclarativeTextInput::AlignRight: hscroll = q->width() - widthUsed; break; @@ -1276,19 +1333,6 @@ void QDeclarativeTextInputPrivate::updateHorizontalScroll() } } -void QDeclarativeTextInputPrivate::determineHorizontalAlignment() -{ - Q_Q(QDeclarativeTextInput); - if (hAlignImplicit) { - QString text = control->text(); - // if no explicit alignment has been set, follow the natural layout direction of the text - QDeclarativeTextInput::HAlignment previousAlign = hAlign; - hAlign = text.isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft; - if (previousAlign != hAlign) - emit q->horizontalAlignmentChanged(hAlign); - } -} - void QDeclarativeTextInput::drawContents(QPainter *p, const QRect &r) { Q_D(QDeclarativeTextInput); @@ -1874,8 +1918,8 @@ void QDeclarativeTextInput::q_textChanged() { Q_D(QDeclarativeTextInput); updateSize(); - d->updateHorizontalScroll(); d->determineHorizontalAlignment(); + d->updateHorizontalScroll(); updateMicroFocus(); emit textChanged(); emit displayTextChanged(); diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h index ce5f267..8c873b3 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h @@ -71,7 +71,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextInput : public QDeclarativeImplicitSizeP Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged) - + Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged) Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged) Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged) @@ -154,6 +154,7 @@ public: HAlignment hAlign() const; void setHAlign(HAlignment align); void resetHAlign(); + HAlignment effectiveHAlign() const; bool isReadOnly() const; void setReadOnly(bool); @@ -242,6 +243,7 @@ Q_SIGNALS: Q_REVISION(1) void mouseSelectionModeChanged(SelectionMode mode); Q_REVISION(1) void canPasteChanged(); Q_REVISION(1) void inputMethodComposingChanged(); + Q_REVISION(1) void effectiveHorizontalAlignmentChanged(); protected: virtual void geometryChanged(const QRectF &newGeometry, diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h index 60eeb76..fd4da2e 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h @@ -103,7 +103,9 @@ public: void startCreatingCursor(); void focusChanged(bool hasFocus); void updateHorizontalScroll(); - void determineHorizontalAlignment(); + bool determineHorizontalAlignment(); + bool setHAlign(QDeclarativeTextInput::HAlignment, bool forceAlign = false); + void mirrorChange(); int calculateTextWidth(); bool sendMouseEventToInputContext(QGraphicsSceneMouseEvent *event, QEvent::Type eventType); diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index f27fc07..261dc51 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -520,28 +520,57 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() // implicit alignment should follow the reading direction of RTL text QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); // explicitly left aligned text->setHAlign(QDeclarativeText::AlignLeft); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); // explicitly right aligned text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); // explicitly center aligned text->setHAlign(QDeclarativeText::AlignHCenter); QCOMPARE(text->hAlign(), QDeclarativeText::AlignHCenter); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().right() > canvas->width()/2); // reseted alignment should go back to following the text reading direction text->resetHAlign(); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); + // mirror the text item + QDeclarativeItemPrivate::get(text)->setLayoutMirror(true); + + // mirrored implicit alignment should continue to follow the reading direction of the text + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), QDeclarativeText::AlignRight); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); + + // mirrored explicitly right aligned behaves as left aligned + text->setHAlign(QDeclarativeText::AlignRight); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), QDeclarativeText::AlignLeft); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); + + // mirrored explicitly left aligned behaves as right aligned + text->setHAlign(QDeclarativeText::AlignLeft); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QCOMPARE(text->effectiveHAlign(), QDeclarativeText::AlignRight); + QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); + + // disable mirroring + QDeclarativeItemPrivate::get(text)->setLayoutMirror(false); + text->resetHAlign(); + // English text should be implicitly left aligned text->setText("Hello world!"); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index ff52167..973128d 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -469,6 +469,30 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + // mirror the text item + QDeclarativeItemPrivate::get(textEdit)->setLayoutMirror(true); + + // mirrored implicit alignment should continue to follow the reading direction of the text + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->effectiveHAlign(), QDeclarativeTextEdit::AlignRight); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + + // mirrored explicitly right aligned behaves as left aligned + textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->effectiveHAlign(), QDeclarativeTextEdit::AlignLeft); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + + // mirrored explicitly left aligned behaves as right aligned + textEdit->setHAlign(QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->effectiveHAlign(), QDeclarativeTextEdit::AlignRight); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + + // disable mirroring + QDeclarativeItemPrivate::get(textEdit)->setLayoutMirror(false); + textEdit->resetHAlign(); + // English text should be implicitly left aligned textEdit->setText("Hello world!"); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 666bbc8..bcae3fc 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1050,20 +1050,24 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() // implicit alignment should follow the reading direction of RTL text QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); // explicitly left aligned textInput->setHAlign(QDeclarativeTextInput::AlignLeft); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); // explicitly right aligned textInput->setHAlign(QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); // explicitly center aligned textInput->setHAlign(QDeclarativeTextInput::AlignHCenter); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignHCenter); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); QVERIFY(-textInputPrivate->hscroll + textInputPrivate->width() > canvas->width()/2); @@ -1071,8 +1075,34 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() // reseted alignment should go back to following the text reading direction textInput->resetHAlign(); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + // mirror the text item + QDeclarativeItemPrivate::get(textInput)->setLayoutMirror(true); + + // mirrored implicit alignment should continue to follow the reading direction of the text + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + + // explicitly right aligned behaves as left aligned + textInput->setHAlign(QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); + QCOMPARE(textInput->effectiveHAlign(), QDeclarativeTextInput::AlignLeft); + QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + + // mirrored explicitly left aligned behaves as right aligned + textInput->setHAlign(QDeclarativeTextInput::AlignLeft); + QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); + QCOMPARE(textInput->effectiveHAlign(), QDeclarativeTextInput::AlignRight); + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); + + // disable mirroring + QDeclarativeItemPrivate::get(textInput)->setLayoutMirror(false); + QCOMPARE(textInput->effectiveHAlign(), textInput->hAlign()); + textInput->resetHAlign(); + // English text should be implicitly left aligned textInput->setText("Hello world!"); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); -- cgit v0.12 From cc6408ccd5453d1bed9f98b9caa14861cea5742b Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 7 Mar 2011 15:02:01 +1000 Subject: Fix documentation talking about old property LayoutMirror::mirror Task-number: QTBUG-11042 Reviewed-by: Bea Lam Change-Id: I3f842b7672ee57dadbd1ed9216249c36aa527d6a --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- src/declarative/graphicsitems/qdeclarativepositioners.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index e3ec7e2..5c2f781 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1804,7 +1804,7 @@ void QDeclarativeGridView::setLayoutDirection(Qt::LayoutDirection layoutDirectio \qmlproperty enumeration GridView::effectiveLayoutDirection This property holds the effective layout direction of the grid. - When using the attached property \l {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts, the visual layout direction of the grid will be mirrored. However, the property \l {GridView::layoutDirection}{layoutDirection} will remain unchanged. diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 0a54c92..f9f1a48 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2146,7 +2146,7 @@ void QDeclarativeListView::setLayoutDirection(Qt::LayoutDirection layoutDirectio \qmlproperty enumeration ListView::effectiveLayoutDirection This property holds the effective layout direction of the horizontal list. - When using the attached property \l {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts, the visual layout direction of the horizontal list will be mirrored. However, the property \l {ListView::layoutDirection}{layoutDirection} will remain unchanged. diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index c2d0aed..84dcec6 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -619,7 +619,7 @@ void QDeclarativeRow::setLayoutDirection(Qt::LayoutDirection layoutDirection) \qmlproperty enumeration Row::effectiveLayoutDirection This property holds the effective layout direction of the row positioner. - When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts, the visual layout direction of the row positioner will be mirrored. However, the property \l {Row::layoutDirection}{layoutDirection} will remain unchanged. @@ -917,7 +917,7 @@ void QDeclarativeGrid::setLayoutDirection(Qt::LayoutDirection layoutDirection) \qmlproperty enumeration Grid::effectiveLayoutDirection This property holds the effective layout direction of the grid positioner. - When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts, the visual layout direction of the grid positioner will be mirrored. However, the property \l {Grid::layoutDirection}{layoutDirection} will remain unchanged. @@ -1279,7 +1279,7 @@ void QDeclarativeFlow::setLayoutDirection(Qt::LayoutDirection layoutDirection) \qmlproperty enumeration Flow::effectiveLayoutDirection This property holds the effective layout direction of the flow positioner. - When using the attached property {LayoutMirroring::mirror}{LayoutMirroring::mirror} for locale layouts, + When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts, the visual layout direction of the grid positioner will be mirrored. However, the property \l {Flow::layoutDirection}{layoutDirection} will remain unchanged. -- cgit v0.12 From cf264556fdea0d434e329e36c07a0ae6fa974f8b Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Fri, 4 Mar 2011 17:10:47 +0100 Subject: Fix 7ea1dd46966ae7cfa07fa18c001704e3c981b669 for Mac desktop builds. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cocoa.h can't be included after qscroller_p.h, but we need to have Q_WS_MAC defined before the ifdef. Reviewed-by: Morten Johan Sørvig --- src/gui/util/qscroller_mac.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/util/qscroller_mac.mm b/src/gui/util/qscroller_mac.mm index d85a51b..37756d7 100644 --- a/src/gui/util/qscroller_mac.mm +++ b/src/gui/util/qscroller_mac.mm @@ -39,13 +39,14 @@ ** ****************************************************************************/ - -#include "qscroller_p.h" +#include <QtCore/qglobal.h> #ifdef Q_WS_MAC #import <Cocoa/Cocoa.h> +#include "qscroller_p.h" + QPointF QScrollerPrivate::realDpi(int screen) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -- cgit v0.12 From cee7a42f5bf6473cecafc2bf98e9b383cb3edede Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 7 Mar 2011 14:45:24 +0200 Subject: VGImage readback support in QPixmap on OpenVG. Enable readback of pixel data for pixmaps that are constructed directly from a VGImage. These do not have any backing data in main memory (i.e. 'source' is null), however certain operations, like toImage(), fill(), or painting into the pixmap do not work without it. With this patch the data is read back via vgGetImageSubData when needed. Task-number: QT-4669 Reviewed-by: Jani Hautakangas --- src/openvg/qpixmapdata_vg.cpp | 42 +++++++++++---- src/openvg/qpixmapdata_vg_p.h | 9 +++- src/openvg/qvg_symbian.cpp | 2 +- tests/auto/qpixmap/qpixmap.pro | 1 + tests/auto/qpixmap/tst_qpixmap.cpp | 106 +++++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 12 deletions(-) diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index c5da115..47de5ab 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -105,6 +105,8 @@ void QVGPixmapData::destroyImageAndContext() if (vgImage != VG_INVALID_HANDLE) { // We need to have a context current to destroy the image. #if !defined(QT_NO_EGL) + if (!context) + context = qt_vg_create_context(0, QInternal::Pixmap); if (context->isCurrent()) { destroyImages(); } else { @@ -243,10 +245,7 @@ void QVGPixmapData::fill(const QColor &color) { if (!isValid()) return; - - if (source.isNull()) - source = QVolatileImage(w, h, sourceFormat()); - + forceToImage(); if (source.depth() == 1) { // Pick the best approximate color in the image's colortable. int gray = qGray(color.rgba()); @@ -258,13 +257,11 @@ void QVGPixmapData::fill(const QColor &color) } else { source.fill(PREMUL(color.rgba())); } - - // Re-upload the image to VG the next time toVGImage() is called. - recreate = true; } bool QVGPixmapData::hasAlphaChannel() const { + ensureReadback(true); if (!source.isNull()) return source.hasAlphaChannel(); else @@ -273,6 +270,8 @@ bool QVGPixmapData::hasAlphaChannel() const void QVGPixmapData::setAlphaChannel(const QPixmap &alphaChannel) { + if (!isValid()) + return; forceToImage(); source.setAlphaChannel(alphaChannel); } @@ -281,12 +280,11 @@ QImage QVGPixmapData::toImage() const { if (!isValid()) return QImage(); - + ensureReadback(true); if (source.isNull()) { source = QVolatileImage(w, h, sourceFormat()); recreate = true; } - return source.toImage(); } @@ -476,18 +474,42 @@ int QVGPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const } } -// Force the pixmap data to be backed by some valid data. +// Ensures that the pixmap is backed by some valid data and forces the data to +// be re-uploaded to the VGImage when toVGImage() is called next time. void QVGPixmapData::forceToImage() { if (!isValid()) return; + ensureReadback(false); + if (source.isNull()) source = QVolatileImage(w, h, sourceFormat()); recreate = true; } +void QVGPixmapData::ensureReadback(bool readOnly) const +{ + if (vgImage != VG_INVALID_HANDLE && source.isNull()) { + source = QVolatileImage(w, h, sourceFormat()); + source.beginDataAccess(); + vgGetImageSubData(vgImage, source.bits(), source.bytesPerLine(), + qt_vg_image_to_vg_format(source.format()), + 0, 0, w, h); + source.endDataAccess(); + if (readOnly) { + recreate = false; + } else { + // Once we did a readback, the original VGImage must be destroyed + // because it may be shared (e.g. created via SgImage) and a subsequent + // upload of the image data may produce unexpected results. + const_cast<QVGPixmapData *>(this)->destroyImages(); + recreate = true; + } + } +} + QImage::Format QVGPixmapData::sourceFormat() const { return QImage::Format_ARGB32_Premultiplied; diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h index c4fd47f..80ff1cb 100644 --- a/src/openvg/qpixmapdata_vg_p.h +++ b/src/openvg/qpixmapdata_vg_p.h @@ -55,7 +55,7 @@ #include <QtGui/private/qpixmap_raster_p.h> #include <QtGui/private/qvolatileimage_p.h> -#include <private/qvg_p.h> +#include "qvg_p.h" #if defined(Q_OS_SYMBIAN) class RSGImage; @@ -126,6 +126,13 @@ public: // VGImage objects to reuse storage. virtual void reclaimImages(); + // If vgImage is valid but source is null, copies pixel data from GPU back + // into main memory and destroys vgImage. For a normal pixmap this function + // does nothing, however if the pixmap was created directly from a VGImage + // (e.g. via SgImage on Symbian) then by doing the readback this ensures + // that QImage-based functions can operate too. + virtual void ensureReadback(bool readOnly) const; + QSize size() const { return QSize(w, h); } #if defined(Q_OS_SYMBIAN) diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 22cbb3c..c6521fd 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -127,7 +127,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) } is_null = (w <= 0 || h <= 0); - source = QVolatileImage(); // vgGetImageSubData() some day? + source = QVolatileImage(); // readback will be done later, only when needed recreate = false; prevSize = QSize(w, h); updateSerial(); diff --git a/tests/auto/qpixmap/qpixmap.pro b/tests/auto/qpixmap/qpixmap.pro index ff8258f..e6a8257 100644 --- a/tests/auto/qpixmap/qpixmap.pro +++ b/tests/auto/qpixmap/qpixmap.pro @@ -25,6 +25,7 @@ wince*: { LIBS += -lfbscli.dll -lbitgdi.dll -lgdi.dll contains(QT_CONFIG, openvg) { LIBS += $$QMAKE_LIBS_OPENVG + QT *= openvg } } else { DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 62a6eb4..bd9c26f 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -68,6 +68,10 @@ #include <fbs.h> #include <gdi.h> #include <bitdev.h> +#if !defined(QT_NO_OPENVG) +#include <QtOpenVG/qvg.h> +#include <QtOpenVG/private/qpixmapdata_vg_p.h> +#endif #endif #ifdef Q_WS_X11 @@ -185,6 +189,10 @@ private slots: void toImageDeepCopy(); void loadAsBitmapOrPixmap(); + +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) + void vgImageReadBack(); +#endif }; static bool lenientCompare(const QPixmap &actual, const QPixmap &expected) @@ -1767,6 +1775,104 @@ void tst_QPixmap::toImageDeepCopy() QVERIFY(first != second); } +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) +Q_OPENVG_EXPORT VGImage qPixmapToVGImage(const QPixmap& pixmap); +class FriendlyVGPixmapData : public QVGPixmapData +{ +public: + FriendlyVGPixmapData(PixelType type) : QVGPixmapData(type) { } + bool sourceIsNull() { return source.isNull(); } + friend QPixmap pixmapFromVGImage(VGImage image); +}; +QPixmap pixmapFromVGImage(VGImage image) +{ + if (image != VG_INVALID_HANDLE) { + int w = vgGetParameteri(image, VG_IMAGE_WIDTH); + int h = vgGetParameteri(image, VG_IMAGE_HEIGHT); + FriendlyVGPixmapData *pd = new FriendlyVGPixmapData(QPixmapData::PixmapType); + pd->resize(w, h); + pd->vgImage = image; + pd->recreate = false; + pd->prevSize = QSize(pd->w, pd->h); + return QPixmap(pd); + } + return QPixmap(); +} +class Content : public QWidget +{ +public: + void paintEvent(QPaintEvent *) { + QPainter painter(this); + QColor testPixel(qRgb(200, 150, 100)); + if (pm.isNull()) { // first phase: create a VGImage + painter.beginNativePainting(); + vgimage = vgCreateImage(VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER); + QImage img(20, 10, QImage::Format_ARGB32_Premultiplied); + img.fill(qRgb(0, 0, 0)); + QPainter p(&img); + p.fillRect(0, 0, img.width(), img.height(), testPixel); + p.end(); + vgImageSubData(vgimage, img.bits(), img.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, img.width(), img.height()); + // Now the area 0,0 20x10 (in OpenVG coords) is filled with some color. + painter.endNativePainting(); + } else { // second phase: check if readback works + painter.drawPixmap(0, 0, pm); + // Drawing should not cause readback, this is important for performance; + noreadback_ok = static_cast<FriendlyVGPixmapData *>(pm.pixmapData())->sourceIsNull(); + // However toImage() requires readback. + QImage img = pm.toImage(); + readback_ok = img.width() == pm.width(); + readback_ok &= img.height() == pm.height(); + readback_ok &= !static_cast<FriendlyVGPixmapData *>(pm.pixmapData())->sourceIsNull(); + uint pix = img.pixel(1, 1); + content_ok = qRed(pix) == testPixel.red(); + content_ok &= qGreen(pix) == testPixel.green(); + content_ok &= qBlue(pix) == testPixel.blue(); + pix = img.pixel(img.width() - 1, img.height() - 1); + content_ok &= qRed(pix) == 0; + content_ok &= qGreen(pix) == 0; + content_ok &= qBlue(pix) == 0; + } + } + int w; + int h; + VGImage vgimage; + QPixmap pm; + bool noreadback_ok; + bool readback_ok; + bool content_ok; +}; +void tst_QPixmap::vgImageReadBack() +{ + QPixmap tmp(10, 20); + if (tmp.pixmapData()->classId() == QPixmapData::OpenVGClass) { + Content c; + c.w = 50; + c.h = 60; + c.vgimage = VG_INVALID_HANDLE; + c.noreadback_ok = c.readback_ok = c.content_ok = false; + c.showFullScreen(); + QTest::qWaitForWindowShown(&c); + QVERIFY(c.vgimage != VG_INVALID_HANDLE); + QPixmap pm = pixmapFromVGImage(c.vgimage); + QVERIFY(!pm.isNull()); + QCOMPARE(pm.width(), c.w); + QCOMPARE(pm.height(), c.h); + QVERIFY(qPixmapToVGImage(pm) == c.vgimage); + QVERIFY(static_cast<FriendlyVGPixmapData *>(pm.pixmapData())->sourceIsNull()); + c.pm = pm; + // Make sure the second phase in paintEvent is executed too. + c.hide(); + c.showFullScreen(); + QTest::qWaitForWindowShown(&c); + QVERIFY(c.noreadback_ok); + QVERIFY(c.readback_ok); + QVERIFY(c.content_ok); + } else { + QSKIP("Not using openvg graphicssystem", SkipSingle); + } +} +#endif // Symbian & OpenVG QTEST_MAIN(tst_QPixmap) #include "tst_qpixmap.moc" -- cgit v0.12 From 3aad7f4fbdf57efa822c044233cf5b0f580b9ccb Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 7 Mar 2011 14:57:15 +0200 Subject: Updated def files with new QVGPixmapData function. Reviewed-by: TRUSTME --- src/s60installs/bwins/QtOpenVGu.def | 1 + src/s60installs/eabi/QtOpenVGu.def | 1 + 2 files changed, 2 insertions(+) diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def index 4767d93..0bc44e9 100644 --- a/src/s60installs/bwins/QtOpenVGu.def +++ b/src/s60installs/bwins/QtOpenVGu.def @@ -179,4 +179,5 @@ EXPORTS ?updateSerial@QVGPixmapData@@IAEXXZ @ 178 NONAME ; void QVGPixmapData::updateSerial(void) ?copy@QVGPixmapData@@UAEXPBVQPixmapData@@ABVQRect@@@Z @ 179 NONAME ; void QVGPixmapData::copy(class QPixmapData const *, class QRect const &) ?idealFormat@QVGPixmapData@@IBE?AW4Format@QImage@@PAV3@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 180 NONAME ; enum QImage::Format QVGPixmapData::idealFormat(class QImage *, class QFlags<enum Qt::ImageConversionFlag>) const + ?ensureReadback@QVGPixmapData@@UBEX_N@Z @ 181 NONAME ; void QVGPixmapData::ensureReadback(bool) const diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def index 40aac8a..4c01550 100644 --- a/src/s60installs/eabi/QtOpenVGu.def +++ b/src/s60installs/eabi/QtOpenVGu.def @@ -209,4 +209,5 @@ EXPORTS _ZN13QVGPixmapData12updateSerialEv @ 208 NONAME _ZN13QVGPixmapData4copyEPK11QPixmapDataRK5QRect @ 209 NONAME _ZNK13QVGPixmapData11idealFormatEP6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 210 NONAME + _ZNK13QVGPixmapData14ensureReadbackEb @ 211 NONAME -- cgit v0.12 From 1224e6c3f7bbf361f0be2ff5116b5745cb98fb76 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 7 Mar 2011 16:22:23 +0200 Subject: Avoid compiler warnings in openvg on win32. Reviewed-by: TRUSTME --- src/openvg/qpaintengine_vg_p.h | 2 +- src/openvg/qwindowsurface_vgegl.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h index 85583cc..1e9103b 100644 --- a/src/openvg/qpaintengine_vg_p.h +++ b/src/openvg/qpaintengine_vg_p.h @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE -class QFixedPoint; +struct QFixedPoint; class QVGPaintEnginePrivate; class QPixmapData; class QVGEGLWindowSurfacePrivate; diff --git a/src/openvg/qwindowsurface_vgegl.cpp b/src/openvg/qwindowsurface_vgegl.cpp index ca80886..866453f 100644 --- a/src/openvg/qwindowsurface_vgegl.cpp +++ b/src/openvg/qwindowsurface_vgegl.cpp @@ -768,6 +768,11 @@ bool QVGEGLWindowSurfaceDirect::scroll(QWidget *widget, const QRegion& area, int context->lazyDoneCurrent(); return true; } +#else + Q_UNUSED(widget); + Q_UNUSED(area); + Q_UNUSED(dx); + Q_UNUSED(dy); #endif return false; } -- cgit v0.12 From d9afcf0e84e438f89c1a8c5e26da51b06d8f61d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Mon, 7 Mar 2011 17:29:24 +0100 Subject: Lighthouse: Adding Native interface to getting the native eglcontext in xcbplugin. I also reoredered how eglInitialize was executed, (its not so lazy anymore) --- .../eglconvenience/qeglplatformcontext.cpp | 5 +++ .../platforms/eglconvenience/qeglplatformcontext.h | 2 ++ src/plugins/platforms/xcb/qdri2context.cpp | 6 ++++ src/plugins/platforms/xcb/qdri2context.h | 2 ++ src/plugins/platforms/xcb/qxcbconnection.cpp | 16 +++++++++ src/plugins/platforms/xcb/qxcbconnection.h | 15 +++++--- src/plugins/platforms/xcb/qxcbintegration.cpp | 12 +------ src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 40 +++++++++++++++++++++- src/plugins/platforms/xcb/qxcbnativeinterface.h | 4 ++- 9 files changed, 85 insertions(+), 17 deletions(-) diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 4b83a22..22e1bdc 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -155,3 +155,8 @@ QPlatformWindowFormat QEGLPlatformContext::platformWindowFormat() const { return m_windowFormat; } + +EGLContext QEGLPlatformContext::eglContext() const +{ + return m_eglContext; +} diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h index ac53559..9f3aea7 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -59,6 +59,8 @@ public: void makeDefaultSharedContext(); QPlatformWindowFormat platformWindowFormat() const; + + EGLContext eglContext() const; private: EGLContext m_eglContext; EGLDisplay m_eglDisplay; diff --git a/src/plugins/platforms/xcb/qdri2context.cpp b/src/plugins/platforms/xcb/qdri2context.cpp index 44b8fc2..10c9417 100644 --- a/src/plugins/platforms/xcb/qdri2context.cpp +++ b/src/plugins/platforms/xcb/qdri2context.cpp @@ -222,3 +222,9 @@ xcb_dri2_dri2_buffer_t * QDri2Context::backBuffer() return buffers; } + +void * QDri2Context::eglContext() const +{ + Q_D(QDri2Context); + return d->eglContext; +} diff --git a/src/plugins/platforms/xcb/qdri2context.h b/src/plugins/platforms/xcb/qdri2context.h index 5646565..8e4ac89 100644 --- a/src/plugins/platforms/xcb/qdri2context.h +++ b/src/plugins/platforms/xcb/qdri2context.h @@ -24,6 +24,8 @@ public: QPlatformWindowFormat platformWindowFormat() const; + void *eglContext() const; + protected: xcb_dri2_dri2_buffer_t *backBuffer(); QScopedPointer<QDri2ContextPrivate> d_ptr; diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index a2f985e..da60311 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -58,6 +58,10 @@ #include <X11/Xlib-xcb.h> #endif +#ifdef XCB_USE_EGL //dont pull in eglext prototypes +#include <EGL/egl.h> +#endif + #ifdef XCB_USE_DRI2 #include <xcb/dri2.h> #include <xcb/xfixes.h> @@ -87,6 +91,13 @@ QXcbConnection::QXcbConnection(const char *displayName) m_connection = XGetXCBConnection(dpy); XSetEventQueueOwner(dpy, XCBOwnsEventQueue); m_xlib_display = dpy; +#ifdef XCB_USE_EGL + EGLDisplay eglDisplay = eglGetDisplay(dpy); + m_egl_display = eglDisplay; + EGLint major, minor; + eglBindAPI(EGL_OPENGL_ES_API); + m_has_egl = eglInitialize(eglDisplay,&major,&minor); +#endif //XCB_USE_EGL #else m_connection = xcb_connect(m_displayName.constData(), &primaryScreen); @@ -432,6 +443,11 @@ void QXcbConnection::initializeAllAtoms() { m_allAtoms[i] = xcb_intern_atom_reply(xcb_connection(), cookies[i], 0)->atom; } +bool QXcbConnection::hasEgl() const +{ + return m_has_egl; +} + #ifdef XCB_USE_DRI2 void QXcbConnection::initializeDri2() { diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 8a0f3d7..a7fa7fd 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -238,9 +238,14 @@ public: #ifdef XCB_USE_DRI2 bool hasSupportForDri2() const; - void *egl_display() const { return m_egl_display; } QByteArray dri2DeviceName() const { return m_dri2_device_name; } #endif +#ifdef XCB_USE_EGL + bool hasEgl() const; +#endif +#if defined(XCB_USE_EGL) || defined(XCB_USE_DRI2) + void *egl_display() const { return m_egl_display; } +#endif private slots: void eventDispatcher(); @@ -272,15 +277,17 @@ private: uint32_t m_dri2_minor; bool m_dri2_support_probed; bool m_has_support_for_dri2; - void *m_egl_display; QByteArray m_dri2_device_name; #endif - +#if defined(XCB_USE_EGL) || defined(XCB_USE_DRI2) + void *m_egl_display; + bool m_has_egl; +#endif }; #define DISPLAY_FROM_XCB(object) ((Display *)(object->connection()->xlib_display())) -#ifdef XCB_USE_DRI2 +#if defined(XCB_USE_DRI2) || defined(XCB_USE_EGL) #define EGL_DISPLAY_FROM_XCB(object) ((EGLDisplay)(object->connection()->egl_display())) #endif //endifXCB_USE_DRI2 diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index b6df550..0981655 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -127,17 +127,7 @@ bool QXcbIntegration::hasOpenGL() const #if defined(XCB_USE_GLX) return true; #elif defined(XCB_USE_EGL) - static bool eglHasbeenInitialized = false; - static bool wasEglInitialized = false; - if (!eglHasbeenInitialized) { - eglHasbeenInitialized = true; - const QXcbScreen *screen = static_cast<const QXcbScreen *>(m_screens.at(0)); - EGLint major, minor; - eglBindAPI(EGL_OPENGL_ES_API); - EGLDisplay disp = eglGetDisplay((Display*)screen->connection()->xlib_display()); - wasEglInitialized = eglInitialize(disp,&major,&minor); - } - return wasEglInitialized; + return m_connection->hasEgl(); #elif defined(XCB_USE_DRI2) if (m_connection->hasSupportForDri2()) { return true; diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index f379580..8b6678b 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -5,6 +5,14 @@ #include <QtGui/private/qapplication_p.h> #include <QtCore/QMap> +#include <QtCore/QDebug> + +#if defined(XCB_USE_EGL) +#include "../eglconvenience/qeglplatformcontext.h" +#elif defined (XCB_USE_DRI2) +#include "qdri2context.h" +#endif + class QXcbResourceMap : public QMap<QByteArray, QXcbNativeInterface::ResourceType> { public: @@ -16,6 +24,7 @@ public: insert("connection",QXcbNativeInterface::Connection); insert("screen",QXcbNativeInterface::Screen); insert("graphicsdevice",QXcbNativeInterface::GraphicsDevice); + insert("eglcontext",QXcbNativeInterface::EglContext); } }; @@ -42,6 +51,9 @@ void *QXcbNativeInterface::nativeResourceForWidget(const QByteArray &resourceStr case GraphicsDevice: result = graphicsDeviceForWidget(widget); break; + case EglContext: + result = eglContextForWidget(widget); + break; default: result = 0; } @@ -72,7 +84,7 @@ void *QXcbNativeInterface::displayForWidget(QWidget *widget) void *QXcbNativeInterface::eglDisplayForWidget(QWidget *widget) { -#if defined(XCB_USE_DRI2) +#if defined(XCB_USE_DRI2) || defined(XCB_USE_EGL) QXcbScreen *screen = qPlatformScreenForWidget(widget); return screen->connection()->egl_display(); #else @@ -100,7 +112,33 @@ void *QXcbNativeInterface::graphicsDeviceForWidget(QWidget *widget) QByteArray deviceName = screen->connection()->dri2DeviceName(); return deviceName.data(); #else + Q_UNUSED(widget); return 0; #endif } + +void * QXcbNativeInterface::eglContextForWidget(QWidget *widget) +{ + Q_ASSERT(widget); + if (!widget->platformWindow()) { + qDebug() << "QPlatformWindow does not exist for widget" << widget + << "cannot return EGLContext"; + return 0; + } + QPlatformGLContext *platformContext = widget->platformWindow()->glContext(); + if (!platformContext) { + qDebug() << "QPlatformWindow" << widget->platformWindow() << "does not have a glContext" + << "cannot return EGLContext"; + return 0; + } +#if defined(XCB_USE_EGL) + QEGLPlatformContext *eglPlatformContext = static_cast<QEGLPlatformContext *>(platformContext); + return eglPlatformContext->eglContext(); +#elif defined (XCB_USE_DRI2) + QDri2Context *dri2Context = static_cast<QDri2Context *>(platformContext); + return dri2Context->eglContext(); +#else + return 0; +#endif +} diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index 9815381..72c27d5 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -14,7 +14,8 @@ public: EglDisplay, Connection, Screen, - GraphicsDevice + GraphicsDevice, + EglContext }; void *nativeResourceForWidget(const QByteArray &resourceString, QWidget *widget); @@ -24,6 +25,7 @@ public: void *connectionForWidget(QWidget *widget); void *screenForWidget(QWidget *widget); void *graphicsDeviceForWidget(QWidget *widget); + void *eglContextForWidget(QWidget *widget); private: static QXcbScreen *qPlatformScreenForWidget(QWidget *widget); -- cgit v0.12 From 02cde1e6d991d10acd96492d5c5757cf6717ec98 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 7 Mar 2011 15:32:07 +1000 Subject: PinchArea example produced incorrect scaling. The maths was dodgy - producing far greater scaling than that provided by PinchArea. Change-Id: I4a1ee1b0d65eed623ec9ee92c22c9740116430c5 Task-number: QTBUG-17828 Reviewed-by: Michael Brasser --- .../declarative/touchinteraction/pincharea/flickresize.qml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/declarative/touchinteraction/pincharea/flickresize.qml b/examples/declarative/touchinteraction/pincharea/flickresize.qml index a2f81ff..9439ace 100644 --- a/examples/declarative/touchinteraction/pincharea/flickresize.qml +++ b/examples/declarative/touchinteraction/pincharea/flickresize.qml @@ -54,14 +54,21 @@ Rectangle { PinchArea { width: Math.max(flick.contentWidth, flick.width) height: Math.max(flick.contentHeight, flick.height) + + property real initialWidth + property real initialHeight + onPinchStarted: { + initialWidth = flick.contentWidth + initialHeight = flick.contentHeight + } + onPinchUpdated: { // adjust content pos due to drag flick.contentX += pinch.previousCenter.x - pinch.center.x flick.contentY += pinch.previousCenter.y - pinch.center.y // resize content - var scale = 1.0 + pinch.scale - pinch.previousScale - flick.resizeContent(flick.contentWidth * scale, flick.contentHeight * scale, pinch.center) + flick.resizeContent(initialWidth * pinch.scale, initialHeight * pinch.scale, pinch.center) } onPinchFinished: { -- cgit v0.12 From 38a3d51593bb5591c7c4f6d51d7d9fa203b4d56e Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 7 Mar 2011 17:25:44 +1000 Subject: Include dynamic parenting use cases in layout mirroring autotests Task-number: QTBUG-17280 Reviewed-by: Martin Jones Change-Id: Ibbbd2da44d5826b6e499b731eda66b2016bade85 --- src/declarative/graphicsitems/qdeclarativeitem_p.h | 3 +- .../qdeclarativeitem/tst_qdeclarativeitem.cpp | 33 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index b204d7f..dae581c 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -145,10 +145,11 @@ public: if (parent) { QDeclarative_setParent_noEvent(q, parent); q->setParentItem(parent); + QDeclarativeItemPrivate *parentPrivate = QDeclarativeItemPrivate::get(parent); + setImplicitLayoutMirror(parentPrivate->inheritedLayoutMirror, parentPrivate->inheritMirrorFromParent); } baselineOffset.invalidate(); mouseSetsFocus = false; - resolveLayoutMirror(); } bool isMirrored() const { diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 2d14e66..52c9a72 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -518,6 +518,39 @@ void tst_QDeclarativeItem::layoutMirroring() QCOMPARE(childPrivate(rootItem, "inheritedMirror2")->inheritedLayoutMirror, true); QCOMPARE(childPrivate(rootItem, "mirrored1")->inheritedLayoutMirror, true); QCOMPARE(childPrivate(rootItem, "notMirrored1")->inheritedLayoutMirror, true); + + // + // dynamic parenting + // + QDeclarativeItem *parentItem1 = new QDeclarativeItem(); + QDeclarativeItemPrivate::get(parentItem1)->effectiveLayoutMirror = true; // LayoutMirroring.enabled: true + QDeclarativeItemPrivate::get(parentItem1)->isMirrorImplicit = false; + QDeclarativeItemPrivate::get(parentItem1)->inheritMirrorFromItem = true; // LayoutMirroring.childrenInherit: true + QDeclarativeItemPrivate::get(parentItem1)->resolveLayoutMirror(); + + // inherit in constructor + QDeclarativeItem *childItem1 = new QDeclarativeItem(parentItem1); + QCOMPARE(QDeclarativeItemPrivate::get(childItem1)->effectiveLayoutMirror, true); + QCOMPARE(QDeclarativeItemPrivate::get(childItem1)->inheritMirrorFromParent, true); + + // inherit through a parent change + QDeclarativeItem *childItem2 = new QDeclarativeItem(); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->effectiveLayoutMirror, false); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->inheritMirrorFromParent, false); + childItem2->setParentItem(parentItem1); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->effectiveLayoutMirror, true); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->inheritMirrorFromParent, true); + + // stop inherting through a parent change + QDeclarativeItem *parentItem2 = new QDeclarativeItem(); + QDeclarativeItemPrivate::get(parentItem2)->effectiveLayoutMirror = true; // LayoutMirroring.enabled: true + QDeclarativeItemPrivate::get(parentItem2)->resolveLayoutMirror(); + childItem2->setParentItem(parentItem2); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->effectiveLayoutMirror, false); + QCOMPARE(QDeclarativeItemPrivate::get(childItem2)->inheritMirrorFromParent, false); + + delete parentItem1; + delete parentItem2; } void tst_QDeclarativeItem::layoutMirroringIllegalParent() -- cgit v0.12 From a8f7a5067e4c3d1e7ef87a7067e026e62eab5c17 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 8 Mar 2011 08:39:59 +0200 Subject: Support partial input mode By default Symbian devices use fullscreen editing mode. However, in the latest AVKON releases a partial virtual keyboard is supported. Support the non-fullscreen editing mode from QCoeFepInputContext. The non-fullscreen editing mode is only supported for Symbian^3 and only for graphicsview-based solutions (QGraphicsView, QGraphicsWebView, QDeclarativeView, ...). When native side indicates that the keyboard opens, the graphicsview is possibly translated so that the text cursor position is ensured to be visible. When keyboard closes, the translation is removed. If the graphicsview contains vertical scrollbar, the whole view is resized to the area above the keyboard, since translating it, would move the upper part of the scrollbar out of screen area. There is a new exported private API to control when partial vkb is used. Task-number: QTBUG-16572 Reviewed-by: axis Reviewed-by: Mrudul Pendharkar Reviewed-by: Laszlo Agocs --- src/gui/inputmethod/qcoefepinputcontext_p.h | 11 + src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 280 +++++++++++++++++++++++- src/gui/kernel/qapplication_s60.cpp | 56 +++++ src/gui/kernel/qt_s60_p.h | 5 + src/s60installs/bwins/QtGuiu.def | 1 + src/s60installs/eabi/QtGuiu.def | 1 + 6 files changed, 345 insertions(+), 9 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index 8c8ffd4..de3577f 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -93,6 +93,9 @@ public: TCoeInputCapabilities inputCapabilities(); + void resetSplitViewWidget(bool keepInputWidget = false); + void ensureFocusWidgetVisible(QWidget *widget); + protected: void timerEvent(QTimerEvent *timerEvent); @@ -104,9 +107,11 @@ private: void queueInputCapabilitiesChanged(); bool needsInputPanel(); void commitTemporaryPreeditString(); + bool isWidgetVisible(QWidget *widget, int offset = 0); private Q_SLOTS: void ensureInputCapabilitiesChanged(); + void translateInputWidget(); // From MCoeFepAwareTextEditor public: @@ -155,9 +160,15 @@ private: QBasicTimer m_tempPreeditStringTimeout; bool m_hasTempPreeditString; + int m_splitViewResizeBy; + Qt::WindowStates m_splitViewPreviousWindowStates; + QRectF m_transformation; + friend class tst_QInputContext; }; +Q_GUI_EXPORT void qt_s60_setPartialScreenInputMode(bool enable); + QT_END_NAMESPACE #endif // QT_NO_IM diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 1bef64d..cd4e2fd 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -48,6 +48,8 @@ #include <qgraphicsscene.h> #include <qgraphicswidget.h> #include <qsymbianevent.h> +#include <qlayout.h> +#include <qdesktopwidget.h> #include <private/qcore_symbian_p.h> #include <fepitfr.h> @@ -67,8 +69,16 @@ // that support text selection. #define QT_EAknEditorFlagSelectionVisible 0x100000 +// EAknEditorFlagEnablePartialScreen is only valid from Sym^3 onwards. +#define QT_EAknEditorFlagEnablePartialScreen 0x200000 + QT_BEGIN_NAMESPACE +Q_GUI_EXPORT void qt_s60_setPartialScreenInputMode(bool enable) +{ + S60->partial_keyboard = enable; +} + QCoeFepInputContext::QCoeFepInputContext(QObject *parent) : QInputContext(parent), m_fepState(q_check_ptr(new CAknEdwinState)), // CBase derived object needs check on new @@ -80,13 +90,19 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_inlinePosition(0), m_formatRetriever(0), m_pointerHandler(0), - m_hasTempPreeditString(false) + m_hasTempPreeditString(false), + m_splitViewResizeBy(0), + m_splitViewPreviousWindowStates(Qt::WindowNoState) { m_fepState->SetObjectProvider(this); - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) - m_fepState->SetFlags(EAknEditorFlagDefault | QT_EAknEditorFlagSelectionVisible); - else - m_fepState->SetFlags(EAknEditorFlagDefault); + int defaultFlags = EAknEditorFlagDefault; + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) { + if (S60->partial_keyboard) { + defaultFlags |= QT_EAknEditorFlagEnablePartialScreen; + } + defaultFlags |= QT_EAknEditorFlagSelectionVisible; + } + m_fepState->SetFlags(defaultFlags); m_fepState->SetDefaultInputMode( EAknEditorTextInputMode ); m_fepState->SetPermittedInputModes( EAknEditorAllInputModes ); m_fepState->SetDefaultCase( EAknEditorTextCase ); @@ -210,6 +226,21 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) return false; switch (event->type()) { + case QEvent::MouseButtonPress: + // Alphanumeric keypad doesn't like it when we click and text is still getting displayed + // It ignores the mouse event, so we need to commit and send a selection event (which will get triggered + // after the commit) + if (!m_preeditString.isEmpty()) { + commitCurrentString(false); + + int pos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); + + QList<QInputMethodEvent::Attribute> selectAttributes; + selectAttributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, pos, 0, QVariant()); + QInputMethodEvent selectEvent(QLatin1String(""), selectAttributes); + sendEvent(selectEvent); + } + break; case QEvent::KeyPress: commitTemporaryPreeditString(); // fall through intended @@ -299,6 +330,26 @@ bool QCoeFepInputContext::symbianFilterEvent(QWidget *keyWidget, const QSymbianE // This should also happen for commands. reset(); + // We need to translate the window content when window becomes available. Changing the window while it is + // not yet ready with OpenVg graphicssystem results in operations silently failing. + + if (event->windowServerEvent() && event->windowServerEvent()->Type() == EEventWindowVisibilityChanged) { + if (S60->splitViewLastWidget) { + QGraphicsView *gv = qobject_cast<QGraphicsView*>(S60->splitViewLastWidget); + const bool alwaysResize = (gv && gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); + TUint visibleFlags = event->windowServerEvent()->VisibilityChanged()->iFlags; + if (!alwaysResize) { + if (visibleFlags & TWsVisibilityChangedEvent::EPartiallyVisible) { + if (!isWidgetVisible(S60->splitViewLastWidget)) { + ensureFocusWidgetVisible(S60->splitViewLastWidget); + } + } else if (visibleFlags & TWsVisibilityChangedEvent::ENotVisible) { + resetSplitViewWidget(true); + } + } + } + } + return false; } @@ -343,6 +394,174 @@ TCoeInputCapabilities QCoeFepInputContext::inputCapabilities() return TCoeInputCapabilities(m_textCapabilities, this, 0); } +void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) +{ + QGraphicsView *gv = qobject_cast<QGraphicsView*>(S60->splitViewLastWidget); + + if (!gv) { + return; + } + + QSymbianControl *symControl = static_cast<QSymbianControl*>(S60->splitViewLastWidget->effectiveWinId()); + symControl->CancelLongTapTimer(); + + const bool alwaysResize = (gv && gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); + QWidget *windowToMove = gv ? gv : symControl->widget(); + if (!S60->splitViewLastWidget->isWindow()) + windowToMove = S60->splitViewLastWidget->window(); + + bool userResize = S60->splitViewLastWidget->testAttribute(Qt::WA_Resized); + bool userMove = windowToMove->testAttribute(Qt::WA_Moved); + + if (gv) + windowToMove->setUpdatesEnabled(false); + + if (gv && !alwaysResize) { + disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + if (gv && gv->scene()) { + QGraphicsItem *rootItem; + foreach (QGraphicsItem *item, gv->scene()->items()) { + if (!item->parentItem()) { + rootItem = item; + break; + } + } + if (rootItem) + rootItem->resetTransform(); + } + } + + // Resizing might have led to widget losing its original windowstate. + // Restore previous window state. + + if (m_splitViewPreviousWindowStates != windowToMove->windowState()) + windowToMove->setWindowState(m_splitViewPreviousWindowStates); + + if (m_splitViewResizeBy) + S60->splitViewLastWidget->updateGeometry(); + if (gv) + windowToMove->setUpdatesEnabled(true); + + S60->splitViewLastWidget->setAttribute(Qt::WA_Resized, userResize); //not a user resize + windowToMove->setAttribute(Qt::WA_Moved, userMove); //not a user move + + m_splitViewResizeBy = 0; + if (!keepInputWidget) { + m_splitViewPreviousWindowStates = Qt::WindowNoState; + S60->splitViewLastWidget = 0; + } +} + +// Checks if a given widget is visible in the splitview rect. The offset +// parameter can be used to validate if moving widget upwards or downwards +// by the offset would make a difference for the visibility. + +bool QCoeFepInputContext::isWidgetVisible(QWidget *widget, int offset) +{ + bool visible = false; + if (widget) { + QRect splitViewRect = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + QWidget *window = QApplication::activeWindow(); + QGraphicsView *gv = qobject_cast<QGraphicsView*>(widget); + if (gv && window) { + if (QGraphicsScene *scene = gv->scene()) { + if (QGraphicsItem *focusItem = scene->focusItem()) { + QPoint cursorPos = window->mapToGlobal(focusItem->cursor().pos()); + cursorPos.setY(cursorPos.y() + offset); + if (splitViewRect.contains(cursorPos)) { + visible = true; + } + } + } + } + } + return visible; +} + +// Ensure that the input widget is visible in the splitview rect. + +void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) +{ + // Native side opening and closing its virtual keyboard when it changes the keyboard layout, + // has an adverse impact on long tap timer. Cancel the timer when splitview opens to avoid this. + QSymbianControl *symControl = static_cast<QSymbianControl*>(widget->effectiveWinId()); + symControl->CancelLongTapTimer(); + + // Graphicsviews that have vertical scrollbars should always be resized to the splitview area. + // Graphicsviews without scrollbars should be translated. + + QGraphicsView *gv = qobject_cast<QGraphicsView*>(widget); + if (!gv) + return; + + const bool alwaysResize = (gv && gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); + const bool moveWithinVisibleArea = (S60->splitViewLastWidget != 0); + + QWidget *windowToMove = gv ? gv : symControl->widget(); + if (!windowToMove->isWindow()) + windowToMove = windowToMove->window(); + if (!windowToMove) { + return; + } + + // When opening the keyboard (not moving within the splitview area), save the original + // window state. In some cases, ensuring input widget visibility might lead to window + // states getting changed. + + if (!moveWithinVisibleArea) { + S60->splitViewLastWidget = widget; + m_splitViewPreviousWindowStates = windowToMove->windowState(); + } + + int windowTop = widget->window()->pos().y(); + + const bool userResize = widget->testAttribute(Qt::WA_Resized); + const bool userMove = windowToMove->testAttribute(Qt::WA_Moved); + + QRect splitViewRect = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + + if (gv) { + + // When resizing a window widget, it will lose its maximized window state. + // Native applications hide statuspane in splitview state, so lets move to + // fullscreen mode. This makes available area slightly bigger, which helps usability + // and greatly reduces event passing in orientation switch cases, + // as the statuspane size is not changing. + + if (!(windowToMove->windowState() & Qt::WindowFullScreen)) { + widget->setWindowState( + (windowToMove->windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowFullScreen); + } + + if (alwaysResize) { + windowToMove->setUpdatesEnabled(false); + if (!moveWithinVisibleArea) + m_splitViewResizeBy = widget->height(); + + windowTop = widget->geometry().top(); + widget->resize(widget->width(), splitViewRect.height() - windowTop); + + if (gv && gv->scene()) { + const QRectF microFocusRect = gv->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF(); + gv->ensureVisible(microFocusRect); + } + windowToMove->setUpdatesEnabled(true); + } else { + if (!moveWithinVisibleArea) { + // Check if the widget contains cursorPositionChanged signal and connect to it. + const char *signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())).constData(); + int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal + 1); + if (index != -1) + connect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + } + translateInputWidget(); + } + } + + widget->setAttribute(Qt::WA_Resized, userResize); //not a user resize + windowToMove->setAttribute(Qt::WA_Moved, userMove); //not a user move +} + static QTextCharFormat qt_TCharFormat2QTextCharFormat(const TCharFormat &cFormat, bool validStyleColor) { QTextCharFormat qFormat; @@ -474,10 +693,12 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) m_fepState->SetPermittedCases(flags); ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateCaseModeUpdate); - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) - flags = QT_EAknEditorFlagSelectionVisible; - else - flags = 0; + flags = 0; + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) { + if (S60->partial_keyboard) + flags |= QT_EAknEditorFlagEnablePartialScreen; + flags |= QT_EAknEditorFlagSelectionVisible; + } if (hints & ImhUppercaseOnly && !(hints & ImhLowercaseOnly) || hints & ImhLowercaseOnly && !(hints & ImhUppercaseOnly)) { flags |= EAknEditorFlagFixedCase; @@ -604,6 +825,47 @@ void QCoeFepInputContext::ensureInputCapabilitiesChanged() m_pendingInputCapabilitiesChanged = false; } +void QCoeFepInputContext::translateInputWidget() +{ + QGraphicsView *gv = qobject_cast<QGraphicsView *>(S60->splitViewLastWidget); + QRect splitViewRect = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + + QRectF cursor = gv->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF(); + QPolygon cursorP = gv->mapFromScene(cursor); + QRectF vkbRect = QRectF(splitViewRect.bottomLeft(), qApp->desktop()->rect().bottomRight()); + if (cursor.isEmpty() || vkbRect.isEmpty()) + return; + + // Fetch root item (i.e. graphicsitem with no parent) + QGraphicsItem *rootItem; + foreach (QGraphicsItem *item, gv->scene()->items()) { + if (!item->parentItem()) { + rootItem = item; + break; + } + } + if (!rootItem) + return; + + m_transformation = (rootItem->transform().isTranslating()) ? QRectF(0,0, gv->width(), rootItem->transform().dy()) : QRectF(); + + // Do nothing if the cursor is visible in the splitview area. + if (splitViewRect.contains(cursorP.boundingRect())) + return; + + // New Y position should be ideally at the center of the splitview area. + // If that would expose unpainted canvas, limit the tranformation to the visible scene bottom. + + const qreal maxY = gv->sceneRect().bottom() - splitViewRect.bottom() + m_transformation.height(); + qreal dy = -(qMin(maxY, (cursor.bottom() - vkbRect.top() / 2))); + + // Do not allow transform above screen top. + if (m_transformation.height() + dy > 0) + return; + + rootItem->setTransform(QTransform::fromTranslate(0, dy), true); +} + void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, TInt aPositionOfInsertionPointInInlineText, TBool aCursorVisibility, const MFormCustomDraw* /*aCustomDraw*/, MFepInlineTextFormatRetriever& aInlineTextFormatRetriever, diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index fb0c6b8..02560b3 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -96,6 +96,10 @@ QT_BEGIN_NAMESPACE // Goom Events through Window Server static const int KGoomMemoryLowEvent = 0x10282DBF; static const int KGoomMemoryGoodEvent = 0x20026790; +// Split view open/close events from AVKON +static const int KSplitViewOpenEvent = 0x2001E2C0; +static const int KSplitViewCloseEvent = 0x2001E2C1; + #if defined(QT_DEBUG) static bool appNoGrab = false; // Grabbing enabled @@ -1224,6 +1228,11 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) if (m_ignoreFocusChanged || (qwidget->windowType() & Qt::WindowType_Mask) == Qt::Desktop) return; +#ifdef Q_WS_S60 + if (S60->splitViewLastWidget) + return; +#endif + // Popups never get focused, but still receive the FocusChanged when they are hidden. if (QApplicationPrivate::popupWidgets != 0 || (qwidget->windowType() & Qt::Popup) == Qt::Popup) @@ -1302,9 +1311,56 @@ void QSymbianControl::handleClientAreaChange() } } +bool QSymbianControl::isSplitViewWidget(QWidget *widget) { + bool returnValue = true; + //Ignore events sent to non-active windows, not visible widgets and not parents of input widget. + if (!qwidget->isActiveWindow() + || !qwidget->isVisible() + || !qwidget->isAncestorOf(widget)) { + + returnValue = false; + } + return returnValue; +} + void QSymbianControl::HandleResourceChange(int resourceType) { switch (resourceType) { + case KSplitViewCloseEvent: //intentional fall-through + case KSplitViewOpenEvent: { +#if !defined(QT_NO_IM) && defined(Q_WS_S60) + + //Fetch widget getting the text input + QWidget *widget = QWidget::keyboardGrabber(); + if (!widget) { + if (QApplicationPrivate::popupWidgets) { + widget = QApplication::activePopupWidget()->focusWidget(); + if (!widget) { + widget = QApplication::activePopupWidget(); + } + } else { + widget = QApplicationPrivate::focus_widget; + if (!widget) { + widget = qwidget; + } + } + } + if (widget) { + QCoeFepInputContext *ic = qobject_cast<QCoeFepInputContext *>(widget->inputContext()); + if (!ic) { + ic = qobject_cast<QCoeFepInputContext *>(qApp->inputContext()); + } + if (ic && isSplitViewWidget(widget)) { + if (resourceType == KSplitViewCloseEvent) { + ic->resetSplitViewWidget(); + } else { + ic->ensureFocusWidgetVisible(widget); + } + } + } +#endif // !defined(QT_NO_IM) && defined(Q_WS_S60) + } + break; case KInternalStatusPaneChange: handleClientAreaChange(); if (IsFocused() && IsVisible()) { diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 40697bf..1e9967f 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -142,7 +142,10 @@ public: int avkonComponentsSupportTransparency : 1; int menuBeingConstructed : 1; int orientationSet : 1; + int partial_keyboard : 1; QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type + QPointer<QWidget> splitViewLastWidget; + static CEikButtonGroupContainer *cba; enum ScanCodeState { @@ -252,6 +255,7 @@ private: #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event); #endif + bool isSplitViewWidget(QWidget *widget); public: void handleClientAreaChange(); @@ -297,6 +301,7 @@ inline QS60Data::QS60Data() avkonComponentsSupportTransparency(0), menuBeingConstructed(0), orientationSet(0), + partial_keyboard(0), s60ApplicationFactory(0) #ifdef Q_OS_SYMBIAN ,s60InstalledTrapHandler(0) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 0650a6a..26a0761 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12980,4 +12980,5 @@ EXPORTS ??0QVolatileImage@@QAE@ABV0@@Z @ 12979 NONAME ; QVolatileImage::QVolatileImage(class QVolatileImage const &) ?depth@QVolatileImage@@QBEHXZ @ 12980 NONAME ; int QVolatileImage::depth(void) const ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ; void QGraphicsSystem::releaseCachedResources(void) + ?qt_s60_setPartialScreenInputMode@@YAX_N@Z @ 12982 NONAME ; void qt_s60_setPartialScreenInputMode(bool) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 39f1459..29db74e 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12181,4 +12181,5 @@ EXPORTS _ZNK14QVolatileImage9byteCountEv @ 12180 NONAME _ZNK14QVolatileImage9constBitsEv @ 12181 NONAME _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME + _Z32qt_s60_setPartialScreenInputModeb @ 12149 NONAME -- cgit v0.12 From 54de06c6f3bd7ef74a10bfab9bff5416078edd6f Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 8 Mar 2011 14:33:29 +1000 Subject: Base empty QML editor horizontal alignment on QApplication::keyboardInputDirection() Task-number: QTBUG-15880 Reviewed-by: Martin Jones Change-Id: I240d53c8572fd3d1222b555e93812a3ee38e2558 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 3 ++- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 3 ++- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 5 ++++- .../declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 6 ++++-- .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 11 ++++++++--- .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 11 ++++++++--- 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 4a931fd..f0d0221 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -1120,7 +1120,8 @@ bool QDeclarativeTextPrivate::determineHorizontalAlignment() Q_Q(QDeclarativeText); if (hAlignImplicit && q->isComponentComplete()) { // if no explicit alignment has been set, follow the natural layout direction of the text - return setHAlign(text.isRightToLeft() ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft); + bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); + return setHAlign(isRightToLeft ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft); } return false; } diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 75a22d1..d1d2351 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -550,7 +550,8 @@ bool QDeclarativeTextEditPrivate::determineHorizontalAlignment() Q_Q(QDeclarativeTextEdit); if (hAlignImplicit && q->isComponentComplete()) { // if no explicit alignment has been set, follow the natural layout direction of the text - return setHAlign(text.isRightToLeft() ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); + bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); + return setHAlign(isRightToLeft ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); } return false; } diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 6305eaa..850c212 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -411,7 +411,9 @@ bool QDeclarativeTextInputPrivate::determineHorizontalAlignment() { if (hAlignImplicit) { // if no explicit alignment has been set, follow the natural layout direction of the text - return setHAlign(control->text().isRightToLeft() ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft); + QString text = control->text(); + bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); + return setHAlign(isRightToLeft ? QDeclarativeTextInput::AlignRight : QDeclarativeTextInput::AlignLeft); } return false; } @@ -1872,6 +1874,7 @@ void QDeclarativeTextInputPrivate::init() QPalette p = control->palette(); selectedTextColor = p.color(QPalette::HighlightedText); selectionColor = p.color(QPalette::Highlight); + determineHorizontalAlignment(); } void QDeclarativeTextInput::cursorPosChanged() diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 261dc51..c854f86 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -576,9 +576,11 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); - // empty text is also implicitly left aligned + // empty text with implicit alignment follows the system locale-based + // keyboard input direction from QApplication::keyboardInputDirection text->setText(""); - QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QCOMPARE(text->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeText::AlignLeft : QDeclarativeText::AlignRight); text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 7a0ca12..4d94dae 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -500,10 +500,15 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); - // empty text is also implicitly left aligned + // empty text with implicit alignment follows the system locale-based + // keyboard input direction from QApplication::keyboardInputDirection textEdit->setText(""); - QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); - QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + QCOMPARE(textEdit->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeTextEdit::AlignLeft : QDeclarativeTextEdit::AlignRight); + if (QApplication::keyboardInputDirection() == Qt::LeftToRight) + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + else + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 5c8b59c..caada13 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1110,10 +1110,15 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); - // empty text is also implicitly left aligned + // empty text with implicit alignment follows the system locale-based + // keyboard input direction from QApplication::keyboardInputDirection textInput->setText(""); - QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); - QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + QCOMPARE(textInput->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeTextInput::AlignLeft : QDeclarativeTextInput::AlignRight); + if (QApplication::keyboardInputDirection() == Qt::LeftToRight) + QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); + else + QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); textInput->setHAlign(QDeclarativeTextInput::AlignRight); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); -- cgit v0.12 From 0b2983f9339f1003159f3a746491928f74b593ba Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 8 Mar 2011 15:30:36 +1000 Subject: Fix TextInput key navigation for RTL text Task-number: QTBUG-15882 Reviewed-by: Martin Jones Change-Id: I77c02de3bcd1a1d05dfcdd71327da45182050071 --- .../graphicsitems/qdeclarativetextinput.cpp | 4 +-- .../tst_qdeclarativetextinput.cpp | 40 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 850c212..6c26fd3 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1068,9 +1068,9 @@ void QDeclarativeTextInput::keyPressEvent(QKeyEvent* ev) // because then moving will do something (deselect). int cursorPosition = d->control->cursor(); if (cursorPosition == 0) - ignore = ev->key() == (d->control->text().mid(cursorPosition,1).isRightToLeft() ? Qt::Key_Right : Qt::Key_Left); + ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Left : Qt::Key_Right); if (cursorPosition == d->control->text().length()) - ignore = ev->key() == (d->control->text().mid(cursorPosition-1,1).isRightToLeft() ? Qt::Key_Left : Qt::Key_Right); + ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Right : Qt::Key_Left); } if (ignore) { ev->ignore(); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index caada13..fc19c94 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -115,6 +115,7 @@ private slots: void cursorVisible(); void cursorRectangle(); void navigation(); + void navigation_RTL(); void copyAndPaste(); void canPasteEmpty(); void canPaste(); @@ -1435,6 +1436,45 @@ void tst_qdeclarativetextinput::navigation() delete canvas; } +void tst_qdeclarativetextinput::navigation_RTL() +{ + QDeclarativeView *canvas = createView(SRCDIR "/data/navigation.qml"); + canvas->show(); + canvas->setFocus(); + + QVERIFY(canvas->rootObject() != 0); + + QDeclarativeTextInput *input = qobject_cast<QDeclarativeTextInput *>(qvariant_cast<QObject *>(canvas->rootObject()->property("myInput"))); + + QVERIFY(input != 0); + const quint16 arabic_str[] = { 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0638, 0x0643, 0x00646, 0x0647, 0x0633, 0x0647}; + input->setText(QString::fromUtf16(arabic_str, 11)); + + input->setCursorPosition(0); + QTRY_VERIFY(input->hasActiveFocus() == true); + + // move off + simulateKey(canvas, Qt::Key_Right); + QVERIFY(input->hasActiveFocus() == false); + + // move back + simulateKey(canvas, Qt::Key_Left); + QVERIFY(input->hasActiveFocus() == true); + + input->setCursorPosition(input->text().length()); + QVERIFY(input->hasActiveFocus() == true); + + // move off + simulateKey(canvas, Qt::Key_Left); + QVERIFY(input->hasActiveFocus() == false); + + // move back + simulateKey(canvas, Qt::Key_Right); + QVERIFY(input->hasActiveFocus() == true); + + delete canvas; +} + void tst_qdeclarativetextinput::copyAndPaste() { #ifndef QT_NO_CLIPBOARD -- cgit v0.12 From f47f01fd34d08f6152c9053c0d6928fc359aa0f9 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 8 Mar 2011 14:55:56 +1000 Subject: Use the text layout bounds calculated by QLayout. We used to calculate the size and position of the cache image ourselves. Rather use the line positions and bounding rect calculated by QLayout. Change-Id: I601688ab7e310b0015a1994adf52b108f39504d8 Reviewed-by: Joona Petrell --- src/declarative/graphicsitems/qdeclarativetext.cpp | 73 +++++++++------------- .../graphicsitems/qdeclarativetext_p_p.h | 4 +- .../qdeclarativetext/tst_qdeclarativetext.cpp | 6 +- 3 files changed, 34 insertions(+), 49 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index f0d0221..6bcd2fa 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -282,11 +282,11 @@ void QDeclarativeTextPrivate::updateSize() //setup instance of QTextLayout for all cases other than richtext if (!richText) { - size = setupTextLayout(); - if (layedOutTextSize != size) { + QRect textRect = setupTextLayout(); + if (layedOutTextRect.size() != textRect.size()) q->prepareGeometryChange(); - layedOutTextSize = size; - } + layedOutTextRect = textRect; + size = textRect.size(); dy -= size.height(); } else { singleline = false; // richtext can't elide or be optimized for single-line case @@ -306,9 +306,9 @@ void QDeclarativeTextPrivate::updateSize() doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug) dy -= (int)doc->size().height(); QSize dsize = doc->size().toSize(); - if (dsize != layedOutTextSize) { + if (dsize != layedOutTextRect.size()) { q->prepareGeometryChange(); - layedOutTextSize = dsize; + layedOutTextRect = QRect(QPoint(0,0), dsize); } size = QSize(int(doc->idealWidth()),dsize.height()); } @@ -343,14 +343,13 @@ void QDeclarativeTextPrivate::updateSize() Returns the size of the final text. This can be used to position the text vertically (the text is already absolutely positioned horizontally). */ -QSize QDeclarativeTextPrivate::setupTextLayout() +QRect QDeclarativeTextPrivate::setupTextLayout() { // ### text layout handling should be profiled and optimized as needed // what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine); Q_Q(QDeclarativeText); layout.setCacheEnabled(true); - qreal widthUsed = 0; qreal lineWidth = 0; int visibleCount = 0; @@ -378,11 +377,12 @@ QSize QDeclarativeTextPrivate::setupTextLayout() break; } layout.endLayout(); - naturalWidth = 0; + QRectF br; for (int i = 0; i < layout.lineCount(); ++i) { QTextLine line = layout.lineAt(i); - naturalWidth = qMax(naturalWidth, line.naturalTextWidth()); + br = br.united(line.naturalTextRect()); } + naturalWidth = br.width(); } if (maximumLineCountValid) { @@ -440,19 +440,21 @@ QSize QDeclarativeTextPrivate::setupTextLayout() } qreal height = 0; + QRectF br; for (int i = 0; i < layout.lineCount(); ++i) { QTextLine line = layout.lineAt(i); - // calc width - widthUsed = qMax(widthUsed, line.naturalTextRect().right()); // set line spacing line.setPosition(QPointF(line.position().x(), height)); - if (elideText && i == layout.lineCount()-1) + if (elideText && i == layout.lineCount()-1) { elidePos.setY(height + fm.ascent()); + br = br.united(QRectF(elidePos, QSizeF(fm.width(elideChar), fm.ascent()))); + } + br = br.united(line.naturalTextRect()); height += (lineHeightMode == QDeclarativeText::FixedHeight) ? lineHeight : line.height() * lineHeight; } if (!q->widthValid()) - naturalWidth = widthUsed; + naturalWidth = br.width(); //Update the number of visible lines if (lineCount != visibleCount) { @@ -460,7 +462,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() emit q->lineCountChanged(); } - return QSize(qCeil(widthUsed), qCeil(height)); + return QRect(qRound(br.x()), qRound(br.y()), qCeil(br.width()), qCeil(br.height())); } /*! @@ -470,7 +472,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle) { //do layout - QSize size = layedOutTextSize; + QSize size = layedOutTextRect.size(); //paint text QPixmap img(size); if (!size.isEmpty()) { @@ -483,7 +485,7 @@ QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle) #ifdef Q_WS_MAC qt_applefontsmoothing_enabled = oldSmooth; #endif - drawTextLayout(&p, QPointF(0,0), drawStyle); + drawTextLayout(&p, QPointF(-layedOutTextRect.x(),0), drawStyle); } return img; } @@ -501,7 +503,7 @@ void QDeclarativeTextPrivate::drawTextLayout(QPainter *painter, const QPointF &p painter->setFont(font); layout.draw(painter, pos); if (!elidePos.isNull()) - painter->drawText(elidePos, elideChar); + painter->drawText(pos + elidePos, elideChar); } /*! @@ -1388,44 +1390,25 @@ QRectF QDeclarativeText::boundingRect() const { Q_D(const QDeclarativeText); - int w = width(); - int h = height(); - - int x = 0; - int y = 0; - - QSize size = d->layedOutTextSize; + QRect rect = d->layedOutTextRect; if (d->style != Normal) - size += QSize(2,2); + rect.adjust(-1, 0, 1, 2); // Could include font max left/right bearings to either side of rectangle. - switch (d->hAlign) { - case AlignLeft: - case AlignJustify: - x = 0; - break; - case AlignRight: - x = w - size.width(); - break; - case AlignHCenter: - x = (w - size.width()) / 2; - break; - } - + int h = height(); switch (d->vAlign) { case AlignTop: - y = 0; break; case AlignBottom: - y = h - size.height(); + rect.setY(h - rect.height()); break; case AlignVCenter: - y = (h - size.height()) / 2; + rect.setY((h - rect.height()) / 2); break; } - return QRectF(x,y,size.width(),size.height()); + return QRectF(rect); } /*! \internal */ @@ -1571,8 +1554,8 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid } else { QRectF bounds = boundingRect(); - bool needClip = clip() && (d->layedOutTextSize.width() > width() || - d->layedOutTextSize.height() > height()); + bool needClip = clip() && (d->layedOutTextRect.width() > width() || + d->layedOutTextRect.height() > height()); if (needClip) { p->save(); diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 0864c8f..2e154a0 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -115,7 +115,7 @@ public: bool requireImplicitWidth:1; bool hAlignImplicit:1; - QSize layedOutTextSize; + QRect layedOutTextRect; QSize paintedSize; qreal naturalWidth; virtual qreal implicitWidth() const; @@ -123,7 +123,7 @@ public: QPixmap textDocumentImage(bool drawStyle); QTextDocumentWithImageResources *doc; - QSize setupTextLayout(); + QRect setupTextLayout(); QPixmap textLayoutImage(bool drawStyle); void drawTextLayout(QPainter *p, const QPointF &pos, bool drawStyle); QDeclarativeTextLayout layout; diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index c854f86..9c12a90 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -1156,12 +1156,14 @@ void tst_qdeclarativetext::lineHeight() QVERIFY(myText->lineHeightMode() == QDeclarativeText::ProportionalHeight); qreal h = myText->height(); + int lc = myText->lineCount(); + qreal lh = myText->height() / lc; myText->setLineHeight(1.5); - QVERIFY(myText->height() == h * 1.5); + QVERIFY(qAbs(myText->height() - (((lc-1) * lh * 1.5) + lh)) < 1.0); myText->setLineHeightMode(QDeclarativeText::FixedHeight); myText->setLineHeight(20); - QCOMPARE(myText->height(), myText->lineCount() * 20.0); + QCOMPARE(myText->height(), ((lc-1) * 20.0) + lh); myText->setText("Lorem ipsum sit <b>amet</b>, consectetur adipiscing elit. Integer felis nisl, varius in pretium nec, venenatis non erat. Proin lobortis interdum dictum."); myText->setLineHeightMode(QDeclarativeText::ProportionalHeight); -- cgit v0.12 From cb7ce0b2cb0f47e7ef51e7c7f034dda39cc410ad Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 8 Mar 2011 16:50:15 +0200 Subject: Correcting incorrect ordinal introduced by the split view changes. Reviewed-by: TRUSTME --- src/s60installs/eabi/QtGuiu.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 29db74e..b6a24ab 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12181,5 +12181,5 @@ EXPORTS _ZNK14QVolatileImage9byteCountEv @ 12180 NONAME _ZNK14QVolatileImage9constBitsEv @ 12181 NONAME _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME - _Z32qt_s60_setPartialScreenInputModeb @ 12149 NONAME + _Z32qt_s60_setPartialScreenInputModeb @ 12183 NONAME -- cgit v0.12 From a870c5e10fe83b6b8df254ec760ac50020738aaa Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 8 Mar 2011 16:59:31 +0200 Subject: Added native image handle provider support in pixmaps on openvg. QNativeImageHandleProvider is a thin interface consisting of get() and release() functions. Pixmaps constructed with such a provider will call these functions to acquire and release a native handle, e.g. a CFbsBitmap or RSgImage pointer in case of Symbian. The behavior is largely similar to constructing pixmaps via fromSymbianCFbsBitmap or fromSymbianRSgImage, with the exception of pixmap hibernation: release() (and subsequently get()) is guaranteed to be called also in case of hibernation, allowing more fine-grained tracking of the usage and lifetime of image data. Task-number: QT-4632 Reviewed-by: Jani Hautakangas --- src/gui/image/image.pri | 3 +- src/gui/image/qpixmapdata_p.h | 3 +- src/openvg/qpixmapdata_vg.cpp | 37 +++- src/openvg/qpixmapdata_vg_p.h | 11 + src/openvg/qvg_symbian.cpp | 45 ++++ src/s60installs/bwins/QtOpenVGu.def | 3 + src/s60installs/eabi/QtOpenVGu.def | 3 + .../nativeimagehandleprovider.pro | 6 + .../tst_nativeimagehandleprovider.cpp | 237 +++++++++++++++++++++ tests/auto/other.pro | 3 +- 10 files changed, 345 insertions(+), 6 deletions(-) create mode 100644 tests/auto/nativeimagehandleprovider/nativeimagehandleprovider.pro create mode 100644 tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index d99b1c6..00dccbe 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -30,7 +30,8 @@ HEADERS += \ image/qpixmapfilter_p.h \ image/qimagepixmapcleanuphooks_p.h \ image/qvolatileimage_p.h \ - image/qvolatileimagedata_p.h + image/qvolatileimagedata_p.h \ + image/qnativeimagehandleprovider_p.h SOURCES += \ image/qbitmap.cpp \ diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index aa24a0e..0d0d417 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -72,7 +72,8 @@ public: enum NativeType { FbsBitmap, SgImage, - VolatileImage + VolatileImage, + NativeImageHandleProvider }; #endif enum ClassId { RasterClass, X11Class, MacClass, DirectFBClass, diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index 47de5ab..3f67c79 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -50,6 +50,7 @@ #include <QBuffer> #include <QImageReader> #include <QtGui/private/qimage_p.h> +#include <QtGui/private/qnativeimagehandleprovider_p.h> QT_BEGIN_NAMESPACE @@ -66,6 +67,10 @@ QVGPixmapData::QVGPixmapData(PixelType type) inImagePool = false; inLRU = false; failedToAlloc = false; +#if defined(Q_OS_SYMBIAN) + nativeImageHandleProvider = 0; + nativeImageHandle = 0; +#endif #if !defined(QT_NO_EGL) context = 0; qt_vg_register_pixmap(this); @@ -98,6 +103,10 @@ void QVGPixmapData::destroyImages() vgImage = VG_INVALID_HANDLE; vgImageOpacity = VG_INVALID_HANDLE; inImagePool = false; + +#if defined(Q_OS_SYMBIAN) + releaseNativeImageHandle(); +#endif } void QVGPixmapData::destroyImageAndContext() @@ -120,6 +129,10 @@ void QVGPixmapData::destroyImageAndContext() #else destroyImages(); #endif + } else { +#if defined(Q_OS_SYMBIAN) + releaseNativeImageHandle(); +#endif } #if !defined(QT_NO_EGL) if (context) { @@ -343,6 +356,12 @@ VGImage QVGPixmapData::toVGImage() else if (recreate) cachedOpacity = -1.0f; // Force opacity image to be refreshed later. +#if defined(Q_OS_SYMBIAN) + if (recreate && nativeImageHandleProvider && !nativeImageHandle) { + createFromNativeImageHandleProvider(); + } +#endif + if (vgImage == VG_INVALID_HANDLE) { vgImage = QVGImagePool::instance()->createImageForPixmap (qt_vg_image_to_vg_format(source.format()), w, h, VG_IMAGE_QUALITY_FASTER, this); @@ -427,9 +446,16 @@ void QVGPixmapData::detachImageFromPool() void QVGPixmapData::hibernate() { - // If the image was imported (e.g, from an SgImage under Symbian), - // then we cannot copy it back to main memory for storage. - if (vgImage != VG_INVALID_HANDLE && source.isNull()) + // If the image was imported (e.g, from an SgImage under Symbian), then + // skip the hibernation, there is no sense in copying it back to main + // memory because the data is most likely shared between several processes. + bool skipHibernate = (vgImage != VG_INVALID_HANDLE && source.isNull()); +#if defined(Q_OS_SYMBIAN) + // However we have to proceed normally if the image was retrieved via + // a handle provider. + skipHibernate &= !nativeImageHandleProvider; +#endif + if (skipHibernate) return; forceToImage(); @@ -505,6 +531,11 @@ void QVGPixmapData::ensureReadback(bool readOnly) const // because it may be shared (e.g. created via SgImage) and a subsequent // upload of the image data may produce unexpected results. const_cast<QVGPixmapData *>(this)->destroyImages(); +#if defined(Q_OS_SYMBIAN) + // There is now an own copy of the data so drop the handle provider, + // otherwise toVGImage() would request the handle again, which is wrong. + nativeImageHandleProvider = 0; +#endif recreate = true; } } diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h index 80ff1cb..15ff889 100644 --- a/src/openvg/qpixmapdata_vg_p.h +++ b/src/openvg/qpixmapdata_vg_p.h @@ -76,6 +76,8 @@ void qt_vg_unregister_pixmap(QVGPixmapData *pd); void qt_vg_hibernate_pixmaps(QVGSharedContext *context); #endif +class QNativeImageHandleProvider; + class Q_OPENVG_EXPORT QVGPixmapData : public QPixmapData { public: @@ -138,6 +140,9 @@ public: #if defined(Q_OS_SYMBIAN) void* toNativeType(NativeType type); void fromNativeType(void* pixmap, NativeType type); + bool initFromNativeImageHandle(void *handle, const QString &type); + void createFromNativeImageHandleProvider(); + void releaseNativeImageHandle(); #endif protected: @@ -177,6 +182,12 @@ protected: mutable QEglContext *context; #endif +#if defined(Q_OS_SYMBIAN) + mutable QNativeImageHandleProvider *nativeImageHandleProvider; + void *nativeImageHandle; + QString nativeImageType; +#endif + void forceToImage(); QImage::Format sourceFormat() const; QImage::Format idealFormat(QImage *image, Qt::ImageConversionFlags flags) const; diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index c6521fd..5eb64bd 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -41,6 +41,7 @@ #include "qpixmapdata_vg_p.h" #include "qvgfontglyphcache_p.h" +#include <QtGui/private/qnativeimagehandleprovider_p.h> #include <private/qt_s60_p.h> #include <fbs.h> @@ -111,6 +112,44 @@ void QVGPixmapData::cleanup() source = QVolatileImage(); } +bool QVGPixmapData::initFromNativeImageHandle(void *handle, const QString &type) +{ + if (type == QLatin1String("RSgImage")) { + fromNativeType(handle, QPixmapData::SgImage); + return true; + } else if (type == QLatin1String("CFbsBitmap")) { + fromNativeType(handle, QPixmapData::FbsBitmap); + return true; + } + return false; +} + +void QVGPixmapData::createFromNativeImageHandleProvider() +{ + void *handle = 0; + QString type; + nativeImageHandleProvider->get(&handle, &type); + if (handle) { + if (initFromNativeImageHandle(handle, type)) { + nativeImageHandle = handle; + nativeImageType = type; + } else { + qWarning("QVGPixmapData: Unknown native image type '%s'", qPrintable(type)); + } + } else { + qWarning("QVGPixmapData: Native handle is null"); + } +} + +void QVGPixmapData::releaseNativeImageHandle() +{ + if (nativeImageHandleProvider && nativeImageHandle) { + nativeImageHandleProvider->release(nativeImageHandle, nativeImageType); + nativeImageHandle = 0; + nativeImageType = QString(); + } +} + void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) { if (type == QPixmapData::SgImage && pixmap) { @@ -149,6 +188,11 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) source = *img; source.ensureFormat(idealFormat(&source.imageRef(), Qt::AutoColor)); recreate = true; + } else if (type == QPixmapData::NativeImageHandleProvider && pixmap) { + destroyImages(); + nativeImageHandleProvider = static_cast<QNativeImageHandleProvider *>(pixmap); + // Cannot defer the retrieval, we need at least the size right away. + createFromNativeImageHandleProvider(); } } @@ -216,6 +260,7 @@ void* QVGPixmapData::toNativeType(NativeType type) return reinterpret_cast<void*>(sgImage.take()); #endif } else if (type == QPixmapData::FbsBitmap && isValid()) { + ensureReadback(true); if (source.isNull()) { source = QVolatileImage(w, h, sourceFormat()); } diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def index 0bc44e9..18f576b 100644 --- a/src/s60installs/bwins/QtOpenVGu.def +++ b/src/s60installs/bwins/QtOpenVGu.def @@ -180,4 +180,7 @@ EXPORTS ?copy@QVGPixmapData@@UAEXPBVQPixmapData@@ABVQRect@@@Z @ 179 NONAME ; void QVGPixmapData::copy(class QPixmapData const *, class QRect const &) ?idealFormat@QVGPixmapData@@IBE?AW4Format@QImage@@PAV3@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 180 NONAME ; enum QImage::Format QVGPixmapData::idealFormat(class QImage *, class QFlags<enum Qt::ImageConversionFlag>) const ?ensureReadback@QVGPixmapData@@UBEX_N@Z @ 181 NONAME ; void QVGPixmapData::ensureReadback(bool) const + ?initFromNativeImageHandle@QVGPixmapData@@QAE_NPAXABVQString@@@Z @ 182 NONAME ; bool QVGPixmapData::initFromNativeImageHandle(void *, class QString const &) + ?createFromNativeImageHandleProvider@QVGPixmapData@@QAEXXZ @ 183 NONAME ; void QVGPixmapData::createFromNativeImageHandleProvider(void) + ?releaseNativeImageHandle@QVGPixmapData@@QAEXXZ @ 184 NONAME ; void QVGPixmapData::releaseNativeImageHandle(void) diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def index 4c01550..25c53b8 100644 --- a/src/s60installs/eabi/QtOpenVGu.def +++ b/src/s60installs/eabi/QtOpenVGu.def @@ -210,4 +210,7 @@ EXPORTS _ZN13QVGPixmapData4copyEPK11QPixmapDataRK5QRect @ 209 NONAME _ZNK13QVGPixmapData11idealFormatEP6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 210 NONAME _ZNK13QVGPixmapData14ensureReadbackEb @ 211 NONAME + _ZN13QVGPixmapData24releaseNativeImageHandleEv @ 212 NONAME + _ZN13QVGPixmapData25initFromNativeImageHandleEPvRK7QString @ 213 NONAME + _ZN13QVGPixmapData35createFromNativeImageHandleProviderEv @ 214 NONAME diff --git a/tests/auto/nativeimagehandleprovider/nativeimagehandleprovider.pro b/tests/auto/nativeimagehandleprovider/nativeimagehandleprovider.pro new file mode 100644 index 0000000..fb8ecb0 --- /dev/null +++ b/tests/auto/nativeimagehandleprovider/nativeimagehandleprovider.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +SOURCES += tst_nativeimagehandleprovider.cpp +symbian { + LIBS += -lfbscli -lbitgdi + contains(QT_CONFIG, openvg): QT *= openvg +} diff --git a/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp b/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp new file mode 100644 index 0000000..5aaf055 --- /dev/null +++ b/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QtGui/private/qpixmapdata_p.h> +#include <QtGui/private/qnativeimagehandleprovider_p.h> +#include <QScopedPointer> +#include <QPixmap> +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) +#include <fbs.h> +#include <bitdev.h> +#include <QtOpenVG/private/qpixmapdata_vg_p.h> +#endif + +QPixmap pixmapFromNativeImageHandleProvider(QNativeImageHandleProvider *source) +{ +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) + if (!source) + return QPixmap(); + QScopedPointer<QPixmapData> pd(QPixmapData::create(0, 0, QPixmapData::PixmapType)); + pd->fromNativeType(source, QPixmapData::NativeImageHandleProvider); + return QPixmap(pd.take()); +#else + Q_UNUSED(source); + return QPixmap(); +#endif +} + +class DummyProvider : public QNativeImageHandleProvider +{ +public: + void get(void **handle, QString *type); + void release(void *handle, const QString &type); +}; + +void DummyProvider::get(void **handle, QString *type) +{ + *handle = (void *) 0x12345678; + *type = "some dummy type"; +} + +void DummyProvider::release(void *handle, const QString &type) +{ + Q_UNUSED(handle); + Q_UNUSED(type); +} + +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) +class BitmapProvider : public QNativeImageHandleProvider +{ +public: + BitmapProvider() : bmp(0), refCount(0), w(50), h(60) { } + void get(void **handle, QString *type); + void release(void *handle, const QString &type); + + CFbsBitmap *bmp; + int refCount, w, h; + void *returnedHandle; + QString returnedType; +}; + +void BitmapProvider::get(void **handle, QString *type) +{ + // There may not be a release() if the get() fails so don't bother with + // refcounting in such cases. + if (bmp) + ++refCount; + returnedType = QLatin1String("CFbsBitmap"); + returnedHandle = bmp; + *handle = returnedHandle; + *type = returnedType; +} + +void BitmapProvider::release(void *handle, const QString &type) +{ + if (handle == returnedHandle && type == returnedType && returnedHandle) { + --refCount; + } +} +#endif // symbian & openvg + +class tst_NativeImageHandleProvider : public QObject +{ + Q_OBJECT + +public: + tst_NativeImageHandleProvider() { } + +private slots: + void create(); + void bitmap(); + void hibernate(); +}; + +void tst_NativeImageHandleProvider::create() +{ + QPixmap pm = pixmapFromNativeImageHandleProvider(0); + QVERIFY(pm.isNull()); + QPixmap tmp(10, 20); + if (tmp.pixmapData()->classId() == QPixmapData::OpenVGClass) { + // Verify that null pixmap is properly returned when get() provides bogus results. + DummyProvider prov; + pm = pixmapFromNativeImageHandleProvider(&prov); + QVERIFY(pm.isNull()); + pm = QPixmap(); + } else { + QSKIP("Not openvg, skipping non-trivial tests", SkipSingle); + } +} + +void tst_NativeImageHandleProvider::bitmap() +{ +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) + QPixmap tmp(10, 20); + if (tmp.pixmapData()->classId() == QPixmapData::OpenVGClass) { + BitmapProvider prov; + + // This should fail because of null ptr. + QPixmap pm = pixmapFromNativeImageHandleProvider(&prov); + QVERIFY(pm.isNull()); + pm = QPixmap(); + QCOMPARE(prov.refCount, 0); + + prov.bmp = new CFbsBitmap; + QCOMPARE(prov.bmp->Create(TSize(prov.w, prov.h), EColor16MAP), KErrNone); + CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(prov.bmp); + CBitmapContext *bitmapContext = 0; + QCOMPARE(bitmapDevice->CreateBitmapContext(bitmapContext), KErrNone); + TRgb symbianColor = TRgb(255, 200, 100); + bitmapContext->SetBrushColor(symbianColor); + bitmapContext->Clear(); + delete bitmapContext; + delete bitmapDevice; + + pm = pixmapFromNativeImageHandleProvider(&prov); + QVERIFY(!pm.isNull()); + QCOMPARE(pm.width(), prov.w); + QCOMPARE(pm.height(), prov.h); + QVERIFY(prov.refCount == 1); + QImage img = pm.toImage(); + QVERIFY(prov.refCount == 1); + QRgb pix = img.pixel(QPoint(1, 2)); + QCOMPARE(qRed(pix), symbianColor.Red()); + QCOMPARE(qGreen(pix), symbianColor.Green()); + QCOMPARE(qBlue(pix), symbianColor.Blue()); + + pm = QPixmap(); // should result in calling release + QCOMPARE(prov.refCount, 0); + delete prov.bmp; + } else { + QSKIP("Not openvg", SkipSingle); + } +#else + QSKIP("Not applicable", SkipSingle); +#endif +} + +void tst_NativeImageHandleProvider::hibernate() +{ +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG) + QPixmap tmp(10, 20); + if (tmp.pixmapData()->classId() == QPixmapData::OpenVGClass) { + BitmapProvider prov; + prov.bmp = new CFbsBitmap; + QCOMPARE(prov.bmp->Create(TSize(prov.w, prov.h), EColor16MAP), KErrNone); + + QPixmap pm = pixmapFromNativeImageHandleProvider(&prov); + QCOMPARE(prov.refCount, 1); + + QVGPixmapData *vgpd = static_cast<QVGPixmapData *>(pm.pixmapData()); + vgpd->hibernate(); + QCOMPARE(prov.refCount, 0); + + // Calling toVGImage() may cause some warnings as we don't have a gui initialized, + // but the only thing we care about here is get() being called. + vgpd->toVGImage(); + QCOMPARE(prov.refCount, 1); + + pm = QPixmap(); + QCOMPARE(prov.refCount, 0); + delete prov.bmp; + } else { + QSKIP("Not openvg", SkipSingle); + } +#else + QSKIP("Not applicable", SkipSingle); +#endif +} + +int main(int argc, char *argv[]) +{ + QApplication::setGraphicsSystem("openvg"); + QApplication app(argc, argv); + tst_NativeImageHandleProvider tc; + return QTest::qExec(&tc, argc, argv); +} + +#include "tst_nativeimagehandleprovider.moc" diff --git a/tests/auto/other.pro b/tests/auto/other.pro index 3c8f856..40fa4a9 100644 --- a/tests/auto/other.pro +++ b/tests/auto/other.pro @@ -32,7 +32,8 @@ SUBDIRS=\ qvariant \ qwidget \ qworkspace \ - windowsmobile + windowsmobile \ + nativeimagehandleprovider contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter mac: { -- cgit v0.12 From ddeee0dc7d9c2bfd4ad4e2f71497f1135446051a Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 8 Mar 2011 17:08:37 +0200 Subject: Added native image handle provider header. Task-number: QT-4632 Reviewed-by: Jani Hautakangas --- src/gui/image/qnativeimagehandleprovider_p.h | 69 ++++++++++++++++++++++ .../tst_nativeimagehandleprovider.cpp | 2 +- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/gui/image/qnativeimagehandleprovider_p.h diff --git a/src/gui/image/qnativeimagehandleprovider_p.h b/src/gui/image/qnativeimagehandleprovider_p.h new file mode 100644 index 0000000..4e6ed38 --- /dev/null +++ b/src/gui/image/qnativeimagehandleprovider_p.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNATIVEIMAGEHANDLEPROVIDER_P_H +#define QNATIVEIMAGEHANDLEPROVIDER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qstring.h> + +QT_BEGIN_NAMESPACE + +class QNativeImageHandleProvider +{ +public: + virtual void get(void **handle, QString *type) = 0; + virtual void release(void *handle, const QString &type) = 0; +}; + +QT_END_NAMESPACE + +#endif // QNATIVEIMAGEHANDLEPROVIDER_P_H diff --git a/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp b/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp index 5aaf055..3a315f2 100644 --- a/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp +++ b/tests/auto/nativeimagehandleprovider/tst_nativeimagehandleprovider.cpp @@ -163,7 +163,7 @@ void tst_NativeImageHandleProvider::bitmap() prov.bmp = new CFbsBitmap; QCOMPARE(prov.bmp->Create(TSize(prov.w, prov.h), EColor16MAP), KErrNone); CFbsBitmapDevice *bitmapDevice = CFbsBitmapDevice::NewL(prov.bmp); - CBitmapContext *bitmapContext = 0; + CBitmapContext *bitmapContext = 0; QCOMPARE(bitmapDevice->CreateBitmapContext(bitmapContext), KErrNone); TRgb symbianColor = TRgb(255, 200, 100); bitmapContext->SetBrushColor(symbianColor); -- cgit v0.12 From 0d6ce63ea84b076efbebfae0f6f39f492d8d7bcf Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 9 Mar 2011 11:52:41 +1000 Subject: Revert to previous lineHeight behavior. f47f01fd34d08f6152c9053c0d6928fc359aa0f9 changed the height of the Text to not include the extra spacing at the end of the block. This is different to what QDextDocument does. Revert back to the old behavior. Change-Id: Ie43dea4dd5a0e9ba179f44c246fb834322db11e3 Reviewed-by: Joona Petrell --- src/declarative/graphicsitems/qdeclarativetext.cpp | 1 + tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 6bcd2fa..3b5be9e 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -452,6 +452,7 @@ QRect QDeclarativeTextPrivate::setupTextLayout() br = br.united(line.naturalTextRect()); height += (lineHeightMode == QDeclarativeText::FixedHeight) ? lineHeight : line.height() * lineHeight; } + br.setHeight(height); if (!q->widthValid()) naturalWidth = br.width(); diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 9c12a90..c854f86 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -1156,14 +1156,12 @@ void tst_qdeclarativetext::lineHeight() QVERIFY(myText->lineHeightMode() == QDeclarativeText::ProportionalHeight); qreal h = myText->height(); - int lc = myText->lineCount(); - qreal lh = myText->height() / lc; myText->setLineHeight(1.5); - QVERIFY(qAbs(myText->height() - (((lc-1) * lh * 1.5) + lh)) < 1.0); + QVERIFY(myText->height() == h * 1.5); myText->setLineHeightMode(QDeclarativeText::FixedHeight); myText->setLineHeight(20); - QCOMPARE(myText->height(), ((lc-1) * 20.0) + lh); + QCOMPARE(myText->height(), myText->lineCount() * 20.0); myText->setText("Lorem ipsum sit <b>amet</b>, consectetur adipiscing elit. Integer felis nisl, varius in pretium nec, venenatis non erat. Proin lobortis interdum dictum."); myText->setLineHeightMode(QDeclarativeText::ProportionalHeight); -- cgit v0.12 From 4a0ce0775350cf2b10f44502dc86110684fc9fb5 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 9 Mar 2011 16:56:05 +1000 Subject: The rotation reported by PinchArea should not be in the range -180..180 The rotation is the total rotation that has been applied since the gesture started. This should not be normalized to -180 to 180. If you contort your fingers such that you have rotated 420deg then that is what should be reported. Change-Id: I24ba3f105befc2b0d31f1933911a94a0152ffcb4 Task-number: QTBUG-17437 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativepincharea.cpp | 17 ++++++++++------- .../graphicsitems/qdeclarativepincharea_p_p.h | 5 ++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativepincharea.cpp b/src/declarative/graphicsitems/qdeclarativepincharea.cpp index eae83f6..9bc3d8d 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea.cpp +++ b/src/declarative/graphicsitems/qdeclarativepincharea.cpp @@ -300,9 +300,8 @@ void QDeclarativePinchArea::updatePinch() d->stealMouse = false; setKeepMouseGrab(false); d->inPinch = false; - const qreal rotationAngle = d->pinchStartAngle - d->pinchLastAngle; QPointF pinchCenter = mapFromScene(d->sceneLastCenter); - QDeclarativePinchEvent pe(pinchCenter, d->pinchLastScale, d->pinchLastAngle, rotationAngle); + QDeclarativePinchEvent pe(pinchCenter, d->pinchLastScale, d->pinchLastAngle, d->pinchRotation); pe.setStartCenter(d->pinchStartCenter); pe.setPreviousCenter(pinchCenter); pe.setPreviousAngle(d->pinchLastAngle); @@ -349,6 +348,7 @@ void QDeclarativePinchArea::updatePinch() d->pinchStartAngle = angle; d->pinchLastScale = 1.0; d->pinchLastAngle = angle; + d->pinchRotation = 0.0; d->lastPoint1 = d->touchPoints.at(0).pos(); d->lastPoint2 = d->touchPoints.at(1).pos(); QDeclarativePinchEvent pe(d->pinchStartCenter, 1.0, angle, 0.0); @@ -380,11 +380,14 @@ void QDeclarativePinchArea::updatePinch() } } else if (d->pinchStartDist > 0) { qreal scale = dist / d->pinchStartDist; - qreal rotationAngle = d->pinchStartAngle - angle; - if (rotationAngle > 180) - rotationAngle -= 360; + qreal da = d->pinchLastAngle - angle; + if (da > 180) + da -= 360; + else if (da < -180) + da += 360; + d->pinchRotation += da; QPointF pinchCenter = mapFromScene(sceneCenter); - QDeclarativePinchEvent pe(pinchCenter, scale, angle, rotationAngle); + QDeclarativePinchEvent pe(pinchCenter, scale, angle, d->pinchRotation); pe.setStartCenter(d->pinchStartCenter); pe.setPreviousCenter(mapFromScene(d->sceneLastCenter)); pe.setPreviousAngle(d->pinchLastAngle); @@ -422,7 +425,7 @@ void QDeclarativePinchArea::updatePinch() } if (d->pinchStartRotation >= pinch()->minimumRotation() && d->pinchStartRotation <= pinch()->maximumRotation()) { - qreal r = rotationAngle + d->pinchStartRotation; + qreal r = d->pinchRotation + d->pinchStartRotation; r = qMin(qMax(pinch()->minimumRotation(),r), pinch()->maximumRotation()); pinch()->target()->setRotation(r); } diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h index 5641e35..cd5cf2a 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h @@ -68,7 +68,9 @@ class QDeclarativePinchAreaPrivate : public QDeclarativeItemPrivate public: QDeclarativePinchAreaPrivate() : absorb(true), stealMouse(false), inPinch(false) - , pinchRejected(false), pinch(0), pinchStartDist(0) + , pinchRejected(false), pinch(0), pinchStartDist(0), pinchStartScale(1.0) + , pinchLastScale(1.0), pinchStartRotation(0.0), pinchStartAngle(0.0) + , pinchLastAngle(0.0), pinchRotation(0.0) { } @@ -97,6 +99,7 @@ public: qreal pinchStartRotation; qreal pinchStartAngle; qreal pinchLastAngle; + qreal pinchRotation; QPointF sceneStartCenter; QPointF pinchStartCenter; QPointF sceneLastCenter; -- cgit v0.12 From aeb330e3999ef3d7ae8d94b9330471f2a2a13554 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Tue, 8 Mar 2011 18:05:25 +1000 Subject: Fix horizontal alignment of QTextDocument-based RTL text Task-number: QTBUG-15880 Reviewed-by: Martin Jones Change-Id: If537d7c795dec46eedee62511e75bab862676ef1 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 45 +++++++++++++++------- .../graphicsitems/qdeclarativetext_p_p.h | 2 + .../graphicsitems/qdeclarativetextedit.cpp | 7 ++-- .../qdeclarativetext/tst_qdeclarativetext.cpp | 40 +++++++++++++++++-- .../tst_qdeclarativetextedit.cpp | 34 +++++++++++++++- .../tst_qdeclarativetextinput.cpp | 9 +++++ 6 files changed, 115 insertions(+), 22 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 3b5be9e..fdc1a71 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -50,7 +50,6 @@ #include <QTextLayout> #include <QTextLine> #include <QTextDocument> -#include <QTextCursor> #include <QGraphicsSceneMouseEvent> #include <QPainter> #include <QAbstractTextDocumentLayout> @@ -102,7 +101,7 @@ QDeclarativeTextPrivate::QDeclarativeTextPrivate() format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap), lineHeight(1), lineHeightMode(QDeclarativeText::ProportionalHeight), lineCount(1), truncated(false), maximumLineCount(INT_MAX), maximumLineCountValid(false), imageCacheDirty(true), updateOnComponentComplete(true), richText(false), singleline(false), - cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true), naturalWidth(0), doc(0) + cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true), rightToLeftText(false), naturalWidth(0), doc(0) { cacheAllTextAsImage = enableImageCache(); QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton; @@ -292,8 +291,16 @@ void QDeclarativeTextPrivate::updateSize() singleline = false; // richtext can't elide or be optimized for single-line case ensureDoc(); doc->setDefaultFont(font); + + QDeclarativeText::HAlignment horizontalAlignment = q->effectiveHAlign(); + if (rightToLeftText) { + if (horizontalAlignment == QDeclarativeText::AlignLeft) + horizontalAlignment = QDeclarativeText::AlignRight; + else if (horizontalAlignment == QDeclarativeText::AlignRight) + horizontalAlignment = QDeclarativeText::AlignLeft; + } QTextOption option; - option.setAlignment((Qt::Alignment)int(q->effectiveHAlign() | vAlign)); + option.setAlignment((Qt::Alignment)int(horizontalAlignment | vAlign)); option.setWrapMode(QTextOption::WrapMode(wrapMode)); doc->setDefaultTextOption(option); if (requireImplicitWidth && q->widthValid()) { @@ -909,15 +916,18 @@ void QDeclarativeText::setText(const QString &n) return; d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n)); - if (d->richText && isComponentComplete()) { - d->ensureDoc(); - d->doc->setText(n); - } - d->text = n; - d->determineHorizontalAlignment(); + if (isComponentComplete()) { + if (d->richText) { + d->ensureDoc(); + d->doc->setText(n); + d->rightToLeftText = d->doc->toPlainText().isRightToLeft(); + } else { + d->rightToLeftText = d->text.isRightToLeft(); + } + d->determineHorizontalAlignment(); + } d->updateLayout(); - emit textChanged(d->text); } @@ -1122,9 +1132,8 @@ bool QDeclarativeTextPrivate::determineHorizontalAlignment() { Q_Q(QDeclarativeText); if (hAlignImplicit && q->isComponentComplete()) { - // if no explicit alignment has been set, follow the natural layout direction of the text - bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); - return setHAlign(isRightToLeft ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft); + bool alignToRight = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : rightToLeftText; + return setHAlign(alignToRight ? QDeclarativeText::AlignRight : QDeclarativeText::AlignLeft); } return false; } @@ -1140,6 +1149,11 @@ void QDeclarativeTextPrivate::mirrorChange() } } +QTextDocument *QDeclarativeTextPrivate::textDocument() +{ + return doc; +} + QDeclarativeText::VAlignment QDeclarativeText::vAlign() const { Q_D(const QDeclarativeText); @@ -1585,11 +1599,14 @@ void QDeclarativeText::componentComplete() QDeclarativeItem::componentComplete(); if (d->updateOnComponentComplete) { d->updateOnComponentComplete = false; - d->determineHorizontalAlignment(); if (d->richText) { d->ensureDoc(); d->doc->setText(d->text); + d->rightToLeftText = d->doc->toPlainText().isRightToLeft(); + } else { + d->rightToLeftText = d->text.isRightToLeft(); } + d->determineHorizontalAlignment(); d->updateLayout(); } } diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h index 2e154a0..e3ab62a 100644 --- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h @@ -79,6 +79,7 @@ public: bool determineHorizontalAlignment(); bool setHAlign(QDeclarativeText::HAlignment, bool forceAlign = false); void mirrorChange(); + QTextDocument *textDocument(); QString text; QFont font; @@ -114,6 +115,7 @@ public: bool internalWidthUpdate:1; bool requireImplicitWidth:1; bool hAlignImplicit:1; + bool rightToLeftText:1; QRect layedOutTextRect; QSize paintedSize; diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index d1d2351..4006d54 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -549,9 +549,8 @@ bool QDeclarativeTextEditPrivate::determineHorizontalAlignment() { Q_Q(QDeclarativeTextEdit); if (hAlignImplicit && q->isComponentComplete()) { - // if no explicit alignment has been set, follow the natural layout direction of the text - bool isRightToLeft = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : text.isRightToLeft(); - return setHAlign(isRightToLeft ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); + bool alignToRight = text.isEmpty() ? QApplication::keyboardInputDirection() == Qt::RightToLeft : rightToLeftText; + return setHAlign(alignToRight ? QDeclarativeTextEdit::AlignRight : QDeclarativeTextEdit::AlignLeft); } return false; } @@ -1578,7 +1577,7 @@ void QDeclarativeTextEdit::q_textChanged() { Q_D(QDeclarativeTextEdit); d->text = text(); - d->rightToLeftText = d->text.isRightToLeft(); + d->rightToLeftText = d->document->begin().layout()->engine()->isRightToLeft(); d->determineHorizontalAlignment(); d->updateDefaultTextOption(); updateSize(); diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index c854f86..b5dfba8 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -523,18 +523,44 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); - // explicitly left aligned + // explicitly left aligned text text->setHAlign(QDeclarativeText::AlignLeft); QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); - // explicitly right aligned + // explicitly right aligned text text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); QCOMPARE(text->effectiveHAlign(), text->hAlign()); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() > canvas->width()/2); + // change to rich text + QString textString = text->text(); + text->setText(QString("<i>") + textString + QString("</i>")); + text->setTextFormat(QDeclarativeText::RichText); + text->resetHAlign(); + + // implicitly aligned rich text should follow the reading direction of text + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); + QVERIFY(textPrivate->textDocument()->defaultTextOption().alignment() & Qt::AlignLeft); + + // explicitly left aligned rich text + text->setHAlign(QDeclarativeText::AlignLeft); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); + QVERIFY(textPrivate->textDocument()->defaultTextOption().alignment() & Qt::AlignRight); + + // explicitly right aligned rich text + text->setHAlign(QDeclarativeText::AlignRight); + QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); + QCOMPARE(text->effectiveHAlign(), text->hAlign()); + QVERIFY(textPrivate->textDocument()->defaultTextOption().alignment() & Qt::AlignLeft); + + text->setText(textString); + text->setTextFormat(QDeclarativeText::PlainText); + // explicitly center aligned text->setHAlign(QDeclarativeText::AlignHCenter); QCOMPARE(text->hAlign(), QDeclarativeText::AlignHCenter); @@ -583,8 +609,16 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QDeclarativeText::AlignLeft : QDeclarativeText::AlignRight); text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); - delete canvas; + + // alignment of Text with no text set to it + QString componentStr = "import QtQuick 1.0\nText {}"; + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create()); + QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeText::AlignLeft : QDeclarativeText::AlignRight); + delete textObject; } void tst_qdeclarativetext::verticalAlignment() diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index db36220..402c6cd 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -448,7 +448,7 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QVERIFY(textEdit != 0); canvas->show(); - // implicit alignment should follow the reading direction of RTL text + // implicit alignment should follow the reading direction of text QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); @@ -462,6 +462,29 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + QString textString = textEdit->text(); + textEdit->setText(QString("<i>") + textString + QString("</i>")); + textEdit->resetHAlign(); + + // implicitly aligned rich text should follow the reading direction of RTL text + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + + // explicitly left aligned rich text + textEdit->setHAlign(QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); + QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); + QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); + + // explicitly right aligned rich text + textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); + QCOMPARE(textEdit->effectiveHAlign(), textEdit->hAlign()); + QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); + + textEdit->setText(textString); + // explicitly center aligned textEdit->setHAlign(QDeclarativeTextEdit::AlignHCenter); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignHCenter); @@ -515,6 +538,15 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); delete canvas; + + // alignment of TextEdit with no text set to it + QString componentStr = "import QtQuick 1.0\nTextEdit {}"; + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeTextEdit *textObject = qobject_cast<QDeclarativeTextEdit*>(textComponent.create()); + QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeTextEdit::AlignLeft : QDeclarativeTextEdit::AlignRight); + delete textObject; } void tst_qdeclarativetextedit::vAlign() diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index fc19c94..734f91f 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1125,6 +1125,15 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); delete canvas; + + // alignment of TextInput with no text set to it + QString componentStr = "import QtQuick 1.0\nTextInput {}"; + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeTextInput *textObject = qobject_cast<QDeclarativeTextInput*>(textComponent.create()); + QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? + QDeclarativeTextInput::AlignLeft : QDeclarativeTextInput::AlignRight); + delete textObject; } void tst_qdeclarativetextinput::positionAt() -- cgit v0.12 From c7e7856f710fe09b1fd715390e74578166c0f709 Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Wed, 9 Mar 2011 17:48:12 +1000 Subject: Add missing header include missing from the previous commit Change-Id: I7993c13c7fe43027caaa28ef3866df5f0d21f5b9 --- src/declarative/graphicsitems/qdeclarativetextedit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index 4006d54..babc020 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -48,6 +48,7 @@ #include <QtCore/qmath.h> +#include <private/qtextengine_p.h> #include <QTextLayout> #include <QTextLine> #include <QTextDocument> -- cgit v0.12 From f386c778d17347fb81d152eb61a7c40abe4eb0ae Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Tue, 8 Mar 2011 16:37:18 +0100 Subject: Fix line information for dynamic slots in .qml files Take whitespace before the opening bracket into account, e.g. save the newlines in function f()\n{} Task-number: QTBUG-18006 Done by Roberto Raggi --- src/declarative/qml/qdeclarativescriptparser.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index 996920a..b604706 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -776,7 +776,10 @@ bool ProcessAST::visit(AST::UiSourceElement *node) f = f->finish(); } - QString body = textAt(funDecl->lbraceToken, funDecl->rbraceToken); + AST::SourceLocation loc = funDecl->rparenToken; + loc.offset = loc.end(); + loc.startColumn += 1; + QString body = textAt(loc, funDecl->rbraceToken); slot.name = funDecl->name->asString().toUtf8(); slot.body = body; obj->dynamicSlots << slot; -- cgit v0.12 From e90cff53cdd7bf0bdfed1f2e8efb90539c6f33ba Mon Sep 17 00:00:00 2001 From: Timo Turunen <timo.p.turunen@nokia.com> Date: Wed, 9 Mar 2011 10:56:55 +0200 Subject: Bump Qt version to 4.7.3 Reviewed-by: Trust Me --- dist/changes-4.7.3 | 0 src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri | 4 ++-- src/corelib/global/qglobal.h | 4 ++-- src/plugins/qpluginbase.pri | 2 +- src/qbase.pri | 2 +- tests/auto/mediaobject/dummy/dummy.pro | 2 +- tests/auto/selftests/expected_cmptest.txt | 2 +- tests/auto/selftests/expected_crashes_3.txt | 2 +- tests/auto/selftests/expected_longstring.txt | 2 +- tests/auto/selftests/expected_maxwarnings.txt | 2 +- tests/auto/selftests/expected_skip.txt | 2 +- tools/assistant/tools/assistant/doc/assistant.qdocconf | 4 ++-- tools/qdoc3/doc/files/qt.qdocconf | 8 ++++---- tools/qdoc3/test/assistant.qdocconf | 4 ++-- tools/qdoc3/test/designer.qdocconf | 4 ++-- tools/qdoc3/test/linguist.qdocconf | 4 ++-- tools/qdoc3/test/qdeclarative.qdocconf | 8 ++++---- tools/qdoc3/test/qmake.qdocconf | 4 ++-- tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf | 8 ++++---- tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 8 ++++---- tools/qdoc3/test/qt-project.qdocconf | 10 +++++----- 21 files changed, 43 insertions(+), 43 deletions(-) create mode 100644 dist/changes-4.7.3 diff --git a/dist/changes-4.7.3 b/dist/changes-4.7.3 new file mode 100644 index 0000000..e69de29 diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri index b98617f..07754a7 100644 --- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -1,5 +1,5 @@ -QT_WEBKIT_VERSION = 4.7.2 +QT_WEBKIT_VERSION = 4.7.3 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 -QT_WEBKIT_PATCH_VERSION = 2 +QT_WEBKIT_PATCH_VERSION = 3 QT_CONFIG += webkit diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index fcee35d..da5db3a 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -44,11 +44,11 @@ #include <stddef.h> -#define QT_VERSION_STR "4.7.2" +#define QT_VERSION_STR "4.7.3" /* QT_VERSION is (major << 16) + (minor << 8) + patch. */ -#define QT_VERSION 0x040702 +#define QT_VERSION 0x040703 /* can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) */ diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri index 7cbffe0..3de5fdf 100644 --- a/src/plugins/qpluginbase.pri +++ b/src/plugins/qpluginbase.pri @@ -1,6 +1,6 @@ TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.2 + VERSION=4.7.3 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/src/qbase.pri b/src/qbase.pri index 75da3dc..babea56 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700 TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.2 + VERSION=4.7.3 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/tests/auto/mediaobject/dummy/dummy.pro b/tests/auto/mediaobject/dummy/dummy.pro index 88b864b..c81411c 100644 --- a/tests/auto/mediaobject/dummy/dummy.pro +++ b/tests/auto/mediaobject/dummy/dummy.pro @@ -1,7 +1,7 @@ TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.6.4 + VERSION=4.7.3 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt index fccaca3..d70815d 100644 --- a/tests/auto/selftests/expected_cmptest.txt +++ b/tests/auto/selftests/expected_cmptest.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Cmptest ********* -Config: Using QTest library 4.7.2, Qt 4.7.2 +Config: Using QTest library 4.7.3, Qt 4.7.3 PASS : tst_Cmptest::initTestCase() PASS : tst_Cmptest::compare_boolfuncs() PASS : tst_Cmptest::compare_pointerfuncs() diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt index 2558f68..2aea62c 100644 --- a/tests/auto/selftests/expected_crashes_3.txt +++ b/tests/auto/selftests/expected_crashes_3.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Crashes ********* -Config: Using QTest library 4.7.2, Qt 4.7.2 +Config: Using QTest library 4.7.3, Qt 4.7.3 PASS : tst_Crashes::initTestCase() QFATAL : tst_Crashes::crash() Received signal 11 FAIL! : tst_Crashes::crash() Received a fatal error. diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt index c56244b..1fe012f 100644 --- a/tests/auto/selftests/expected_longstring.txt +++ b/tests/auto/selftests/expected_longstring.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_LongString ********* -Config: Using QTest library 4.7.2, Qt 4.7.2 +Config: Using QTest library 4.7.3, Qt 4.7.3 PASS : tst_LongString::initTestCase() FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt index 7846435..cdd6ee8 100644 --- a/tests/auto/selftests/expected_maxwarnings.txt +++ b/tests/auto/selftests/expected_maxwarnings.txt @@ -1,5 +1,5 @@ ********* Start testing of MaxWarnings ********* -Config: Using QTest library 4.7.2, Qt 4.7.2 +Config: Using QTest library 4.7.3, Qt 4.7.3 PASS : MaxWarnings::initTestCase() QWARN : MaxWarnings::warn() 0 QWARN : MaxWarnings::warn() 1 diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt index 5c9e497..490c140 100644 --- a/tests/auto/selftests/expected_skip.txt +++ b/tests/auto/selftests/expected_skip.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Skip ********* -Config: Using QTest library 4.7.2, Qt 4.7.2 +Config: Using QTest library 4.7.3, Qt 4.7.3 PASS : tst_Skip::initTestCase() SKIP : tst_Skip::test() skipping all Loc: [/home/user/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)] diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf index 57abeae..575b1e5 100644 --- a/tools/assistant/tools/assistant/doc/assistant.qdocconf +++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf @@ -10,7 +10,7 @@ description = "Qt Assistant" HTML.{postheader,address} = "" HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\">Trademarks</td>\n" \ - "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.2</div></td>\n" \ + "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.3</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf index 44cfbc1..9b16233 100644 --- a/tools/qdoc3/doc/files/qt.qdocconf +++ b/tools/qdoc3/doc/files/qt.qdocconf @@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.472 +qhp.Qt.namespace = com.trolltech.qt.473 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \ images/dynamiclayouts-example.png \ images/stylesheet-coffee-plastique.png -qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.2 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 +qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.3 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 0e9a2a8..74ab67b 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Assistant qhp.Assistant.file = assistant.qhp -qhp.Assistant.namespace = com.trolltech.assistant.472 +qhp.Assistant.namespace = com.trolltech.assistant.473 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual qhp.Assistant.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Assistant.filterAttributes = qt 4.7.2 tools assistant +qhp.Assistant.filterAttributes = qt 4.7.3 tools assistant qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant qhp.Assistant.subprojects = manual examples diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index 637399b..42dbc20 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Designer qhp.Designer.file = designer.qhp -qhp.Designer.namespace = com.trolltech.designer.472 +qhp.Designer.namespace = com.trolltech.designer.473 qhp.Designer.virtualFolder = qdoc qhp.Designer.indexTitle = Qt Designer Manual qhp.Designer.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Designer.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Designer.filterAttributes = qt 4.7.2 tools designer +qhp.Designer.filterAttributes = qt 4.7.3 tools designer qhp.Designer.customFilters.Designer.name = Qt Designer Manual qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer qhp.Designer.subprojects = manual examples diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 8ee298e..7c01023 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Linguist qhp.Linguist.file = linguist.qhp -qhp.Linguist.namespace = com.trolltech.linguist.472 +qhp.Linguist.namespace = com.trolltech.linguist.473 qhp.Linguist.virtualFolder = qdoc qhp.Linguist.indexTitle = Qt Linguist Manual qhp.Linguist.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Linguist.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Linguist.filterAttributes = qt 4.7.2 tools linguist +qhp.Linguist.filterAttributes = qt 4.7.3 tools linguist qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist qhp.Linguist.subprojects = manual examples diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index e68a935..12c939c 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -21,7 +21,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qml qhp.Qml.file = qml.qhp -qhp.Qml.namespace = com.trolltech.qml.472 +qhp.Qml.namespace = com.trolltech.qml.473 qhp.Qml.virtualFolder = qdoc qhp.Qml.indexTitle = Qml Reference @@ -61,9 +61,9 @@ qhp.Qml.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Qml.filterAttributes = qt 4.7.2 qtrefdoc -qhp.Qml.customFilters.Qt.name = Qt 4.7.2 -qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.2 +qhp.Qml.filterAttributes = qt 4.7.3 qtrefdoc +qhp.Qml.customFilters.Qt.name = Qt 4.7.3 +qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.3 qhp.Qml.subprojects = classes qhp.Qml.subprojects.classes.title = Elements qhp.Qml.subprojects.classes.indexTitle = Qml Elements diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index b5bc96c..b7d1299 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = qmake qhp.qmake.file = qmake.qhp -qhp.qmake.namespace = com.trolltech.qmake.472 +qhp.qmake.namespace = com.trolltech.qmake.473 qhp.qmake.virtualFolder = qdoc qhp.qmake.indexTitle = QMake Manual qhp.qmake.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.qmake.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.qmake.filterAttributes = qt 4.7.2 tools qmake +qhp.qmake.filterAttributes = qt 4.7.3 tools qmake qhp.qmake.customFilters.qmake.name = qmake Manual qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake qhp.qmake.subprojects = manual diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf index 24696d5..a4d0653 100644 --- a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.472 +qhp.Qt.namespace = com.trolltech.qt.473 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = Qt qhp.Qt.indexTitle = Qt qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc ja_JP -qhp.Qt.customFilters.Qt.name = Qt 4.7.2 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 +qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.3 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index 7789bf7..818b5c5 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.472 +qhp.Qt.namespace = com.trolltech.qt.473 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = 教程 qhp.Qt.indexTitle = 教程 qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc zh_CN -qhp.Qt.customFilters.Qt.name = Qt 4.7.2 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 +qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc zh_CN +qhp.Qt.customFilters.Qt.name = Qt 4.7.3 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt-project.qdocconf b/tools/qdoc3/test/qt-project.qdocconf index 3ed7cff..2da0e90 100644 --- a/tools/qdoc3/test/qt-project.qdocconf +++ b/tools/qdoc3/test/qt-project.qdocconf @@ -6,7 +6,7 @@ include(qt-defines.qdocconf) project = Qt description = Qt Reference Documentation url = http://qt.nokia.com/doc/4.7 -version = 4.7.2 +version = 4.7.3 sourceencoding = UTF-8 outputencoding = UTF-8 @@ -15,14 +15,14 @@ naturallanguage = en_US qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.472 +qhp.Qt.namespace = com.trolltech.qt.473 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = -qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.2 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 +qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.3 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes -- cgit v0.12 From 3d946b24834973816b4f472828c03bc07b10b3ac Mon Sep 17 00:00:00 2001 From: Guoqing Zhang <guoqing.zhang@nokia.com> Date: Wed, 9 Mar 2011 13:49:35 +0200 Subject: Adding quote around files in QMAKE_CLEAN to tackle wildcard issue Task-number: QTPROD-875 Reviewed-by: Miikka Heikkinen --- mkspecs/symbian-sbsv2/flm/qt/qmake_clean.flm | 2 +- qmake/generators/symbian/symmake_sbsv2.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_clean.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_clean.flm index fe35e6e..c9a88fc 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_clean.flm +++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_clean.flm @@ -13,6 +13,6 @@ SINGLETON:=$(call sanitise,QMAKE_CLEAN_SINGLETON_$(EXTENSION_ROOT)) ifeq ($($(SINGLETON)),) # Prevent duplicate targets from being created $(SINGLETON):=1 -$(eval $(call GenerateStandardCleanTarget,$(CLEAN_FILES),'')) +$(eval $(call GenerateStandardCleanTarget,$(wildcard $(patsubst "%",%,$(CLEAN_FILES))))) endif diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index f94a63f..0fdef86 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -727,7 +727,10 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t QStringList absoluteCleanFiles; foreach (QString cleanFile, cleanFiles) { QFileInfo fi(cleanFile); - absoluteCleanFiles << fi.absoluteFilePath(); + QString fileName = QLatin1String("\""); + fileName.append(fi.absoluteFilePath()); + fileName.append(QLatin1String("\"")); + absoluteCleanFiles << fileName; } t << "START EXTENSION qt/qmake_clean" << endl; t << "OPTION CLEAN_FILES " << absoluteCleanFiles.join(" ") << endl; -- cgit v0.12 From 2b288ace6fb5747158609ac484268c29b30108e5 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Wed, 9 Mar 2011 14:16:40 +0200 Subject: Multiple screen support for Symbian in QDeskopWidget. When using TV-out, the TV display can be used as an independent screen. By default the content shown there is a clone of the device screen, however from now on parenting a widget to QDesktopWidget::screen(1) and calling show() will turn off cloning and have the widget shown instead. screenCount() and the screenCountChanged signal can be used to detect the availability of the secondary display, just like on other platforms. Task-number: QT-830 Reviewed-by: Sami Merila Reviewed-by: Jani Hautakangas --- src/corelib/global/qglobal.h | 2 + src/gui/kernel/qapplication_s60.cpp | 38 ++++-- src/gui/kernel/qdesktopwidget_s60.cpp | 160 +++++++++++++++++++---- src/gui/kernel/qt_s60_p.h | 84 ++++++++++++ src/gui/kernel/qwidget.cpp | 6 + src/gui/kernel/qwidget_p.h | 1 + src/gui/kernel/qwidget_s60.cpp | 32 ++++- tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp | 5 +- 8 files changed, 284 insertions(+), 44 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index fcee35d..9b3787e 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2454,6 +2454,8 @@ QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathSysconf(); # define Q_SYMBIAN_TRANSITION_EFFECTS #endif +#ifdef SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS +#define Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS #endif //Symbian does not support data imports from a DLL diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 02560b3..86d4fcf 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -405,6 +405,7 @@ QSymbianControl::QSymbianControl(QWidget *w) , m_longTapDetector(0) , m_ignoreFocusChanged(0) , m_symbianPopupIsOpen(0) + , m_inExternalScreenOverride(false) { } @@ -412,9 +413,11 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) { if (!desktop) { - if (isWindowOwning || !qwidget->parentWidget()) - CreateWindowL(S60->windowGroup()); - else + if (isWindowOwning || !qwidget->parentWidget() + || qwidget->parentWidget()->windowType() == Qt::Desktop) { + RWindowGroup &wg(S60->windowGroup(qwidget)); + CreateWindowL(wg); + } else { /** * TODO: in order to avoid creating windows for all ancestors of * this widget up to the root window, the parameter passed to @@ -424,6 +427,7 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) * is created for a widget between this one and the root window. */ CreateWindowL(qwidget->parentWidget()->winId()); + } // Necessary in order to be able to track the activation status of // the control's window @@ -456,7 +460,7 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) windowPurpose = ETfxPurposeSplashScreenWindow; break; default: - windowPurpose = (isWindowOwning || !qwidget->parentWidget()) + windowPurpose = (isWindowOwning || !qwidget->parentWidget() || qwidget->parentWidget()->windowType() == Qt::Desktop) ? ETfxPurposeWindow : ETfxPurposeChildWindow; break; } @@ -987,14 +991,15 @@ TKeyResponse QSymbianControl::handleVirtualMouse(const TKeyEvent& keyEvent,TEven } } //clip to screen size (window server allows a sprite hotspot to be outside the screen) + int screenNumber = S60->screenNumberForWidget(qwidget); if (x < 0) x = 0; - else if (x >= S60->screenWidthInPixels) - x = S60->screenWidthInPixels - 1; + else if (x >= S60->screenWidthInPixelsForScreen[screenNumber]) + x = S60->screenWidthInPixelsForScreen[screenNumber] - 1; if (y < 0) y = 0; - else if (y >= S60->screenHeightInPixels) - y = S60->screenHeightInPixels - 1; + else if (y >= S60->screenHeightInPixelsForScreen[screenNumber]) + y = S60->screenHeightInPixelsForScreen[screenNumber] - 1; TPoint epos(x, y); TPoint cpos = epos - PositionRelativeToScreen(); fakeEvent.iPosition = cpos; @@ -1171,6 +1176,18 @@ void QSymbianControl::SizeChanged() QSize newSize(Size().iWidth, Size().iHeight); if (oldSize != newSize) { + const bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen; + const int screenNumber = S60->screenNumberForWidget(qwidget); + if (!m_inExternalScreenOverride && isFullscreen && screenNumber > 0) { + int screenWidth = S60->screenWidthInPixelsForScreen[screenNumber]; + int screenHeight = S60->screenHeightInPixelsForScreen[screenNumber]; + TSize screenSize(screenWidth, screenHeight); + if (screenWidth > 0 && screenHeight > 0 && screenSize != Size()) { + m_inExternalScreenOverride = true; + SetExtent(TPoint(0, 0), screenSize); + return; + } + } QRect cr = qwidget->geometry(); cr.setSize(newSize); qwidget->data->crect = cr; @@ -1193,6 +1210,8 @@ void QSymbianControl::SizeChanged() } } + m_inExternalScreenOverride = false; + // CCoeControl::SetExtent calls SizeChanged, but does not call // PositionChanged, so we call it here to ensure that the widget's // position is updated. @@ -2035,7 +2054,8 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent return 1; } break; - case EEventScreenDeviceChanged: + case EEventScreenDeviceChanged: // fallthrough + case EEventDisplayChanged: if (callSymbianEventFilters(symbianEvent)) return 1; if (S60) diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index 3653ae2..9d48b64 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -44,36 +44,67 @@ #include "qwidget_p.h" #include "qt_s60_p.h" #include <w32std.h> - -#include "hal.h" -#include "hal_data.h" +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) +#include <graphics/displaycontrol.h> +#endif QT_BEGIN_NAMESPACE -class QDesktopWidgetPrivate : public QWidgetPrivate +extern int qt_symbian_create_desktop_on_screen; + +class QSingleDesktopWidget : public QWidget +{ +public: + QSingleDesktopWidget(); + ~QSingleDesktopWidget(); +}; + +QSingleDesktopWidget::QSingleDesktopWidget() + : QWidget(0, Qt::Desktop) +{ +} + +QSingleDesktopWidget::~QSingleDesktopWidget() { + const QObjectList &childList = children(); + for (int i = childList.size(); i > 0 ;) { + --i; + childList.at(i)->setParent(0); + } +} +class QDesktopWidgetPrivate : public QWidgetPrivate +{ public: QDesktopWidgetPrivate(); ~QDesktopWidgetPrivate(); - static void init(QDesktopWidget *that); static void cleanup(); + static void init_sys(); static int screenCount; static int primaryScreen; static QVector<QRect> *rects; static QVector<QRect> *workrects; + static QVector<QWidget *> *screens; static int refcount; + +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) + static MDisplayControl *displayControl; +#endif }; int QDesktopWidgetPrivate::screenCount = 1; int QDesktopWidgetPrivate::primaryScreen = 0; QVector<QRect> *QDesktopWidgetPrivate::rects = 0; QVector<QRect> *QDesktopWidgetPrivate::workrects = 0; +QVector<QWidget *> *QDesktopWidgetPrivate::screens = 0; int QDesktopWidgetPrivate::refcount = 0; +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) +MDisplayControl *QDesktopWidgetPrivate::displayControl = 0; +#endif QDesktopWidgetPrivate::QDesktopWidgetPrivate() { @@ -88,25 +119,53 @@ QDesktopWidgetPrivate::~QDesktopWidgetPrivate() void QDesktopWidgetPrivate::init(QDesktopWidget *that) { - Q_UNUSED(that); -// int screenCount=0; - - // ### TODO: Implement proper multi-display support - QDesktopWidgetPrivate::screenCount = 1; -// if (HAL::Get(0, HALData::EDisplayNumberOfScreens, screenCount) == KErrNone) -// QDesktopWidgetPrivate::screenCount = screenCount; -// else -// QDesktopWidgetPrivate::screenCount = 0; + // Note that on S^3 devices the screen count retrieved via RWsSession + // will always be 2 but the width and height for screen number 1 will + // be 0 as long as TV-out is not connected. + // + // On the other hand a valid size for screen 1 will be reported even + // after the cable is disconnected. In order to overcome this, we use + // MDisplayControl::NumberOfResolutions() to check if the display is + // valid or not. + + screenCount = S60->screenCount(); + if (displayControl) { + if (displayControl->NumberOfResolutions() < 1) + screenCount = 1; + } + if (screenCount < 1) { + qWarning("No screen available"); + screenCount = 1; + } rects = new QVector<QRect>(); workrects = new QVector<QRect>(); - - rects->resize(QDesktopWidgetPrivate::screenCount); - workrects->resize(QDesktopWidgetPrivate::screenCount); - - (*rects)[0].setRect(0, 0, S60->screenWidthInPixels, S60->screenHeightInPixels); - QRect wr = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); - (*workrects)[0].setRect(wr.x(), wr.y(), wr.width(), wr.height()); + screens = new QVector<QWidget *>(); + + rects->resize(screenCount); + workrects->resize(screenCount); + screens->resize(screenCount); + + for (int i = 0; i < screenCount; ++i) { + // All screens will share the same geometry as there is no true virtual desktop + // or pointer event support for multiple screens on Symbian. + QRect r(0, 0, + S60->screenWidthInPixelsForScreen[i], S60->screenHeightInPixelsForScreen[i]); + // Stop here if empty and ignore this screen. + if (r.isEmpty()) { + screenCount = i; + break; + } + (*rects)[i] = r; + QRect wr; + if (i == 0) + wr = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + else + wr = rects->at(i); + (*workrects)[i].setRect(wr.x(), wr.y(), wr.width(), wr.height()); + (*screens)[i] = 0; + } + (*screens)[0] = that; } void QDesktopWidgetPrivate::cleanup() @@ -115,6 +174,27 @@ void QDesktopWidgetPrivate::cleanup() rects = 0; delete workrects; workrects = 0; + if (screens) { + // First item is the QDesktopWidget so skip it. + for (int i = 1; i < screens->count(); ++i) + delete screens->at(i); + } + delete screens; + screens = 0; +} + +void QDesktopWidgetPrivate::init_sys() +{ +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) + CWsScreenDevice *dev = S60->screenDevice(1); + if (dev) { + displayControl = static_cast<MDisplayControl *>( + dev->GetInterface(MDisplayControl::ETypeId)); + if (displayControl) { + displayControl->EnableDisplayChangeEvents(ETrue); + } + } +#endif } @@ -122,6 +202,7 @@ QDesktopWidget::QDesktopWidget() : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop) { setObjectName(QLatin1String("desktop")); + QDesktopWidgetPrivate::init_sys(); QDesktopWidgetPrivate::init(this); } @@ -131,7 +212,7 @@ QDesktopWidget::~QDesktopWidget() bool QDesktopWidget::isVirtualDesktop() const { - return true; + return false; } int QDesktopWidget::primaryScreen() const @@ -145,9 +226,23 @@ int QDesktopWidget::numScreens() const return QDesktopWidgetPrivate::screenCount; } -QWidget *QDesktopWidget::screen(int /* screen */) +static inline QWidget *newSingleDesktopWidget(int screen) { - return this; + qt_symbian_create_desktop_on_screen = screen; + QWidget *w = new QSingleDesktopWidget; + qt_symbian_create_desktop_on_screen = -1; + return w; +} + +QWidget *QDesktopWidget::screen(int screen) +{ + Q_D(QDesktopWidget); + if (screen < 0 || screen >= d->screenCount) + screen = d->primaryScreen; + if (!d->screens->at(screen) + || d->screens->at(screen)->windowType() != Qt::Desktop) + (*d->screens)[screen] = newSingleDesktopWidget(screen); + return (*d->screens)[screen]; } const QRect QDesktopWidget::availableGeometry(int screen) const @@ -168,14 +263,19 @@ const QRect QDesktopWidget::screenGeometry(int screen) const return d->rects->at(screen); } -int QDesktopWidget::screenNumber(const QWidget * /* widget */) const +int QDesktopWidget::screenNumber(const QWidget *widget) const { - return QDesktopWidgetPrivate::primaryScreen; + Q_D(const QDesktopWidget); + return widget + ? S60->screenNumberForWidget(widget) + : d->primaryScreen; } -int QDesktopWidget::screenNumber(const QPoint & /* point */) const +int QDesktopWidget::screenNumber(const QPoint &point) const { - return QDesktopWidgetPrivate::primaryScreen; + Q_UNUSED(point); + Q_D(const QDesktopWidget); + return d->primaryScreen; } void QDesktopWidget::resizeEvent(QResizeEvent *) @@ -203,6 +303,10 @@ void QDesktopWidget::resizeEvent(QResizeEvent *) if (oldrect != newrect) emit workAreaResized(j); } + + if (oldscreencount != d->screenCount) { + emit screenCountChanged(d->screenCount); + } } QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 1e9967f..3bb27c3 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -64,6 +64,7 @@ #include "qapplication.h" #include "qelapsedtimer.h" #include "QtCore/qthreadstorage.h" +#include "qwidget_p.h" #include <w32std.h> #include <coecntrl.h> #include <eikenv.h> @@ -84,6 +85,8 @@ QT_BEGIN_NAMESPACE // system events seems to start with 0x10 const TInt KInternalStatusPaneChange = 0x50000000; +static const int qt_symbian_max_screens = 4; + //this macro exists because EColor16MAP enum value doesn't exist in Symbian OS 9.2 #define Q_SYMBIAN_ECOLOR16MAP TDisplayMode(13) @@ -157,8 +160,14 @@ public: static inline void updateScreenSize(); inline RWsSession& wsSession(); + static inline int screenCount(); static inline RWindowGroup& windowGroup(); + static inline RWindowGroup& windowGroup(const QWidget *widget); + static inline RWindowGroup& windowGroup(int screenNumber); inline CWsScreenDevice* screenDevice(); + inline CWsScreenDevice* screenDevice(const QWidget *widget); + inline CWsScreenDevice* screenDevice(int screenNumber); + static inline int screenNumberForWidget(const QWidget *widget); static inline CCoeAppUi* appUi(); static inline CEikMenuBar* menuBar(); #ifdef Q_WS_S60 @@ -175,6 +184,11 @@ public: #ifdef Q_OS_SYMBIAN TTrapHandler *s60InstalledTrapHandler; #endif + + int screenWidthInPixelsForScreen[qt_symbian_max_screens]; + int screenHeightInPixelsForScreen[qt_symbian_max_screens]; + int screenWidthInTwipsForScreen[qt_symbian_max_screens]; + int screenHeightInTwipsForScreen[qt_symbian_max_screens]; }; Q_AUTOTEST_EXPORT QS60Data* qGlobalS60Data(); @@ -274,6 +288,8 @@ private: // Fader object used to fade everything except this menu and the CBA. TAknPopupFader popupFader; #endif + + bool m_inExternalScreenOverride : 1; }; inline QS60Data::QS60Data() @@ -325,6 +341,17 @@ inline void QS60Data::updateScreenSize() S60->defaultDpiY = S60->screenHeightInPixels / inches; inches = S60->screenWidthInTwips / (TReal)KTwipsPerInch; S60->defaultDpiX = S60->screenWidthInPixels / inches; + + int screens = S60->screenCount(); + for (int i = 0; i < screens; ++i) { + CWsScreenDevice *dev = S60->screenDevice(i); + mode = dev->CurrentScreenMode(); + dev->GetScreenModeSizeAndRotation(mode, params); + S60->screenWidthInPixelsForScreen[i] = params.iPixelSize.iWidth; + S60->screenHeightInPixelsForScreen[i] = params.iPixelSize.iHeight; + S60->screenWidthInTwipsForScreen[i] = params.iTwipsSize.iWidth; + S60->screenHeightInTwipsForScreen[i] = params.iTwipsSize.iHeight; + } } inline RWsSession& QS60Data::wsSession() @@ -335,11 +362,38 @@ inline RWsSession& QS60Data::wsSession() return tls.localData()->wsSession; } +inline int QS60Data::screenCount() +{ +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) + CCoeEnv *env = CCoeEnv::Static(); + if (env) { + return qMin(env->WsSession().NumberOfScreens(), qt_symbian_max_screens); + } +#endif + return 1; +} + inline RWindowGroup& QS60Data::windowGroup() { return CCoeEnv::Static()->RootWin(); } +inline RWindowGroup& QS60Data::windowGroup(const QWidget *widget) +{ + return windowGroup(screenNumberForWidget(widget)); +} + +inline RWindowGroup& QS60Data::windowGroup(int screenNumber) +{ +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) + RWindowGroup *wg = CCoeEnv::Static()->RootWin(screenNumber); + return wg ? *wg : windowGroup(); +#else + Q_UNUSED(screenNumber); + return windowGroup(); +#endif +} + inline CWsScreenDevice* QS60Data::screenDevice() { if(!tls.hasLocalData()) { @@ -348,6 +402,36 @@ inline CWsScreenDevice* QS60Data::screenDevice() return tls.localData()->screenDevice; } +inline CWsScreenDevice* QS60Data::screenDevice(const QWidget *widget) +{ + return screenDevice(screenNumberForWidget(widget)); +} + +inline CWsScreenDevice* QS60Data::screenDevice(int screenNumber) +{ +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) + CCoeEnv *env = CCoeEnv::Static(); + if (env) { + CWsScreenDevice *dev = env->ScreenDevice(screenNumber); + return dev ? dev : screenDevice(); + } else { + return screenDevice(); + } +#else + return screenDevice(); +#endif +} + +inline int QS60Data::screenNumberForWidget(const QWidget *widget) +{ + if (!widget) + return 0; + const QWidget *w = widget; + while (w->parentWidget()) + w = w->parentWidget(); + return qt_widget_private(const_cast<QWidget *>(w))->symbianScreenNumber; +} + inline CCoeAppUi* QS60Data::appUi() { return CCoeEnv::Static()-> AppUi(); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 7065e85..1786e65 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -304,6 +304,8 @@ QWidgetPrivate::QWidgetPrivate(int version) , hasAlienChildren(0) , window_event(0) , qd_hd(0) +#elif defined(Q_OS_SYMBIAN) + , symbianScreenNumber(0) #endif { if (!qApp) { @@ -1284,6 +1286,10 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) // programmer specified desktop widget xinfo = desktopWidget->d_func()->xinfo; } +#elif defined(Q_OS_SYMBIAN) + if (desktopWidget) { + symbianScreenNumber = qt_widget_private(desktopWidget)->symbianScreenNumber; + } #else Q_UNUSED(desktopWidget); #endif diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 9f6ba6f..5235dc4 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -877,6 +877,7 @@ public: #elif defined(Q_OS_SYMBIAN) // <--------------------------------------------------------- SYMBIAN static QWidget *mouseGrabber; static QWidget *keyboardGrabber; + int symbianScreenNumber; // only valid for desktop widget and top-levels void s60UpdateIsOpaque(); void reparentChildren(); void registerTouchWindow(); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index af9ae47..be212fb 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -84,6 +84,8 @@ QWidget *QWidgetPrivate::mouseGrabber = 0; QWidget *QWidgetPrivate::keyboardGrabber = 0; CEikButtonGroupContainer *QS60Data::cba = 0; +int qt_symbian_create_desktop_on_screen = -1; + static bool isEqual(const QList<QAction*>& a, const QList<QAction*>& b) { if ( a.count() != b.count()) @@ -349,12 +351,18 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de int sh = clientRect.Height(); if (desktop) { - TSize screenSize = S60->screenDevice()->SizeInPixels(); + symbianScreenNumber = qMax(qt_symbian_create_desktop_on_screen, 0); + TSize screenSize = S60->screenDevice(symbianScreenNumber)->SizeInPixels(); data.crect.setRect(0, 0, screenSize.iWidth, screenSize.iHeight); q->setAttribute(Qt::WA_DontShowOnScreen); } else if (topLevel && !q->testAttribute(Qt::WA_Resized)){ int width = sw; int height = sh; + if (symbianScreenNumber > 0) { + TSize screenSize = S60->screenDevice(symbianScreenNumber)->SizeInPixels(); + width = screenSize.iWidth; + height = screenSize.iHeight; + } if (extra) { width = qMax(qMin(width, extra->maxw), extra->minw); height = qMax(qMin(height, extra->maxh), extra->minh); @@ -640,7 +648,7 @@ void QWidgetPrivate::raise_sys() // If toplevel widget, raise app to foreground if (q->isWindow()) - S60->wsSession().SetWindowGroupOrdinalPosition(S60->windowGroup().Identifier(), 0); + S60->wsSession().SetWindowGroupOrdinalPosition(S60->windowGroup(q).Identifier(), 0); } } @@ -652,7 +660,7 @@ void QWidgetPrivate::lower_sys() if (q->internalWinId()) { // If toplevel widget, lower app to background if (q->isWindow()) - S60->wsSession().SetWindowGroupOrdinalPosition(S60->windowGroup().Identifier(), -1); + S60->wsSession().SetWindowGroupOrdinalPosition(S60->windowGroup(q).Identifier(), -1); else q->internalWinId()->DrawableWindow()->SetOrdinalPosition(-1); } @@ -722,6 +730,11 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f) { Q_Q(QWidget); + if (parent && parent->windowType() == Qt::Desktop) { + symbianScreenNumber = qt_widget_private(parent)->symbianScreenNumber; + parent = 0; + } + bool wasCreated = q->testAttribute(Qt::WA_WState_Created); if (q->isVisible() && q->parentWidget() && parent != q->parentWidget()) @@ -1037,7 +1050,7 @@ int QWidget::metric(PaintDeviceMetric m) const } else if (m == PdmHeight) { val = data->crect.height(); } else { - CWsScreenDevice *scr = S60->screenDevice(); + CWsScreenDevice *scr = S60->screenDevice(this); switch(m) { case PdmDpiX: case PdmPhysicalDpiX: @@ -1207,7 +1220,16 @@ void QWidget::setWindowState(Qt::WindowStates newstate) const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint; if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) { setAttribute(Qt::WA_OutsideWSRange, false); - window->SetExtentToWholeScreen(); + if (d->symbianScreenNumber > 0) { + int w = S60->screenWidthInPixelsForScreen[d->symbianScreenNumber]; + int h = S60->screenHeightInPixelsForScreen[d->symbianScreenNumber]; + if (w <= 0 || h <= 0) + window->SetExtentToWholeScreen(); + else + window->SetExtent(TPoint(0, 0), TSize(w, h)); + } else { + window->SetExtentToWholeScreen(); + } } else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) { setAttribute(Qt::WA_OutsideWSRange, false); TRect maxExtent = qt_QRect2TRect(qApp->desktop()->availableGeometry(this)); diff --git a/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp b/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp index 0256b82..f66b849 100644 --- a/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp +++ b/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp @@ -127,7 +127,7 @@ void tst_QDesktopWidget::screenNumberForQWidget() QWidget widget; widget.show(); - QApplication::processEvents(); + QTest::qWaitForWindowShown(&widget); QVERIFY(widget.isVisible()); int widgetScreen = desktop.screenNumber(&widget); @@ -142,7 +142,9 @@ void tst_QDesktopWidget::screenNumberForQPoint() QRect allScreens; for (int i = 0; i < desktopWidget->numScreens(); ++i) { QRect screenGeometry = desktopWidget->screenGeometry(i); +#if !defined(Q_OS_SYMBIAN) QCOMPARE(desktopWidget->screenNumber(screenGeometry.center()), i); +#endif allScreens |= screenGeometry; } @@ -180,7 +182,6 @@ void tst_QDesktopWidget::screenGeometry() total = desktopWidget->screenGeometry(i); available = desktopWidget->availableGeometry(i); } - QVERIFY(total.contains(r)); } QTEST_MAIN(tst_QDesktopWidget) -- cgit v0.12 From 5440d903532a37fdd69ae60e6579f82909996620 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Wed, 9 Mar 2011 14:26:16 +0200 Subject: Added missing ifdefs to allow compilation on older Symbian versions. Reviewed-by: TRUSTME --- src/gui/kernel/qapplication_s60.cpp | 2 ++ src/gui/kernel/qdesktopwidget_s60.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 86d4fcf..6e43c8b 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -2055,7 +2055,9 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent } break; case EEventScreenDeviceChanged: // fallthrough +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) case EEventDisplayChanged: +#endif if (callSymbianEventFilters(symbianEvent)) return 1; if (S60) diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index 9d48b64..c3963f4 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -129,10 +129,12 @@ void QDesktopWidgetPrivate::init(QDesktopWidget *that) // valid or not. screenCount = S60->screenCount(); +#if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) if (displayControl) { if (displayControl->NumberOfResolutions() < 1) screenCount = 1; } +#endif if (screenCount < 1) { qWarning("No screen available"); screenCount = 1; @@ -147,7 +149,7 @@ void QDesktopWidgetPrivate::init(QDesktopWidget *that) screens->resize(screenCount); for (int i = 0; i < screenCount; ++i) { - // All screens will share the same geometry as there is no true virtual desktop + // All screens will have a position of (0, 0) as there is no true virtual desktop // or pointer event support for multiple screens on Symbian. QRect r(0, 0, S60->screenWidthInPixelsForScreen[i], S60->screenHeightInPixelsForScreen[i]); -- cgit v0.12 From d4250d9e1d4ed23e0cf41e6ce35d9dda6323455c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Wed, 9 Mar 2011 13:34:25 +0200 Subject: Implement language fallback logic for localize_deployment When querying system locale it does return both language and country, so sometimes users want to have both in their .ts file names (e.g. myapp_zh_CN.ts). This is bit problematic in Symbian, where there are separate language codes for only very few language + country combinations. Until now, the unsupported combinations were simply dropped from deployment localization. More proper way to handle these unknown language + country combinations is to fall back to using the plain language code for them instead of dropping them altogether. This is somewhat analogous to how QTranslator::load() loads .ts files if it can't find the file for specified language + country combination. E.g. User defines: TRANSLATIONS += myapp_zh_CN.ts myapp_zh_HK.ts myapp_zh_TW.ts There are separate Symbian language codes for HongKong Chinese (zh_HK = 30) and Taiwanese Chinese (zh_TW = 29), but rest of the world is expected to use just Chinese (zh = 31). This means "zh_CN" mapping is not provided as it would be same as plain "zh". With this fix, qmake will now automatically generate a fallback mapping from "zh_CN" to "31" for deployment localization purposes, and is able to read application captions and pkg names from myapp_zh_CN.ts. If there are multiple TRANSLATIONS defined that would result in same Symbian language code, only the first one is used. Task-number: QTBUG-17927 Reviewed-by: Oswald Buddenhagen --- mkspecs/common/symbian/symbian.conf | 32 +++++++++++++++++++++--- mkspecs/features/symbian/localize_deployment.prf | 9 +++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 65e6aa0e8..5f5c7e1 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -230,16 +230,41 @@ defineReplace(symbianRemoveSpecialCharacters) { # Determines translations that are Symbian supported defineTest(matchSymbianLanguages) { + # Qt language codes for which we need to parse .ts file SYMBIAN_MATCHED_LANGUAGES = + # List of translation files for matched languages SYMBIAN_MATCHED_TRANSLATIONS = + # List of Qt language codes for which we have no mapped Symbian code but we have a fallback code + # and therefore need to generate a mapping for in localize_deployment.prf. + # The fallback code means plain language code for languages that have both language and country codes. + # E.g. the fallback code for language "zh_CN" would be "zh". + SYMBIAN_UNMAPPED_LANGUAGES = + # List of handled Qt language codes to avoid duplicate Symbian language codes in case both + # unmapped language+country combination and its fallback code, or multiple unmapped language+country + # combinations that have same fallback code are included. + HANDLED_LANGUAGES = # Cannot parse .ts file for language here, so detect it from filename. # Allow two and three character language and country codes. for(translation, TRANSLATIONS) { language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) - contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) { - SYMBIAN_MATCHED_LANGUAGES += $$language - SYMBIAN_MATCHED_TRANSLATIONS += $$translation + !contains(HANDLED_LANGUAGES, $$language) { + HANDLED_LANGUAGES += $$language + contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) { + SYMBIAN_MATCHED_LANGUAGES += $$language + SYMBIAN_MATCHED_TRANSLATIONS += $$translation + } else { + # No direct mapping for specified language found. Check if a fallback language code can be used. + strippedLanguage = $$replace(language, "_.*$",) + contains(SYMBIAN_SUPPORTED_LANGUAGES, $$strippedLanguage):!contains(HANDLED_LANGUAGES, $$strippedLanguage) { + HANDLED_LANGUAGES += $$strippedLanguage + SYMBIAN_UNMAPPED_LANGUAGES += $$language + SYMBIAN_MATCHED_LANGUAGES += $$language + SYMBIAN_MATCHED_TRANSLATIONS += $$translation + SYMBIAN_LANGUAGE_FALLBACK.$$language = $$strippedLanguage + export(SYMBIAN_LANGUAGE_FALLBACK.$$language) + } + } } } @@ -247,6 +272,7 @@ defineTest(matchSymbianLanguages) { export(SYMBIAN_MATCHED_LANGUAGES) export(SYMBIAN_MATCHED_TRANSLATIONS) + export(SYMBIAN_UNMAPPED_LANGUAGES) } # Symbian pkg files that define multiple languages require a language specific string to be diff --git a/mkspecs/features/symbian/localize_deployment.prf b/mkspecs/features/symbian/localize_deployment.prf index 26a254b..185c713 100644 --- a/mkspecs/features/symbian/localize_deployment.prf +++ b/mkspecs/features/symbian/localize_deployment.prf @@ -101,6 +101,15 @@ isEmpty(SYMBIAN_MATCHED_LANGUAGES) { matchSymbianLanguages() } +# If there are translations that do not have Symbian language code defined for that exact +# language + country combination, but have Symbian language code defined for just the language, +# map the language + country combination to the same value as the plain language. +for(language, SYMBIAN_UNMAPPED_LANGUAGES) { + languageVar = SYMBIAN_LANG.$${language} + fallbackLanguageVar = SYMBIAN_LANG.$$eval(SYMBIAN_LANGUAGE_FALLBACK.$$language) + $$languageVar = $$eval($$fallbackLanguageVar) +} + !isEmpty(SYMBIAN_MATCHED_TRANSLATIONS) { # Generate dependencies to .ts files for pkg files template_pkg_target.depends += $$SYMBIAN_MATCHED_TRANSLATIONS -- cgit v0.12 From fa41a0416394a7a9f2f78b05e19d4a89c8828082 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Wed, 9 Mar 2011 16:55:03 +0200 Subject: Fix for misplaced endif in qglobal.h. Reviewed-by: TRUSTME --- src/corelib/global/qglobal.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 9b3787e..501f187 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2453,6 +2453,7 @@ QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathSysconf(); #ifdef SYMBIAN_GRAPHICS_TRANSITION_EFFECTS_SIGNALING_AVAILABLE # define Q_SYMBIAN_TRANSITION_EFFECTS #endif +#endif #ifdef SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS #define Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS -- cgit v0.12 From 09ff8924d5d05b285d9ed6a03817bdf271b6b108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Wed, 9 Mar 2011 16:37:19 +0100 Subject: Partial update window surfaces always need a repaint before flush. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we get an Expose, we need to repaint the window surface before we can flush if the window surface doesn't support partial updates, otherwise we'll end up with garbage on the screen. Reviewed-by: Bjørn Erik Nilsen --- src/gui/painting/qbackingstore.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 83c58c4..4fcff1d 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -1117,6 +1117,11 @@ void QWidgetBackingStore::sync(QWidget *exposedWidget, const QRegion &exposedReg return; } + // If there's no partial update support we always need + // to do a full repaint before flushing + if (!windowSurface->hasPartialUpdateSupport()) + fullUpdatePending = true; + // Nothing to repaint. if (!isDirty()) { qt_flush(exposedWidget, exposedRegion, windowSurface, tlw, tlwOffset); -- cgit v0.12 From 5098b3cc1127a1a4cbd66d0eeea8f2ec5f625bb9 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Thu, 10 Mar 2011 11:26:38 +1000 Subject: Fix failing tests RTL text-related tests were failing on mac since QApplication::keyboardInputDirection() is not always initialized when the QApplication instance is created. Change-Id: Ifa7214ffb1941d824a9425015b38aa77366381bb Reviewed-by: Martin Jones --- doc/src/snippets/declarative/states/statechangescript.qml | 1 + tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 5 +++++ .../declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 4 ++++ .../declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/doc/src/snippets/declarative/states/statechangescript.qml b/doc/src/snippets/declarative/states/statechangescript.qml index b885137..f490a97 100644 --- a/doc/src/snippets/declarative/states/statechangescript.qml +++ b/doc/src/snippets/declarative/states/statechangescript.qml @@ -37,6 +37,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +import QtQuick 1.0 Item { //! [state and transition] diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index b5dfba8..2d52642 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -602,6 +602,7 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QCOMPARE(text->hAlign(), QDeclarativeText::AlignLeft); QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().left() < canvas->width()/2); +#ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based // keyboard input direction from QApplication::keyboardInputDirection text->setText(""); @@ -609,8 +610,11 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QDeclarativeText::AlignLeft : QDeclarativeText::AlignRight); text->setHAlign(QDeclarativeText::AlignRight); QCOMPARE(text->hAlign(), QDeclarativeText::AlignRight); +#endif + delete canvas; +#ifndef Q_OS_MAC // QTBUG-18040 // alignment of Text with no text set to it QString componentStr = "import QtQuick 1.0\nText {}"; QDeclarativeComponent textComponent(&engine); @@ -619,6 +623,7 @@ void tst_qdeclarativetext::horizontalAlignment_RightToLeft() QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? QDeclarativeText::AlignLeft : QDeclarativeText::AlignRight); delete textObject; +#endif } void tst_qdeclarativetext::verticalAlignment() diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 402c6cd..7aac76c 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -524,6 +524,7 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignLeft); QVERIFY(textEdit->positionToRectangle(0).x() < canvas->width()/2); +#ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based // keyboard input direction from QApplication::keyboardInputDirection textEdit->setText(""); @@ -536,9 +537,11 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() textEdit->setHAlign(QDeclarativeTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QDeclarativeTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas->width()/2); +#endif delete canvas; +#ifndef Q_OS_MAC // QTBUG-18040 // alignment of TextEdit with no text set to it QString componentStr = "import QtQuick 1.0\nTextEdit {}"; QDeclarativeComponent textComponent(&engine); @@ -547,6 +550,7 @@ void tst_qdeclarativetextedit::hAlign_RightToLeft() QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? QDeclarativeTextEdit::AlignLeft : QDeclarativeTextEdit::AlignRight); delete textObject; +#endif } void tst_qdeclarativetextedit::vAlign() diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 734f91f..796ac23 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1111,6 +1111,7 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignLeft); QVERIFY(-textInputPrivate->hscroll < canvas->width()/2); +#ifndef Q_OS_MAC // QTBUG-18040 // empty text with implicit alignment follows the system locale-based // keyboard input direction from QApplication::keyboardInputDirection textInput->setText(""); @@ -1123,9 +1124,11 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() textInput->setHAlign(QDeclarativeTextInput::AlignRight); QCOMPARE(textInput->hAlign(), QDeclarativeTextInput::AlignRight); QVERIFY(-textInputPrivate->hscroll > canvas->width()/2); +#endif delete canvas; +#ifndef Q_OS_MAC // QTBUG-18040 // alignment of TextInput with no text set to it QString componentStr = "import QtQuick 1.0\nTextInput {}"; QDeclarativeComponent textComponent(&engine); @@ -1134,6 +1137,7 @@ void tst_qdeclarativetextinput::horizontalAlignment_RightToLeft() QCOMPARE(textObject->hAlign(), QApplication::keyboardInputDirection() == Qt::LeftToRight ? QDeclarativeTextInput::AlignLeft : QDeclarativeTextInput::AlignRight); delete textObject; +#endif } void tst_qdeclarativetextinput::positionAt() -- cgit v0.12 From 6fb7a21fc5b7324456d210e2134ffe97ae245d2c Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 10 Mar 2011 08:43:17 +0200 Subject: Visible flashing on QML app when split view is opened and closed The root cause is that input widget is re-positioned twice; once when keyboard opens and second time when window becomes visible. This causes flicker. Task-number: QTBUG-17979 Reviewed-by: Laszlo Agocs --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index cd4e2fd..e3f13ff 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -330,26 +330,6 @@ bool QCoeFepInputContext::symbianFilterEvent(QWidget *keyWidget, const QSymbianE // This should also happen for commands. reset(); - // We need to translate the window content when window becomes available. Changing the window while it is - // not yet ready with OpenVg graphicssystem results in operations silently failing. - - if (event->windowServerEvent() && event->windowServerEvent()->Type() == EEventWindowVisibilityChanged) { - if (S60->splitViewLastWidget) { - QGraphicsView *gv = qobject_cast<QGraphicsView*>(S60->splitViewLastWidget); - const bool alwaysResize = (gv && gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); - TUint visibleFlags = event->windowServerEvent()->VisibilityChanged()->iFlags; - if (!alwaysResize) { - if (visibleFlags & TWsVisibilityChangedEvent::EPartiallyVisible) { - if (!isWidgetVisible(S60->splitViewLastWidget)) { - ensureFocusWidgetVisible(S60->splitViewLastWidget); - } - } else if (visibleFlags & TWsVisibilityChangedEvent::ENotVisible) { - resetSplitViewWidget(true); - } - } - } - } - return false; } -- cgit v0.12 From 7a94ad38f0d730689ff3ed973b5824e5d7ab6408 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 10 Mar 2011 08:46:40 +0200 Subject: QML app: text input field is not visible when split view is opened When using a maximized QML application and user taps to a input widget, opened splitview does not show the focused input widget. The root cause of the problem is that when we move to splitview, we set the window state to fullscreen. Unfortunately, there we were trying to fullscreen the input widget and not the window that where the input widget is. Task-number: QTBUG-17984 Reviewed-by: Guoqing Zhang --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index e3f13ff..86cea60 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -509,7 +509,7 @@ void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) // as the statuspane size is not changing. if (!(windowToMove->windowState() & Qt::WindowFullScreen)) { - widget->setWindowState( + windowToMove->setWindowState( (windowToMove->windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowFullScreen); } -- cgit v0.12 From af33f9f2e7ec433b81f5c18e3e7395db4a56c5fe Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 10 Mar 2011 16:41:57 +1000 Subject: AnimatedImage does not change progress value This fixes QTBUG-17964 and make AnimatedImage behave like Image. Task-number: QTBUG-17964 Reviewed-By: Martin Jones Change-Id: I33996353a3b4ee0edb03741998f3ea893d4d31e5 --- .../graphicsitems/qdeclarativeanimatedimage.cpp | 25 ++++++++--- .../tst_qdeclarativeanimatedimage.cpp | 49 ++++++++++++++++++++++ 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp index 016b87d..8cc8165 100644 --- a/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeanimatedimage.cpp @@ -231,9 +231,18 @@ void QDeclarativeAnimatedImage::load() { Q_D(QDeclarativeAnimatedImage); + QDeclarativeImageBase::Status oldStatus = d->status; + qreal oldProgress = d->progress; + if (d->url.isEmpty()) { delete d->_movie; + d->setPixmap(QPixmap()); + d->progress = 0; d->status = Null; + if (d->status != oldStatus) + emit statusChanged(d->status); + if (d->progress != oldProgress) + emit progressChanged(d->progress); } else { #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(d->url); @@ -245,7 +254,8 @@ void QDeclarativeAnimatedImage::load() delete d->_movie; d->_movie = 0; d->status = Error; - emit statusChanged(d->status); + if (d->status != oldStatus) + emit statusChanged(d->status); return; } connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)), @@ -262,20 +272,25 @@ void QDeclarativeAnimatedImage::load() d->setPixmap(d->_movie->currentPixmap()); d->status = Ready; d->progress = 1.0; - emit statusChanged(d->status); - emit sourceChanged(d->url); - emit progressChanged(d->progress); + if (d->status != oldStatus) + emit statusChanged(d->status); + if (d->progress != oldProgress) + emit progressChanged(d->progress); return; } #endif d->status = Loading; + d->progress = 0; + emit statusChanged(d->status); + emit progressChanged(d->progress); QNetworkRequest req(d->url); req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); d->reply = qmlEngine(this)->networkAccessManager()->get(req); QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(movieRequestFinished())); + QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)), + this, SLOT(requestProgress(qint64,qint64))); } - emit statusChanged(d->status); } #define ANIMATEDIMAGE_MAXIMUM_REDIRECT_RECURSION 16 diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp index 104ee15..7d1b807 100644 --- a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp +++ b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp @@ -46,6 +46,7 @@ #include <private/qdeclarativeimage_p.h> #include <private/qdeclarativeanimatedimage_p.h> #include <QSignalSpy> +#include <QtDeclarative/qdeclarativecontext.h> #include "../shared/testhttpserver.h" #include "../../../shared/util.h" @@ -76,6 +77,7 @@ private slots: void sourceSizeReadOnly(); void invalidSource(); void qtbug_16520(); + void progressAndStatusChanges(); private: QPixmap grabScene(QGraphicsScene *scene, int width, int height); @@ -333,6 +335,53 @@ void tst_qdeclarativeanimatedimage::qtbug_16520() delete anim; } +void tst_qdeclarativeanimatedimage::progressAndStatusChanges() +{ + TestHTTPServer server(14449); + QVERIFY(server.isValid()); + server.serveDirectory(SRCDIR "/data"); + + QDeclarativeEngine engine; + QString componentStr = "import QtQuick 1.0\nAnimatedImage { source: srcImage }"; + QDeclarativeContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/stickman.gif")); + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->status() == QDeclarativeImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + + QSignalSpy sourceSpy(obj, SIGNAL(sourceChanged(const QUrl &))); + QSignalSpy progressSpy(obj, SIGNAL(progressChanged(qreal))); + QSignalSpy statusSpy(obj, SIGNAL(statusChanged(QDeclarativeImageBase::Status))); + + // Loading local file + ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.gif")); + QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + QTRY_COMPARE(sourceSpy.count(), 1); + QTRY_COMPARE(progressSpy.count(), 0); + QTRY_COMPARE(statusSpy.count(), 0); + + // Loading remote file + ctxt->setContextProperty("srcImage", "http://127.0.0.1:14449/stickman.gif"); + QTRY_VERIFY(obj->status() == QDeclarativeImage::Loading); + QTRY_VERIFY(obj->progress() == 0.0); + QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + QTRY_COMPARE(sourceSpy.count(), 2); + QTRY_VERIFY(progressSpy.count() > 1); + QTRY_COMPARE(statusSpy.count(), 2); + + ctxt->setContextProperty("srcImage", ""); + QTRY_VERIFY(obj->status() == QDeclarativeImage::Null); + QTRY_VERIFY(obj->progress() == 0.0); + QTRY_COMPARE(sourceSpy.count(), 3); + QTRY_VERIFY(progressSpy.count() > 2); + QTRY_COMPARE(statusSpy.count(), 3); +} + QTEST_MAIN(tst_qdeclarativeanimatedimage) #include "tst_qdeclarativeanimatedimage.moc" -- cgit v0.12 From 07fa5bd76e6ecd87ea8f8422ddaec56eb4db2289 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta <gunnar.sletta@nokia.com> Date: Thu, 10 Mar 2011 08:55:00 +0100 Subject: Fix PBuffer example to work again Done by: Trond --- examples/opengl/pbuffers/cube.cpp | 49 +++++++++++++++++++++++------------ examples/opengl/pbuffers/cube.h | 3 ++- examples/opengl/pbuffers/glwidget.cpp | 2 +- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/examples/opengl/pbuffers/cube.cpp b/examples/opengl/pbuffers/cube.cpp index 5bd35e1..631595a 100644 --- a/examples/opengl/pbuffers/cube.cpp +++ b/examples/opengl/pbuffers/cube.cpp @@ -46,7 +46,7 @@ static const qreal FACE_SIZE = 0.4; -static const qreal speeds[] = { 1.8f, 2.4f, 3.6f }; +static const qreal speeds[] = { 3.8f, 4.4f, 5.6f }; static const qreal amplitudes[] = { 2.0f, 2.5f, 3.0f }; static inline void qSetColor(float colorVec[], QColor c) @@ -197,7 +197,8 @@ Tile *TileBuilder::newTile(const QVector3D &loc) const Cube::Cube(const QVector3D &loc) : Tile(loc) , rot(0.0f) - , r(0), a(0) + , r(0) + , animGroup(0) { } @@ -234,8 +235,8 @@ void Cube::setRotation(qreal r) void Cube::removeBounce() { - delete a; - a = 0; + delete animGroup; + animGroup = 0; delete r; r = 0; } @@ -247,8 +248,8 @@ void Cube::startAnimation() r->start(); r->setCurrentTime(startx); } - if (a) - a->start(); + if (animGroup) + animGroup->start(); if (rtn) rtn->start(); } @@ -259,8 +260,8 @@ void Cube::setAnimationPaused(bool paused) { if (r) r->pause(); - if (a) - a->pause(); + if (animGroup) + animGroup->pause(); if (rtn) rtn->pause(); } @@ -268,8 +269,8 @@ void Cube::setAnimationPaused(bool paused) { if (r) r->resume(); - if (a) - a->resume(); + if (animGroup) + animGroup->resume(); if (rtn) rtn->resume(); } @@ -312,13 +313,29 @@ Cube *CubeBuilder::newCube(const QVector3D &loc) const c->r->setDuration(d * 4.0f); c->r->setLoopCount(-1); c->r->setEasingCurve(QEasingCurve(QEasingCurve::CosineCurve)); + + c->animGroup = new QSequentialAnimationGroup(c); + // Animate movement from bottom to top - c->a = new QPropertyAnimation(c, "altitude"); - c->a->setEndValue(loc.y()); - c->a->setStartValue(loc.y() + amplitudes[ix]); - c->a->setDuration(d / speeds[ix]); - c->a->setLoopCount(-1); - c->a->setEasingCurve(QEasingCurve(QEasingCurve::CosineCurve)); + QPropertyAnimation *a_up = new QPropertyAnimation(c, "altitude", c->animGroup); + a_up->setEndValue(loc.y()); + a_up->setStartValue(loc.y() + amplitudes[ix]); + a_up->setDuration(d / speeds[ix]); + a_up->setLoopCount(1); + a_up->setEasingCurve(QEasingCurve(QEasingCurve::InQuad)); + + // Animate movement from top to bottom + QPropertyAnimation *a_down = new QPropertyAnimation(c, "altitude", c->animGroup); + a_down->setEndValue(loc.y() + amplitudes[ix]); + a_down->setStartValue(loc.y()); + a_down->setDuration(d / speeds[ix]); + a_down->setLoopCount(1); + a_down->setEasingCurve(QEasingCurve(QEasingCurve::OutQuad)); + + c->animGroup->addAnimation(a_up); + c->animGroup->addAnimation(a_down); + c->animGroup->setLoopCount(-1); + // Animate rotation c->rtn = new QPropertyAnimation(c, "rotation"); c->rtn->setStartValue(c->rot); diff --git a/examples/opengl/pbuffers/cube.h b/examples/opengl/pbuffers/cube.h index 2577e76..5c985a3 100644 --- a/examples/opengl/pbuffers/cube.h +++ b/examples/opengl/pbuffers/cube.h @@ -43,6 +43,7 @@ #include <QtOpenGL/qgl.h> #include <QtCore/qvector.h> +#include <QtCore/qsequentialanimationgroup.h> #include <QtGui/qmatrix4x4.h> #include <QtGui/qvector3d.h> #include <QtGui/qvector2d.h> @@ -130,8 +131,8 @@ signals: private: qreal rot; QPropertyAnimation *r; - QPropertyAnimation *a; QPropertyAnimation *rtn; + QSequentialAnimationGroup *animGroup; qreal startx; friend class CubeBuilder; }; diff --git a/examples/opengl/pbuffers/glwidget.cpp b/examples/opengl/pbuffers/glwidget.cpp index 930cbc8..f6f89e5 100644 --- a/examples/opengl/pbuffers/glwidget.cpp +++ b/examples/opengl/pbuffers/glwidget.cpp @@ -135,7 +135,7 @@ void GLWidget::initializeGeometry() CubeBuilder cBuilder(geom, 0.5); cBuilder.setColor(QColor(255, 255, 255, 212)); // build the 3 bouncing, spinning cubes - for (int i = 0; i < 3; ++i) + for (int i = 3; i > 0; --i) cubes.append(cBuilder.newCube(QVector3D((float)(i-1), -1.5f, 5 - i))); // build the spinning cube which goes in the dynamic texture -- cgit v0.12 From d65cb0bbb17d21cce2823ace521dea9e53fe4988 Mon Sep 17 00:00:00 2001 From: Janne Hamalainen <janne.a.hamalainen@nokia.com> Date: Thu, 10 Mar 2011 10:09:08 +0200 Subject: Added Harmattan specific debian files to master branch. Debian packaging files added to Master branch. One translation file was removed as it was a left over from an old commit. Reference to it was removed from rules file. Similar commit is done for Harmattan as well. Task: BACKEND-564 Reviewed-by: Adrian Constantin --- config.profiles/harmattan/QMLViewer.desktop | 9 + config.profiles/harmattan/QMLViewer.png | Bin 0 -> 7150 bytes config.profiles/harmattan/README.source | 58 + config.profiles/harmattan/api | 120 ++ config.profiles/harmattan/changelog | 2039 ++++++++++++++++++++ config.profiles/harmattan/collection/qtdemo.qhc.uu | 231 +++ config.profiles/harmattan/compat | 1 + config.profiles/harmattan/configure-pulse.sh | 81 + config.profiles/harmattan/control | 648 +++++++ config.profiles/harmattan/libqt4-core.lintian | 1 + config.profiles/harmattan/libqt4-dbus-dbg.lintian | 1 + config.profiles/harmattan/libqt4-dbus.install | 3 + config.profiles/harmattan/libqt4-dbus.lintian | 2 + .../harmattan/libqt4-declarative-dbg.lintian | 1 + .../harmattan/libqt4-declarative-dev.lintian | 1 + .../harmattan/libqt4-declarative.install | 4 + .../harmattan/libqt4-declarative.lintian | 2 + config.profiles/harmattan/libqt4-dev.dirs | 1 + config.profiles/harmattan/libqt4-dev.install | 85 + config.profiles/harmattan/libqt4-dev.links | 13 + config.profiles/harmattan/libqt4-dev.lintian | 17 + config.profiles/harmattan/libqt4-dev.manpages | 5 + config.profiles/harmattan/libqt4-dev.postinst | 21 + config.profiles/harmattan/libqt4-dev.prerm | 16 + config.profiles/harmattan/libqt4-doc.install | 1 + config.profiles/harmattan/libqt4-doc.lintian | 1 + config.profiles/harmattan/libqt4-gui-tests.lintian | 64 + config.profiles/harmattan/libqt4-gui.lintian | 1 + config.profiles/harmattan/libqt4-help-dbg.lintian | 1 + config.profiles/harmattan/libqt4-help.install | 4 + config.profiles/harmattan/libqt4-help.lintian | 2 + config.profiles/harmattan/libqt4-meego-dbg.lintian | 1 + config.profiles/harmattan/libqt4-meego-dev.lintian | 1 + config.profiles/harmattan/libqt4-meego.lintian | 2 + .../harmattan/libqt4-meegographicssystem.install | 1 + .../libqt4-meegographicssystemhelper-dev.install | 3 + .../libqt4-meegographicssystemhelper.install | 1 + .../harmattan/libqt4-multimedia-dbg.lintian | 1 + .../harmattan/libqt4-multimedia.install | 1 + .../harmattan/libqt4-multimedia.lintian | 2 + .../harmattan/libqt4-network-dbg.lintian | 1 + config.profiles/harmattan/libqt4-network.install | 2 + config.profiles/harmattan/libqt4-network.lintian | 2 + .../harmattan/libqt4-opengl-dbg.lintian | 1 + .../harmattan/libqt4-opengl-dev.lintian | 1 + config.profiles/harmattan/libqt4-opengl.install | 2 + config.profiles/harmattan/libqt4-opengl.lintian | 3 + .../harmattan/libqt4-phonon-dbg.lintian | 1 + config.profiles/harmattan/libqt4-phonon.install | 2 + config.profiles/harmattan/libqt4-phonon.lintian | 2 + .../harmattan/libqt4-script-dbg.lintian | 1 + config.profiles/harmattan/libqt4-script.install | 3 + config.profiles/harmattan/libqt4-script.lintian | 2 + config.profiles/harmattan/libqt4-sql-dbg.lintian | 1 + .../harmattan/libqt4-sql-sqlite-dbg.lintian | 1 + .../harmattan/libqt4-sql-sqlite.install | 2 + .../harmattan/libqt4-sql-sqlite.lintian | 1 + config.profiles/harmattan/libqt4-sql.install | 2 + config.profiles/harmattan/libqt4-sql.lintian | 2 + config.profiles/harmattan/libqt4-svg-dbg.lintian | 1 + config.profiles/harmattan/libqt4-svg.install | 4 + config.profiles/harmattan/libqt4-svg.lintian | 2 + config.profiles/harmattan/libqt4-test-dbg.lintian | 1 + config.profiles/harmattan/libqt4-test.install | 2 + config.profiles/harmattan/libqt4-test.lintian | 2 + config.profiles/harmattan/libqt4-webkit.lintian | 1 + config.profiles/harmattan/libqt4-xml-dbg.lintian | 1 + config.profiles/harmattan/libqt4-xml.install | 1 + config.profiles/harmattan/libqt4-xml.lintian | 2 + .../harmattan/libqt4-xmlpatterns-dbg.lintian | 1 + .../harmattan/libqt4-xmlpatterns.install | 3 + .../harmattan/libqt4-xmlpatterns.lintian | 2 + config.profiles/harmattan/libqt4.lintian | 1 + config.profiles/harmattan/libqtcore4-dbg.lintian | 1 + config.profiles/harmattan/libqtcore4.install | 6 + config.profiles/harmattan/libqtcore4.lintian | 2 + config.profiles/harmattan/libqtgui4-dbg.lintian | 1 + config.profiles/harmattan/libqtgui4.install | 7 + config.profiles/harmattan/libqtgui4.lintian | 2 + config.profiles/harmattan/manpages/lrelease.1 | 89 + config.profiles/harmattan/manpages/lupdate.1 | 95 + config.profiles/harmattan/manpages/moc.1 | 449 +++++ config.profiles/harmattan/manpages/qmake.1 | 106 + config.profiles/harmattan/manpages/qtconfig.1 | 34 + config.profiles/harmattan/manpages/uic.1 | 136 ++ .../harmattan/mkspecs/linux-g++-cross/qmake.conf | 54 + .../mkspecs/linux-g++-cross/qplatformdefs.h | 42 + config.profiles/harmattan/not-installed | 18 + .../harmattan/patches/default_widget_size.diff | 13 + .../harmattan/patches/glshadercache.diff | 1003 ++++++++++ config.profiles/harmattan/patches/icu.diff | 732 +++++++ .../patches/no_read_pro_from_quilt_dir.diff | 13 + .../patches/pinch_gesture_sent_twice.diff | 56 + .../harmattan/patches/qgltexturecache.diff | 23 + config.profiles/harmattan/patches/qwidget_x11.diff | 39 + .../harmattan/patches/qwidget_x11_mapping.diff | 17 + .../patches/runtime-window-geometry-revert.diff | 12 + config.profiles/harmattan/patches/series | 14 + .../harmattan/patches/signon_authenticator4.diff | 230 +++ config.profiles/harmattan/patches/temppath.diff | 28 + .../harmattan/patches/tst_qprogressbar.diff | 19 + .../harmattan/patches/tst_qscrollbar.diff | 12 + .../harmattan/patches/tst_qvariant.diff | 21 + .../harmattan/qt4-acceptance-tests.lintian | 6 + .../harmattan/qt4-declarative-qmlviewer.install | 3 + .../harmattan/qt4-declarative-qmlviewer.lintian | 1 + config.profiles/harmattan/qt4-doc-html.doc-base | 11 + config.profiles/harmattan/qt4-doc-html.install | 2 + config.profiles/harmattan/qt4-doc-html.links | 2 + config.profiles/harmattan/qt4-doc.install | 3 + .../harmattan/qt4-linguist-tools.install | 4 + .../harmattan/qt4-linguist-tools.lintian | 4 + .../harmattan/qt4-linguist-tools.postinst | 16 + config.profiles/harmattan/qt4-linguist-tools.prerm | 16 + .../harmattan/qt4-maemo-auto-tests.lintian | 41 + config.profiles/harmattan/readdir-hppa-test.c | 25 + config.profiles/harmattan/rules | 404 ++++ config.profiles/harmattan/source.lintian-overrides | 5 + config.profiles/harmattan/source/format | 1 + config.profiles/harmattan/tests/create_tests_xml | 174 ++ .../harmattan/tests/libqt4-gui-tests.pro | 64 + config.profiles/harmattan/tests/maemo_tests.prf | 57 + .../harmattan/tests/qt4-acceptance-tests.pro | 6 + .../harmattan/tests/qt4-maemo-auto-tests.pro | 44 + config.profiles/harmattan/tests/tests.xml | 320 +++ config.profiles/harmattan/tests/testset.txt | 11 + .../harmattan/tests/testsuite_footer.txt | 2 + .../harmattan/tests/testsuite_header.txt | 4 + 128 files changed, 8003 insertions(+) create mode 100644 config.profiles/harmattan/QMLViewer.desktop create mode 100644 config.profiles/harmattan/QMLViewer.png create mode 100644 config.profiles/harmattan/README.source create mode 100644 config.profiles/harmattan/api create mode 100644 config.profiles/harmattan/changelog create mode 100644 config.profiles/harmattan/collection/qtdemo.qhc.uu create mode 100644 config.profiles/harmattan/compat create mode 100755 config.profiles/harmattan/configure-pulse.sh create mode 100644 config.profiles/harmattan/control create mode 100644 config.profiles/harmattan/libqt4-core.lintian create mode 100644 config.profiles/harmattan/libqt4-dbus-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-dbus.install create mode 100644 config.profiles/harmattan/libqt4-dbus.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative.install create mode 100644 config.profiles/harmattan/libqt4-declarative.lintian create mode 100644 config.profiles/harmattan/libqt4-dev.dirs create mode 100644 config.profiles/harmattan/libqt4-dev.install create mode 100644 config.profiles/harmattan/libqt4-dev.links create mode 100644 config.profiles/harmattan/libqt4-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-dev.manpages create mode 100644 config.profiles/harmattan/libqt4-dev.postinst create mode 100644 config.profiles/harmattan/libqt4-dev.prerm create mode 100644 config.profiles/harmattan/libqt4-doc.install create mode 100644 config.profiles/harmattan/libqt4-doc.lintian create mode 100644 config.profiles/harmattan/libqt4-gui-tests.lintian create mode 100644 config.profiles/harmattan/libqt4-gui.lintian create mode 100644 config.profiles/harmattan/libqt4-help-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-help.install create mode 100644 config.profiles/harmattan/libqt4-help.lintian create mode 100644 config.profiles/harmattan/libqt4-meego-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-meego-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-meego.lintian create mode 100644 config.profiles/harmattan/libqt4-meegographicssystem.install create mode 100644 config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install create mode 100644 config.profiles/harmattan/libqt4-meegographicssystemhelper.install create mode 100644 config.profiles/harmattan/libqt4-multimedia-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-multimedia.install create mode 100644 config.profiles/harmattan/libqt4-multimedia.lintian create mode 100644 config.profiles/harmattan/libqt4-network-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-network.install create mode 100644 config.profiles/harmattan/libqt4-network.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl.install create mode 100644 config.profiles/harmattan/libqt4-opengl.lintian create mode 100644 config.profiles/harmattan/libqt4-phonon-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-phonon.install create mode 100644 config.profiles/harmattan/libqt4-phonon.lintian create mode 100644 config.profiles/harmattan/libqt4-script-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-script.install create mode 100644 config.profiles/harmattan/libqt4-script.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite.install create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite.lintian create mode 100644 config.profiles/harmattan/libqt4-sql.install create mode 100644 config.profiles/harmattan/libqt4-sql.lintian create mode 100644 config.profiles/harmattan/libqt4-svg-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-svg.install create mode 100644 config.profiles/harmattan/libqt4-svg.lintian create mode 100644 config.profiles/harmattan/libqt4-test-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-test.install create mode 100644 config.profiles/harmattan/libqt4-test.lintian create mode 100644 config.profiles/harmattan/libqt4-webkit.lintian create mode 100644 config.profiles/harmattan/libqt4-xml-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-xml.install create mode 100644 config.profiles/harmattan/libqt4-xml.lintian create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns.install create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns.lintian create mode 100644 config.profiles/harmattan/libqt4.lintian create mode 100644 config.profiles/harmattan/libqtcore4-dbg.lintian create mode 100644 config.profiles/harmattan/libqtcore4.install create mode 100644 config.profiles/harmattan/libqtcore4.lintian create mode 100644 config.profiles/harmattan/libqtgui4-dbg.lintian create mode 100644 config.profiles/harmattan/libqtgui4.install create mode 100644 config.profiles/harmattan/libqtgui4.lintian create mode 100644 config.profiles/harmattan/manpages/lrelease.1 create mode 100644 config.profiles/harmattan/manpages/lupdate.1 create mode 100644 config.profiles/harmattan/manpages/moc.1 create mode 100644 config.profiles/harmattan/manpages/qmake.1 create mode 100644 config.profiles/harmattan/manpages/qtconfig.1 create mode 100644 config.profiles/harmattan/manpages/uic.1 create mode 100644 config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf create mode 100644 config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h create mode 100644 config.profiles/harmattan/not-installed create mode 100644 config.profiles/harmattan/patches/default_widget_size.diff create mode 100644 config.profiles/harmattan/patches/glshadercache.diff create mode 100644 config.profiles/harmattan/patches/icu.diff create mode 100644 config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff create mode 100644 config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff create mode 100644 config.profiles/harmattan/patches/qgltexturecache.diff create mode 100644 config.profiles/harmattan/patches/qwidget_x11.diff create mode 100644 config.profiles/harmattan/patches/qwidget_x11_mapping.diff create mode 100644 config.profiles/harmattan/patches/runtime-window-geometry-revert.diff create mode 100644 config.profiles/harmattan/patches/series create mode 100644 config.profiles/harmattan/patches/signon_authenticator4.diff create mode 100644 config.profiles/harmattan/patches/temppath.diff create mode 100644 config.profiles/harmattan/patches/tst_qprogressbar.diff create mode 100644 config.profiles/harmattan/patches/tst_qscrollbar.diff create mode 100644 config.profiles/harmattan/patches/tst_qvariant.diff create mode 100644 config.profiles/harmattan/qt4-acceptance-tests.lintian create mode 100644 config.profiles/harmattan/qt4-declarative-qmlviewer.install create mode 100644 config.profiles/harmattan/qt4-declarative-qmlviewer.lintian create mode 100644 config.profiles/harmattan/qt4-doc-html.doc-base create mode 100644 config.profiles/harmattan/qt4-doc-html.install create mode 100644 config.profiles/harmattan/qt4-doc-html.links create mode 100644 config.profiles/harmattan/qt4-doc.install create mode 100644 config.profiles/harmattan/qt4-linguist-tools.install create mode 100644 config.profiles/harmattan/qt4-linguist-tools.lintian create mode 100644 config.profiles/harmattan/qt4-linguist-tools.postinst create mode 100644 config.profiles/harmattan/qt4-linguist-tools.prerm create mode 100644 config.profiles/harmattan/qt4-maemo-auto-tests.lintian create mode 100644 config.profiles/harmattan/readdir-hppa-test.c create mode 100755 config.profiles/harmattan/rules create mode 100644 config.profiles/harmattan/source.lintian-overrides create mode 100644 config.profiles/harmattan/source/format create mode 100755 config.profiles/harmattan/tests/create_tests_xml create mode 100644 config.profiles/harmattan/tests/libqt4-gui-tests.pro create mode 100644 config.profiles/harmattan/tests/maemo_tests.prf create mode 100644 config.profiles/harmattan/tests/qt4-acceptance-tests.pro create mode 100644 config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro create mode 100644 config.profiles/harmattan/tests/tests.xml create mode 100644 config.profiles/harmattan/tests/testset.txt create mode 100644 config.profiles/harmattan/tests/testsuite_footer.txt create mode 100644 config.profiles/harmattan/tests/testsuite_header.txt diff --git a/config.profiles/harmattan/QMLViewer.desktop b/config.profiles/harmattan/QMLViewer.desktop new file mode 100644 index 0000000..0f96731 --- /dev/null +++ b/config.profiles/harmattan/QMLViewer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Name=QMLViewer +Exec=/usr/bin/qmlviewer -graphicssystem meego +Icon=/usr/share/icons/hicolor/64x64/apps/QMLViewer.png +Categories=X-MeeGo; +OnlyShowIn=X-MeeGo; diff --git a/config.profiles/harmattan/QMLViewer.png b/config.profiles/harmattan/QMLViewer.png new file mode 100644 index 0000000..a209cd0 Binary files /dev/null and b/config.profiles/harmattan/QMLViewer.png differ diff --git a/config.profiles/harmattan/README.source b/config.profiles/harmattan/README.source new file mode 100644 index 0000000..5dde0bf --- /dev/null +++ b/config.profiles/harmattan/README.source @@ -0,0 +1,58 @@ +This package uses quilt to manage all modifications to the upstream +source. Changes are stored in the source package as diffs in +debian/patches and applied during the build. + +To configure quilt to use debian/patches instead of patches, you want +either to export QUILT_PATCHES=debian/patches in your environment +or use this snippet in your ~/.quiltrc: + + for where in ./ ../ ../../ ../../../ ../../../../ ../../../../../; do + if [ -e ${where}debian/rules -a -d ${where}debian/patches ]; then + export QUILT_PATCHES=debian/patches + break + fi + done + +To get the fully patched source after unpacking the source package, cd to +the root level of the source package and run: + + quilt push -a + +The last patch listed in debian/patches/series will become the current +patch. + +To add a new set of changes, first run quilt push -a, and then run: + + quilt new <patch> + +where <patch> is a descriptive name for the patch, used as the filename in +debian/patches. Then, for every file that will be modified by this patch, +run: + + quilt add <file> + +before editing those files. You must tell quilt with quilt add what files +will be part of the patch before making changes or quilt will not work +properly. After editing the files, run: + + quilt refresh + +to save the results as a patch. + +Alternately, if you already have an external patch and you just want to +add it to the build system, run quilt push -a and then: + + quilt import -P <patch> /path/to/patch + quilt push -a + +(add -p 0 to quilt import if needed). <patch> as above is the filename to +use in debian/patches. The last quilt push -a will apply the patch to +make sure it works properly. + +To remove an existing patch from the list of patches that will be applied, +run: + + quilt delete <patch> + +You may need to run quilt pop -a to unapply patches first before running +this command. diff --git a/config.profiles/harmattan/api b/config.profiles/harmattan/api new file mode 100644 index 0000000..43ede3d --- /dev/null +++ b/config.profiles/harmattan/api @@ -0,0 +1,120 @@ +interface: Phonon +type: library +libs-pkg: libqt4-phonon +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/phonon/* + +interface: QtCore +type: library +libs-pkg: libqtcore4 +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtCore/* + +interface: QtDBus +type: library +libs-pkg: libqt4-dbus +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtDBus/* + +interface: QtDeclarative +type: library +libs-pkg: libqt4-declarative +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtDeclarative/* + +interface: QtGui +type: library +libs-pkg: libqtgui4 +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtGui/* + +interface: QtHelp +type: library +libs-pkg: libqt4-help +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtHelp/* + +interface: QtMultimedia +type: library +libs-pkg: libqt4-multimedia +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtMultimedia/* + +interface: QtNetwork +type: library +libs-pkg: libqt4-network +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtNetwork/* + +interface: QtOpenGL +type: library +libs-pkg: libqt4-opengl +dev-pkg: libqt4-dev libqt4-opengl-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtOpenGL/* + +interface: QtScript +type: library +libs-pkg: libqt4-script +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtScript/* + +interface: QtSql +type: library +libs-pkg: libqt4-sql-sqlite libqt4-sql +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtSql/* + +interface: QtSvg +type: library +libs-pkg: libqt4-svg +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtSvg/* + +interface: QtTest +type: library +libs-pkg: libqt4-test +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtTest/* + +interface: QtXml +type: library +libs-pkg: libqt4-xml +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtXml/* + +interface: QtXmlPatterns +type: library +libs-pkg: libqt4-xmlpatterns +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtXmlPatterns/* + diff --git a/config.profiles/harmattan/changelog b/config.profiles/harmattan/changelog new file mode 100644 index 0000000..b04d788 --- /dev/null +++ b/config.profiles/harmattan/changelog @@ -0,0 +1,2039 @@ +qt4-x11 (4.7.2~git20110302-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#226454 - QDeclarativeTextInput::mousePressEvent() doesn't + call QInputContext::mouseHandler() + * Fixes: NB#220280 - QImage forever loops on SVG + * Fixes: NB#222060 - PIN UI freezes if "Continue offline" dialog is + shown before PIN query + * Fixes: NB#230591 - Regression from QFuture change + + -- Petri Latvala <ext-petri.latvala@nokia.com> Wed, 02 Mar 2011 12:06:31 +0200 + +qt4-x11 (4.7.2~git20110221-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#227660 - QFuture uses internally QTime, instead of + QElapsedTimer + * Fixes: NB#226474 - imMicroFocus query on QML TextInput returns the + start of preedit instead of cursor position + * Fixes: NB#208927 - X dithering looks better than meego + graphicssystem one + * Fixes: NB#224327 - Malformed windows icons cause out of bounds + writes + * Fixes: NB#224413 - XPM files crash QImage (write) + + -- Petri Latvala <ext-petri.latvala@nokia.com> Mon, 21 Feb 2011 14:15:37 +0200 + +qt4-x11 (4.7.2~git20110215-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#224314 - malformed bmp's cause QImage to write out of + bounds + * Fixes: NB#225732 - QGraphicsItem::ItemStopsClickFocusPropagation + doesn't stop propagation + * Fixes: NB#221924 - Morpheus crashes when network connection is lost + * Fixes: NB#218317 - All capital "i" in turkish is wrong inside of + buttons. + + -- Petri Latvala <ext-petri.latvala@nokia.com> Thu, 17 Feb 2011 11:50:12 +0200 + +qt4-x11 (4.7.2~git20110208-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#217912 - Deadlock after changes in qprocess_unix + * Fixes: NB#217850 - floating point compiler optimization has no + effect + * Fixes: NB#226130 - QtQuick 1.1 integration + * Fixes: NB#226478 - TextEdit and TextInput need text selection modes + * Fixes: NB#226484 - TextInput selectWord() on word's first letter + often selects two words + + -- Petri Latvala <ext-petri.latvala@nokia.com> Wed, 09 Feb 2011 15:54:33 +0200 + +qt4-x11 (4.7.2~git20110203-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#215586 - Qt make unnecessary X calls on each mouse move + event QETWidget::translateXI2Event + * Fixes: NB#210752 - Text in QML application disappears after + application is restored from task switcher + * Fixes: NB#221806 - Subsequent signal networkAccessibleChanged + emitting problem of class QNetworkAccessManager + * Fixes: NB#218404 - Memory leaks in qx11embed_x11.cpp + * Fixes: NB#218410 - Fix error case in getNetWmState() in + qwidget_x11.cpp + * Fixes: NB#225875 - Integrate + 1137379e98cab8cc67fac70b31c97001c4473eb0 + + -- Petri Latvala <ext-petri.latvala@nokia.com> Tue, 08 Feb 2011 10:13:03 +0200 + +qt4-x11 (4.7.2~git20110119-0maemo2) unstable; urgency=low + + * Fixes: NB#221230 - libqt4-meegographicssystemhelper needs to depend + on libqt4-meegographicssystem instead of recommends + + -- Petri Latvala <ext-petri.latvala@nokia.com> Mon, 24 Jan 2011 10:08:26 +0200 + +qt4-x11 (4.7.2~git20110119-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#212758 - creating a QPixmap triggers creation of the + qt_gl_share_widget + * Fixes: NB#219685 - QSystemSemaphore and QSharedMemory are influenced + by TMPDIR + * Fixes: NB#188780 - Items in larger layout are not centered + * Fixes: NB#218317 - All capital "i" in turkish is wrong inside of + buttons. + * Fixes: NB#216667 - libqt4-meego-dev is not available for i386 at all + * Fixes: NB#214064 - Latest focus changes break some platform + components + + -- Petri Latvala <ext-petri.latvala@nokia.com> Wed, 19 Jan 2011 17:06:16 +0200 + +qt4-x11 (4.7.2~git20110111-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#205680 - meego graphicssystem clears scene even if + Qt::WA_OpaquePaintEvent is set + * Fixes: NB#215368 - QMeeGoSwitchEvent's eventNumber() is not static + and the class is not exported + * Fixes: NB#211573 - Qt not configured with -dbus-linked + * Fixes: NB#211951 - Qt unnecessary build dependency to libxcursor-dev + * Fixes: NB#214064 - Latest focus changes break some platform + components + * Fixes: NB#216968 - QHostInfoCache should use QElapsedTimer instead + of QTime + + -- Petri Latvala <ext-petri.latvala@nokia.com> Wed, 12 Jan 2011 12:23:50 +0200 + +qt4-x11 (4.7.2~git20101231-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#213183 - Ensure two Qt raster fixes are released. + * Fixes: NB#215639 - Need to repopulate texture glyph cache after + recreating GL context + * Fixes: NB#212887 - would be possible to open these descriptors on- + demand + * Fixes: NB#195919 - Check whether shader compilation can be improved + * Fixes: NB#195442 - OpenGL paint engine produces artifacts with big + images + * Fixes: NB#186988 - opengl render Chinese text: fast change text, + text become black block. + + -- Petri Latvala <ext-petri.latvala@nokia.com> Mon, 03 Jan 2011 13:50:51 +0200 + +qt4-x11 (4.7.2~git20101209-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#205593 - Any app using meegotouch prints to console when started + * Fixes: NB#206111 - Sometimes MLabels apppear empty even if the text is set + * Fixes: NB#208617 - QtProxyFactory does not return correct (any) proxy data + * Fixes: NB#209473 - <UninitVar> qgraphicslayoutitem.cpp:143 + * Fixes: NB#209863 - Qt tries to use id of a destroyed window + * Fixes: NB#210024 - MGS should provide translucency on a per-window basis + * Fixes: NB#210594 - Integration of focus change fixes + * Fixes: NB#210599 - QDeclarativeEngine object ownership issues + * Fixes: NB#210416 - Framerate in portrait is significantly lower than + in landscape + * Fixes: NB#199755 - Network session error when attempting to open + network session + * Fixes: NB#201619 - Synchronization is stuck in the progress + indicator screen when the internet is interrupted while sync + * Fixes: NB#209996 - Backup options view:Text inside the text box not + displayed properly in potrait mode + * Fixes: NB#194987 - Not all the synced contacts with S60 (N97 mini) + have an avatar + * Fixes: NB#206740 - Event handling in x11EventSourceDispatch is slow + * Fixes: NB#207115 - Qt calls eglSwapBuffers when no painting happened + * Fixes: NB#206119 - QSizePolicy causes the performance slow down + + -- Petri Latvala <ext-petri.latvala@nokia.com> Thu, 16 Dec 2010 12:22:45 +0200 + +qt4-x11 (4.7.2~git20101130-0maemo6) unstable; urgency=low + + * Fixes: NB#198573 - Need for Signals from Qt indicating aboutToSwich and swiched state + * Fixes: NB#194509 - Network access from a Qt app makes dbus daemon consume tons of cpu + * Fixes: NB#165283 - artificial emboldening doesn't work + + -- Petri Latvala <ext-petri.latvala@nokia.com> Tue, 07 Dec 2010 15:31:57 +0200 + +qt4-x11 (4.7.2~git20101130-0maemo4) unstable; urgency=low + + * Fixes: NB#205453 - Qt Update cause blocker performance drop in browser. + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 10 Dec 2010 13:21:07 +0200 + +qt4-x11 (4.7.1~git20101130.really.4.7.1~git20101118-0maemo3) unstable; urgency=low + + * Revert to previous release. + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 03 Dec 2010 11:24:03 +0200 + +qt4-x11 (4.7.1~git20101118-0maemo2) unstable; urgency=low + + * Proper workaround for bug 196954. + + -- Petri Latvala <ext-petri.latvala@nokia.com> Mon, 29 Nov 2010 14:05:44 +0200 + +qt4-x11 (4.7.1~git20101118-0maemo1) unstable; urgency=low + + * Pull from upstream + * Enable using OpenGL scissor test + * Fixes: NB#188174 - The effect of filling massive amount of html <div> elements with color ... + * Fixes: NB#194032 - Gallery crashed random while slideshow is going on + * Fixes: NB#193247 - Slider widget crashes WG in a given scenario + * Fixes: NB#199790 - Qt sends touch point update event too late on release. + * Fixes: NB#200091 - Random crashes observed when trying to paste value + * Fixes: NB#163620 - QtTest headers prevent compilation with -Wshadow -Werror + * Fixes: NB#189468 - <Safety> Invalid read reported by valgrind in libX11 when analysing accounts-ui application + * Fixes: NB#191811 - <Safety> Invalid read frequently reported in scratchbox + * Fixes: NB#193881 - Image format autodetection causes unnecessary lseeks + * Fixes: NB#198023 - GLib >= 2.22 requires use of g_main_context_push_thread_default in QEventDispatcher when a QThread is created + * Fixes: NB#202866 - MeeGo graphicssystem dithering for textures with alpha channel looks crappy + * Fixes: NB#204234 - obsolete driver work-around + * Fixes: NB#204890 - device lock prompt keeps reappearing + * Fixes: NB#194345 - CoreWeb: 950 coredumps with stacktrace ending in QGestureManager::deliverEvents() + * Fixes: NB#204098 - qstrtod does not reset errno + * Fixes: NB#161439 - Using optimizations causes trouble + * Fixes: NB#186988 - opengl render Chinese text: fast change text, text become black block + * Fixes: NB#193505 - after maximizing applications fonts are sometimes corrupted + * Fixes: 204443 - Pinch gesture semantics change + + -- Petri Latvala <ext-petri.latvala@nokia.com> Mon, 22 Nov 2010 12:05:12 +0200 + +qt4-x11 (4.7.1~git20101111.really.4.7.1~git20101103-0maemo2) unstable; urgen + + * Revert to previous released version + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 19 Nov 2010 10:50:40 + + +qt4-x11 (4.7.1~git20101103-0maemo1) unstable; urgency=low + + * Pull from upstream + * Provide menu link and icon for QMLViewer + * Remove backported QScroller patch, it is to be used externally + * Fixes: NB#196806 - <MemLeak> Memory leak in feednamespacepluginmanager.cpp + * Fixes: NB#164431 - Blocking dialog doesn't work correctly + * Fixes: NB#170001 - QTouchEvent::touchpoint's isPrimary -method returns always false + * Fixes: NB#191116 - <MemLeak> Memory leak reported by valgrind on device, in XIQueryPointer.c + * Fixes: NB#198833 - Qt forgets to initialize members of QSharedPointer and its helpers + * Fixes: NB#200433 - cannot compile QMeeGoLivePixmap::livePixmapWithSize + + -- Petri Latvala <ext-petri.latvala@nokia.com> Thu, 04 Nov 2010 12:14:46 +0200 + +qt4-x11 (4.7.1~git20101021-0maemo1) unstable; urgency=low + + * Pull from upstream + * Previous problem with the experimental client decorations are + * now fixed, enable them again. + * Fixes: NB#195540 - libqt4-doc has extra <tr> tags + * Fixes: NB#198766 - MeeGo graphicssystem does not create proper deep copies of QPixmaps + * Fixes: NB#194397 - /usr/lib/qt4/imports/Qt/labs/ missing from packages + + -- Petri Latvala <ext-petri.latvala@nokia.com> Thu, 21 Oct 2010 16:01:33 +0300 + +qt4-x11 (4.7.1~git20101008-0maemo2) unstable; urgency=low + + * Disable experimental client decorations again + * Fixes: NB#196543 - libQtMeeGoGraphicsSystemHelper not shipped with latest packages + * Fixes: NB#196712 - SVG and PNG data URIs don't work in offline mode + * Fixes: NB#197530 - Missing menu items from ui-file + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 15 Oct 2010 11:49:02 +0300 + +qt4-x11 (4.7.1~git20101008-0maemo1) unstable; urgency=low + + * Pull from upstream + * Backport QScroller from 4.8 + * Fixes: NB#184580 - QGraphicsItem::setCacheMode(DeviceCoordinateCache) unefficient in portrait mode + * Fixes: NB#191792 - QML: clickable items in GridView intermittently unresponsive on B2 hardware + * Fixes: NB#189797 - Qt build-depends circular dependency + * Fixes: NB#183846 - VKB adds and accumulates _NET_WM_STATE atoms when ever it's shown + * Fixes: 192385 - QML: runtime.orientation doesn't change when device orientation changes + * Fixes: NB#197181 - host binaries in libqt4-dev do not work in x86 target + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 08 Oct 2010 14:14:42 +0300 + +qt4-x11 (4.7.1~git20101001-0maemo1) unstable; urgency=low + + * Pull from upstream + * Cross-compile Qt and install both host and native binaries + * of build tools + * Enable experimental client decorations + * Fixes: NB#191476 - Wrong reordering of Bidi Text in Labels + * Fixes: NB#186087 - QGraphicsItem never gets focusOutEvent on hide + * Fixes: NB#186988 - opengl render Chinese text: fast change text, text become black block + * Fixes: NB#189686 - connecting to dbus slows down MApplication c'tor creation by ~80ms + * Fixes: NB#188145 - Network interface doesn't go down after last client disconnects + * Fixes: NB#189001 - Qt4.7 bearer management icd plugin uses embedded libconninet + + -- Petri Latvala <ext-petri.latvala@nokia.com> Fri, 01 Oct 2010 12:44:54 +0300 + +qt4-x11 (4.7.0~git20100917-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#187981 - Device hangs up when region is set to Arabic language. + * Fixes: NB#163798 - QRasterPaintEnginePrivate::drawImage using memcpy instead of ARM optimized implementation + * Fixes: NB#187851 - Font rendering issues with Nokia font + * Fixes: NB#190817 - libqt4-doc has extra </div> and <tr> tags + * Fixes: NB#191880 - QPixmap::size() should return 0x0 when there is no data + * Fixes: NB#193700 - Pinching in calendar weekly view regression + + -- Petri Latvala <ext-petri.latvala@nokia.com> Tue, 21 Sep 2010 10:48:49 +0300 + +qt4-x11 (4.7.0~git20100827-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#189487 - qt4-x11 fails to build due to problems with opening data base file doc/qch/qt.qch + * Fixes: NB#174335 - Pinch gesture events are sent twice to application + * Fixes: NB#175685 - QTextDocument setTextDirection without QStaticText is not obeyed in Qt 4.7 + * Fixes: NB#185563 - QTouchEvents are not correctly delivered to widgets + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Mon, 06 Sep 2010 16:48:24 +0300 + +qt4-x11 (4.7.0~git20100823-0maemo2) unstable; urgency=low + + * Fixes: NB#178358 - Qt doc package missing + * Stop building QtWebKit library from Qt source tree. QtWebKit will + * be delivered as an independent package. + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Tue, 31 Aug 2010 10:10:15 +0300 + +qt4-x11 (4.7.0~git20100823-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#178358 - Qt doc package missing + * Fixes: NB#183896 - QAuthenticator need to be patched to enable signon usage for authentication + * Fixes: NB#176070 - QNetworkAccessManager can't be used in QThreads + * Fixes: NB#176651 - Height for Width in QGraphicsLayout + * Fixes: NB#174429 - Qt source packages are missing API files + + -- Stefano Pironato <stefano.pironato@nokia.com> Tue, 24 Aug 2010 14:11:00 +0300 + +qt4-x11 (4.7.0~git20100811-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#165683 - QGraphicsGridLayout::setColumnSpacing is used even after item has been removed + * Fixes: NB#172554 - POP: Random fenix crash @ "QAbstractSocket::writeData" when move to option selected + * Fixes: NB#175618 - qDrawBorderPixmap is not executing correctly when borders are too thick + * Fixes: NB#176643 - Segmentation fault occurs while using networking + * Fixes: NB#180034 - we need QTBUG-11213 fixed in Harmattan - QUuid::createUuid() is not random at all + * Fixes: NB#182005 - Unable to build libmcontentwidgets package with libqt4 4.7.0~git20100716-0maemo1+0m6 + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Wed, 11 Aug 2010 11:03:15 +0200 + +qt4-x11 (4.7.0~git20100716-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#176070 - QNetworkAccessManager can't be used in QThreads + * Fixes: NB#180047 - Call UI gets shrunken while calling any number + * Fixes: NB#174856 - QNetworkAccessManager broken in 4.7.0~git20100609-0maemo1+0m6 + * Fixes: NB#179240 - QFile::read does not advance the stream + * Fixes: NB#173119 - Bidirectional Text Rendering in Arabic language is broken with Latin characters + * Fixes: NB#161897 - DuiInfoBanner's setBodyText ignores <br/> tag + * Fixes: NB#177478 - QAuthenticator should have property map + + -- Janne Hamalainen <janne.a.hamalainen@nokia.com> Thu, 22 Jul 2010 11:19:09 +0200 + +qt4-x11 (4.7.0~git20100704-0maemo1) unstable; urgency=low + + * Fixes: NB#172773 - celluid process is causing the wakeups in idle mode + * Fixes: NB#175064 - QNetworkSession signals wrong state after calling stop() + + -- Adrian Constantin <adrian.constantin@nokia.com> Mon, 5 Jul 2010 14:39:09 +0200 + +qt4-x11 (4.7.0~git20100614-0maemo2) unstable; urgency=low + + * Fixes: NB#167514 - [browser-blocker] Multitouch events don't work if application is launched during device start-up + * Fixes: NB#175383 - qt4-acceptance-tests fail during ART Execution + + -- Adrian Constantin <adrian.constantin@nokia.com> Mon, 5 Jul 2010 14:39:09 +0200 + +qt4-x11 (4.7.0~git20100614-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#172906 - Majority of applications crashing on exit + * Fixes: NB#173866 - Data added to HTML5 database doesn't get flushed/persisted to database + * Fixes: NB#173250 - QGLContext can create end up creating a QWidget during the QApplication destructor, leading to crash + + -- Adrian Constantin <adrian.constantin@nokia.com> Tue, 15 Jun 2010 11:14:33 +0200 + +qt4-x11 (4.7.0~git20100609-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#170006 - Qt 4.7 singleShot timer calls function immediately instead of at the next event loop + * Fixes: NB#167058 - TapGesture not working + * Fixes: NB#173089 - The Qt 4.7 does not compile icd bearermanagement network plugin + * Fixes: NB#172749 - If grabGesture() called QGraphicsWidget will crash in deletion + * Fixes: NB#155179 - (QTBUG-9707) qpainter->drawTiledPixmap cause slow call of QX11PixmapData::toImage. + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Thu, 10 Jun 2010 16:46:15 +0200 + +qt4-x11 (4.6.3~git20100602.0.4.7-0maemo1) unstable; urgency=low + + * Release Qt 4.7. The version still keeps the 4.6.3 package version, + * in order to allow for emergency rollback to Qt 4.6. + * Fixes: NB#161556 - [METABUG] Integrate Qt 4.7 into Harmattan + * Fixes: NB#151100 - (QT-2948) The Qt Reg-Exp engine sometimes gives false positive empty match + * Fixes: NB#157450 - Frequent use of QTime in animation related routines causes bad performance + * Fixes: NB#156908 - Qt's QTime::currentTime is slow + * Fixes: NB#166193 - MDialog crashes with ~40% likelihood + * Fixes: NB#170944 - Gesture not delivered to a QGraphicsWidget, asserts inside Qt + + -- Adrian Constantin <adrian.constantin@nokia.com> Wed, 4 Jun 2010 12:46:15 +0300 + +qt4-x11 (4.6.3~git20100521-0maemo2) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#169433 - when freeing a QQLWidget not all memory is actually freed + * Fixes: NB#165175 - a class inherited from QDBusInterface can't invoke a method + + -- Janne Hamalainen <janne.a.hamalainen@nokia.com> Tue, 25 May 2010 10:13:31 +0300 + +qt4-x11 (4.6.3~git20100514-0maemo2) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#164183 - Random gestureEvent crashes + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Tue, 18 May 2010 12:57:30 +0300 + +qt4-x11 (4.6.3~git20100411-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#162327 unlocking the device causes a segfault in any app open in foreground + * Fixes: NB#163414 Crash when hiding VKB and keep finger on screen. + * Fixes: NB#160270 <MemLeak> valgrind report shows memory leak for QImage::save() + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Mon, 12 Apr 2010 13:51:00 +2000 + +qt4-x11 (4.6.3~git20100319-0maemo1) unstable; urgency=low + + * Pull from upstream + * Multi-touch support + * Fixes: NB#159993 Qt is freezing application for 2 seconds when calling showFullScreen + * Fixes: NB#155384 Make drawGlyphs API public + + -- Stefano Pironato <stefano.pironato@nokia.com> Fri, 19 Mar 2010 15:31:00 +2000 + +qt4-x11 (4.6.3~git20100310-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#146992 Double tap doesn't get recognized in MAFW test gui + * Fixes: NB#134295 QDBusInterface::callWithCallback deadlocks if called from the callWithCallback error callback + + -- Bojan Radakovic <bojan.radakovic@nokia.com> Mon, 15 Mar 2010 12:34:26 +2000 + +qt4-x11 (4.6.3~git20100224-0maemo1) unstable; urgency=low + + * Pull from upstream + * Remove Qt3Support + * Add lconvert + * Fixes: NB#154800 Using -opensource configuration in maemo6 + * Fixes: NB#158708 Googleplugin crashes while configuring google account + * Fixes: NB#158242 all unit tests for quillimagefilter-tests are core dumped + * Fixes: NB#157696 QDBusServiceWatcher watches only one service at a time + + -- Janne Hamalainen <janne.a.hamalainen@nokia.com> Wed, 24 Feb 2010 11:34:26 +2000 + +qt4-x11 (4.6.2~git20100205-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#142357 - (#QT-2307) Using QDBus::CallMode other than + * QDBus::Block produces invalid reply + * Fixes: NB#138587 - QGraphicsGridLayout row span feature is not working properly + * Fixes: NB#153726 - QtMultimedia module is not packaged + + -- Adrian Constantin <adrian.constantin@nokia.com> Fri, 12 Feb 2010 12:20:26 +2000 + +qt4-x11 (4.6.1~git20091228.4-0maemo1) unstable; urgency=low + + * Turn off the HW multi-touch implementation using kernel device API. + * Removed Qt Assistant and Designer packages. + * Fixes: NB#148497 - Devel package missing requires for some libraries + * Fixes: NB#151088 - Packaging of the Qt4.6 developer tools + + -- Adrian Constantin <adrian.constantin@nokia.com> Thu, 14 Jan 2010 12:43:37 +2000 + +qt4-x11 (4.6.1~git20091228.2-0maemo1) unstable; urgency=low + + * Fixes: NB#144690 - Please cherrypick ConsumeEventHint patch (Gesture) + * Fixes: NB#143903 - Application not working in none gui mode -> The KDE libs cannot be installed. + * Fixes: NB#143427 - Qt 4.6 - lrelease does not accept empty <source> + * Fixes: NB#147283 - All DUI application crash in scratchbox + * Fixes: NB#147461 - QVariant::isNull() == true after QVariant::setValue() + * Fixes: NB#149547 - With latest Qt 20091127 Clock application is closing on setting alarm operation + * Fixes: NB#117725 - sb2 cannot build camera-ui + * Fixes: NB#148359 - webkit traverse fixture links against phonon but it is not in package dependencies + * Fixes: NB#148082 - Performance of the graphics view drops when text element is rotated + * Fixes: NB#142507 - QTimeLine's signals are not sent while an object is being dragged with mouseMoveEvent() + * Fixes: NB#147744 - Translucent QGLWidgets no longer works + * Fixes: NB#150790 - QWebKit based application crashes when executing SunSpider + * Fixes: NB#150808 - Loading a web page from network to qwebview fails on columbus + + -- Stefano Pironato <stefano.pironato@nokia.com> Tue, 05 Jan 2010 11:10:00 +2000 + +qt4-x11 (4.6.0~git20091030.2-0maemo1) unstable; urgency=low + + * Fixes: NB#129594 - Qt compiled without compiler optimization + * The X org package does not support the MIT SHM extension anymore, + so the MIT SHM option is removed from Qt configuration also. + + -- Adrian Constantin <adrian.constantin@nokia.com> Fri, 20 Nov 2009 16:59:11 +2000 + +qt4-x11 (4.6.0~git20091030-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#134295 - QDBusInterface::callWithCallback deadlocks if called from the callWithCallback error callback + * Fixes: NB#133005 - enabling accessibility while building Qt + * Fixes: NB#144501 - Application launcher does not start with the new Qt 4.6 versions + * Fixes: NB#129494 - Qt compiled without compiler optimization + + -- Adrian Constantin <adrian.constantin@nokia.com> Fri, 30 Oct 2009 15:13:18 +1000 + +qt4-x11 (4.6.0~git20091012-0maemo1) unstable; urgency=low + + * Fixes: NB#141280 - libqt4-dev.postinst rules for Qt4.6 wrong + * Fixes: NB#133500 - libqt4-dev postinst is broken by update-alternatives from dpkg 1.15 + * Fixes: NB#142136 - Error in satisfying dependencies for qt4-x11 + + -- Stefano Pironato <stefano.pironato@nokia.com> Thu, 12 Oct 2009 10:30:00 +0300 + +qt4-x11 (4.6.0~git20091008-0maemo1) unstable; urgency=low + + * Fixes NB#141891: - Compiling a library which uses QStateMachine doesn't work + * Modify rpath-link options to adapt to armel scratchbox environment + + -- Adrian Constantin <adrian.constantin@nokia.com> Wed, 08 Oct 2009 11:18:37 +0300 + +qt4-x11 (4.6.0~git20091002-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#141550 - Error in qdatastream.h in libqt4-dev 4.6.0~git20091001-0maemo1+0m6 + * Fixes: NB#140293 - applet titles in applet library are not shown properly - added PATCH in qt changing glyph cache + * Fixes: NB#140727 - Enable multitouch support on device + * Fixes: NB#123012 - QPainter::drawTiledPixmap does not work properly with + non-power-of-two pixmaps when used in a DuiWidgetView + + -- Stefano Pironato <stefano.pironato@nokia.com> Thu, 01 Oct 2009 15:08:32 +0300 + +qt4-x11 (4.6.0~git20090925-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#140735 - QtGui 4.6 should have dependency to EGL + * Fixes: NB#139269 - qmake CONFIG=debug does not add -g + + -- Adrian Constantin <adrian.constantin@nokia.com> Fri, 25 Sep 2009 15:48:32 +0300 + +qt4-x11 (4.6.0~git20090911-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#111282 - Homescreen rotation takes too long + * Fixes: NB#110604 - DuiLayouts using DuiFlowLayoutPolicy don't resize properly + * Fixes: NB#121054 - Items being not painted until update()/paint() explicitly called + + -- Adrian Constantin <adrian.constantin@nokia.com> Fri, 11 Sep 2009 15:17:33 +0300 + +qt4-x11 (4.6.0~git20090909-0maemo1) unstable; urgency=low + + * Fixes: NB#137778 - qt macro causing build error when using -pedantic + * Fixes: NB#137775 - qt debian packaking installing a missing file + + -- Adrian Constantin <adrian.constantin@nokia.com> Wed, 09 Aug 2009 15:52:51 +0300 + +qt4-x11 (4.6.0~git20090907-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#104827 - DuiLabel truncate arabic string and renders replaces the MEDIAL form character into FINAL on the point of truncation + + -- Shane Bradley <shane.bradley@nokia.com> Tue, 08 Aug 2009 15:17:24 +1000 + +qt4-x11 (4.6.0~git20090828-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Mon, 24 Aug 2009 15:47:37 +1000 + +qt4-x11 (4.6.0~git20090824-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#127429 - QtOpenGL public header refers to non-existant qglshaderprogram.h + + -- Shane Bradley <shane.bradley@nokia.com> Mon, 24 Aug 2009 15:47:37 +1000 + +qt4-x11 (4.6.0~git20090820-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 20 Aug 2009 16:16:14 +1000 + +qt4-x11 (4.6.0~git20090819-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#132164 - libqt4-webkit package is broken + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 19 Aug 2009 15:32:21 +1000 + +qt4-x11 (4.6.0~git20090728-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#129594 - Qt compiled without compiler optimization + * Fixes: NB#127404 - Rendering errors with OpenGL in Qt 4.6 + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 30 Jul 2009 14:02:24 +1000 + +qt4-x11 (4.6.0~git20090717-0maemo1) unstable; urgency=low + + * Fixes: NB#117929 - Qt mkspecs use -Wl,--rpath by default causing warnings in Debian packaging + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 15 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.6.0~git20090717-0maemo1) unstable; urgency=low + + * Pull from upstream + * Partial fix for 127404. + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 15 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.6.0~git20090706-0maemo1) unstable; urgency=low + + * Switch to using 4.6. + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 07 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.5.2~git20090701-0maemo1) unstable; urgency=low + + * Fixes: NB#122175 - Qt debugging symbols issues + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 07 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.5.2~git20090605-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Fri, 05 Jun 2009 19:46:34 +1000 + +qt4-x11 (4.5.2~git20090601-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Mon, 01 Jun 2009 17:01:23 +1000 + +qt4-x11 (4.5.2~git20090525-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Mon, 25 May 2009 15:30:34 +1000 + +qt4-x11 (4.5.2~git20090515-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Fri, 15 May 2009 20:01:16 +1000 + +qt4-x11 (4.5.2~git20090508-0maemo2) unstable; urgency=low + + * Changed control file as per Maemo patch. + + -- Gareth Pethig <gareth.pethig@nokia.com> Mon, 11 May 2009 18:49:23 +1000 + +qt4-x11 (4.5.2~git20090508-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Fri, 08 May 2009 17:51:46 +1000 + +qt4-x11 (4.5.2~git20090506-0maemo1) unstable; urgency=low + + * Removed -lxcb-xlib referance from mkspec. + + -- Gareth Pethig <gareth.pethig@nokia.com> Wed, 06 May 2009 19:01:22 +1000 + +qt4-x11 (4.5.2~git20090505-0maemo2) unstable; urgency=low + + * Removed old EGL config patch. + + -- Gareth Pethig <gareth.pethig@nokia.com> Wed, 06 May 2009 14:42:35 +1000 + +qt4-x11 (4.5.2~git20090505-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Added gles translucency patch + + -- Gareth Pethig <gareth.pethig@nokia.com> Tue, 05 May 2009 21:32:21 +1000 + +qt4-x11 (4.5.2~git20090424-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig <gareth.pethig@nokia.com> Fri, 24 Apr 2009 18:32:37 +1000 + +qt4-x11 (4.5.1~git20090422-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 22 Apr 2009 17:20:12 +1000 + +qt4-x11 (4.5.1~git20090417-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#110528 - int QTest::qExec() returns always 0... + + -- Gareth Pethig <gareth.pethig@nokia.com> Fri, 17 Apr 2009 13:30:20 +1000 + +qt4-x11 (4.5.1~git20090403-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#109352 - libqt4-dev is missing libQtUiTools.a + + -- Shane Bradley <shane.bradley@nokia.com> Fri, 03 Apr 2009 17:04:40 +1000 + +qt4-x11 (4.5.1~git20090331-0maemo2) unstable; urgency=low + + * Move QtClucene from the core package to the help package. This is only + used by assistant. + + -- Shane Bradley <shane.bradley@nokia.com> Wed, 01 Apr 2009 16:44:52 +1000 + +qt4-x11 (4.5.1~git20090331-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Tue, 31 Mar 2009 10:35:50 +1000 + +qt4-x11 (4.5.1~git20090326-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Add qdoc3 binary to qt4-dev-tools package. + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 26 Mar 2009 14:17:39 +1000 + +qt4-x11 (4.5.1~git20090324-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Tue, 24 Mar 2009 10:39:35 +1000 + +qt4-x11 (4.5.1~git20090317-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#105936 + + -- Shane Bradley <shane.bradley@nokia.com> Tue, 17 Mar 2009 14:15:30 +1000 + +qt4-x11 (4.5.1~git20090316-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#103601 + + -- Shane Bradley <shane.bradley@nokia.com> Mon, 16 Mar 2009 13:14:17 +1000 + +qt4-x11 (4.5.0-0maemo2) unstable; urgency=low + + * Fixes: NB#103953, NB#103601 + * Add additional dependencies for the phonon package. + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 05 Mar 2009 16:53:23 +1000 + +qt4-x11 (4.5.0-0maemo1) unstable; urgency=low + + * Pull from upstream for 4.5.0 release. + * Fixes: NB#99812 + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 27 Feb 2009 18:37:27 +1000 + +qt4-x11 (4.5.0~git20090219-0maemo1) unstable; urgency=low + + * Removed subversion files and disabled patches. + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 19 Feb 2009 16:09:14 +1000 + +qt4-x11 (4.5.0~git20090219-maemo1) unstable; urgency=low + + * Migrated to new repository. + * Merged with upstream. + + -- Shane Bradley <shane.bradley@nokia.com> Thu, 19 Feb 2009 14:24:45 +1000 + +qt4-x11 (4.5.0~git20090212-maemo2) unstable; urgency=low + + * Removed include/Qt/qpixmapfilter.h from debian/libqt4-dev.install + + -- Mohammad Anwari <mohammad.anwari@nokia.com> Fri, 13 Feb 2009 09:50:33 +0200 + +qt4-x11 (4.5.0~git20090212-maemo1) unstable; urgency=low + + * Merged with upstream. + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Thu, 12 Feb 2009 13:45:11 +0200 + +qt4-x11 (4.5.0~git20090122-maemo6) unstable; urgency=low + + * Added patch 102_egl_config.diff + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Thu, 12 Feb 2009 12:53:25 +0200 + +qt4-x11 (4.5.0~git20090122-maemo5) unstable; urgency=low + + * Removed old Ubuntu patches + * Added patch 101_multiple-translation.diff to series file + + -- Tobias Koch <ext-tobias.koch@nokia.com> Mon, 26 Jan 2009 18:48:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo4) unstable; urgency=low + + * Multiple translation variant patch was added + * Shader patch was removed + + -- Tobias Koch <ext-tobias.koch@nokia.com> Mon, 26 Jan 2009 17:38:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo2) unstable; urgency=low + + * Removed configure switch -no-tablet + + -- Tobias Koch <ext-tobias.koch@nokia.com> Thu, 22 Jan 2009 18:14:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo1) unstable; urgency=low + + * Merged from upstream + + -- Tobias Koch <ext-tobias.koch@nokia.com> Thu, 22 Jan 2009 17:51:34 +0200 + +qt4-x11 (4.5.0~git20090108-maemo2) unstable; urgency=low + + * Fixes for lintian errors + * Fixes in install files + + -- Tobias Koch <ext-tobias.koch@nokia.com> Thu, 15 Jan 2009 11:00:17 +0200 + +qt4-x11 (4.5.0~git20090108-maemo1) unstable; urgency=low + + * Merged from upstream + + -- Tobias Koch <ext-tobias.koch@nokia.com> Thu, 08 Jan 2009 19:19:29 +0200 + +qt4-x11 (4.5.0~git20081217-maemo2) unstable; urgency=low + + * Debug packages available again + + -- Tobias Koch <ext-tobias.koch@nokia.com> Wed, 07 Jan 2009 16:55:53 +0200 + +qt4-x11 (4.5.0~git20081217-maemo1) unstable; urgency=low + + * Quilt works again + * Merged from upstream + + -- Tobias Koch <ext-tobias.koch@nokia.com> Tue, 17 Dec 2008 10:21:47 +0200 + +qt4-x11 (4.5.0~git20081216-maemo1) unstable; urgency=low + + * Applied patch 100_glconfig_shader.diff until I have + figured out, why quilt won't run. + + -- Tobias Koch <ext-tobias.koch@nokia.com> Tue, 16 Dec 2008 12:51:47 +0200 + +qt4-x11 (4.5.0~git20081215-maemo1) unstable; urgency=low + + * added patch 100_glconfig_shader.diff submitted by <mohammad.anwari@nokia.com>: + * enable running Qt+GL in newer images of R***r + * solved the compilation of TextFragmentShader which failed because lacking of a precision of a vec4 + + -- Tobias Koch <ext-tobias.koch@nokia.com> Mon, 15 Dec 2008 14:43:56 +0200 + +qt4-x11 (4.5.0~git20081209-maemo1) unstable; urgency=low + + * Merge with upstream + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Tue, 09 Dec 2008 10:31:45 +0200 + +qt4-x11 (4.5.0~git20081202-maemo3) unstable; urgency=low + + * Removed libglu-dev from libqt4-opengl-dev + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Fri, 05 Dec 2008 00:31:36 +0200 + +qt4-x11 (4.5.0~git20081202-maemo2) unstable; urgency=low + + * Split opengl packages + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Tue, 02 Dec 2008 16:35:31 +0200 + +qt4-x11 (4.5.0~git20081202-maemo1) unstable; urgency=low + + * Pull from upstream + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Tue, 02 Dec 2008 09:33:02 +0200 + +qt4-x11 (4.5.0~git20081129-maemo1) unstable; urgency=low + + * Copied to DUI's git + + -- Mohammad Anwari <Mohammad.Anwari@nokia.com> Sat, 29 Nov 2008 00:00:04 +0700 + +qt4-x11 (4.5.0-maemo1-11142008) unstable; urgency=low + + * pull from upstream + + -- Jani Mikkonen <ext-jani.3.mikkonen@nokia.com> Fri, 14 Nov 2008 15:00:00 +0200 + + +qt4-x11 (4.5.0-maemo1) unstable; urgency=low + + * new upstream version with gles2 support + * removed nonfunctional patches + + -- Jani Mikkonen <ext-jani.3.mikkonen@nokia.com> Tue, 11 Nov 2008 18:00:00 +0200 + +qt4-x11 (4.4.0-2maemo5) unstable; urgency=low + + * Enabled Exceptions + * Added QT3 support libraries + * Added xml-patterns + + -- Jani Mikkonen <ext-jani.3.mikkonen@nokia.com> Tue, 28 Oct 2008 12:00:00 +0200 + +qt4-x11 (4.4.0-2maemo4) unstable; urgency=low + + * testing tag, minor changes + + -- Jani Mikkonen <ext-jani.3.mikkonen@nokia.com> Tue, 9 Sep 2008 16:00:00 +0300 + +qt4-x11 (4.4.0-2maemo3) unstable; urgency=low + + * libreadline dependency, no opengl + + -- Arsi Antila <ext-arsi.antila@nokia.com> Wed, 9 Jul 2008 15:36:34 +0300 + + +qt4-x11 (4.4.0-2maemo2) unstable; urgency=low + + * No interbase support for i386 + + -- Jussi Hakala <ext-jussi.hakala@nokia.com> Wed, 18 Jun 2008 11:59:27 +0300 + +qt4-x11 (4.4.0-2maemo1) unstable; urgency=low + + * Configuration for maemo environment + * Workarounds for find/delete inside sbox environment + * Adjusted the control file to behave with etch dpkg + + -- Jussi Hakala <ext-jussi.hakala@nokia.com> Thu, 12 Jun 2008 13:57:49 +0300 + +qt4-x11 (4.4.0-2) unstable; urgency=low + + +++ Changes by Fathi Boudra: + + * Split html documentation in qt4-doc-html package. + * Merge Ubuntu patches: + * Add lpia architecture in trusted dpkg-arch over uname. + * Add sqlite3 workaround in config tests fixes. + * Add qt-copy patch: + * 0227-qdatastream-regression + Fix a bug that causes all Qt3/2 applications to crash or hang under KDE4. + + +++ Changes by Modestas Vainius: + + * Add 16_qsortfilterproxymodel_invalidate_noscroll.diff patch which stops + scrolling to the current item/index on QSortFilterProxyModel::invalidate() + This patch has been scheduled for Qt 4.4.1 (TT #204403). + * Add missing Replaces: + - libqt4-opengl-dev replaces libqt4-dev (<< 4.4.0-2) due to obvious + reasons. + - libqt4-dev replaces libqt4-opengl-dev (<< 4.4.0-2) (due to qglobal.h + misplace). + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Fri, 09 May 2008 23:35:16 +0300 + +qt4-x11 (4.4.0-1) unstable; urgency=low + + * New upstream release. + + +++ Changes by Modestas Vainius: + + * Split OpenGL headers from libqt4-dev to libqt4-opengl-dev: + - Update install files. + - Make libqt4-opengl-dev depend on X OpenGL headers, hence remove the + latter from libqt4-dev Recommends. + - Add libqt4-opengl-dev to libqt4-dev Recommends. + - Remove libq4-opengl from libqt4-dev Depends. + * Explicitly add libqtcore4 to libqt4-dev (was implicit before). + * Rename libqt4-gui to libqtgui4 (new package). + * Make libqt4-gui a transitional package (Closes: #478694) depending on + libqtgui4, libqt4-opengl (Closes: #478264), libqt4-sql, libqt4-designer, + libqt4-assistant. + * Use ${binary:Version} instead of ${source:Version} in dependencies of + libqt4-core and libqt4-gui transitional packages. + * Require just libqtcore4 to install libqt4-dbg instead of libqt4-gui. + * Resync patches: + - 05_append_qt4_target.diff - fix offsets. + - 11_qdbus_to_dbus_fix.diff - remove, merged upstream. + - Revert to "runtime" configuration for xcursor, xinerama, xfixes and drop + 16_always_init_qt_x11data_ptrx.diff patch. Fixed upstream. + + +++ Changes by Fathi Boudra: + + * Update libqt4-dev and libqt4-opengl-dev install to use complete files + list instead of wildcard. + * Update installed files: new qt help and assistant translations. + * Add qt-copy patch: + * 0226-qtreeview-column_resize_when_needed + This patch assures that if no header is shown, or if we only have one + column (so no other columns become shrinked), the contents will be + visible. + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Tue, 06 May 2008 17:37:49 +0200 + +qt4-x11 (4.4.0~rc1-5) unstable; urgency=high + + +++ Changes by Fathi Boudra: + + * Add libqt4-sql-sqlite dependency to qt4-dev-tools. Qt Assistant and + qhelpgenerator use the sqlite plugin. (Closes: #476986) + * Remove qt-copy patches 0191 and 0192. The relevant code has changed + such that neither patch seems to have any effect (although listviews + still do not use active/inactive roles correctly). + * Add qt-copy patches: + * 0223-fix-qpixmap-hasalpha + Fix a performance regression in QPixmap::hasAlpha() in Qt 4.4. + * 0224-fast-qpixmap-fill + This patch avoids the expensive image->pixmap conversion by discarding + the old pixmap, creating a new one with the correct format, and doing + the fill server side. + * 0225-invalidate-tabbar-geometry-on-refresh + Fix problem where Konsole's tab bar is not shown immediately on startup. + + +++ Changes by Modestas Vainius: + + * Downgrade libqt4-dev *gl*-dev dependencies to Recommends. + They pull in half of X11 development headers and are rarely needed. + What's more, OpenGL apps will probably depend on them explicitly anyway. + * Add development packages of the SQL plugins to libqt4-dev Suggests. + * Make libqt4-sql recommend its plugins. Depends does not do us any good + because we don't know which plugin a user is going to use anyway. Moreover + installation of the libqt4-sql package does not necessarily imply usage of + the specific plugin(s). Finally, this resolves circular dependencies among + libqt4-sql and its plugins. + * Add myself to Uploaders. + * Add 16_always_init_qt_x11data_ptrx.diff, which ensures that X11->ptrX* + are properly initialized when Xcursor, Xinerama, Xfixes are not available + in default "runtime" configuration (Closes: #476608). + * Pass -xfixes -xcursor -xinerama to configure because default "runtime" + configuration requires a user to have libxfixes-dev, libxcursor-dev and + libxinerama-dev installed to enable features requires respective X + libraries (QLibrary simply searches for "lib*.so"). This change in + configuration makes 16 patch irrelevant for Debian, but I'm leaving it + as it's still the fix for the crashes which might occur on default Qt 4.4 + configutions. + * Optimize qmake: pass -optimized-qmake to configure. + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Sun, 27 Apr 2008 04:15:28 +0300 + +qt4-x11 (4.4.0~rc1-4) unstable; urgency=low + + +++ Changes by Sune Vuorela: + + * Have libqt4-dev conflict/replace libqtwebkit-dev. + * Fix qmake to generate a bit better pkg-config files. Those should usually + not be generated - as it ends up being crackful. After a bit of patching + they are a bit less crackful though. (Closes: 457570) + * Postprocess prl files to remove the same crack as in the pc files. + (Closes: 470572) + * Do a bit nicer linking when needed instead of relying on crackfulness from + prl and pc files. + * Add a disabled patch to generate better prl files, but unfortunately too + much of qt4 build process relies on on it and is not yet fixed, but it is + saved for later use. + * Fix qmake makefile generation - should not add double slashes to + makefiles. + * Make libqt4-core transitional package arch:any. It doesn't bloat the + archive too much, but it helps on installability. + + +++ Changes by Matthew Rosewarne: + + * Add Recommends: qt4-doc to qt4-demos. + * Add watch file. + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Tue, 15 Apr 2008 23:48:31 +0200 + +qt4-x11 (4.4.0~rc1-3) unstable; urgency=low + + +++ Changes by Sune Vuorela: + + * Clean up a bit in the dependencies of libqt4-dev. Removed dependencies: + libqt4-sql-mysql, libqt4-sql-odbc, libqt4-sql-psql, libqt4-sql-sqlite, + libqt4-sql-sqlite2, libqt4-sql-ibase, firebird2.0-dev, libaudio-dev, + libcupsys2-dev, libdbus-1-dev, libfreetype6-dev, libglib2.0-dev, + libice-dev, libiodbc2-dev, libjpeg62-dev, libmng-dev, libmysqlclient15-dev, + libpam0g-dev, libpng12-dev, libpq-dev, libreadline5-dev, libsm-dev, + libsqlite0-dev, libsqlite3-dev, libtiff4-dev, libx11-dev, libxcursor-dev, + libxext-dev, libxft-dev, libxi-dev, libxinerama-dev, libxmu-dev, + libxrandr-dev, libxrender-dev, libxslt1-dev, libxt-dev, x11proto-core-dev, + zlib1g-dev + + +++ Changes by Fathi Boudra: + + * Add libqt4-svg dependency to libqt4-gui. It helps for the transition as + libQtSvg.so.4 was previously in libqt4-gui package. (Closes: #475324) + * Replace libqcncodecs.so in libqt4-gui (<< 4.4.0~beta1-1). (Closes: #475340) + * Update 20_mips_atomic_ops patch. Qt4.4 introduced two new atomic operations + without the necessary assembler .set directives. + Thanks to Thiemo Seufer. (Closes: #475402) + + -- Fathi Boudra <fabo@debian.org> Sat, 12 Apr 2008 07:48:37 +0200 + +qt4-x11 (4.4.0~rc1-2) unstable; urgency=low + + * Add patch for Explicit template specialization cannot have a storage class + with gcc-4.3. Specializations of templates cannot explicitly specify + a storage class, and have the same storage as the primary template. + + -- Fathi Boudra <fabo@debian.org> Wed, 09 Apr 2008 09:40:00 +0200 + +qt4-x11 (4.4.0~rc1-1) unstable; urgency=low + + * New upstream release. (Closes: #469783) + + +++ Changes by Modestas Vainius: + + * Refresh qt-copy patches: + * 0167-fix-group-reading.diff - adjust offsets. + * 0180-window-role.diff - adjust offsets. + * 0195-compositing-properties.diff - adjust offsets. + * 0203-qtexthtmlparser-link-color.diff - adjust offsets. + * 0209-prevent-qt-mixing.diff - adjust offsets. + * 0214-fix-qgraphicsproxywidget-tab-crash.diff - adjust offsets. + * 0216-allow-isystem-for-headers.diff - adjust offsets. + * Remove qt-copy patches: + * 0172-prefer-xrandr-over-xinerama.diff - merged upstream. + * 0178-transparency-window-types.diff - merged upstream. + * 0215-compile-with-Xcursor-linkage.diff - merged upstream. + * 0217-qurl-isempty-regression.diff - merged upstream. + * 0218-qassert-macro-fix.diff - merged upstream. + * fix-qt_bootstrapped-typo.diff - merged upstream. + * Add qt-copy patches: + * 0220-no-x-recursion-in-xerrhandler.diff - adjust offsets. + * Refresh Debian patches: + * 02_launch_assistant-qt4.diff - adjust offsets. + * 05_append_qt4_target.diff - adopt to upstream changes. lrelease and + lupdate have been moved to tools/linguist/, adjust offsets. + * 50_kfreebsd_build_fix.diff - adjust offsets. + * 80_hurd_max_path.diff - adjust offsets. + * Remove Debian patches: + * 08_load_ssl.diff - different fix applied upstream. + * Update *.install files: + * qt4-dev-tools.install: a few renames of the language files, + s/assistant-qt3/assistant-qt4/, add usr/bin/xmlpatterns + * Add libqt4-core transitional package. (Closes: #473658) + * Add debian/not-installed to document files which are deliberately not + installed + * Avoid calling ./configure repeatedly during build/install: tie ./configure + to config.status + + +++ Changes by Fathi Boudra: + + * Re-introduce LD_LIBRARY_PATH workaround to use lrelease. + * Remove Conflicts against libqt4-core. + * Reorder libqt4-sql dependencies to have packages available on all + architectures listed first. (Closes: #473348) + * Add architectures availability list to libqt4-sql-ibase package. + (Closes: #473348) + * Add patch to fix unaligned access on hppa. Thanks to Bernhard R. Link. + (Closes: #458133) + * Add patch to replace remaining qdbus by dbus. Fix libqtscriptdbus build. + * Update configure options: + * Replace -qdbus by -dbus. + * Add -svg. + + +++ Changes by Matthew Rosewarne: + + * Rewrite clean rule to remove remaining build cruft. + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Mon, 07 Apr 2008 01:36:54 -0400 + +qt4-x11 (4.4.0~beta1-1) experimental; urgency=low + + * New upstream release. + + * Add build dependencies: doxygen, firebird2.0-dev, libiodbc2-dev, + libpam0g-dev, libreadline5-dev, libxslt1-dev. + * Split libqt4-gui and libqt4-core packages. + * Create package for each Qt module. + * Enable all SQL drivers as plugins and add related packages: + libqt4-sql-ibase, libqt4-sql-mysql, libqt4-sql-odbc, libqt4-sql-psql, + libqt4-sql-sqlite, libqt4-sql-sqlite2. + * Add packages: libqt4-assistant, libqt4-dbus, libqt4-designer, libqt4-help, + libqt4-network, libqt4-opengl, libqt4-script, libqt4-svg, libqt4-test, + libqt4-webkit, libqt4-xml, libqt4-xmlpatterns and qt4-demos. + * Replace libqt4-core by libqtcore4 package. + * Rename libqt4-debug to libqt4-dbg like other debug packages in Debian. + * Update .lintian override files. + * Update .install files. + * Move translations files in their respective packages. + * Disable DEB_INSTALL_CHANGELOGS_ALL. + * Build ibase sql plugin on supported architectures only. + * Enable demos, examples, WebKit and XmlPatterns. + * Enable exceptions. It is a dependency to XmlPatterns module. + * Add qtdemo help collection file. + * Split WebKit and XmlPatterns debug packages from libqt4-dbg. + * Generate Doxygen tagfile in libqt4-dev. Thanks to Matthew Rosewarne. + * Examples and Demos are not shipped compressed anymore. + * Refresh qt-copy patches: + * 0167-fix-group-reading + * 0172-prefer-xrandr-over-xinerama + * 0178-transparency-window-types + * 0180-window-role + * 0191-listview-alternate-row-colors + * 0192-itemdelegate-palette-state + * 0195-compositing-properties + * 0203-qtexthtmlparser-link-color + * 0209-prevent-qt-mixing + * 0210-fix-crash-q3stylesheet-font-size + * Remove qt-copy patches: + * 0175-fix-s390-qatomic + * 0176-coverity-fixes + * 0179-transient-hack + * 0187-fix-font-fixed-pitch + * 0194-fix-moveonly-dnd-in-itemviews + * 0200-fix-qsslsocket-waitfor + * 0205-fast-qpixmap-fill + * 0211-q3action-crash + * Add qt-copy patches: + * 0214-fix-qgraphicsproxywidget-tab-crash + * 0215-compile-with-Xcursor-linkage + * 0216-allow-isystem-for-headers + * 0217-qurl-isempty-regression + * 0218-qassert-macro-fix + * fix-qt_bootstrapped-typo + * Refresh Debian patches: + * 01_qmake_for_debian + * 02_launch_assistant-qt4 + * 03_launch_moc-qt4 + * 04_launch_uic-qt4 + * 05_append_qt4_target + * 08_load_ssl + * 10_config_tests_fixes + * 40_alpha_ice + * 41_disable_opengl_visibility + * 50_kfreebsd_build_fix + * 60_m68k_inotify_fix + * 80_hurd_max_path + * Remove Debian patches: + * 06_qtdemo_destdir. Useless as we ship qtdemo again. + * 30_arm_ftbfs_fixes. Merged upstream. + * 31_arm_eabi_fix. Upstream changed arm architecture handling. + This patch doesn't apply as it is. + * 91_qmake_lflags_no-undefined. Merged upstream. + + -- Fathi Boudra <fabo@debian.org> Thu, 13 Mar 2008 22:34:45 +0100 + +qt4-x11 (4.3.4-2) unstable; urgency=low + + * Add patches: + * 09_qmake_lflags_as-needed + workaround as LDFLAGS isn't honored by configure script. + we set --as-needed flag for Qt build only. + * 10_config_tests_fixes.diff + configuration test fixes for Interbase/Firebird and ODBC sql drivers. + * Update 01_qmake_for_debian patch: + * re-introduce link_prl and drop QT_SHARED workaround. + * Update rules: + * Remove exported LDFLAGS. + * Remove DEB_CONFIGURE_SCRIPT_ENV. + * Exclude debug files from dh_shlibdeps using DEB_DH_SHLIBDEPS_ARGS_ALL. + * Update configure options to use libtiff from system. + * Remove debug configure option to build with -02. + * Update common-install-arch target to fix wrong path in pkconfig and prl files. + * Add libtiff4-dev build dependency. + * Update libqt4-dev dependencies. + + -- Fathi Boudra <fabo@debian.org> Sat, 08 Mar 2008 10:09:02 +0100 + +qt4-x11 (4.3.4-1) unstable; urgency=low + + * New upstream release: + * This version adds the GNU General Public License (GPL) version 3 + to all Qt Open Source editions. The GPL Exception version 1.1 + applies to both versions of the GPL license. + + * Add qt-copy patches: + * 0205-fast-qpixmap-fill + Fix a performance issue in QPixmap::fill() + * 0209-prevent-qt-mixing + This patch changes QObjectPrivateVersion, thus preventing mixing parts + of upstream Qt and qt-copy. + * 0210-fix-crash-q3stylesheet-font-size + This patch fixes crashs in q3stylesheet + (it was possible to use a qfont size < 1) + * 0211-q3action-crash + During porting qt3to4 port QGroupAction to Q3GroupAction but not QAction + to Q3Action (which is logical) But it crashs when it's not a q3action. + * Refresh and enable 0172-prefer-xrandr-over-xinerama patch. + * Remove 0204-fix-tulip-aliasing patch. Merged upstream. + * Remove 90_qmake_cxxflags_fpermissive patch. + * Add ${shlibs:Depends} to libqt4-dev. See missing shared library + dependencies thread on debian-devel mailing list. + * Add catalan translation. Thanks to Javier Serrano Polo. (Closes: #459822) + * Update copyright file. Add GPL version 3. + * Remove -fpermissive. + + -- Fathi Boudra <fabo@debian.org> Tue, 26 Feb 2008 18:38:27 +0100 + +qt4-x11 (4.3.3-2) unstable; urgency=low + + * Update 0203-qtexthtmlparser-link-color qt-copy patch: + Add qt-bugs@ issue and Trolltech task ID. + * Add 0204-fix-tulip-aliasing qt-copy patch: + Fix KDE4 RC2 crashing on startup due to Qt 4.3.3 update. + * Downgrade libqt4-dev dependency to qt4-dev-tools from Recommends to + Suggests. + * Add semicolon at the end of the MimeType key. Thanks to Pino Toscano. + * Remove 91_qmake_ldflags_as-needed patch: + It breaks other packages. (Closes: #457038, #457284) + * Add 91_qmake_lflags_no-undefined patch: + By default, qmake adds --no-undefined linker flag. + + -- Fathi Boudra <fabo@debian.org> Sun, 30 Dec 2007 23:29:09 +0100 + +qt4-x11 (4.3.3-1) unstable; urgency=low + + * New upstream release. + + [Adeodato Simó] + + * Do not depend or build-depend on the transitional package xlibmesa-gl-dev, + but on libgl1-mesa-dev instead. Ditto for libglu1-xorg-dev/libglu1-mesa-dev. + + [Fathi Boudra] + + * Bump Standards-Version to 3.7.3. + * Fix description contains homepage lintian warning. + * Merge Kubuntu load ssl patch. Thanks to Jonathan Riddell. + * Add CDDL exception to debian/copyright. + * Add 21_assume_no_fpu_for_embedded_devices patch. Thanks to Thiemo Seufer + and Bradley Hughes. Not Enabled yet: It breaks ABI on mips. + We will keep it for later (> 4.3.3-1). + * Add 91_qmake_ldflags_as-needed patch. Build with --as-needed linker flag. + * Remove qt-copy patches: + * 0163-fix-gcc43-support. + * 0185-fix-format-strings. + * 0188-fix-moc-parser-same-name-header. + * 0189-fix-q3toolbar-qcombobox-signal-slot. + * 0193-qtreeview-division-by-zero.diff. + * Add qt-copy patches: + * 0200-fix-qsslsocket-waitfor. + Fixes some QSslSocket::waitFor$X methods. + * 0203-qtexthtmlparser-link-color. + Links are assigned a foreground color according to the system current + color scheme. + + -- Fathi Boudra <fabo@debian.org> Thu, 06 Dec 2007 22:06:46 +0100 + +qt4-x11 (4.3.2-1) unstable; urgency=low + + * New upstream release. + + [Fathi Boudra] + * Update desktop files categories. + * Add desktop files icons. (Closes: #433581) + * Update patches to Qt4.3.2. + * Add 90_qmake_cxxflags_fpermissive patch. + * Remove 0186-fix-component-alpha-text patch. Merged upstream. + * Add qt-copy patches: + * 0188-fix-moc-parser-same-name-header + * 0189-fix-q3toolbar-qcombobox-signal-slot + * 0191-listview-alternate-row-colors + * 0192-itemdelegate-palette-state + * 0193-qtreeview-division-by-zero + * 0194-fix-moveonly-dnd-in-itemviews + * 0195-compositing-properties + * Update qt4-dev-tools long description. + * Update copyright: + * Update Trolltech GPL exception to v1.1. + * Add Trolltech GPL exception addenum. + * Update rules: + * Build with -fpermissive. + * Introduce QTVERSION. + * Fix qt4-config menu section. (Closes: 444896) + + [Sune Vuorela] + * Have strict interdependencies between packages with a shlibs.local file. + (Closes: #438746) + * Don't trust uname in generating the qt build key. This has bitten us in + qt3, but will soon bite us in qt4 as qt4 becomes more popular. + + [Ana Beatriz Guerrero Lopez] + * Add desktop files icons uuencoded and update rules to install them uudecoded. + * Add sharutils build dependency. + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Sat, 06 Oct 2007 07:00:54 +0200 + +qt4-x11 (4.3.1-2) unstable; urgency=low + + * There is a large difference between 8 spaces and a tab. + + -- Sune Vuorela <debian@pusling.com> Fri, 10 Aug 2007 22:20:45 +0200 + +qt4-x11 (4.3.1-1) unstable; urgency=low + + * New upstream release. + + [Fathi Boudra] + * Switch to quilt patch system. + * Update copyright. Add Trolltech GPL Exception. + * Update section in Debian menu files. + * Update patches for Qt4.3.1. + * Remove 51_kfreebsd_mkspecs patch. Moved in rules. + * Add 0187-fix-font-fixed-pitch patch: + This patch works around broken QFontInfo::fixedPitch by always using a + glyph metrics comparison test to guess the information. This has the + property of both ignoring (bad) and not relying on (good) any information + that might be provided by the OS's font facility. For Mac OS X only. + * Remove patches merged upstream: + * 0177-qurl-clear-fix + * 0183-qprocess-corruption + * 42_alpha_fetch_and_add + * Disable: + * 0172-prefer-xrandr-over-xinerama patch. (Closes: #433931) + * 0181-qdnd-x11-fix patch. + + [Sune Vuorela] + * Add a quick and dirty test to make build on hppa fail if a current + getdents kernel bug is detected. + + -- Fathi Boudra <fboudra@free.fr> Wed, 08 Aug 2007 15:08:11 +0200 + +qt4-x11 (4.3.0-5) unstable; urgency=low + + [Fathi Boudra] + * Update 01_qmake_for_debian patch. Add DEFINES += QT_SHARED in qmake.conf + along with the removal of link_prl. (Closes: #434019) + * Apply qt-copy patches: + * 00_0185-fix-format-strings: This patch fixes various code issues with + handling format strings. None of them seem to be exceptionally bad, + but its better safe than sorry. It is related to CVE-2007-3388. + TT claims the problem is not present in any version of Qt 4. Dirk Muller + disagrees and believes that some of them are possible to exploit. + * 00_0186-fix-component-alpha-text: This patch fixes component alpha + (LCD hinted) text when it's drawn on a non-opaque background. Qt doesn't + initialize the alpha channel in the glyph masks, which causes problems + in Konsole when transparency is enabled, and in other situations where + the background isn't fully opaque. + + -- Fathi Boudra <fboudra@free.fr> Mon, 30 Jul 2007 21:36:25 +0200 + +qt4-x11 (4.3.0-4) unstable; urgency=low + + [Fathi Boudra] + * Add 42_alpha_fetch_and_add patch to fix broken threading on alpha, hangs + uselessly on startup. fetch-and-add is supposed to return the original + value before the addition. Thanks to Steve Langasek and Bradley Hughes. + (Closes: #433031) + * Update control: Replace ${source:Version} by ${binary:Version}. + Make the package binNMU safe. Thanks to Lior Kaplan. (Closes: #433548) + + -- Fathi Boudra <fboudra@free.fr> Mon, 16 Jul 2007 21:32:01 +0200 + +qt4-x11 (4.3.0-3) unstable; urgency=low + + [Fathi Boudra] + * Update control: Replace deprecated ${Source-Version} by ${source:Version}. + * Update rules: + * Add bindir and libdir configure options. + * Replace common-install-arch target. Replaced by build system patches and + a fix for pkgconfig files. (Closes: #401807) + * Add patches: + * 04_launch_uic-qt4: call uic-qt4 binary. + * 05_append_qt4_target: append -qt4 when needed. It fixes moc-location and + uic_location are properly in pkgconfig files. (See bug #401807) + * 06_qtdemo_destdir: remove QT_BUILD_TREE in qtdemo DESTDIR target. + (Closes: #408639) + * Revert Qt handling argb visuals on X11 patch. There are dependencies + not fixed in Qt. They cause a few regressions when this patch is applied. + (Closes: #430907, #431436, #431943) + * Update Qt support for new window types used for compositing patch. + Fix crashes when 'w' is null. (Closes: #431322) + * Apply qt-copy patches: + * 00_0172-prefer-xrandr-over-xinerama: only trust libxinerama if it is not + the emulated information coming from xrandr 1.2. + * 00_0177-qurl-clear-fix: fix QUrl::clear(). Applied upstream. + * 00_0183-qprocess-corruption: fix plain data loss bug. Applied Upstream. + + -- Fathi Boudra <fboudra@free.fr> Fri, 29 Jun 2007 08:15:23 +0200 + +qt4-x11 (4.3.0-2) unstable; urgency=low + + [Brian Nelson] + * Changed dist back to unstable. + * Tightened qt4-dev-tools's dependency on libqt4-core to + (= ${Source-Version}), since it uses internal (non-public) classes in + Qt whose ABI can change. (Closes: #429817) + * Added a build-dependency on libxi-dev to enable tablet support. + * Constrict the hack to clean all binary files to the bin, config.tests, + and qmake directories to drastically improve its speed + + [Fathi Boudra] + * Qt4 demos builds properly in Qt4.3. (Closes: #408639) + * Apply qt-copy patches: + * 00_0178-transparency-window-types: adds Qt support for new window types + used for compositing. + * 00_0179-transient-hack: workaround that makes setting of WM_TRANSIENT_FOR + work with some window types. + * 00_0180-window-role: several problems with Qt's support for the + WM_WINDOW_ROLE property. + * 00_0181-qdnd-x11-fix: makes the find_child algorithm in qdnd look at + _all_ widgets that contain the QPoint. + * 00_0182-argb-visuals-default: Qt handling argb visuals on X11. + + -- Brian Nelson <pyro@debian.org> Wed, 27 Jun 2007 00:02:07 -0400 + +qt4-x11 (4.3.0-1) experimental; urgency=low + + * New upstream release. + * Fixes a QListView issue. (Closes: #419654) + + * Update uploaders. Add Ana, Sune and Fathi. + + [Sune Vuorela] + * Remove 04_utf8_bug_fix: Merged upstream. + * Update libqt4-dev.install. Upstream installs pkgconfig files the right place. + * Update libqt4-core.install. Add libQtScript. + * Update rules: + * Add utils.mk to use list-missing. + * Cleaning seems to fail a bit. Trying to hack around that in clean:: + target. + + [Fathi Boudra] + * Redo 30_arm_ftbfs_fixes to fix another FTBFS. Add arm target to configure + script. Thanks to Sune Vuorela and Aurelien Jarno. (Closes: #426129) + * Remove 71_hppa_inotify_fix: Merged upstream. + * Update patches: + * 02_launch_assistant-qt4 + * 03_launch_moc-qt4 + * 50_kfreebsd_build_fix + * 80_hurd_max_path + * Apply qt-copy patches: + * 00_0163-fix-gcc43-support: Various fixes to get Qt 4.3 without hundreds + of warnings compiling. + * 00_0167-fix-group-reading: In big user environments, getgrgid_r() needs + more memory than sysconf() returns. + * 00_0175-fix-s390-qatomic: Fix s390(x) build. + * 00_0176-coverity-fixes: Fix various obvious memory leaks. + * Rename disable opengl visibility patch. It is not alpha architecture only. + * Add desktop files to support Desktop Environments. (Closes: #378915) + * Update qt4-dev-tools.install. Add qdbusviewer and pixeltool. + Thanks to Benjamin Meyer for the reminder. + * Update libqt4-dev.install. Remove qtdemo binary as we provide a tarball of the + demos directory. qtdemo is useless, it can't launch anything without demos + builded. It can only show screenshots and short description of demos, + users have it in Qt assistant. + * Update rules: + * Remove -debug-and-release option. Deprecated. + * Add configure options: + * -no-exceptions + * -debug + * -qdbus + * -pch + * -nomake examples + * -nomake demos + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Sat, 09 Jun 2007 00:25:41 +0200 + +qt4-x11 (4.2.3-1) unstable; urgency=low + + * New upstream release + - Fixes build failures when QT_NO_DEBUG_OUTPUT defined + (Closes: #418832) + - Fixes broken signal/slot connection in QSvgRenderer + (Closes: #411292) + + -- Brian Nelson <pyro@debian.org> Thu, 12 Apr 2007 12:38:06 -0400 + +qt4-x11 (4.2.2-2) unstable; urgency=high + + * debian/patches/04_utf8_bug_fix.dpatch: new patch to fix the "UTF-8 + overlong sequence decoding vulnerability" [CVE-2007-0242] + + -- Brian Nelson <pyro@debian.org> Fri, 30 Mar 2007 11:04:20 -0400 + +qt4-x11 (4.2.2-1) unstable; urgency=low + + * New upstream release (Closes: #410862) + + * debian/rules: set the sysconfdir to /etc/xdg instead of /etc/qt4 to + match the QSettings documentation (Closes: #407297) + + * Added Riku Voipio's patch for ARM EABI (Closes: #408813) + + * debian/patches/22_launch_moc-qt4.dpatch: new patch to ensure the Qt4 + version of moc is launched by qdbuscpp2xml (Closes: #399049) + + * Added a doc-base file for qt4-doc (Closes: #403290) + + * debian/qt4-designer.links: added a link /usr/share/qt4/bin/designer -> + /usr/bin/designer-qt4 (Closes: #410885) + + * Re-arranged patches to group them by arch so that they're easier to + deal with + + * Applied new patches for kFreeBSD and Hurd support + (Closes: #380097, #402007) + + * debian/libqt4-gui.install: added the codecs plugins, somehow these got + accidentally dropped (Closes: #409228) + + -- Brian Nelson <pyro@debian.org> Sun, 4 Mar 2007 13:50:39 -0500 + +qt4-x11 (4.2.1-2) unstable; urgency=low + + * debian/patches/20_hppa_inotify_fix.dpatch: new patch that should fix + the FTBFS on hppa due to missing defines (Closes: #394953) + + * Added patches for hurd support (Closes: #380097) + + * debian/patches/10_qmake_for_debian.dpatch: restored the modification + to remove link_prl from the CONFIG line, which fixes problems with + unnecessary linkage (Closes: #394836) + + -- Brian Nelson <pyro@debian.org> Tue, 31 Oct 2006 02:42:02 -0500 + +qt4-x11 (4.2.1-1) unstable; urgency=high + + * New upstream release + - Fixes integer overflow in pixmap handling [CVE-2006-4811] + (Closes: #394192) + + * Install the libqtaccessiblecompatwidgets.so plugin into + libqt4-qt3support, so that libqt4-gui does not circularly depend on + libqt4-qt3support (Closes: #394351, #394629) + + -- Brian Nelson <pyro@debian.org> Mon, 23 Oct 2006 11:59:52 -0400 + +qt4-x11 (4.2.0-2) unstable; urgency=low + + * debian/control: added a dependency on libglib2.0-dev for libqt4-dev + (Closes: #392797, #392173) + + * Added a bunch of plugins and their debugging symbols to be installed + + * debian/patches/19_m68k_inotify_fix.dpatch: new patch to fix FTBFS on + m68k (Closes: #391902) + + * Imported Ubuntu fixes, thanks to Jonathan Riddell for the tip + - Fix typo in debian/rules -qt-sql-slite to -qt-sql-sqlite + (Closes: #392808) + - Install usr/bin/qdbus usr/bin/qdbusxml2cpp and usr/bin/qdbuscpp2xml + (Closes: #391726) + + * debian/control: added a libqt4-dev dependency on libsqlite0-dev + (Closes: #392558) + + -- Brian Nelson <pyro@debian.org> Tue, 17 Oct 2006 23:44:31 -0400 + +qt4-x11 (4.2.0-1) unstable; urgency=low + + * New upstream release + - No longer includes "CONFIG = ... debug" in the mkspecs/qconfig.pri + (Closes: #357136) + - Fixes QFontDialog assert() failures (Closes: #380418) + + * debian/control: made libqt4-gui conflict/replace libqt4-designer, to + ensure that old package is removed (Closes: #380253) + + * Enable Qt's new support for using the system's SQLite 3 library + (Closes: #382238) + + * debian/rules: removed the PostgreSQL and MySQL include hacks from the + configure arguments, since the configure script now autodetects them + itself + + * debian/patches/10_qmake_for_debian.dpatch: updated for new upstream + + * debian/patches/13_arm_ftbfs_fixes.dpatch: updated for new upstream + + * debian/patches/19_s390_atomic.dpatch: removed, since it appears to be + obsolete + + * debian/libqt4-debug.install: changed the wildcards to match the new + debug lib names. What was once *_debug.so.* is now *.debug. Ick. + + * debian/control: removed libqt4-debug-dev since now that the _debug + libs have been removed and debugging symbols are shipped in their + place, this package is no longer needed + + * Tar up the demos directory and include it in qt4-doc. Also added the + qtdemo binary to libqt4-dev. (Closes: #390925) + + * debian/rules: add -DQT_QLOCALE_USES_FCVT to the configure arguments + when building on arm, like Qt3, to fix a uic problem (Closes: #386460) + + * debian/libqt4-gui.install: added usr/lib/libQtAssistantClient.so.*, + since it's now shipped as a shared library; previously it was a static + library + + * Added build-deps on libdbus-1-dev and libglib2.0-dev, and added + libQtDBus to the libqt4-core package + + -- Brian Nelson <pyro@debian.org> Fri, 6 Oct 2006 23:16:46 -0400 + +qt4-x11 (4.1.4-1.1) unstable; urgency=medium + + * Non-maintainer upload. + * Reintroduce the libpq-dev dependency, which seems to have been removed by + mistake in 4.1.0-2. (Closes: #327618) + + -- Steinar H. Gunderson <sesse@debian.org> Tue, 29 Aug 2006 01:10:59 +0200 + +qt4-x11 (4.1.4-1) unstable; urgency=low + + * New upstream release (Closes: #378443) + + * Moved usr/lib/libQtDesigner.so.* and + usr/lib/libQtDesignerComponents.so.* from qt4-designer to libqt4-gui + so there the libqt4-dev package won't contain dangling symlinks + (Closes: #374612) + + -- Brian Nelson <pyro@debian.org> Sun, 16 Jul 2006 15:39:29 -0700 + +qt4-x11 (4.1.3-3) unstable; urgency=low + + * debian/patches/19_s390_atomic: patch from Bastian Blank to fix + including of s390 specific atomic header. (Closes: #370241) + + * debian/patches/18_disable_opengl_visibility.dpatch: regenerated so + that it applies correctly for me + + -- Brian Nelson <pyro@debian.org> Sun, 25 Jun 2006 11:42:57 -0700 + +qt4-x11 (4.1.3-2) unstable; urgency=high + + * patches/18_disable_opengl_visibility: disable -fvisibility-inlines-hidden + for src/opengl/opengl.pro as it makes gcc ICE on alpha. + (Closes: #368883) + + * urgency set to high so that qt4-x11 stops blocking half of unstable out of + testing. + + -- Pierre Habouzit <madcoder@debian.org> Mon, 5 Jun 2006 10:28:29 +0200 + +qt4-x11 (4.1.3-1) unstable; urgency=high + + * New upstream release + + * debian/patches/16_hppa_ldcw_fix.dpatch: new patch from Ubuntu to + properly support hppa + + * debian/patches/17_alpha_ice.dpatch: new patch from Steve Langasek to + fix FTBFS on alpha (Closes: #368883) + (urgency set to high for that fix). + + * Dropped the .la files since they pull in too many unneeded + dependencies (Closes: #360802) + + * debian/libqt4-debug.install: removed + usr/lib/qt4/plugins/codecs/*_debug.so since those aren't included + upstream anymore + + * Increased standards version to 3.7.2 + + -- Brian Nelson <pyro@debian.org> Sat, 3 Jun 2006 17:56:32 -0700 + +qt4-x11 (4.1.2-2) unstable; urgency=low + + * debian/libqt4-debug-dev.install, debian/libqt4-dev.install: added + wildcards to install .a static libraries so that the libQtUiTools and + libQtAssistantClient libraries are included (Closes: #358224, #355902) + + -- Brian Nelson <pyro@debian.org> Sun, 14 May 2006 10:03:40 -0700 + +qt4-x11 (4.1.2-1) unstable; urgency=low + + * New upstream release + + * debian/control: removed dependencies on xlibs-static-dev and + xlibs-static-pic to transition to building against modular X + (Closes: #362262) + + * debian/control: changed x-dev dependencies to x11proto-core-dev, for + modular X transition (Closes: #362053) + + -- Brian Nelson <pyro@debian.org> Thu, 13 Apr 2006 10:35:28 -0700 + +qt4-x11 (4.1.1-1) unstable; urgency=low + + * New upstream release + - Fixes the broken debug-and-release build and a load of resulting + bugs (Closes: #337764, #337847, #341807, #338380, #354993, #347251) + - debian/patches/15_alpha_ftbfs_fix.dpatch: removed, integrated upstream + + * debian/control: updated libqt4-debug-dev priority to match that of the + override file + + * debian/libqt4-dev.links: added a symlink /usr/share/qt4/bin/rcc to + /usr/bin/rcc (Closes: #349438) + + * debian/libqt4-gui.install: added libqmng.so and libqgif.so plugins + (Closes: #354266) + + -- Brian Nelson <pyro@debian.org> Mon, 6 Mar 2006 10:20:47 -0800 + +qt4-x11 (4.1.0-3) unstable; urgency=low + + * Moved *_debug.prl and *_debug.la support files to the libqt4-debug-dev + package + + * Updated to debhelper v5 compatibility + + * debian/qt4-dev-tools.install: removed the /usr/share/qt4/templates + entry, which no longer contains anything + + * Added gif support (Closes: #348092) + + * debian/patches/12_mips_atomic_ops.dpatch: applied fixes from Isaac + Clerencia <isaac@debian.org>, as the last patch was not good enough to + fix the FTBFS bug (Closes: #335831) + + -- Brian Nelson <pyro@debian.org> Tue, 17 Jan 2006 09:49:11 -0800 + +qt4-x11 (4.1.0-2) unstable; urgency=low + + * debian/patches/12_mips_atomic_ops.dpatch: Updated patch to account for + 2 new functions, q_atomic_test_and_set_acquire_int and + q_atomic_test_and_set_release_int, that were added in this release. + This should again fix the build failures on mips. (Closes: #335831) + + * debian/patches/13_arm_ftbfs_fixes.dpatch: renamed, added a fix for the + new build failure due to a poorly defined qreal (Closes: #347360) + + * debian/control: build against libmysqlclient15, and updated all + dependencies to libmysqlclient15-dev (Closes: #346586) + + * debian/control: added explicit dependencies for libqt4-dev on the + Source-Version packages libqt4-core, libqt4-gui, libqt4-sql, and + libqt4-qt3support. These dependencies were accidentally dropped in + the last version. Also removed some unneeded dependencies. + + * Split the *_debug.so symlinks out of libqt4-dev and into a separate + libqt4-debug-dev package. Made the libqt4-debug-dev package depend on + the Source-Version of libqt4-debug. This way, the symlinks won't be + dangling if libqt4-debug isn't installed and prevents failed linking + due to version mismatches. (Closes: #346603, #346605) + + * Re-enabled sqlite3 support. It's still statically linked, however, + but that'll have to do because I really don't want to futz with the + build system. (Closes: #330976) + + * Enabled sqlite2 support + + * debian/patches/15_alpha_ftbfs_fix.dpatch: new patch to rename + q_atomic_test_and_set_release_ptr to q_atomic_test_and_set_ptr, as + suggested by Isaac Clerencia <isaac@debian.org>, to fix a FTBFS on + alpha. (Closes: #347353) + + * debian/patches/10_qmake_for_debian: renamed from + 10_qmake_use_qt4_tools, and updated to remove the "link_prl" from the + default qmake CONFIG line. This disables the recursive linkage + against all indirectly-used libraries. (Closes: #343190) + + -- Brian Nelson <pyro@debian.org> Tue, 10 Jan 2006 19:29:52 -0800 + +qt4-x11 (4.1.0-1) unstable; urgency=low + + * New upstream release + - Fixes missing QBitArray operators (Closes: #341658) + - Fixes qmake problem with including bad build path (Closes: #327359) + + * Added the new QTestLib unit testing framework to the libqt4-core + package + + * Added the new QtSvg module to the libqt4-gui package + + * debian/patches/13_arm_gcc4.dpatch: new patch from Jeremy Laine to fix + FTBFS on arm (Closes: #343176) + + * debian/patches/14_kfreebsd_build_fix.dpatch: new patch from Petr + Salinger to fix FTBFS on GNU/kFreeBSD (Closes: #343191) + + * Split the qtconfig tool out of libqt4-gui and into a separate + qt4-qtconfig package, due to its linkage against libqt4-qt3support and + hence ridiculous dependency chain. + + * debian/rules: improved/cleaned up the clean target + + -- Brian Nelson <pyro@debian.org> Wed, 4 Jan 2006 12:56:23 -0800 + +qt4-x11 (4.0.1-6) unstable; urgency=low + + * Added a target to automatically install lintian overrides, stolen from + debian-qt-kde.mk + + * Added a bunch of lintian overrides for stuff that should be ignored + + -- Brian Nelson <pyro@debian.org> Sat, 19 Nov 2005 01:17:03 -0800 + +qt4-x11 (4.0.1-5) unstable; urgency=low + + * debian/control: made libqt4-gui replace libqt4-core (<< 4.0.1-3), for + the plugins move (Closes: #336492) + + * debian/control: removed the mention of a qt4-examples package that + doesn't actually exist from the qt4-doc package description + + * debian/rules: remove all *.so files under + examples/tools/plugandpaint/plugins/ in the clean target + (Closes: #339674) + + * Removed the menu entry for designer-qt4 from qt4-dev-tools.menu, and + added it to a new qt4-designer.menu + + * Added a tarball of the examples to qt4-doc (Closes: #336832) + + -- Brian Nelson <pyro@debian.org> Fri, 18 Nov 2005 10:27:03 -0800 + +qt4-x11 (4.0.1-4) unstable; urgency=low + + * debian/control: changed qt4-designer's section to "devel" + + * Added a patch from Thiemo Seufer to fix the FTBFS on mips/mipsel + (Closes: #335831) + + -- Brian Nelson <pyro@debian.org> Wed, 26 Oct 2005 00:13:40 -0700 + +qt4-x11 (4.0.1-3) unstable; urgency=low + + * debian/libqt4-core.install: only install the non-debug codecs, since + the debug ones pull in a gratuitous dependency on libqt4-debug + (Closes: #328913) + + * debian/libqt4-debug.install: install the debug codecs here instead + + * debian/control: replaced obsolete xlibs-dev dependency with the + required split packages (Closes: #329302) + + * Completely disabled SQLite support since it's too fubar in this + version to be usable. The build fails with SQLite2 support, and + SQLite3 is only supported by linking staticly with a version + distributed in the Qt source. Meh. + + * Renamed libqt4-designer to qt4-designer, merged in the designer binary + from qt4-dev-tools, and added a dependency on libqt4-dev + (Closes: #330094) + + * Moved the plugins installed in libqt4-core to libqt4-gui, since they + link against the GUI library. Otherwise a circular libqt4-core <-> + libqt4-gui dependency results. + + -- Brian Nelson <pyro@debian.org> Fri, 21 Oct 2005 00:28:53 -0700 + +qt4-x11 (4.0.1-2) unstable; urgency=low + + * debian/patches/10_qmake_use_qt4_tools.dpatch: new patch that modifies + qmake.conf so that qmake generates Makefiles that use the -qt4 tools. + This way, it can cope with systems that have alternatives set to use + the -qt3 versions. + + * Increased the conflicting Qt3 package versions to <= 3.3.4-7, since + the Qt3 packages still don't use the alternatives system as needed to + coexist with Qt4. + + * debian/libqt4-core.install: added /usr/lib/qt4/plugins/codecs + + * debian/patches/11_launch_assistant-qt4: new patch that modifies the + QAssistantClient class to launch Qt Assistant as "assistant-qt4" to + cope with the alternatives system (Closes: #327294) + + * debian/control: Upgraded libqt4-dev's dependencies on the modules + libqt4-sql and libqt4-qt3support from suggests to depends, and added + libpq-dev and libmysqlclient14-dev | libmysqlclient-dev as + dependencies. These dependencies are apparently required to make + building pkg-config-using packages happy. (Closes: #327618) + + * debian/control: corrected libqt4-sql to suggest libmysqlclient14-dev, + not libmysqlclient12-dev which is deprecated + + * debian/copyright: updated FSF snailmail address + + * debian/libqt4-debug.install: removed the libqt3supportwidgets_debug.so + designer plugin, since for some reason having this installed breaks + designer (Closes: #325782) + + -- Brian Nelson <pyro@debian.org> Mon, 12 Sep 2005 12:32:53 -0700 + +qt4-x11 (4.0.1-1) unstable; urgency=low + + * New upstream release + + * Install changes-4.0.1 as upstream changelog + + * debian/manpages/assistant-qt4.1: new manpage written from scratch + based on the output of "assistant -help" + + * debian/manpages/designer-qt4.1, debian/manpages/linguist-qt4.1: + manpages stolen from the Qt3 packages and trivially adapted for Qt4 + (Closes: #322403) + + * debian/manpages/moc-qt4.1: escape some '-' characters + + * debian/qt4-dev-tools.manpages: install the new assistant-qt4.1, + designer-qt4.1, and linguist-qt4.1 manpages + + * debian/control: made qt4-dev-tools recommend qt4-doc, since assisant + needs it to be useful (Closes: #323251) + + * Removed the FAQ from qt4-doc.docs, since it's no longer included in + 4.0.1, and was useless anyway + + * Build-depend on libmysqlclient14-dev since libmysqlclient12-dev is + scheduled to be removed + + * debian/libqt4-dev.install: work around TT's broken "install" target in + this release so that the pkgconfig files are installed in + /usr/lib/pkgconfig instead of directly in /usr/lib. Grrrr. + + -- Brian Nelson <pyro@debian.org> Thu, 25 Aug 2005 19:28:35 -0700 + +qt4-x11 (4.0.0-3) unstable; urgency=low + + * debian/control: changed the xlibs-pic dependency to xlibs-static-pic + for the X.org transition (Closes: #319586) + + * Added manpages for lrelease, lupdate, moc, qtconfig, and uic, stolen + from the Qt3 upstream tarball, and wrote a manpage for qmake from + scratch. Since now manpages are included for all executables using + the alternatives, the symlinks to them no longer dangle. + (Closes: #319456) + + * debian/libqt4-core.install: added + usr/lib/qt4/plugins/imageformats/libqjpeg.so to include the jpeg + plugin (Closes: #321582) + + * debian/libqt4-debug.install: added the libqjpeg_debug.so plugin + + * debian/rules: don't hardcode the /usr/include/postgresql/8.0 path, + instead of the output of `pg_config --includedir`, stolen from Qt3 + packages + + * debian/libqt4-gui.install: added the OpenGL module library so that it + actually gets included in a package (Closes: #321874) + + * debian/control: updated the package descriptions to note that the + Network and XML modules are included in the libqt4-core package, and + the OpenGL module is included in the libqt4-gui package + + -- Brian Nelson <pyro@debian.org> Mon, 8 Aug 2005 08:58:10 -0700 + +qt4-x11 (4.0.0-2) unstable; urgency=low + + * libqt4-dev: added /usr/bin/uic3 (Closes: #318451) + + * Transition to the new X.org packages: + + (Build-)depend on libglu1-xorg-dev instead of xlibmesa-gl-dev + + (Build-)depend on libxinerama-dev (Closes: #318682) + + -- Brian Nelson <pyro@debian.org> Tue, 19 Jul 2005 21:28:19 -0700 + +qt4-x11 (4.0.0-1) unstable; urgency=low + + * Initial release (Closes: #306694) + + -- Brian Nelson <pyro@debian.org> Tue, 5 Jul 2005 19:42:18 -0700 diff --git a/config.profiles/harmattan/collection/qtdemo.qhc.uu b/config.profiles/harmattan/collection/qtdemo.qhc.uu new file mode 100644 index 0000000..4e4898e --- /dev/null +++ b/config.profiles/harmattan/collection/qtdemo.qhc.uu @@ -0,0 +1,231 @@ +begin 644 qtdemo.qhc +M4U%,:71E(&9O<FUA="`S``0``0$`0"`@````%@````````````````````8` +M```!```````````````"```````````````````````````````````````` +M``````````````4````!`_L`````"`/[```````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````&`PT````"`MT``X$" +MW0`````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M``"!(0(%`'6!76,`;P!M`"X`=`!R`&\`;`!L`'0`90!C`&@`+@!D`&4`<P!I +M`&<`;@!E`'(`+@`T`#0`,``N`"X`+P`N`"X`+P`N`"X`+P`N`"X`+P!S`&@` +M80!R`&4`+P!Q`'0`-``O`&0`;P!C`"\`:`!T`&T`;``M`&0`90!S`&D`9P!N +M`&4`<@`O`&0`90!S`&D`9P!N`&4`<@`N`'$`8P!H`'T!!0!=@2UC`&\`;0`N +M`'0`<@!O`&P`;`!T`&4`8P!H`"X`<0!T`"X`-``T`#``+@`N`"\`+@`N`"\` +M+@`N`"\`+@`N`"\`<P!H`&$`<@!E`"\`<0!T`#0`+P!D`&\`8P`O`&@`=`!M +M`&P`+0!Q`'0`+P!Q`'0`+@!Q`&,`:``-`````@/B``/Q`^(````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````#0($``$=`G$`9`!O`&,`#0$$ +M``$=`7$`9`!O`&,`#0````4#KP`#]P/H`],#Q`.O```````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M`````````````!,%`P`M9`!E`',`:0!G`&X`90!R``T$`P`A=`!O`&\`;`!S +M`!,#`P`M<0!T`'(`90!F`&0`;P!C``T"`P`A-``N`#0`+@`P``<!`P`5<0!T +M``T````"`\(``^L#P@`````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````)P(#`%51`'0`(`!$`&4`<P!I`&<`;@!E`'(` +M(`!-`&$`;@!U`&$`;``3`0,`+5$`=``@`#0`+@`T`"X`,``-`````P$_``$_ +M`BH##P`````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````@6@!!R%% +M10&"270`80!B`&P`90!.`&$`;0!E`',`<`!A`&,`90!4`&$`8@!L`&4`3@!A +M`&T`90!S`'``80!C`&4`5`!A`&(`;`!E``)#`%(`10!!`%0`10`@`%0`00!" +M`$P`10`@`$X`80!M`&4`<P!P`&$`8P!E`%0`80!B`&P`90`@`"@`20!D`"`` +M20!.`%0`10!'`$4`4@`@`%``4@!)`$T`00!2`%D`(`!+`$4`60`L`"``3@!A +M`&T`90`@`%0`10!8`%0`+``@`$8`:0!L`&4`4`!A`'0`:``@`%0`10!8`%0` +M(``I`(%B`@<A.3D!@E5T`&$`8@!L`&4`1@!O`&P`9`!E`'(`5`!A`&(`;`!E +M`$8`;P!L`&0`90!R`%0`80!B`&P`90`#0P!2`$4`00!4`$4`(`!4`$$`0@!, +M`$4`(`!&`&\`;`!D`&4`<@!4`&$`8@!L`&4`(``H`$D`9``@`$D`3@!4`$4` +M1P!%`%(`(`!0`%(`20!-`$$`4@!9`"``2P!%`%D`+``@`$X`80!M`&4`<P!P +M`&$`8P!E`$D`9``@`$D`3@!4`$4`1P!%`%(`+``@`$X`80!M`&4`(`!4`$4` +M6`!4`"``*0"!;@,'(5U=`8(E=`!A`&(`;`!E`$8`:0!L`'0`90!R`$$`=`!T +M`'(`:0!B`'4`=`!E`%0`80!B`&P`90!&`&D`;`!T`&4`<@!!`'0`=`!R`&D` +M8@!U`'0`90!4`&$`8@!L`&4`!$,`4@!%`$$`5`!%`"``5`!!`$(`3`!%`"`` +M1@!I`&P`=`!E`'(`00!T`'0`<@!I`&(`=0!T`&4`5`!A`&(`;`!E`"``*`!) +M`&0`(`!)`$X`5`!%`$<`10!2`"``4`!2`$D`30!!`%(`60`@`$L`10!9`"P` +M(`!.`&$`;0!E`"``5`!%`%@`5``@`"D`#0````4#W0`#^0/R`^L#Y`/=```` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````%!0,!`0(%!00#`0$"!`4#`P$!`@$% +M`@,!`0$"!0$#`0$!`0T"7@`$`2L``F(#-0$K`?`````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````````````@4(& +M!R%!00&"!70`80!B`&P`90!3`&4`=`!T`&D`;@!G`',`5`!A`&(`;`!E`%,` +M90!T`'0`:0!N`&<`<P!4`&$`8@!L`&4`"4,`4@!%`$$`5`!%`"``5`!!`$(` +M3`!%`"``4P!E`'0`=`!I`&X`9P!S`%0`80!B`&P`90`@`"@`2P!E`'D`(`!4 +M`$4`6`!4`"``4`!2`$D`30!!`%(`60`@`$L`10!9`"P`(`!6`&$`;`!U`&4` +M(`!"`$P`3P!"`"``*0!L!P<A@0U!`0!I`&X`9`!E`'@`<P!Q`&P`:0!T`&4` +M7P!A`'4`=`!O`&D`;@!D`&4`>`!?`%,`90!T`'0`:0!N`&<`<P!4`&$`8@!L +M`&4`7P`Q`%,`90!T`'0`:0!N`&<`<P!4`&$`8@!L`&4`"@````2!4`0'(4E) +M`8(1=`!A`&(`;`!E`$8`:0!L`'0`90!R`$X`80!M`&4`5`!A`&(`;`!E`$8` +M:0!L`'0`90!R`$X`80!M`&4`5`!A`&(`;`!E``5#`%(`10!!`%0`10`@`%0` +M00!"`$P`10`@`$8`:0!L`'0`90!R`$X`80!M`&4`5`!A`&(`;`!E`"``*`!) +M`&0`(`!)`$X`5`!%`$<`10!2`"``4`!2`$D`30!!`%(`60`@`$L`10!9`"P` +M(`!.`&$`;0!E`"``5`!%`%@`5``@`"D`@4@%!R$Y.0&"(70`80!B`&P`90!& +M`&D`;`!T`&4`<@!4`&$`8@!L`&4`1@!I`&P`=`!E`'(`5`!A`&(`;`!E``=# +M`%(`10!!`%0`10`@`%0`00!"`$P`10`@`$8`:0!L`'0`90!R`%0`80!B`&P` +M90`@`"@`3@!A`&T`90!)`&0`(`!)`$X`5`!%`$<`10!2`"P`(`!&`&D`;`!T +M`&4`<@!!`'0`=`!R`&D`8@!U`'0`90!)`&0`(`!)`$X`5`!%`$<`10!2`"`` +M*0`-``````0````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M````````````````````````````````````````````````"@`````$```` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +M```````````````````````````````````````````````````````````` +9```````````````````````````````````` +` +end diff --git a/config.profiles/harmattan/compat b/config.profiles/harmattan/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/config.profiles/harmattan/compat @@ -0,0 +1 @@ +7 diff --git a/config.profiles/harmattan/configure-pulse.sh b/config.profiles/harmattan/configure-pulse.sh new file mode 100755 index 0000000..c683705 --- /dev/null +++ b/config.profiles/harmattan/configure-pulse.sh @@ -0,0 +1,81 @@ +#/bin/sh + +# Fail on error +set -e +# We will assume that if TOOLCHAIN_PATH is not set, that other required actions have not been done either +# so advise the user - N.B.: PATH & PKG_CONFIG_PATH may already be set to system values so we can't +# simply check for them being unset. +if [ -z "$TOOLCHAIN_PATH" ]; then + echo + echo "TOOLCHAIN_PATH must be set to the path of the columbus toolchain, e.g.:" 1>&2 + echo " export TOOLCHAIN_PATH=/opt/toolchains/columbus/cs2007q3-glibc2.5-arm7" 1>&2 + echo "PATH should have the path to toolchain's bin dir at beginning, e.g.:" 1>&2 + echo " export PATH=\$TOOLCHAIN_PATH/bin:\$PATH" 1>&2 + echo "PKG_CONFIG_PREFIX should have the prefix for pkg config, e.g.:" 1>&2 + echo " export PKG_CONFIG_PREFIX=\$TOOLCHAIN_PATH/arm-none-linux-gnueabi" 1>&2 + echo "PKG_CONFIG_PATH must be set to the path(s) to pkg config .pc file location(s), e.g.:" 1>&2 + echo " export PKG_CONFIG_PATH=\$PKG_CONFIG_PREFIX/libc/lib/pkgconfig:\$PKG_CONFIG_PREFIX/libc/usr/lib/pkgconfig" 1>&2 + echo + exit 1 +fi + +# We assume the current dir is the depot and we are not shadow building +# Blast the mkspec we use, if it exists, and copy it out of debian dir +rm -rf mkspecs/linux-g++-cross +cp -a debian/mkspecs/linux-g++-cross mkspecs/ + +# maemo does the next two lines, no idea why, left them for referance +# rm -rf mkspecs/glibc-g++ +# cp -a mkspecs/linux-g++ mkspecs/glibc-g++ + +# Run configure - we take extra arguments if given +exec ./configure -nokia-developer \ + -prefix "/usr" \ + -bindir "/usr/bin" \ + -libdir "/usr/lib" \ + -docdir "/usr/share/qt4/doc" \ + -headerdir "/usr/include/qt4" \ + -datadir "/usr/share/qt4" \ + -plugindir "/usr/lib/qt4/plugins" \ + -translationdir "/usr/share/qt4/translations" \ + -sysconfdir "/etc/xdg" \ + -arch arm \ + -xplatform linux-g++-cross \ + -fast \ + -mitshm \ + -no-optimized-qmake \ + -reduce-relocations \ + -no-separate-debug-info \ + -system-zlib \ + -system-libtiff \ + -system-libpng \ + -system-libjpeg \ + -no-nas-sound \ + -qt-gif \ + -no-qt3support \ + -no-libmng \ + -opengl es2 \ + -no-accessibility \ + -nomake examples \ + -nomake demos \ + -little-endian \ + -I${TOOLCHAIN_PATH}/libc/usr/include/freetype2 \ + -lfontconfig \ + -no-cups \ + -no-gtkstyle \ + -exceptions \ + -no-xinerama \ + -dbus \ + -glib \ + -no-pch \ + -gstreamer \ + -svg \ + -webkit \ + -no-sql-ibase \ + -xmlpatterns \ + -system-sqlite \ + -plugin-sql-sqlite \ + -openssl \ + -DQT_QLOCALE_USES_FCVT \ + "$@" +# End of Script diff --git a/config.profiles/harmattan/control b/config.profiles/harmattan/control new file mode 100644 index 0000000..13908a9 --- /dev/null +++ b/config.profiles/harmattan/control @@ -0,0 +1,648 @@ +Source: qt4-x11 +Section: libs +Priority: optional +Maintainer: Petri Latvala <ext-petri.latvala@nokia.com> +Build-Depends: cdbs, debhelper (>= 7), flex, quilt, sharutils, + libdbus-1-dev, libfreetype6-dev, libglib2.0-dev, libice-dev, libjpeg62-dev, + libpng12-dev, libreadline5-dev | libreadline4-dev, libsm-dev, libtiff4-dev, libx11-dev, + libxext-dev, libxft-dev, libxi-dev, libxmu-dev, + libxrandr-dev, libxrender-dev, libxslt1-dev, libxt-dev, x11proto-core-dev, + zlib1g-dev, libgstreamer-plugins-base0.10-dev, libgstreamer0.10-dev, libicu-dev, + libgles2-sgx-img-dev [arm armel] | libgles2-dev [arm armel], libgles2 [arm armel], + opengles-sgx-img-common-dev [arm armel], opengles-sgx-img-common [arm armel], + libgl-dev [i386], libgl1 [i386], + libxau-dev, libxcb1-dev, libxdmcp-dev, libexpat1-dev, + libsqlite3-dev, libsqlite3-0, libssl-dev, libasound2-dev, libxv-dev, + icd2-dev, icd2-osso-ic-dev, osso-wlan-dev, libconnsettings0-dev +Standards-Version: 3.9.1.0 + +Package: libqtcore4 +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: libqt4-core (<< 4.4.0~beta1-1), libqt4-gui (<< 4.4.0~beta1-1) +Description: Qt 4 core module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtCore module contains core non-GUI functionality. + +Package: libqtcore4-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqtcore4 (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Core libraries. + +Package: libqt4-core +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-network (= ${binary:Version}), libqt4-script (= ${binary:Version}), libqt4-xml (= ${binary:Version}), libqt4-dbus (= ${binary:Version}) +Description: transitional package for Qt 4 core non-GUI runtime libraries + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package to enable installation of other Debian + packages linked against Qt 4.3 or earlier Qt 4 releases previously shipped + in Debian. + +Package: libqtgui4 +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), fontconfig, opengles-sgx-img-common [arm armel], libgles2 [arm armel] +Conflicts: libqt4-designer (<< 4.4.0~beta1-1) +Replaces: libqt4-core (<< 4.0.1-3), libqt4-gui (<< 4.4.0), + qt4-designer (<< 4.1.4), libqt4-designer (<< 4.4.0~beta1-1) +Description: Qt 4 GUI module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtGui module extends QtCore with GUI functionality. + +Package: libqtgui4-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqtgui4 (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 GUI libraries. + +Package: libqt4-gui +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtgui4 (= ${binary:Version}), libqt4-svg (= ${binary:Version}) +Description: transitional package for Qt 4 GUI runtime libraries + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package depending on the Qt4 GUI library + packages which the package of the same name used to provide in Qt 4.3.4 + and earlier Debian packages of Qt4. + +Package: libqt4-network +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 network module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtNetwork module offers classes that allow you to write TCP/IP clients and + servers. It provides classes to make network programming easier and portable. + +Package: libqt4-network-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-network (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Network libraries. + +Package: libqt4-script +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-dbus (= ${binary:Version}), libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 script module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtScript module provides classes for making Qt applications scriptable. + +Package: libqt4-script-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-script (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Script libraries. + +Package: libqt4-sql +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Recommends: libqt4-sql-sqlite +Suggests: libqt4-dev +Description: Qt 4 SQL module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtSql module helps you provide seamless database integration to your Qt + applications. + . + If you wish to use the SQL module for development, you should install the + libqt4-dev package. + +Package: libqt4-sql-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-sql (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SQL libraries. + +Package: libqt4-sql-sqlite +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-sql (= ${binary:Version}) +Description: Qt 4 SQLite plugin + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + +Package: libqt4-sql-sqlite-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-sql-sqlite (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SQL SQLite plugin. + +Package: libqt4-svg +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqtgui4 (= ${binary:Version}) +Conflicts: libqt4-gui (<< 4.4.0~beta1-1) +Replaces: libqt4-gui (<< 4.4.0~beta1-1) +Description: Qt 4 SVG module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtSvg module provides classes for displaying the contents of SVG files. + . + Scalable Vector Graphics (SVG) is a language for describing two-dimensional + graphics and graphical applications in XML. + +Package: libqt4-svg-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-svg (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SVG libraries. + +Package: libqt4-webkit +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtwebkit4 (>= 2.0~) +Description: Qt 4 WebKit module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package to enable installation of other packages + linked against Qt WebKit 4.4 - 4.7 releases previously shipped from Qt source. + +Package: libqt4-xml +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 XML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtXml module provides a stream reader and writer for XML documents, + and C++ implementations of SAX and DOM. + +Package: libqt4-xml-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-xml (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 XML libraries. + +Package: libqt4-xmlpatterns +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-xml (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 XML Patterns module + lorem ipsum + . + and all that + +Package: libqt4-xmlpatterns-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-xmlpatterns (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 XML patterns library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 XML patterns + library. + +Package: libqt4-dbus +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-xml (= ${binary:Version}), libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 D-Bus module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDBus module is a Unix-only library that you can use to make Inter-Process + Communication using the D-Bus protocol. + . + Applications using the QtDBus module can provide services to other, remote + applications by exporting objects, as well as use services exported by those + applications by placing calls and accessing properties. + +Package: libqt4-dbus-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-dbus (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 DBus libraries. + +Package: libqt4-help +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-sql (= ${binary:Version}), libqtcore4 (= ${binary:Version}), libqtgui4 (= ${binary:Version}) +Description: Qt 4 help module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtHelp module provides classes for integrating online documentation in + applications. + +Package: libqt4-help-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-help (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Help libraries. + +Package: libqt4-test +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 test module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtTest module provides classes for unit testing Qt applications and + libraries. + +Package: libqt4-test-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-test (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Test libraries. + +Package: libqt4-dev +Architecture: any +Section: libdevel +Depends: ${shlibs:Depends}, ${misc:Depends}, + libqt4-dbus (= ${binary:Version}), + libqt4-xml (= ${binary:Version}), libqtcore4 (= ${binary:Version}), + libqt4-network (= ${binary:Version}), libqtgui4 (= ${binary:Version}), + libqt4-svg (= ${binary:Version}), libqt4-sql (= ${binary:Version}), + libqt4-script (= ${binary:Version}), libqt4-help (= ${binary:Version}), + libqt4-test (= ${binary:Version}), libqt4-phonon (= ${binary:Version}), + libqt4-xmlpatterns (= ${binary:Version}), + libqt4-multimedia (= ${binary:Version}), libqt4-opengl (= ${binary:Version}), + libqt4-declarative (= ${binary:Version}), qt4-linguist-tools (= ${binary:Version}), + libqt4-meegographicssystemhelper-dev (= ${binary:Version}) [arm armel], + libgl-dev [i386], libgles2-sgx-img-dev [arm armel], + opengles-sgx-img-common-dev [arm armel], libxv-dev, libc6-dev +Conflicts: qt3-dev-tools (<= 3:3.3.4-7) +Replaces: libqt4-opengl-dev (<< 4.4.0-2) +Suggests: libmysqlclient15-dev, libsqlite0-dev, libsqlite3-dev, libpq-dev, libiodbc2-dev, firebird2.0-dev +Description: Qt 4 development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the header development files and development programs + such as qmake used for building Qt4 applications. + +Package: qt4-linguist-tools +Architecture: any +Section: libdevel +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the Qt Linguist development tool + such as lrelease used for building Qt4 applications. + +Package: libqt4 +Architecture: any +Section: libs +Depends: libqt4-core (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 dummy package + This is a dummy alias-package. + +Package: libqt4-phonon +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-xml (= ${binary:Version}), libqtgui4 (= ${binary:Version}), libqt4-opengl (= ${binary:Version}), libqt4-dbus (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 Phonon Libraries + Qt 4 media playing libraries + +Package: libqt4-phonon-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-phonon (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 phonon module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbol for the Qt phonon library. + +Package: libqt4-multimedia +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 Multimedia Libraries + Qt 4 media playing libraries + +Package: libqt4-multimedia-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-multimedia (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 multimedia module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbol for the Qt multimedia library. + +Package: libqt4-opengl +Architecture: any +Section: libs +Depends: libqtcore4 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, opengles-sgx-img-common [arm armel], libgles2 [arm armel], libgl1 [i386] +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 OpenGL module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtOpenGL module offers classes that make it easy to use OpenGL in Qt + applications. + . + OpenGL is a standard API for rendering 3D graphics. OpenGL only deals with 3D + rendering and provides little or no support for GUI programming issues. + . + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the development files needed to build Qt 4 applications + using QtOpenGL library. + +Package: libqt4-opengl-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-opengl (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 OpenGL libraries. + +Package: libqt4-opengl-dev +Architecture: any +Section: libdevel +Depends: libqt4-dev (= ${binary:Version}), ${misc:Depends} +Replaces: libqt4-dev (<< 4.4.0~beta1-1) +Description: Qt 4 OpenGL library development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional package for libqt4-opengl-dev, and can be safely removed + after the installation is complete. + +Package: qt4-acceptance-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtcore4 +XB-Maemo-CI-Stage: staging, acceptance +Description: Tests for libqtcore4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: qt4-maemo-auto-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtcore4 +XB-Maemo-CI-Stage: staging +Description: Tests for Qt4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: libqt4-declarative +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 declarative module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDeclarative module contains declarative UI functionality. + +Package: libqt4-declarative-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-declarative (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Declarative + libraries. + +Package: libqt4-declarative-dev +Architecture: any +Section: libdevel +Depends: libqt4-dev (>= ${binary:Version}), ${misc:Depends} +Description: Qt 4 Declarative development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional package for libqt4-declarative-dev, and can be + safely removed after the installation is complete. + +Package: qt4-declarative-qmlviewer +Architecture: any +Section: devel +Depends: libqt4-declarative (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 declarative module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDeclarative viewer allows viewing QML files + +Package: libqt4-gui-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtgui4 +XB-Maemo-CI-Stage: staging +Description: Tests for Qt4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: libqt4-doc +Section: doc +Priority: optional +Architecture: all +Depends: ${misc:Depends} +Description: Qt 4 documentation + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the documentation for Qt 4. + +Package: libqt4-meegographicssystem +Architecture: arm armel +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-meegographicssystemhelper +Conflicts: libqt4-meego (<< 4.7.2~git20110119) +Replaces: libqt4-meego (<< 4.7.2~git20110119) +Description: Qt 4 MeeGo graphics system plugin + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system plugin. + +Package: libqt4-meegographicssystemhelper +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-meegographicssystem [arm armel] +Conflicts: libqt4-meego (<< 4.7.2~git20110119) +Replaces: libqt4-meego (<< 4.7.2~git20110119) +Provides: libqt4-meego +Description: Qt 4 MeeGo graphics system helper + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system helper library. + +Package: libqt4-meegographicssystemhelper-dev +Architecture: any +Section: libdevel +Depends: libqt4-meegographicssystemhelper (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dev (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dev (<< 4.7.2~git20110119) +Provides: libqt4-meego-dev +Description: Qt 4 MeeGo graphics system development libraries and headers + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system header files and + development libraries. + +Package: libqt4-meegographicssystemhelper-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-meegographicssystemhelper (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dbg (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dbg (<< 4.7.2~git20110119) +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package provides the debugging symbols for the MeeGo support + libraries. + +Package: libqt4-meegographicssystem-dbg +Priority: extra +Architecture: arm armel +Section: debug +Depends: libqt4-meegographicssystem (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dbg (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dbg (<< 4.7.2~git20110119) +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package provides the debugging symbols for the MeeGo graphics + system plugin. + +Package: libqt4-meego +Architecture: all +Section: oldlibs +Depends: libqt4-meegographicssystemhelper, libqt4-meegographicssystem [arm armel] +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. + +Package: libqt4-meego-dev +Architecture: all +Section: oldlibs +Depends: libqt4-meegographicssystemhelper-dev +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. + +Package: libqt4-meego-dbg +Priority: extra +Architecture: all +Section: debug +Depends: libqt4-meegographicssystemhelper-dbg, libqt4-meegographicssystem-dbg [arm armel] +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. diff --git a/config.profiles/harmattan/libqt4-core.lintian b/config.profiles/harmattan/libqt4-core.lintian new file mode 100644 index 0000000..bd6e1f7 --- /dev/null +++ b/config.profiles/harmattan/libqt4-core.lintian @@ -0,0 +1 @@ +libqt4-core: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-dbus-dbg.lintian b/config.profiles/harmattan/libqt4-dbus-dbg.lintian new file mode 100644 index 0000000..aa4fa15 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus-dbg.lintian @@ -0,0 +1 @@ +libqt4-dbus-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-dbus.install b/config.profiles/harmattan/libqt4-dbus.install new file mode 100644 index 0000000..2242fb3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus.install @@ -0,0 +1,3 @@ +usr/lib/libQtDBus.so.* +usr/bin/qdbus + diff --git a/config.profiles/harmattan/libqt4-dbus.lintian b/config.profiles/harmattan/libqt4-dbus.lintian new file mode 100644 index 0000000..c6a37b7 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus.lintian @@ -0,0 +1,2 @@ +libqt4-dbus: package-name-doesnt-match-sonames libQtDBus4 +libqt4-dbus: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative-dbg.lintian b/config.profiles/harmattan/libqt4-declarative-dbg.lintian new file mode 100644 index 0000000..3d16d1e --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative-dbg.lintian @@ -0,0 +1 @@ +libqt4-declarative-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative-dev.lintian b/config.profiles/harmattan/libqt4-declarative-dev.lintian new file mode 100644 index 0000000..1045808 --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative-dev.lintian @@ -0,0 +1 @@ +libqt4-declarative-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative.install b/config.profiles/harmattan/libqt4-declarative.install new file mode 100644 index 0000000..7b71d87 --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative.install @@ -0,0 +1,4 @@ +usr/lib/libQtDeclarative.so.* +usr/lib/qt4/imports/Qt/labs/folderlistmodel +usr/lib/qt4/imports/Qt/labs/gestures +usr/lib/qt4/imports/Qt/labs/particles diff --git a/config.profiles/harmattan/libqt4-declarative.lintian b/config.profiles/harmattan/libqt4-declarative.lintian new file mode 100644 index 0000000..70dd96f --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative.lintian @@ -0,0 +1,2 @@ +libqt4-declarative: unknown-control-file digsigsums +libqt4-declarative: package-name-doesnt-match-sonames libQtDeclarative4 diff --git a/config.profiles/harmattan/libqt4-dev.dirs b/config.profiles/harmattan/libqt4-dev.dirs new file mode 100644 index 0000000..944cf06 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.dirs @@ -0,0 +1 @@ +usr/share/qt4/doc/html diff --git a/config.profiles/harmattan/libqt4-dev.install b/config.profiles/harmattan/libqt4-dev.install new file mode 100644 index 0000000..e7edbcb --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.install @@ -0,0 +1,85 @@ +usr/bin/native-moc +usr/bin/qdbuscpp2xml +usr/bin/qdbusxml2cpp +usr/bin/native-qmake +usr/bin/qt3to4 +usr/bin/native-rcc +usr/bin/native-uic +usr/bin/host-moc +usr/bin/host-qmake +usr/bin/host-rcc +usr/bin/host-uic +usr/include/qt4/QtUiTools +usr/include/qt4/QtSvg +usr/include/qt4/QtXml +usr/include/qt4/QtGui +usr/include/qt4/phonon +usr/include/qt4/QtScript +usr/include/qt4/QtScriptTools +usr/include/qt4/QtSql +usr/include/qt4/QtXmlPatterns +usr/include/qt4/QtDBus +usr/include/qt4/QtTest +usr/include/qt4/QtHelp +usr/include/qt4/Qt +usr/include/qt4/QtCore +usr/include/qt4/QtNetwork +usr/include/qt4/QtMultimedia +usr/include/qt4/QtOpenGL +usr/include/qt4/QtDeclarative +usr/lib/libphonon.prl +usr/lib/libphonon.so +usr/lib/libQtCLucene.prl +usr/lib/libQtCLucene.so +usr/lib/libQtCore.prl +usr/lib/libQtCore.so +usr/lib/libQtDBus.prl +usr/lib/libQtDBus.so +usr/lib/libQtGui.prl +usr/lib/libQtGui.so +usr/lib/libQtHelp.prl +usr/lib/libQtHelp.so +usr/lib/libQtNetwork.prl +usr/lib/libQtNetwork.so +usr/lib/libQtScript.prl +usr/lib/libQtScript.so +usr/lib/libQtScriptTools.prl +usr/lib/libQtScriptTools.so +usr/lib/libQtSql.prl +usr/lib/libQtSql.so +usr/lib/libQtSvg.prl +usr/lib/libQtSvg.so +usr/lib/libQtTest.prl +usr/lib/libQtTest.so +usr/lib/libQtUiTools.prl +usr/lib/libQtUiTools.a +usr/lib/libQtXmlPatterns.prl +usr/lib/libQtXmlPatterns.so +usr/lib/libQtXml.prl +usr/lib/libQtXml.so +usr/lib/libQtMultimedia.prl +usr/lib/libQtMultimedia.so +usr/lib/libQtOpenGL.prl +usr/lib/libQtOpenGL.so +usr/lib/libQtDeclarative.so +usr/lib/libQtDeclarative.prl +usr/lib/pkgconfig/phonon.pc +usr/lib/pkgconfig/QtCLucene.pc +usr/lib/pkgconfig/QtCore.pc +usr/lib/pkgconfig/QtDBus.pc +usr/lib/pkgconfig/QtGui.pc +usr/lib/pkgconfig/QtHelp.pc +usr/lib/pkgconfig/QtNetwork.pc +usr/lib/pkgconfig/QtScript.pc +usr/lib/pkgconfig/QtScriptTools.pc +usr/lib/pkgconfig/QtSql.pc +usr/lib/pkgconfig/QtSvg.pc +usr/lib/pkgconfig/QtTest.pc +usr/lib/pkgconfig/QtUiTools.pc +usr/lib/pkgconfig/QtXmlPatterns.pc +usr/lib/pkgconfig/QtXml.pc +usr/lib/pkgconfig/QtMultimedia.pc +usr/lib/pkgconfig/QtOpenGL.pc +usr/lib/pkgconfig/QtDeclarative.pc +usr/share/qt4/q3porting.xml +usr/share/qt4/mkspecs diff --git a/config.profiles/harmattan/libqt4-dev.links b/config.profiles/harmattan/libqt4-dev.links new file mode 100644 index 0000000..0624825 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.links @@ -0,0 +1,13 @@ +usr/include/qt4 usr/share/qt4/include +usr/bin/lrelease usr/share/qt4/bin/lrelease +usr/bin/lupdate usr/share/qt4/bin/lupdate +usr/bin/moc usr/share/qt4/bin/moc +usr/bin/qmake usr/share/qt4/bin/qmake +usr/bin/uic usr/share/qt4/bin/uic +usr/bin/lrelease usr/bin/lrelease-qt4 +usr/bin/lupdate usr/bin/lupdate-qt4 +usr/bin/moc usr/bin/moc-qt4 +usr/bin/qmake usr/bin/qmake-qt4 +usr/bin/uic usr/bin/uic-qt4 +usr/bin/rcc usr/share/qt4/bin/rcc +usr/lib/qt4/plugins usr/share/qt4/plugins diff --git a/config.profiles/harmattan/libqt4-dev.lintian b/config.profiles/harmattan/libqt4-dev.lintian new file mode 100644 index 0000000..c4c242a --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.lintian @@ -0,0 +1,17 @@ +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-pbuilder/Info.plist.app +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-xcode/Info.plist.app +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-xcode/qmake.conf +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-pbuilder/qmake.conf +libqt4-dev: unknown-control-file digsigsums +libqt4-dev: binary-from-other-architecture ./usr/bin/host-moc +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-moc /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-moc /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-qmake +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-qmake /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-qmake /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-rcc +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-rcc /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-rcc /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-uic +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-uic /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-uic /host_usr/lib diff --git a/config.profiles/harmattan/libqt4-dev.manpages b/config.profiles/harmattan/libqt4-dev.manpages new file mode 100644 index 0000000..1e9423a --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.manpages @@ -0,0 +1,5 @@ +debian/manpages/lrelease.1 +debian/manpages/lupdate.1 +debian/manpages/moc.1 +debian/manpages/qmake.1 +debian/manpages/uic.1 diff --git a/config.profiles/harmattan/libqt4-dev.postinst b/config.profiles/harmattan/libqt4-dev.postinst new file mode 100644 index 0000000..2ab29ff --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.postinst @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +SPECDIR=/usr/share/qt4/mkspecs + +rm -f ${SPECDIR}/default +ln -s ${SPECDIR}/#PLATFORM_ARG# ${SPECDIR}/default + +PREFIX=native +if [ -f /targets/links/scratchbox.config ]; then + PREFIX=host +fi + +BINARIES="qmake moc rcc uic" + +for bin in $BINARIES; do + ln -sf "/usr/bin/${PREFIX}-${bin}" "/usr/bin/${bin}" +done + +#DEBHELPER# diff --git a/config.profiles/harmattan/libqt4-dev.prerm b/config.profiles/harmattan/libqt4-dev.prerm new file mode 100644 index 0000000..0a078be --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.prerm @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +BINARIES="qmake moc rcc uic" + +case "$1" in + upgrade) ;; + remove|failed-upgrade|deconfigure) + for bin in $BINARIES; do + rm -f "/usr/bin/${bin}" + done + ;; +esac + +#DEBHELPER# diff --git a/config.profiles/harmattan/libqt4-doc.install b/config.profiles/harmattan/libqt4-doc.install new file mode 100644 index 0000000..badafd2 --- /dev/null +++ b/config.profiles/harmattan/libqt4-doc.install @@ -0,0 +1 @@ +usr/share/qt4/doc/html/* diff --git a/config.profiles/harmattan/libqt4-doc.lintian b/config.profiles/harmattan/libqt4-doc.lintian new file mode 100644 index 0000000..e701359 --- /dev/null +++ b/config.profiles/harmattan/libqt4-doc.lintian @@ -0,0 +1 @@ +libqt4-doc: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-gui-tests.lintian b/config.profiles/harmattan/libqt4-gui-tests.lintian new file mode 100644 index 0000000..0139465 --- /dev/null +++ b/config.profiles/harmattan/libqt4-gui-tests.lintian @@ -0,0 +1,64 @@ +libqt4-gui-tests: unknown-control-file digsigsums +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_modeltest +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractbutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractitemmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractprintdialog +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractproxymodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractslider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractspinbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstracttextdocumentlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractvideobuffer +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractvideosurface +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qaction +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qboxlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfileiconprovider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfocusframe +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfont +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfontmetrics +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qformlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qgraphicslayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcachemetadata +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpaintengine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpalette +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qparallelanimationgroup +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpauseanimation +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpicture +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qplaintextedit +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpointer +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprinterinfo +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprogressbar +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprogressdialog +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpropertyanimation +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qradiobutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qregexpvalidator +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptenginedebugger +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscrollarea +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscrollbar +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsharedpointer_and_qwidget +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsignalmapper +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qslider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsortfilterproxymodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qspinbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstackedlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstackedwidget +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstandarditem +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstandarditemmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstatemachine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstringlistmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstyleoption +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsyntaxhighlighter +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextblock +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextcursor +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextformat +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextlist +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextobject +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextscriptengine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtexttable +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtoolbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtoolbutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtreewidgetitemiterator +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qundogroup +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qundostack +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qvideosurfaceformat +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qwidgetaction +libqt4-gui-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/libqt4-gui.lintian b/config.profiles/harmattan/libqt4-gui.lintian new file mode 100644 index 0000000..ea3c04b --- /dev/null +++ b/config.profiles/harmattan/libqt4-gui.lintian @@ -0,0 +1 @@ +libqt4-gui: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-help-dbg.lintian b/config.profiles/harmattan/libqt4-help-dbg.lintian new file mode 100644 index 0000000..06fd248 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help-dbg.lintian @@ -0,0 +1 @@ +libqt4-help-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-help.install b/config.profiles/harmattan/libqt4-help.install new file mode 100644 index 0000000..2e06a51 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help.install @@ -0,0 +1,4 @@ +usr/lib/libQtHelp.so.* +usr/lib/libQtCLucene.so.* +usr/share/qt4/translations/qt_help_de.qm +usr/share/qt4/translations/qt_help_pl.qm diff --git a/config.profiles/harmattan/libqt4-help.lintian b/config.profiles/harmattan/libqt4-help.lintian new file mode 100644 index 0000000..44aad04 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help.lintian @@ -0,0 +1,2 @@ +libqt4-help: package-name-doesnt-match-sonames libQtCLucene4 libQtHelp4 +libqt4-help: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego-dbg.lintian b/config.profiles/harmattan/libqt4-meego-dbg.lintian new file mode 100644 index 0000000..939f381 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego-dbg.lintian @@ -0,0 +1 @@ +libqt4-meego-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego-dev.lintian b/config.profiles/harmattan/libqt4-meego-dev.lintian new file mode 100644 index 0000000..36c9ee8 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego-dev.lintian @@ -0,0 +1 @@ +libqt4-meego-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego.lintian b/config.profiles/harmattan/libqt4-meego.lintian new file mode 100644 index 0000000..2f7b3f6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego.lintian @@ -0,0 +1,2 @@ +libqt4-meego: unknown-control-file digsigsums +libqt4-meego: package-name-doesnt-match-sonames libQtMeeGoGraphicsSystemHelper4 diff --git a/config.profiles/harmattan/libqt4-meegographicssystem.install b/config.profiles/harmattan/libqt4-meegographicssystem.install new file mode 100644 index 0000000..41bf9a0 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystem.install @@ -0,0 +1 @@ +usr/lib/qt4/plugins/graphicssystems/libqmeegographicssystem.so diff --git a/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install b/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install new file mode 100644 index 0000000..848d6ff --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install @@ -0,0 +1,3 @@ +usr/include/qt4/QtMeeGoGraphicsSystemHelper +usr/lib/libQtMeeGoGraphicsSystemHelper.so +usr/lib/libQtMeeGoGraphicsSystemHelper.prl diff --git a/config.profiles/harmattan/libqt4-meegographicssystemhelper.install b/config.profiles/harmattan/libqt4-meegographicssystemhelper.install new file mode 100644 index 0000000..4eb904d --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystemhelper.install @@ -0,0 +1 @@ +usr/lib/libQtMeeGoGraphicsSystemHelper.so.* diff --git a/config.profiles/harmattan/libqt4-multimedia-dbg.lintian b/config.profiles/harmattan/libqt4-multimedia-dbg.lintian new file mode 100644 index 0000000..e35e83e --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia-dbg.lintian @@ -0,0 +1 @@ +libqt4-multimedia-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-multimedia.install b/config.profiles/harmattan/libqt4-multimedia.install new file mode 100644 index 0000000..2f6f97d --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia.install @@ -0,0 +1 @@ +usr/lib/libQtMultimedia.so.* diff --git a/config.profiles/harmattan/libqt4-multimedia.lintian b/config.profiles/harmattan/libqt4-multimedia.lintian new file mode 100644 index 0000000..ef410a2 --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia.lintian @@ -0,0 +1,2 @@ +libqt4-multimedia: unknown-control-file digsigsums +libqt4-multimedia: package-name-doesnt-match-sonames libQtMultimedia4 diff --git a/config.profiles/harmattan/libqt4-network-dbg.lintian b/config.profiles/harmattan/libqt4-network-dbg.lintian new file mode 100644 index 0000000..8cae7f3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network-dbg.lintian @@ -0,0 +1 @@ +libqt4-network-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-network.install b/config.profiles/harmattan/libqt4-network.install new file mode 100644 index 0000000..1681282 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network.install @@ -0,0 +1,2 @@ +usr/lib/libQtNetwork.so.* +usr/lib/qt4/plugins/bearer/libqicdbearer.so diff --git a/config.profiles/harmattan/libqt4-network.lintian b/config.profiles/harmattan/libqt4-network.lintian new file mode 100644 index 0000000..11a2284 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network.lintian @@ -0,0 +1,2 @@ +libqt4-network: package-name-doesnt-match-sonames libQtNetwork4 +libqt4-network: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl-dbg.lintian b/config.profiles/harmattan/libqt4-opengl-dbg.lintian new file mode 100644 index 0000000..fb470cd --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl-dbg.lintian @@ -0,0 +1 @@ +libqt4-opengl-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl-dev.lintian b/config.profiles/harmattan/libqt4-opengl-dev.lintian new file mode 100644 index 0000000..da53f96 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl-dev.lintian @@ -0,0 +1 @@ +libqt4-opengl-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl.install b/config.profiles/harmattan/libqt4-opengl.install new file mode 100644 index 0000000..fc0a7a6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl.install @@ -0,0 +1,2 @@ +usr/lib/libQtOpenGL.so.* +usr/lib/qt4/plugins/graphicssystems/libqglgraphicssystem.so diff --git a/config.profiles/harmattan/libqt4-opengl.lintian b/config.profiles/harmattan/libqt4-opengl.lintian new file mode 100644 index 0000000..8f49420 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl.lintian @@ -0,0 +1,3 @@ +libqt4-opengl: package-name-doesnt-match-sonames libQtOpenGL4 +libqt4-opengl: package-relation-with-self depends +libqt4-opengl: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-phonon-dbg.lintian b/config.profiles/harmattan/libqt4-phonon-dbg.lintian new file mode 100644 index 0000000..7ce2877 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon-dbg.lintian @@ -0,0 +1 @@ +libqt4-phonon-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-phonon.install b/config.profiles/harmattan/libqt4-phonon.install new file mode 100644 index 0000000..3fdc018 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon.install @@ -0,0 +1,2 @@ +usr/lib/libphonon.so.* +usr/lib/qt4/plugins/phonon_backend/libphonon_*.so diff --git a/config.profiles/harmattan/libqt4-phonon.lintian b/config.profiles/harmattan/libqt4-phonon.lintian new file mode 100644 index 0000000..a1a46b9 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon.lintian @@ -0,0 +1,2 @@ +libqt4-phonon: package-name-doesnt-match-sonames libphonon4 +libqt4-phonon: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-script-dbg.lintian b/config.profiles/harmattan/libqt4-script-dbg.lintian new file mode 100644 index 0000000..9290ace --- /dev/null +++ b/config.profiles/harmattan/libqt4-script-dbg.lintian @@ -0,0 +1 @@ +libqt4-script-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-script.install b/config.profiles/harmattan/libqt4-script.install new file mode 100644 index 0000000..f8cc5c4 --- /dev/null +++ b/config.profiles/harmattan/libqt4-script.install @@ -0,0 +1,3 @@ +usr/lib/libQtScript.so.* +usr/lib/libQtScriptTools.so.* +usr/lib/qt4/plugins/script/libqtscriptdbus.so diff --git a/config.profiles/harmattan/libqt4-script.lintian b/config.profiles/harmattan/libqt4-script.lintian new file mode 100644 index 0000000..51b6944 --- /dev/null +++ b/config.profiles/harmattan/libqt4-script.lintian @@ -0,0 +1,2 @@ +libqt4-script: package-name-doesnt-match-sonames libQtScript4 libQtScriptTools4 +libqt4-script: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-dbg.lintian b/config.profiles/harmattan/libqt4-sql-dbg.lintian new file mode 100644 index 0000000..5f4f189 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-dbg.lintian @@ -0,0 +1 @@ +libqt4-sql-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian b/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian new file mode 100644 index 0000000..6e53ab6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian @@ -0,0 +1 @@ +libqt4-sql-sqlite-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-sqlite.install b/config.profiles/harmattan/libqt4-sql-sqlite.install new file mode 100644 index 0000000..6590079 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite.install @@ -0,0 +1,2 @@ +usr/lib/qt4/plugins/sqldrivers/libqsqlite.so + diff --git a/config.profiles/harmattan/libqt4-sql-sqlite.lintian b/config.profiles/harmattan/libqt4-sql-sqlite.lintian new file mode 100644 index 0000000..a6eb651 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite.lintian @@ -0,0 +1 @@ +libqt4-sql-sqlite: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql.install b/config.profiles/harmattan/libqt4-sql.install new file mode 100644 index 0000000..5ff4a1f --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql.install @@ -0,0 +1,2 @@ +usr/lib/libQtSql.so.* + diff --git a/config.profiles/harmattan/libqt4-sql.lintian b/config.profiles/harmattan/libqt4-sql.lintian new file mode 100644 index 0000000..b20d867 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql.lintian @@ -0,0 +1,2 @@ +libqt4-sql: package-name-doesnt-match-sonames libQtSql4 +libqt4-sql: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-svg-dbg.lintian b/config.profiles/harmattan/libqt4-svg-dbg.lintian new file mode 100644 index 0000000..171ee74 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg-dbg.lintian @@ -0,0 +1 @@ +libqt4-svg-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-svg.install b/config.profiles/harmattan/libqt4-svg.install new file mode 100644 index 0000000..21289f8 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg.install @@ -0,0 +1,4 @@ +usr/lib/libQtSvg.so.* +usr/lib/qt4/plugins/iconengines/libqsvgicon.so +usr/lib/qt4/plugins/imageformats/libqsvg.so + diff --git a/config.profiles/harmattan/libqt4-svg.lintian b/config.profiles/harmattan/libqt4-svg.lintian new file mode 100644 index 0000000..31b3b15 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg.lintian @@ -0,0 +1,2 @@ +libqt4-svg: package-name-doesnt-match-sonames libQtSvg4 +libqt4-svg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-test-dbg.lintian b/config.profiles/harmattan/libqt4-test-dbg.lintian new file mode 100644 index 0000000..587353e --- /dev/null +++ b/config.profiles/harmattan/libqt4-test-dbg.lintian @@ -0,0 +1 @@ +libqt4-test-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-test.install b/config.profiles/harmattan/libqt4-test.install new file mode 100644 index 0000000..7883dee --- /dev/null +++ b/config.profiles/harmattan/libqt4-test.install @@ -0,0 +1,2 @@ +usr/lib/libQtTest.so.* + diff --git a/config.profiles/harmattan/libqt4-test.lintian b/config.profiles/harmattan/libqt4-test.lintian new file mode 100644 index 0000000..db7b2a6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-test.lintian @@ -0,0 +1,2 @@ +libqt4-test: package-name-doesnt-match-sonames libQtTest4 +libqt4-test: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-webkit.lintian b/config.profiles/harmattan/libqt4-webkit.lintian new file mode 100644 index 0000000..9c70f48 --- /dev/null +++ b/config.profiles/harmattan/libqt4-webkit.lintian @@ -0,0 +1 @@ +libqt4-webkit: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xml-dbg.lintian b/config.profiles/harmattan/libqt4-xml-dbg.lintian new file mode 100644 index 0000000..8df20db --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml-dbg.lintian @@ -0,0 +1 @@ +libqt4-xml-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xml.install b/config.profiles/harmattan/libqt4-xml.install new file mode 100644 index 0000000..6366cb3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml.install @@ -0,0 +1 @@ +usr/lib/libQtXml.so.* diff --git a/config.profiles/harmattan/libqt4-xml.lintian b/config.profiles/harmattan/libqt4-xml.lintian new file mode 100644 index 0000000..bd61725 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml.lintian @@ -0,0 +1,2 @@ +libqt4-xml: package-name-doesnt-match-sonames libQtXml4 +libqt4-xml: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian b/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian new file mode 100644 index 0000000..aafa724 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian @@ -0,0 +1 @@ +libqt4-xmlpatterns-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xmlpatterns.install b/config.profiles/harmattan/libqt4-xmlpatterns.install new file mode 100644 index 0000000..1997474 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns.install @@ -0,0 +1,3 @@ +usr/lib/libQtXmlPatterns.so.* +usr/bin/xmlpatterns + diff --git a/config.profiles/harmattan/libqt4-xmlpatterns.lintian b/config.profiles/harmattan/libqt4-xmlpatterns.lintian new file mode 100644 index 0000000..785b999 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns.lintian @@ -0,0 +1,2 @@ +libqt4-xmlpatterns: package-name-doesnt-match-sonames libQtXmlPatterns4 +libqt4-xmlpatterns: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4.lintian b/config.profiles/harmattan/libqt4.lintian new file mode 100644 index 0000000..2eb0928 --- /dev/null +++ b/config.profiles/harmattan/libqt4.lintian @@ -0,0 +1 @@ +libqt4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtcore4-dbg.lintian b/config.profiles/harmattan/libqtcore4-dbg.lintian new file mode 100644 index 0000000..8dfcc0c --- /dev/null +++ b/config.profiles/harmattan/libqtcore4-dbg.lintian @@ -0,0 +1 @@ +libqtcore4-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtcore4.install b/config.profiles/harmattan/libqtcore4.install new file mode 100644 index 0000000..1c8fc57 --- /dev/null +++ b/config.profiles/harmattan/libqtcore4.install @@ -0,0 +1,6 @@ +usr/lib/libQtCore.so.* +usr/lib/qt4/plugins/codecs/lib*.so +usr/share/qt4/translations/qt_??.qm +usr/share/qt4/translations/qt_??_??.qm +usr/share/qt4/translations/qvfb_*.qm + diff --git a/config.profiles/harmattan/libqtcore4.lintian b/config.profiles/harmattan/libqtcore4.lintian new file mode 100644 index 0000000..1c14b59 --- /dev/null +++ b/config.profiles/harmattan/libqtcore4.lintian @@ -0,0 +1,2 @@ +libqtcore4: package-name-doesnt-match-sonames libQtCLucene4 libQtCore4 +libqtcore4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtgui4-dbg.lintian b/config.profiles/harmattan/libqtgui4-dbg.lintian new file mode 100644 index 0000000..d166ea8 --- /dev/null +++ b/config.profiles/harmattan/libqtgui4-dbg.lintian @@ -0,0 +1 @@ +libqtgui4-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtgui4.install b/config.profiles/harmattan/libqtgui4.install new file mode 100644 index 0000000..4b4fa9c --- /dev/null +++ b/config.profiles/harmattan/libqtgui4.install @@ -0,0 +1,7 @@ +usr/lib/libQtGui.so.* +usr/lib/qt4/plugins/imageformats/libqgif.so +usr/lib/qt4/plugins/imageformats/libqico.so +usr/lib/qt4/plugins/imageformats/libqjpeg.so +usr/lib/qt4/plugins/imageformats/libqtiff.so +usr/lib/qt4/plugins/inputmethods/libqimsw-multi.so +usr/lib/qt4/plugins/accessible/libqtaccessiblewidgets.so diff --git a/config.profiles/harmattan/libqtgui4.lintian b/config.profiles/harmattan/libqtgui4.lintian new file mode 100644 index 0000000..e9d4ec9 --- /dev/null +++ b/config.profiles/harmattan/libqtgui4.lintian @@ -0,0 +1,2 @@ +libqtgui4: package-name-doesnt-match-sonames libQtGui4 +libqtgui4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/manpages/lrelease.1 b/config.profiles/harmattan/manpages/lrelease.1 new file mode 100644 index 0000000..174d40c --- /dev/null +++ b/config.profiles/harmattan/manpages/lrelease.1 @@ -0,0 +1,89 @@ +.TH lrelease 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" +.\" 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. +.\" +.\" 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/gpl/ for GPL licensing information. +.\" +.\" Contact info@trolltech.com if any conditions of this licensing are +.\" not clear to you. +.\" +.SH NAME +lrelease \- generate Qt message files from Qt Linguist translation files +.SH SYNOPSIS +.B lrelease +.RI "[ " options " ] " project-file +.br +.B lrelease +.RI "[ " options " ] " ts-files " [ -qm " qm-file " ]" +.SH DESCRIPTION +This page documents the +.B Qt Linguist Release +tool for the Qt GUI toolkit. +.B Lrelease +reads a qmake/tmake project file (.pro file) and converts the +translation files (.ts files) specified in it into Qt message files +(.qm files) used by the application to translate. +.PP +The .qm file format is a compact binary format that provides +extremely fast lookups for translations and that is used by Qt. +.SH OPTIONS +.TP +.I "-help" +Display the usage and exit. +.TP +.I "-nocompress" +Do not compress the .qm files. +.TP +.I "-verbose" +Explain what is being done. +.TP +.I "-version" +Display the version of +.B lrelease +and exit. +.SH USAGE +Here is an example .pro file that can be given to +.B lrelease: +.PP +.in +4 +.nf +HEADERS = funnydialog.h \\ + wackywidget.h +SOURCES = funnydialog.cpp \\ + main.cpp \\ + wackywidget.cpp +FORMS = fancybox.ui +TRANSLATIONS = gnomovision_dk.ts \\ + gnomovision_fi.ts \\ + gnomovision_no.ts \\ + gnomovision_se.ts +.fi +.in -4 +.PP +When running +.B lrelease +on this project file, the Qt message files gnomovision_dk.qm, +gnomovision_fi.qm, gnomovision_no.qm and gnomovision_se.qm will be +generated from gnomovision_dk.ts, gnomovision_fi.ts, +gnomovision_no.ts and gnomovision_se.ts, respectively. +.PP +.B Lrelease +can also be invoked with a list of .ts files to convert: +.PP +.in +4 +.nf +lrelease gnomovision_*.ts +.fi +.in -4 +.SH "SEE ALSO" +.BR lupdate (1) +and +.BR http://doc.trolltech.com/i18n.html diff --git a/config.profiles/harmattan/manpages/lupdate.1 b/config.profiles/harmattan/manpages/lupdate.1 new file mode 100644 index 0000000..722657d --- /dev/null +++ b/config.profiles/harmattan/manpages/lupdate.1 @@ -0,0 +1,95 @@ +.TH lupdate 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" +.\" 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. +.\" +.\" 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/gpl/ for GPL licensing information. +.\" +.\" Contact info@trolltech.com if any conditions of this licensing are +.\" not clear to you. +.\" +.SH NAME +lupdate \- update Qt Linguist translation files +.SH SYNOPSIS +.B lupdate +.RI "[ " options " ] " project-file +.br +.B lupdate +.RI "[ " options " ] " source-files " -ts " ts-files +.SH DESCRIPTION +This page documents the +.B Qt Linguist Update +tool for the Qt GUI toolkit. +.B Lupdate +reads a qmake/tmake project file (.pro file), finds the translatable +strings in the specified source, header and interface files, and +updates the translation files (.ts files) specified in it. The +translation files are given to the translator who uses +.B Qt Linguist +to read the files and insert the translations. +.PP +The .ts file format is a simple human-readable XML format that can be +used with version control systems if required. +.PP +.SH OPTIONS +.TP +.I "-help" +Display the usage and exit. +.TP +.I "-noobsolete" +Drop all obsolete strings. +.TP +.I "-verbose" +Explain what is being done. +.TP +.I "-version" +Display the version of +.B lupdate +and exit. +.SH USAGE +Here is an example .pro file that can be given to +.B lupdate: +.PP +.in +4 +.nf +HEADERS = funnydialog.h \\ + wackywidget.h +SOURCES = funnydialog.cpp \\ + main.cpp \\ + wackywidget.cpp +FORMS = fancybox.ui +TRANSLATIONS = gnomovision_dk.ts \\ + gnomovision_fi.ts \\ + gnomovision_no.ts \\ + gnomovision_se.ts +.fi +.in -4 +.PP +When running +.B lupdate +on this project file, the translatable strings in all the files +listed in the HEADERS, SOURCES and FORMS entries will be put in +the translation files listed in the TRANSLATIONS entry. Previous +translations will be reused as far as possible, and translated +strings that have vanished from the source files are marked obsolete. +.PP +.B Lupdate +can also be invoked with a list of C++ source files, .ui files +and .ts files: +.PP +.in +4 +.nf +lupdate *.cpp *.h *.ui -ts gnomovision_dk.ts +.fi +.in -4 +.SH "SEE ALSO" +.BR lrelease (1) +and +.BR http://doc.trolltech.com/i18n.html diff --git a/config.profiles/harmattan/manpages/moc.1 b/config.profiles/harmattan/manpages/moc.1 new file mode 100644 index 0000000..131827a --- /dev/null +++ b/config.profiles/harmattan/manpages/moc.1 @@ -0,0 +1,449 @@ +.TH moc 1 "24 June 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" $Id: qt/moc.1 3.3.4 edited May 27 2003 $ +.\" +.\" Copyright 1992-2002 Trolltech AS. All rights reserved. +.\" +.\" This file is part of Qt and may be distributed and used according to +.\" the terms and conditions described in the LICENSE file. +.\" +.nh +.SH NAME +moc \- generate Qt meta object support code +.SH SYNOPSIS +.B moc +[\-o file] [\-i] [\-f] [\-k] [\-ldbg] [\-nw] [\-p path] [\-q path] [\-v] file +.SH DESCRIPTION +This page documents the +.B Meta Object Compiler +for the Qt GUI application framework. The +.B moc +reads one or more C++ class declarations from a C++ header or source +file and generates one C++ source file containing meta object +information for the classes. The C++ source file generated by the +.B moc +must be compiled and linked with the implementation of the class (or it +can be #included into the class's source file). +.PP +If you use +.B qmake +to create your Makefiles, build rules will be included that call the +.B moc +when required, so you will not need to use the +.B moc +directly. +.PP +In brief, the meta object system is a structure used by Qt (see +.BR http://doc.trolltech.com ")" +for component programming and run time type information. It adds +properties and inheritance information to (some) classes and +provides a new type of communication between those instances of those +classes, signal\-slot +connections. +.SH OPTIONS +.TP +.I "\-o file" +Write output to +.I file +rather than to stdout. +.TP +.I \-f +Force the generation of an #include statement in the output. +This is the default for files whose name matches the regular +expression .[hH][^.]* (i.e. the extension starts with +.B H +or +.B h +). This +option is only useful if you have header files that do not follow the +standard naming conventions. +.TP +.I "\-i" +Do not generate an #include statement in the output. This may be used +to run +.B moc +on a C++ file containing one or more class declarations. You should then +#include the meta object code in the .cpp file (see USAGE below). If both +.I \-f +and +.I \-i +are present, the last one wins. +.TP +.I "\-nw" +Do not generate any warnings. Not recommended. +.TP +.I "\-ldbg" +Write a flood of lex debug information to stdout. +.TP +.I "\-p path" +Makes +.B moc +prepend +.IR path / +to the file name in the generated #include statement (if one is generated). +.TP +.I "\-q path" +Makes +.B moc +prepend +.IR path / +to the file name of qt #include files in the generated code. +.TP +.I "\-v" +Displays the version of +.B moc +and Qt. +.PP +You can explicitly tell the +.B moc +not to parse parts of a header +file. It recognizes any C++ comment (//) that contains the substrings +MOC_SKIP_BEGIN or MOC_SKIP_END. They work as you would expect and you +can have several levels of them. The net result as seen by the +.B moc +is as if you had removed all lines between a MOC_SKIP_BEGIN and a +MOC_SKIP_END +.SH USAGE +.B moc +is almost always invoked by +.BR make (1), +not by hand. +.PP +.B moc +is typically used with an input file containing class declarations +like this: +.PP +.in +4 +.nf +class YourClass : public QObject { + Q_OBJECT + Q_PROPERTY( ... ) + Q_CLASSINFO( ... ) + +public: + YourClass( QObject * parent=0, const char * name=0 ); + ~YourClass(); + +signals: + +public slots: + +}; +.fi +.in -4 +.PP +Here is a useful makefile rule if you only use GNU make: +.PP +.in +4 +.nf +m%.cpp: %.h + moc $< -o $@ +.fi +.in -4 +.PP +If you want to write portably, you can use individual rules of the +following form: +.PP +.in +4 +.nf +mNAME.cpp: NAME.h + moc $< -o $@ +.fi +.in -4 +.PP +You must also remember to add +.I mNAME.cpp +to your SOURCES (substitute your favorite name) variable and +.I mNAME.o +to your OBJECTS variable. +.PP +(While we prefer to name our C++ source files .cpp, the +.B moc +doesn't know that, so you can use .C, .cc, .CC, .cxx or even .c++ if +you prefer.) +.PP +If you have class declarations in C++ files, we recommend that you use +a makefile rule like this: +.PP +.in +4 +.nf +NAME.o: mNAME.cpp + +mNAME.cpp: NAME.cpp + moc -i $< -o $@ +.fi +.in -4 +.PP +This guarantees that +.BR make (1) +will run the +.B moc +before it compiles +.IR NAME.cpp . +You can then put +.PP +.ti +4 +#include "nNAME.cpp" +.PP +at the end of +.IR NAME.cpp , +where all the classes declared in that file are fully known. +.SH DIAGNOSTICS +Sometimes you may get linkage errors, saying that +YourClass::className() is undefined or that YourClass lacks a vtbl. +Those errors happen most often when you forget to compile the +moc-generated C++ code or include that object file in the link +command. +.PP +The +.B moc +will warn you about a number of dangerous or illegal constructs. +.SH BUGS + +The +.B moc +does not expand #include or #define, it simply skips any preprocessor +directives it encounters. This is regrettable, but is normally not a +problem in practice. + +The +.B moc +does not handle all of C++. The main problem is that class templates +cannot have signals or slots. This is an important bug. Here is an +example: +.PP +.in +4 +.nf +class SomeTemplate<int> : public QFrame { + Q_OBJECT + .... +signals: + void bugInMocDetected( int ); +}; +.fi +.in -4 +.PP +Less importantly, the following constructs are illegal. All of them +have have alternatives which we think are usually better, so removing +these limitations is not a high priority for us. +.SS "Multiple inheritance requires QObject to be first." +If you are using multiple inheritance, +.B moc +assumes that the +.B first +inherited class is a subclass of QObject. Also, be sure that +.B only +the first inherited class is a QObject. +.PP +.in +4 +.nf +class SomeClass : public QObject, public OtherClass { + ... +}; +.fi +.in -4 +.PP +This bug is almost impossible to fix; since the +.B moc +does not expand +#include or #define, it cannot find out which one of the base classes is a +QObject. +.SS "Function pointers cannot be arguments to signals or slots." +In most cases where you would consider that, we think inheritance is a +better alternative. Here is an example of illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + ... +public slots: + // illegal + void apply( void (*apply)(List *, void *), void * ); +}; +.fi +.in -4 +.PP +You can work around this restriction like this: +.PP +.in +4 +.nf +typedef void (*ApplyFunctionType)( List *, void * ); + +class SomeClass : public QObject { + Q_OBJECT + ... +public slots: + void apply( ApplyFunctionType, char * ); +}; +.fi +.in -4 +.PP +It may sometimes be even better to replace the function pointer with +inheritance and virtual functions, signals or slots. +.SS "Friend declarations cannot be placed in signals or slots sections" +Sometimes it will work, but in general, friend declarations cannot be +placed in +.B signals +or +.B slots +sections. Put them in the good old +.BR private ", " protected +or +.B public +sections instead. Here is an example of the illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + ... +signals: + friend class ClassTemplate<char>; // illegal +}; +.fi +.in -4 +.SS "Signals and slots cannot be upgraded" +The C++ feature of upgrading an inherited member function to +.B public +status is not extended to cover signals and slots. Here is an illegal +example: +.PP +.in +4 +.nf +class Whatever : public QButtonGroup { + ... +public slots: + QButtonGroup::buttonPressed; // illegal + ... +}; +.fi +.in -4 +.PP +The QButtonGroup::buttonPressed() slot is protected. +.PP +C++ quiz: What happens if you try to upgrade a protected member +function which is overloaded? +.IP +- All the functions are upgraded. +.IP +- That is not legal C++. +.\" Good idea, but look in the SEE ALSO section... +.SS "Type macros cannot be used for signal and slot arguments" + +Since the +.B moc +does not expand #define, type macros that take an argument +will not work in signals and slots. Here is an illegal example: +.PP +.in +4 +.nf +#ifdef ultrix +#define SIGNEDNESS(a) unsigned a +#else +#define SIGNEDNESS(a) a +#endif +class Whatever : public QObject { + ... +signals: + void someSignal( SIGNEDNESS(int) ); // illegal +}; +.PP +A #define without arguments works. +.fi +.in -4 +.SS "Nested classes cannot be in the signals or slots sections nor have signals or slots" +Here's an example: +.PP +.in +4 +.nf +class A { + Q_OBJECT +public: + class B { + public slots: // illegal + void b(); + ... + }; +signals: + class B { // illegal + void b(); + ... + }: +}; +.fi +.in -4 +.PP +.SS "Constructors cannot be used in signals or slots sections" +It is a mystery to us why anyone would put a constructor on either the +.B signals +or +.B slots +sections. You can't, anyway (except that it happens to work in some +cases). Put them in +.BR private ", " protected +or +.B public +sections, where they belong. Here is an example of the illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT +public slots: + SomeClass( QObject *parent, const char *name ) + : QObject( parent, name ) {} // illegal + ... +}; +.fi +.in -4 +.SS "Properties need to be declared before the public section that contains the respective get and set functions" +.PP +Declaring the first property within or after the public section that +contains the type definition and the respective get and set functions +does not work as expected. The +.B moc +will complain that it can neither +find the functions nor resolve the type. Here is an example of the +illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT +public: + ... + // illegal + Q_PROPERTY( Priority priority READ priority WRITE setPriority ) + Q_ENUMS( Priority ) + enum Priority { High, Low, VeryHigh, VeryLow }; + void setPriority( Priority ); + Priority priority() const; + ... +}; +.fi +.in -4 +.PP +Work around this limitation by declaring all properties at the +beginning of the class declaration, right after Q_OBJECT: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + Q_PROPERTY( Priority priority READ priority WRITE setPriority ) + Q_ENUMS( Priority ) +public: + ... + enum Priority { High, Low, VeryHigh, VeryLow }; + void setPriority( Priority ); + Priority priority() const; + ... +}; +.fi +.in -4 +.PP +.SH "SEE ALSO" +.BR http://www.trolltech.com ", " +.BR "C++ ARM, section r.11.3" " (for the answer to the quiz), and" +.BR http://doc.trolltech.com " (for complete Qt documentation)." diff --git a/config.profiles/harmattan/manpages/qmake.1 b/config.profiles/harmattan/manpages/qmake.1 new file mode 100644 index 0000000..62ab78a --- /dev/null +++ b/config.profiles/harmattan/manpages/qmake.1 @@ -0,0 +1,106 @@ +.TH QMAKE 1 "2005-07-23" +.SH NAME +qmake \- cross-platform makefile generator for Qt + +.SH SYNOPSIS +.B qmake +.I "[mode] [options] [files]" +.br +.SH "DESCRIPTION" +.B qmake +has two modes, one mode for generating project files based on some +heuristics, and the other for generating makefiles. Normally you +shouldn't need to specify a mode, as makefile generation is the default +mode for qmake, but you may use this to test qmake on an existing +project. + +.SH MODE +.TP +.B "\-project" +Put qmake into project file generation mode In this mode qmake +interprets files as files to be built, defaults to *.c; *.ui; *.y; *.l; +*.ts; *.qrc; *.h; *.hpp; *.hh; *.hxx; *.H; *.cpp; *.cc; *.cxx; *.C +.TP +.B "\-makefile" +Put qmake into makefile generation mode (default) In this mode qmake +interprets files as project files to be processed, if skipped qmake will +try to find a project file in your current working directory + +.SH WARNINGS OPTIONS +.TP +.BI "\-Wnone" +Turn off all warnings +.TP +.BI "\-Wall" +Turn on all warnings +.TP +.BI "\-Wparser" +Turn on parser warnings +.TP +.BI "\-Wlogic" +Turn on logic warnings + +.SH OPTIONS +.TP +.BI "\-o" file +Write output to file +.TP +.BI "\-unix" +Run in unix mode +.TP +.BI "\-win32" +Run in win32 mode +.TP +.BI "\-macx" +Run in Mac OS X mode +.TP +.BI "\-d" +Increase debug level +.TP +.BI "\-t" templ +Overrides TEMPLATE as templ +.TP +.BI "\-tp" prefix +Overrides TEMPLATE so that prefix is prefixed +.TP +into the value +.BI "\-help" +This help +.TP +.BI "\-v" +Version information +.TP +.BI "\-after" +All variable assignments after this will be parsed after [files] +.TP +.BI "\-norecursive" +Don't do a recursive search +.TP +.BI "\-recursive" +Do a recursive search +.TP +.BI "\-cache file" +Use file as cache [makefile mode only] +.TP +.BI "\-spec spec" +Use spec as QMAKESPEC [makefile mode only] +.TP +.BI "\-nocache" +Don't use a cache file [makefile mode only] +.TP +.BI "\-nodepend" +Don't generate dependencies [makefile mode only] +.TP +.BI "\-nomoc" +Don't generate moc targets [makefile mode only] +.TP +.BI "\-nopwd" +Don't look for files in pwd [project mode only] + +.SH SEE ALSO +.PP +.BR /usr/share/qt4/doc/html/qmake-manual.html, +.SH AUTHOR +This manual page was written by Brian Nelson <pyro@debian.org> based on +the output of +.B "qmake -help". diff --git a/config.profiles/harmattan/manpages/qtconfig.1 b/config.profiles/harmattan/manpages/qtconfig.1 new file mode 100644 index 0000000..08989fb --- /dev/null +++ b/config.profiles/harmattan/manpages/qtconfig.1 @@ -0,0 +1,34 @@ +.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.SH "NAME" +.LP +qtconfig \- Configuration tool for Qt +.SH "DESCRIPTION" +.LP +QConfig allows for GUI based configuration of Qt and + other Qt based sources. + +.SH "ENVIRONMENT VARIABLES" +.LP +.TP +\fBQTDIR\fP +Specifies the base Qt dir +.SH "AUTHORS" +.LP +TrollTech <http://www.trolltech.com/> +.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.SH "NAME" +.LP +qtconfig \- Configuration tool for Qt +.SH "DESCRIPTION" +.LP +QConfig allows for GUI based configuration of Qt and + other Qt based sources. + +.SH "ENVIRONMENT VARIABLES" +.LP +.TP +\fBQTDIR\fP +Specifies the base Qt dir +.SH "AUTHORS" +.LP +TrollTech <http://www.trolltech.com/> diff --git a/config.profiles/harmattan/manpages/uic.1 b/config.profiles/harmattan/manpages/uic.1 new file mode 100644 index 0000000..79d03b8 --- /dev/null +++ b/config.profiles/harmattan/manpages/uic.1 @@ -0,0 +1,136 @@ +.TH uic 1 "2 Aug 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2000 Trolltech AS. All rights reserved. +.\" +.\" This file is part of Qt and may be distributed and used according to +.\" the terms and conditions described in the LICENSE file. +.\" +.SH NAME +uic \- Qt user interface compiler +.SH SYNOPSIS +.B uic +[options] file +.SH DESCRIPTION +This page documents the +.B User Interface Compiler +for the Qt GUI toolkit. The +.B uic +reads a user interface definition (.ui) file in XML as generated by +.I Qt Designer +and creates corresponding C++ header or source files. It also +generates an image file that embeds raw image data in C++ source code. +.PP +.PP +Generate declaration: +.br +.I "\fB uic [options] \fI<file>" +.br +.PP +Generate implementation: +.br +.I "\fB uic [options] -impl \fI<headerfile> <file>" +.br + \fI<headerfile>\fP: name of the declaration file +.br +.PP +Generate image collection: +.br +.I "\fB uic [options] -embed \fI<project> <image1> <image2> <image3>\fP ..." +.br + \fI<project>\fP: project name + \fI<image[1..n]>\fP: image files +.br +.\" .PP +.\" Generate binary UI file: +.\" .br +.\" .I "\fB uic [options] -binary \fI<file>" +.\" .br +.PP +.PP +For convenience, +.B uic +can also generate declaration or implementation stubs for subclasses. +.PP +Generate subclass declaration: +.br +.I "\fB uic [options] -subdecl \fI<subclassname> <baseclassheaderfile> <file>" +.br + \fI<subclassname>\fP: name of the subclass to generate +.br + \fI<baseclassheaderfile>\fP: declaration file of the baseclass +.PP +Generate subclass implementation: +.br +.I "\fB uic [options] -subimpl \fI<subclassname> <subclassheaderfile> <file>" +.br + \fI<subclassname>\fP: name of the subclass to generate +.br + \fI<subclassheaderfile>\fP: declaration file of the subclass + +.SH GENERAL OPTIONS +.TP +.I "-o file" +Write output to +.I file +rather than to stdout. +.TP +.I "-nofwd" +Omit forward declarations of custom classes in the generated +header file. This is necessary if typedef classes are used. +.TP +.I "-tr func" +Use +.I func() +instead of tr() for internationalization. +.TP +.I "-version" +Display the version of +.B uic +and exit. + +.SH USAGE +.B uic +is almost always invoked by +.BR make (1), +rather than by hand. +.PP +Here are useful makefile rules if you only use GNU make: +.PP +.in +4 +%.h: %.ui +.br + uic $< -o $@ +.br +%.cpp: %.ui +.br + uic -impl $*.h $< -o $@ +.in -4 +.PP +If you want to write portably, you can use individual rules of the +following form: +.PP +.in +4 +NAME.h: NAME.ui +.br + uic $< -o $@ +.br +NAME.cpp: NAME.ui +.br + uic -impl $*.h $< -o $@ +.in -4 +.PP +You must also remember to add +.I NAME.cpp +to your SOURCES (substitute your favorite name) variable and +.I NAME.o +to your OBJECTS variable. +.PP +(While we prefer to name our C++ source files .cpp, the +.B uic +doesn't care, so you can use .C, .cc, .CC, .cxx or even .c++ if +you prefer.) +.PP +.SH "SEE ALSO" +.BR http://www.trolltech.com/ " " +.SH AUTHOR +Trolltech AS <info@trolltech.com> diff --git a/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf b/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf new file mode 100644 index 0000000..245da1e --- /dev/null +++ b/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf @@ -0,0 +1,54 @@ +# +# qmake configuration for linux-g++-cross +# + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release incremental link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +include(../common/g++.conf) +include(../common/linux.conf) + +QMAKE_CC = arm-none-linux-gnueabi-gcc +QMAKE_CFLAGS += -march=armv7a -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=softfp -fno-omit-frame-pointer -fno-optimize-sibling-calls +QMAKE_CFLAGS_RELEASE = -O3 +QMAKE_CFLAGS_DEBUG = -O0 + +QMAKE_CXX = arm-none-linux-gnueabi-g++ +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG + +QMAKE_LINK = arm-none-linux-gnueabi-g++ +QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ +QMAKE_LINK_C = arm-none-linux-gnueabi-gcc +QMAKE_LINK_C_SHLIB = arm-none-linux-gnueabi-gcc +QMAKE_LFLAGS += -Wl,-O1 -Wl,--hash-style=gnu + +QMAKE_AR = arm-none-linux-gnueabi-ar cqs +QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy +QMAKE_STRIP = arm-none-linux-gnueabi-strip + +#QMAKE_INCDIR = +#QMAKE_LIBDIR = +QMAKE_INCDIR_X11 = +QMAKE_LIBDIR_X11 = +#QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +#QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] +QMAKE_INCDIR_OPENGL = +QMAKE_LIBDIR_OPENGL = +#QMAKE_INCDIR_EGL = +#QMAKE_LIBDIR_EGL = +#QMAKE_INCDIR_OPENVG = +#QMAKE_LIBDIR_OPENVG = + +QMAKE_LIBS_X11 = -lXext -lX11 -lm -lz -lXau -lxcb -lXdmcp -lexpat + +QMAKE_LIBS_OPENGL = -lEGL -lGLESv2 -lIMGegl -lsrv_um +QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lIMGegl -lsrv_um + +QT_CFLAGS_GSTREAMER += -pthread -Igstreamer-0.10 -Iglib-2.0 -Iglib-2.0/include + +load(qt_config) diff --git a/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h b/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h new file mode 100644 index 0000000..857eaf3 --- /dev/null +++ b/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../linux-g++/qplatformdefs.h" diff --git a/config.profiles/harmattan/not-installed b/config.profiles/harmattan/not-installed new file mode 100644 index 0000000..d19a756 --- /dev/null +++ b/config.profiles/harmattan/not-installed @@ -0,0 +1,18 @@ +usr/share/qt4/translations/qvfb_pl.qm +usr/share/qt4/translations/qvfb_zh_TW.qm +usr/share/qt4/translations/qvfb_zh_CN.qm +usr/lib/libQtSvg.la +usr/lib/libQtXml.la +usr/lib/libQtSql.la +usr/lib/libQtOpenGL.la +usr/lib/libQtNetwork.la +usr/lib/libQtGui.la +usr/lib/libQt3Support.la +usr/lib/libQtTest.la +usr/lib/libQtCLucene.la +usr/lib/libQtScript.la +usr/lib/libQtXmlPatterns.la +usr/lib/libQtHelp.la +usr/lib/libQtCore.la +usr/lib/libQtDBus.la + diff --git a/config.profiles/harmattan/patches/default_widget_size.diff b/config.profiles/harmattan/patches/default_widget_size.diff new file mode 100644 index 0000000..1f72881 --- /dev/null +++ b/config.profiles/harmattan/patches/default_widget_size.diff @@ -0,0 +1,13 @@ +Index: qt-maemo-qtp/src/gui/kernel/qwidget.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget.cpp +@@ -1326,7 +1326,7 @@ + data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); + } + #else +- data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,640,480); ++ data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,854,480); + #endif + + focus_next = focus_prev = q; diff --git a/config.profiles/harmattan/patches/glshadercache.diff b/config.profiles/harmattan/patches/glshadercache.diff new file mode 100644 index 0000000..2c6ad9a --- /dev/null +++ b/config.profiles/harmattan/patches/glshadercache.diff @@ -0,0 +1,1003 @@ +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/gl2paintengineex/qglengineshadermanager.cpp ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +@@ -42,12 +42,12 @@ + #include "qglengineshadermanager_p.h" + #include "qglengineshadersource_p.h" + #include "qpaintengineex_opengl2_p.h" ++#include "qglshadercache_p.h" + + #if defined(QT_DEBUG) + #include <QMetaEnum> + #endif + +- + QT_BEGIN_NAMESPACE + + static void qt_shared_shaders_free(void *data) +@@ -165,62 +165,89 @@ + + QGLShader* fragShader; + QGLShader* vertexShader; +- QByteArray source; ++ QByteArray vertexSource; ++ QByteArray fragSource; + + // Compile up the simple shader: +- source.clear(); +- source.append(qShaderSnippets[MainVertexShader]); +- source.append(qShaderSnippets[PositionOnlyVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, context, this); +- if (!vertexShader->compileSourceCode(source)) +- qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); +- +- source.clear(); +- source.append(qShaderSnippets[MainFragmentShader]); +- source.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); +- fragShader = new QGLShader(QGLShader::Fragment, context, this); +- if (!fragShader->compileSourceCode(source)) +- qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); ++ vertexSource.append(qShaderSnippets[MainVertexShader]); ++ vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]); ++ ++ fragSource.append(qShaderSnippets[MainFragmentShader]); ++ fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); + + simpleShaderProg = new QGLShaderProgram(context, this); +- simpleShaderProg->addShader(vertexShader); +- simpleShaderProg->addShader(fragShader); +- simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ ++ CachedShader simpleShaderCache(fragSource, vertexSource); ++ ++ bool inCache = simpleShaderCache.load(simpleShaderProg, context); ++ ++ if (!inCache) { ++ vertexShader = new QGLShader(QGLShader::Vertex, context, this); ++ if (!vertexShader->compileSourceCode(vertexSource)) ++ qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); ++ ++ fragShader = new QGLShader(QGLShader::Fragment, context, this); ++ if (!fragShader->compileSourceCode(fragSource)) ++ qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); ++ ++ simpleShaderProg->addShader(vertexShader); ++ simpleShaderProg->addShader(fragShader); ++ ++ simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ } ++ + simpleShaderProg->link(); +- if (!simpleShaderProg->isLinked()) { ++ ++ if (simpleShaderProg->isLinked()) { ++ if (!inCache) ++ simpleShaderCache.store(simpleShaderProg, context); ++ } else { + qCritical() << "Errors linking simple shader:" + << simpleShaderProg->log(); + } + + // Compile the blit shader: +- source.clear(); +- source.append(qShaderSnippets[MainWithTexCoordsVertexShader]); +- source.append(qShaderSnippets[UntransformedPositionVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, context, this); +- if (!vertexShader->compileSourceCode(source)) +- qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); +- +- source.clear(); +- source.append(qShaderSnippets[MainFragmentShader]); +- source.append(qShaderSnippets[ImageSrcFragmentShader]); +- fragShader = new QGLShader(QGLShader::Fragment, context, this); +- if (!fragShader->compileSourceCode(source)) +- qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); ++ vertexSource.clear(); ++ vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]); ++ vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]); ++ ++ fragSource.clear(); ++ fragSource.append(qShaderSnippets[MainFragmentShader]); ++ fragSource.append(qShaderSnippets[ImageSrcFragmentShader]); + + blitShaderProg = new QGLShaderProgram(context, this); +- blitShaderProg->addShader(vertexShader); +- blitShaderProg->addShader(fragShader); +- blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); +- blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ ++ CachedShader blitShaderCache(fragSource, vertexSource); ++ ++ inCache = blitShaderCache.load(blitShaderProg, context); ++ ++ if (!inCache) { ++ vertexShader = new QGLShader(QGLShader::Vertex, context, this); ++ if (!vertexShader->compileSourceCode(vertexSource)) ++ qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); ++ ++ fragShader = new QGLShader(QGLShader::Fragment, context, this); ++ if (!fragShader->compileSourceCode(fragSource)) ++ qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); ++ ++ blitShaderProg->addShader(vertexShader); ++ blitShaderProg->addShader(fragShader); ++ ++ blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); ++ blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ } ++ + blitShaderProg->link(); +- if (!blitShaderProg->isLinked()) { ++ if (blitShaderProg->isLinked()) { ++ if (!inCache) ++ blitShaderCache.store(blitShaderProg, context); ++ } else { + qCritical() << "Errors linking blit shader:" +- << simpleShaderProg->log(); ++ << blitShaderProg->log(); + } +- + } + + QGLEngineSharedShaders::~QGLEngineSharedShaders() +@@ -262,99 +289,108 @@ + } + } + +- QGLShader *vertexShader = 0; +- QGLShader *fragShader = 0; +- QGLEngineShaderProg *newProg = 0; +- bool success = false; ++ QScopedPointer<QGLEngineShaderProg> newProg; + + do { +- QByteArray source; ++ QByteArray fragSource; + // Insert the custom stage before the srcPixel shader to work around an ATI driver bug + // where you cannot forward declare a function that takes a sampler as argument. + if (prog.srcPixelFragShader == CustomImageSrcFragmentShader) +- source.append(prog.customStageSource); +- source.append(qShaderSnippets[prog.mainFragShader]); +- source.append(qShaderSnippets[prog.srcPixelFragShader]); ++ fragSource.append(prog.customStageSource); ++ fragSource.append(qShaderSnippets[prog.mainFragShader]); ++ fragSource.append(qShaderSnippets[prog.srcPixelFragShader]); + if (prog.compositionFragShader) +- source.append(qShaderSnippets[prog.compositionFragShader]); ++ fragSource.append(qShaderSnippets[prog.compositionFragShader]); + if (prog.maskFragShader) +- source.append(qShaderSnippets[prog.maskFragShader]); +- fragShader = new QGLShader(QGLShader::Fragment, ctxGuard.context(), this); +- QByteArray description; ++ fragSource.append(qShaderSnippets[prog.maskFragShader]); ++ ++ QByteArray vertexSource; ++ vertexSource.append(qShaderSnippets[prog.mainVertexShader]); ++ vertexSource.append(qShaderSnippets[prog.positionVertexShader]); ++ ++ QScopedPointer<QGLShaderProgram> shaderProgram(new QGLShaderProgram(ctxGuard.context(), this)); ++ ++ CachedShader shaderCache(fragSource, vertexSource); ++ bool inCache = shaderCache.load(shaderProgram.data(), ctxGuard.context()); ++ ++ if (!inCache) { ++ ++ QScopedPointer<QGLShader> fragShader(new QGLShader(QGLShader::Fragment, ctxGuard.context(), this)); ++ QByteArray description; + #if defined(QT_DEBUG) +- // Name the shader for easier debugging +- description.append("Fragment shader: main="); +- description.append(snippetNameStr(prog.mainFragShader)); +- description.append(", srcPixel="); +- description.append(snippetNameStr(prog.srcPixelFragShader)); +- if (prog.compositionFragShader) { +- description.append(", composition="); +- description.append(snippetNameStr(prog.compositionFragShader)); +- } +- if (prog.maskFragShader) { +- description.append(", mask="); +- description.append(snippetNameStr(prog.maskFragShader)); +- } +- fragShader->setObjectName(QString::fromLatin1(description)); ++ // Name the shader for easier debugging ++ description.append("Fragment shader: main="); ++ description.append(snippetNameStr(prog.mainFragShader)); ++ description.append(", srcPixel="); ++ description.append(snippetNameStr(prog.srcPixelFragShader)); ++ if (prog.compositionFragShader) { ++ description.append(", composition="); ++ description.append(snippetNameStr(prog.compositionFragShader)); ++ } ++ if (prog.maskFragShader) { ++ description.append(", mask="); ++ description.append(snippetNameStr(prog.maskFragShader)); ++ } ++ fragShader->setObjectName(QString::fromLatin1(description)); + #endif +- if (!fragShader->compileSourceCode(source)) { +- qWarning() << "Warning:" << description << "failed to compile!"; +- break; +- } ++ if (!fragShader->compileSourceCode(fragSource)) { ++ qWarning() << "Warning:" << description << "failed to compile!"; ++ break; ++ } + +- source.clear(); +- source.append(qShaderSnippets[prog.mainVertexShader]); +- source.append(qShaderSnippets[prog.positionVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, ctxGuard.context(), this); ++ QScopedPointer<QGLShader> vertexShader(new QGLShader(QGLShader::Vertex, ctxGuard.context(), this)); + #if defined(QT_DEBUG) +- // Name the shader for easier debugging +- description.clear(); +- description.append("Vertex shader: main="); +- description.append(snippetNameStr(prog.mainVertexShader)); +- description.append(", position="); +- description.append(snippetNameStr(prog.positionVertexShader)); +- vertexShader->setObjectName(QString::fromLatin1(description)); ++ // Name the shader for easier debugging ++ description.clear(); ++ description.append("Vertex shader: main="); ++ description.append(snippetNameStr(prog.mainVertexShader)); ++ description.append(", position="); ++ description.append(snippetNameStr(prog.positionVertexShader)); ++ vertexShader->setObjectName(QString::fromLatin1(description)); + #endif +- if (!vertexShader->compileSourceCode(source)) { +- qWarning() << "Warning:" << description << "failed to compile!"; +- break; +- } ++ if (!vertexShader->compileSourceCode(vertexSource)) { ++ qWarning() << "Warning:" << description << "failed to compile!"; ++ break; ++ } + +- newProg = new QGLEngineShaderProg(prog); ++ shaderProgram->addShader(vertexShader.take()); ++ shaderProgram->addShader(fragShader.take()); + +- // If the shader program's not found in the cache, create it now. +- newProg->program = new QGLShaderProgram(ctxGuard.context(), this); +- newProg->program->addShader(vertexShader); +- newProg->program->addShader(fragShader); +- +- // We have to bind the vertex attribute names before the program is linked: +- newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); +- if (newProg->useTextureCoords) +- newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); +- if (newProg->useOpacityAttribute) +- newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); +- if (newProg->usePmvMatrixAttribute) { +- newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); +- newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); +- newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ // We have to bind the vertex attribute names before the program is linked: ++ shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ if (prog.useTextureCoords) ++ shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); ++ if (prog.useOpacityAttribute) ++ shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); ++ if (prog.usePmvMatrixAttribute) { ++ shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); ++ shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); ++ shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ } + } + ++ newProg.reset(new QGLEngineShaderProg(prog)); ++ newProg->program = shaderProgram.take(); ++ + newProg->program->link(); +- if (!newProg->program->isLinked()) { ++ if (newProg->program->isLinked()) { ++ if (!inCache) ++ shaderCache.store(newProg->program, ctxGuard.context()); ++ } else { + QLatin1String none("none"); + QLatin1String br("\n"); + QString error; +- error = QLatin1String("Shader program failed to link,") ++ error = QLatin1String("Shader program failed to link,"); + #if defined(QT_DEBUG) +- + br +- + QLatin1String(" Shaders Used:") + br +- + QLatin1String(" ") + vertexShader->objectName() + QLatin1String(": ") + br +- + QLatin1String(vertexShader->sourceCode()) + br +- + QLatin1String(" ") + fragShader->objectName() + QLatin1String(": ") + br +- + QLatin1String(fragShader->sourceCode()) + br ++ error += QLatin1String("\n Shaders Used:\n"); ++ for (int i = 0; i < newProg->program->shaders().count(); ++i) { ++ QGLShader *shader = newProg->program->shaders().at(i); ++ error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n") ++ + QLatin1String(shader->sourceCode()) + br; ++ } + #endif +- + QLatin1String(" Error Log:\n") +- + QLatin1String(" ") + newProg->program->log(); ++ error += QLatin1String(" Error Log:\n") ++ + QLatin1String(" ") + newProg->program->log(); + qWarning() << error; + break; + } +@@ -376,26 +412,10 @@ + } + } + +- cachedPrograms.insert(0, newProg); +- +- success = true; ++ cachedPrograms.insert(0, newProg.data()); + } while (false); + +- // Clean up everything if we weren't successful +- if (!success) { +- if (newProg) { +- delete newProg; // Also deletes the QGLShaderProgram which in turn deletes the QGLShaders +- newProg = 0; +- } +- else { +- if (vertexShader) +- delete vertexShader; +- if (fragShader) +- delete fragShader; +- } +- } +- +- return newProg; ++ return newProg.take(); + } + + void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage) +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h +@@ -0,0 +1,457 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtOpenGL module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists purely as an ++// implementation detail. This header file may change from version to ++// version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QGLSHADERCACHE_MEEGO_P_H ++#define QGLSHADERCACHE_MEEGO_P_H ++ ++#include <QtCore/qglobal.h> ++ ++#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) ++ ++#include <QtCore/qcryptographichash.h> ++#include <QtCore/qsharedmemory.h> ++#include <QtCore/qsystemsemaphore.h> ++ ++#ifndef QT_BOOTSTRAPPED ++# include <GLES2/gl2ext.h> ++#endif ++#if defined(QT_DEBUG) || defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) ++# include <syslog.h> ++#endif ++ ++QT_BEGIN_HEADER ++ ++/* ++ This cache stores internal Qt shader programs in shared memory. ++ ++ This header file is ugly on purpose and can only be included once. It is only to be used ++ for the internal shader cache, not as a generic cache for anyone's shaders. ++ ++ The cache stores either ShaderCacheMaxEntries shader programs or ShaderCacheDataSize kilobytes ++ of shader programs, whatever limit is reached first. ++ ++ The layout of the cache is as outlined in the CachedShaders struct. After some ++ integers, an array of headers is reserved, then comes the space for the actual binaries. ++ ++ Shader Programs are identified by the md5sum of their frag and vertex shader source code. ++ ++ Shader Programs are never removed. The cache never shrinks or re-shuffles. This is done ++ on purpose to ensure minimum amount of locking, no alignment problems and very few write ++ operations. ++ ++ Note: Locking the shader cache could be expensive, because the entire system might hang. ++ That's why the cache is immutable to minimize the time we need to keep it locked. ++ ++ Why is it Meego specific? ++ ++ First, the size is chosen so that it fits to generic meego usage. Second, on Meego, there's ++ always at least one Qt application active (the launcher), so the cache will never be destroyed. ++ Only when the last Qt app exits, the cache dies, which should only be when someone kills the ++ X11 server. And last but not least it was only tested with Meego's SGX driver. ++ ++ There's a small tool in src/opengl/util/meego that dumps the contents of the cache. ++ */ ++ ++// anonymous namespace, prevent exporting of the private symbols ++namespace ++{ ++ ++struct CachedShaderHeader ++{ ++ /* the index in the data[] member of CachedShaders */ ++ int index; ++ /* the size of the binary shader */ ++ GLsizei size; ++ /* the format of the binary shader */ ++ GLenum format; ++ /* the md5sum of the frag+vertex shaders */ ++ char md5Sum[16]; ++}; ++ ++enum ++{ ++ /* The maximum amount of shader programs the cache can hold */ ++ ShaderCacheMaxEntries = 20 ++}; ++ ++typedef CachedShaderHeader CachedShaderHeaders[ShaderCacheMaxEntries]; ++ ++enum ++{ ++ // ShaderCacheDataSize is 20k minus the other data members of CachedShaders ++ ShaderCacheDataSize = 1024 * ShaderCacheMaxEntries - sizeof(CachedShaderHeaders) - 2 * sizeof(int) ++}; ++ ++struct CachedShaders ++{ ++ /* How much space is still available in the cache */ ++ inline int availableSize() const { return ShaderCacheDataSize - dataSize; } ++ ++ /* The current amount of cached shaders */ ++ int shaderCount; ++ ++ /* The current amount (in bytes) of cached data */ ++ int dataSize; ++ ++ /* The headers describing the shaders */ ++ CachedShaderHeaders headers; ++ ++ /* The actual binary data of the shader programs */ ++ char data[ShaderCacheDataSize]; ++}; ++ ++//#define QT_DEBUG_SHADER_CACHE ++#ifdef QT_DEBUG_SHADER_CACHE ++static QDebug shaderCacheDebug() ++{ ++ return QDebug(QtDebugMsg); ++} ++#else ++static inline QNoDebug shaderCacheDebug() { return QNoDebug(); } ++#endif ++ ++class ShaderCacheSharedMemory ++{ ++public: ++ ShaderCacheSharedMemory() ++ : shm(QLatin1String("qt_gles2_shadercache_" QT_VERSION_STR)) ++ { ++ // we need a system semaphore here, since cache creation and initialization must be atomic ++ QSystemSemaphore attachSemaphore(QLatin1String("qt_gles2_shadercache_mutex_" QT_VERSION_STR), 1); ++ ++ if (!attachSemaphore.acquire()) { ++ shaderCacheDebug() << "Unable to require shader cache semaphore:" << attachSemaphore.errorString(); ++ return; ++ } ++ ++ if (shm.attach()) { ++ // success! ++ shaderCacheDebug() << "Attached to shader cache"; ++ } else { ++ ++ // no cache exists - create and initialize it ++ if (shm.create(sizeof(CachedShaders))) { ++ shaderCacheDebug() << "Created new shader cache"; ++ initializeCache(); ++ } else { ++ shaderCacheDebug() << "Unable to create shader cache:" << shm.errorString(); ++ } ++ } ++ ++ attachSemaphore.release(); ++ } ++ ++ inline bool isAttached() const { return shm.isAttached(); } ++ ++ inline bool lock() { return shm.lock(); } ++ inline bool unlock() { return shm.unlock(); } ++ inline void *data() { return shm.data(); } ++ inline QString errorString() { return shm.errorString(); } ++ ++ ~ShaderCacheSharedMemory() ++ { ++ if (!shm.detach()) ++ shaderCacheDebug() << "Unable to detach shader cache" << shm.errorString(); ++ } ++ ++private: ++ void initializeCache() ++ { ++ // no need to lock the shared memory since we're already protected by the ++ // attach system semaphore. ++ ++ void *data = shm.data(); ++ Q_ASSERT(data); ++ ++ memset(data, 0, sizeof(CachedShaders)); ++ } ++ ++ QSharedMemory shm; ++}; ++ ++class ShaderCacheLocker ++{ ++public: ++ inline ShaderCacheLocker(ShaderCacheSharedMemory *cache) ++ : shm(cache->lock() ? cache : (ShaderCacheSharedMemory *)0) ++ { ++ if (!shm) ++ shaderCacheDebug() << "Unable to lock shader cache" << cache->errorString(); ++ } ++ ++ inline bool isLocked() const { return shm; } ++ ++ inline ~ShaderCacheLocker() ++ { ++ if (!shm) ++ return; ++ if (!shm->unlock()) ++ shaderCacheDebug() << "Unable to unlock shader cache" << shm->errorString(); ++ } ++ ++private: ++ ShaderCacheSharedMemory *shm; ++}; ++ ++#ifdef QT_BOOTSTRAPPED ++} // end namespace ++#else ++ ++static void traceCacheOverflow(const char *message) ++{ ++#if defined(QT_DEBUG) || defined (QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) ++ openlog(qPrintable(QCoreApplication::applicationName()), LOG_PID | LOG_ODELAY, LOG_USER); ++ syslog(LOG_DEBUG, message); ++ closelog(); ++#endif ++ shaderCacheDebug() << message; ++} ++ ++Q_GLOBAL_STATIC(ShaderCacheSharedMemory, shaderCacheSharedMemory) ++ ++/* ++ Finds the index of the shader program identified by md5Sum in the cache. ++ Note: Does NOT lock the cache for reading, the cache must already be locked! ++ ++ Returns -1 when no shader was found. ++ */ ++static int qt_cache_index_unlocked(const QByteArray &md5Sum, CachedShaders *cache) ++{ ++ for (int i = 0; i < cache->shaderCount; ++i) { ++ if (qstrncmp(md5Sum.constData(), cache->headers[i].md5Sum, 16) == 0) { ++ return i; ++ } ++ } ++ return -1; ++} ++ ++/* Returns the index of the shader identified by md5Sum */ ++static int qt_cache_index(const QByteArray &md5Sum) ++{ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ Q_ASSERT(md5Sum.length() == 16); ++ ++ ShaderCacheLocker locker(shm); ++ if (!locker.isLocked()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); ++ ++ return qt_cache_index_unlocked(md5Sum, cache); ++} ++ ++/* Loads the cached shader at index \a shaderIndex into \a program ++ * Note: Since the cache is immutable, this operation doesn't lock the shared memory. ++ */ ++static bool qt_cached_shader(QGLShaderProgram *program, const QGLContext *ctx, int shaderIndex) ++{ ++ Q_ASSERT(shaderIndex >= 0 && shaderIndex <= ShaderCacheMaxEntries); ++ Q_ASSERT(program); ++ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); ++ ++ shaderCacheDebug() << "fetching cached shader at index" << shaderIndex ++ << "dataIndex" << cache->headers[shaderIndex].index ++ << "size" << cache->headers[shaderIndex].size ++ << "format" << cache->headers[shaderIndex].format; ++ ++ // call program->programId first, since that resolves the glProgramBinaryOES symbol ++ GLuint programId = program->programId(); ++ glProgramBinaryOES(programId, cache->headers[shaderIndex].format, ++ cache->data + cache->headers[shaderIndex].index, ++ cache->headers[shaderIndex].size); ++ ++ return true; ++} ++ ++/* Stores the shader program in the cache. Returns false if there's an error with the cache, or ++ if the cache is too small to hold the shader. */ ++static bool qt_cache_shader(const QGLShaderProgram *shader, const QGLContext *ctx, const QByteArray &md5Sum) ++{ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); ++ ++ ShaderCacheLocker locker(shm); ++ if (!locker.isLocked()) ++ return false; ++ ++ int cacheIdx = cache->shaderCount; ++ if (cacheIdx >= ShaderCacheMaxEntries) { ++ traceCacheOverflow("Qt OpenGL shader cache index overflow!"); ++ return false; ++ } ++ ++ // now that we have the lock on the shared memory, make sure no one ++ // inserted the shader already while we were unlocked ++ if (qt_cache_index_unlocked(md5Sum, cache) != -1) ++ return true; // already cached ++ ++ shaderCacheDebug() << "Caching shader at index" << cacheIdx; ++ ++ GLint binaryLength = 0; ++ glGetProgramiv(shader->programId(), GL_PROGRAM_BINARY_LENGTH_OES, &binaryLength); ++ ++ if (!binaryLength) { ++ shaderCacheDebug() << "Unable to determine binary shader size!"; ++ return false; ++ } ++ ++ if (binaryLength > cache->availableSize()) { ++ traceCacheOverflow("Qt OpenGL shader cache data overflow!"); ++ return false; ++ } ++ ++ GLsizei size = 0; ++ GLenum format = 0; ++ glGetProgramBinaryOES(shader->programId(), binaryLength, &size, &format, ++ cache->data + cache->dataSize); ++ ++ if (!size) { ++ shaderCacheDebug() << "Unable to get binary shader!"; ++ return false; ++ } ++ ++ cache->headers[cacheIdx].index = cache->dataSize; ++ cache->dataSize += binaryLength; ++ ++cache->shaderCount; ++ cache->headers[cacheIdx].size = binaryLength; ++ cache->headers[cacheIdx].format = format; ++ ++ memcpy(cache->headers[cacheIdx].md5Sum, md5Sum.constData(), 16); ++ ++ shaderCacheDebug() << "cached shader size" << size ++ << "format" << format ++ << "binarySize" << binaryLength ++ << "cache index" << cacheIdx ++ << "data index" << cache->headers[cacheIdx].index; ++ ++ return true; ++} ++ ++} // namespace ++ ++QT_BEGIN_NAMESPACE ++ ++QT_MODULE(OpenGL) ++ ++class CachedShader ++{ ++public: ++ CachedShader(const QByteArray &fragSource, const QByteArray &vertexSource) ++ : cacheIdx(-1) ++ { ++ QCryptographicHash md5Hash(QCryptographicHash::Md5); ++ ++ md5Hash.addData(fragSource); ++ md5Hash.addData(vertexSource); ++ ++ md5Sum = md5Hash.result(); ++ } ++ ++ bool isCached() ++ { ++ return cacheIndex() != -1; ++ } ++ ++ int cacheIndex() ++ { ++ if (cacheIdx != -1) ++ return cacheIdx; ++ cacheIdx = qt_cache_index(md5Sum); ++ return cacheIdx; ++ } ++ ++ bool load(QGLShaderProgram *program, const QGLContext *ctx) ++ { ++ if (cacheIndex() == -1) ++ return false; ++ return qt_cached_shader(program, ctx, cacheIdx); ++ } ++ ++ bool store(QGLShaderProgram *program, const QGLContext *ctx) ++ { ++ return qt_cache_shader(program, ctx, md5Sum); ++ } ++ ++private: ++ QByteArray md5Sum; ++ int cacheIdx; ++}; ++ ++ ++QT_END_NAMESPACE ++ ++#endif ++ ++QT_END_HEADER ++ ++#endif ++#endif +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h +@@ -0,0 +1,98 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtOpenGL module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists purely as an ++// implementation detail. This header file may change from version to ++// version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QGLSHADERCACHE_P_H ++#define QGLSHADERCACHE_P_H ++ ++#include <QtCore/qglobal.h> ++ ++#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) ++# include "qglshadercache_meego_p.h" ++#else ++ ++QT_BEGIN_HEADER ++ ++QT_BEGIN_NAMESPACE ++ ++QT_MODULE(OpenGL) ++ ++class QGLShaderProgram; ++class QGLContext; ++ ++class CachedShader ++{ ++public: ++ inline CachedShader(const QByteArray &, const QByteArray &) ++ {} ++ ++ inline bool isCached() ++ { ++ return false; ++ } ++ ++ inline bool load(QGLShaderProgram *, const QGLContext *) ++ { ++ return false; ++ } ++ ++ inline bool store(QGLShaderProgram *, const QGLContext *) ++ { ++ return false; ++ } ++}; ++ ++QT_END_NAMESPACE ++ ++QT_END_HEADER ++ ++#endif ++#endif +Index: qt-maemo-qtp/src/opengl/opengl.pro +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/opengl.pro ++++ qt-maemo-qtp/src/opengl/opengl.pro +@@ -58,7 +58,9 @@ + gl2paintengineex/qglcustomshaderstage_p.h \ + gl2paintengineex/qtriangulatingstroker_p.h \ + gl2paintengineex/qtriangulator_p.h \ +- gl2paintengineex/qtextureglyphcache_gl_p.h ++ gl2paintengineex/qtextureglyphcache_gl_p.h \ ++ gl2paintengineex/qglshadercache_p.h \ ++ gl2paintengineex/qglshadercache_meego_p.h + + SOURCES += qglshaderprogram.cpp \ + qglpixmapfilter.cpp \ +Index: qt-maemo-qtp/src/opengl/util/meego/main.cpp +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/util/meego/main.cpp +@@ -0,0 +1,48 @@ ++#include <QtCore/qdebug.h> ++ ++#define QT_DEBUG_SHADER_CACHE ++#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE ++#define QT_OPENGL_ES_2 ++#define QT_BOOTSTRAPPED ++ ++typedef int GLsizei; ++typedef unsigned int GLenum; ++ ++#include "../../gl2paintengineex/qglshadercache_meego_p.h" ++ ++#include <stdlib.h> ++#include <stdio.h> ++ ++int main() ++{ ++ ShaderCacheSharedMemory shm; ++ ++ if (!shm.isAttached()) { ++ fprintf(stderr, "Unable to attach to shared memory\n"); ++ return EXIT_FAILURE; ++ } ++ ++ ShaderCacheLocker locker(&shm); ++ if (!locker.isLocked()) { ++ fprintf(stderr, "Unable to lock shared memory\n"); ++ return EXIT_FAILURE; ++ } ++ ++ void *data = shm.data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); ++ ++ for (int i = 0; i < cache->shaderCount; ++i) { ++ printf("Shader %d: %d bytes\n", i, cache->headers[i].size); ++ } ++ ++ printf("\nSummary:\n\n" ++ " Amount of cached shaders: %d\n" ++ " Bytes used: %d\n" ++ " Bytes available: %d\n", ++ cache->shaderCount, cache->dataSize, cache->availableSize()); ++ ++ return EXIT_SUCCESS; ++} ++ +Index: qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro +@@ -0,0 +1,7 @@ ++TEMPLATE = app ++ ++SOURCES += main.cpp ++ ++TARGET = shader-cache-introspector ++ ++QT = core diff --git a/config.profiles/harmattan/patches/icu.diff b/config.profiles/harmattan/patches/icu.diff new file mode 100644 index 0000000..16a17fd --- /dev/null +++ b/config.profiles/harmattan/patches/icu.diff @@ -0,0 +1,732 @@ +diff --git a/configure b/configure +index 3a748e2..77232dc 100755 +--- a/configure ++++ b/configure +@@ -779,6 +779,7 @@ CFG_PULSEAUDIO=auto + CFG_COREWLAN=auto + CFG_ICD=auto + CFG_NOPROCESS=no ++CFG_ICU=no + + # initalize variables used for installation + QT_INSTALL_PREFIX= +@@ -940,7 +941,7 @@ while [ "$#" -gt 0 ]; do + VAL=no + ;; + #Qt style yes options +- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles) ++ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) + VAR=`echo $1 | sed "s,^-\(.*\),\1,"` + VAL=yes + ;; +@@ -2242,6 +2243,13 @@ while [ "$#" -gt 0 ]; do + QT_CFLAGS_FPU=$VAL + fi + ;; ++ icu) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_ICU="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; + *) + UNKNOWN_OPT=yes + ;; +@@ -7040,6 +7048,10 @@ if [ "$CFG_ICD" = "yes" ]; then + QT_CONFIG="$QT_CONFIG icd" + fi + ++if [ "$CFG_ICU" = "yes" ]; then ++ QT_CONFIG="$QT_CONFIG icu" ++fi ++ + # + # Some Qt modules are too advanced in C++ for some old compilers + # Detect here the platforms where they are known to work. +diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp +index 7cdc256..11a85d5 100644 +--- a/src/corelib/tools/qchar.cpp ++++ b/src/corelib/tools/qchar.cpp +@@ -57,6 +57,12 @@ + + QT_BEGIN_NAMESPACE + ++#ifdef QT_USE_ICU ++// from qlocale_icu.cpp ++extern uint qt_u_toUpper(uint c); ++extern uint qt_u_toLower(uint c); ++#endif ++ + #ifndef QT_NO_CODEC_FOR_C_STRINGS + # ifdef QT_NO_TEXTCODEC + # define QT_NO_CODEC_FOR_C_STRINGS +@@ -1076,6 +1082,12 @@ QChar::UnicodeVersion QChar::unicodeVersion(ushort ucs2) + */ + QChar QChar::toLower() const + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs); ++ if (res) ++ return QChar(res); ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs); + if (!p->lowerCaseSpecial) + return ucs + p->lowerCaseDiff; +@@ -1090,6 +1102,12 @@ QChar QChar::toLower() const + */ + uint QChar::toLower(uint ucs4) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs4); ++ if (res) ++ return res; ++ // else fall through ++#endif + if (ucs4 > UNICODE_LAST_CODEPOINT) + return ucs4; + const QUnicodeTables::Properties *p = qGetProp(ucs4); +@@ -1106,6 +1124,12 @@ uint QChar::toLower(uint ucs4) + */ + ushort QChar::toLower(ushort ucs2) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs2); ++ if (res) ++ return res & 0xffff; ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs2); + if (!p->lowerCaseSpecial) + return ucs2 + p->lowerCaseDiff; +@@ -1118,6 +1142,12 @@ ushort QChar::toLower(ushort ucs2) + */ + QChar QChar::toUpper() const + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs); ++ if (res) ++ return QChar(res); ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs); + if (!p->upperCaseSpecial) + return ucs + p->upperCaseDiff; +@@ -1132,6 +1162,12 @@ QChar QChar::toUpper() const + */ + uint QChar::toUpper(uint ucs4) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs4); ++ if (res) ++ return res; ++ // else fall through ++#endif + if (ucs4 > UNICODE_LAST_CODEPOINT) + return ucs4; + const QUnicodeTables::Properties *p = qGetProp(ucs4); +@@ -1148,6 +1184,12 @@ uint QChar::toUpper(uint ucs4) + */ + ushort QChar::toUpper(ushort ucs2) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs2); ++ if (res) ++ return res & 0xffff; ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs2); + if (!p->upperCaseSpecial) + return ucs2 + p->upperCaseDiff; +diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp +index 6515edb..5470048 100644 +--- a/src/corelib/tools/qlocale.cpp ++++ b/src/corelib/tools/qlocale.cpp +@@ -134,6 +134,10 @@ void qt_symbianUpdateSystemPrivate(); + void qt_symbianInitSystemLocale(); + #endif + ++#ifdef QT_USE_ICU ++extern bool qt_initIcu(const QString &localeName); ++#endif ++ + /****************************************************************************** + ** Helpers for accessing Qt locale database + */ +@@ -2346,6 +2350,10 @@ void QLocale::setDefault(const QLocale &locale) + { + default_lp = locale.d(); + default_number_options = locale.numberOptions(); ++ ++#ifdef QT_USE_ICU ++ qt_initIcu(locale.name()); ++#endif + } + + /*! +diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp +new file mode 100644 +index 0000000..7fe3801 +--- /dev/null ++++ b/src/corelib/tools/qlocale_icu.cpp +@@ -0,0 +1,247 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtCore module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include "qglobal.h" ++#include "qlibrary.h" ++#include "qdebug.h" ++ ++#include "unicode/uversion.h" ++#include "unicode/ucol.h" ++ ++QT_BEGIN_NAMESPACE ++ ++typedef UCollator *(*Ptr_ucol_open)(const char *loc, UErrorCode *status); ++typedef void (*Ptr_ucol_close)(UCollator *coll); ++typedef UCollationResult (*Ptr_ucol_strcoll)(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); ++typedef int32_t (*Ptr_u_strToCase)(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode); ++ ++static Ptr_ucol_open ptr_ucol_open = 0; ++static Ptr_ucol_strcoll ptr_ucol_strcoll = 0; ++static Ptr_ucol_close ptr_ucol_close = 0; ++static Ptr_u_strToCase ptr_u_strToUpper = 0; ++static Ptr_u_strToCase ptr_u_strToLower = 0; ++ ++enum LibLoadStatus ++{ ++ ErrorLoading = -1, ++ NotLoaded = 0, ++ Loaded = 1 ++}; ++ ++static LibLoadStatus status = NotLoaded; ++ ++static UCollator *icuCollator = 0; ++ ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ ++bool qt_initIcu(const QString &localeString) ++{ ++ if (status == ErrorLoading) ++ return false; ++ ++ if (status == NotLoaded) { ++ ++ // resolve libicui18n ++ QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); ++ if (!lib.load()) { ++ qWarning() << "Unable to load library icui18n" << lib.errorString(); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open"); ++ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close"); ++ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll"); ++ ++ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { ++ // try again with decorated symbol names ++ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ } ++ ++ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { ++ ptr_ucol_open = 0; ++ ptr_ucol_close = 0; ++ ptr_ucol_strcoll = 0; ++ ++ qWarning("Unable to find symbols in icui18n"); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ // resolve libicuuc ++ QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); ++ if (!ucLib.load()) { ++ qWarning() << "Unable to load library icuuc" << ucLib.errorString(); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper"); ++ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower"); ++ ++ if (!ptr_u_strToUpper || !ptr_u_strToLower) { ++ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ } ++ ++ if (!ptr_u_strToUpper || !ptr_u_strToLower) { ++ ptr_u_strToUpper = 0; ++ ptr_u_strToLower = 0; ++ ++ qWarning("Unable to find symbols in icuuc"); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ // success :) ++ status = Loaded; ++ } ++ ++ if (icuCollator) { ++ ptr_ucol_close(icuCollator); ++ icuCollator = 0; ++ } ++ ++ UErrorCode icuStatus = U_ZERO_ERROR; ++ icuCollator = ptr_ucol_open(localeString.toLatin1().constData(), &icuStatus); ++ ++ if (!icuCollator) { ++ qWarning("Unable to open locale %s in ICU, error code %d", qPrintable(localeString), icuStatus); ++ return false; ++ } ++ ++ return true; ++} ++ ++bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result) ++{ ++ Q_ASSERT(result); ++ Q_ASSERT(source); ++ Q_ASSERT(target); ++ ++ if (!icuCollator) ++ return false; ++ ++ *result = ptr_ucol_strcoll(icuCollator, reinterpret_cast<const UChar *>(source), int32_t(sourceLength), ++ reinterpret_cast<const UChar *>(target), int32_t(targetLength)); ++ ++ return true; ++} ++ ++// caseFunc can either be u_strToUpper or u_strToLower ++static bool qt_u_strToCase(const QString &str, QString *out, const QLocale &locale, Ptr_u_strToCase caseFunc) ++{ ++ Q_ASSERT(out); ++ ++ if (!icuCollator) ++ return false; ++ ++ QString result(str.size(), Qt::Uninitialized); ++ ++ UErrorCode status = U_ZERO_ERROR; ++ ++ int32_t size = caseFunc(reinterpret_cast<UChar *>(result.data()), result.size(), ++ reinterpret_cast<const UChar *>(str.constData()), str.size(), ++ locale.name().toLatin1().constData(), &status); ++ ++ if (U_FAILURE(status)) ++ return false; ++ ++ if (size < result.size()) { ++ result.resize(size); ++ } else if (size > result.size()) { ++ qDebug() << "RESULT SIZE MISMATCH"; ++ // the resulting string is larger than our source string ++ result.resize(size); ++ ++ status = U_ZERO_ERROR; ++ size = caseFunc(reinterpret_cast<UChar *>(result.data()), result.size(), ++ reinterpret_cast<const UChar *>(str.constData()), str.size(), ++ locale.name().toLatin1().constData(), &status); ++ ++ if (U_FAILURE(status)) ++ return false; ++ ++ // if the sizes don't match now, we give up. ++ if (size != result.size()) ++ return false; ++ } ++ ++ *out = result; ++ return true; ++} ++ ++bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale) ++{ ++ return qt_u_strToCase(str, out, locale, ptr_u_strToUpper); ++} ++ ++bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale) ++{ ++ return qt_u_strToCase(str, out, locale, ptr_u_strToLower); ++} ++ ++uint qt_u_toUpper(uint c) ++{ ++ if (c > 0xffff) ++ return 0; ++ ++ QString out; ++ if (qt_u_strToUpper(QChar(c), &out, QLocale()) && !out.isEmpty()) ++ return out.at(0).unicode(); ++ return 0; ++} ++ ++uint qt_u_toLower(uint c) ++{ ++ if (c > 0xffff) ++ return 0; ++ ++ QString out; ++ if (qt_u_strToLower(QChar(c), &out, QLocale()) && !out.isEmpty()) ++ return out.at(0).unicode(); ++ return 0; ++} ++ ++QT_END_NAMESPACE +diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp +index d641d74..0f5cee1 100644 +--- a/src/corelib/tools/qstring.cpp ++++ b/src/corelib/tools/qstring.cpp +@@ -112,6 +112,13 @@ int qFindString(const QChar *haystack, int haystackLen, int from, + int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from, + const QChar *needle, int needleLen, Qt::CaseSensitivity cs); + ++#ifdef QT_USE_ICU ++// qlocale_icu.cpp ++extern bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result); ++extern bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale); ++extern bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale); ++#endif ++ + + // Unicode case-insensitive comparison + static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) +@@ -4808,6 +4815,14 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, + TPtrC p2 = TPtrC16(reinterpret_cast<const TUint16 *>(data2), length2); + return p1.CompareC(p2); + #elif defined(Q_OS_UNIX) ++# if defined(QT_USE_ICU) ++ int res; ++ if (qt_ucol_strcoll(data1, length1, data2, length2, &res)) { ++ if (res == 0) ++ res = ucstrcmp(data1, length1, data2, length2); ++ return res; ++ } // else fall through ++# endif + // declared in <string.h> + int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2)); + if (delta == 0) +@@ -4943,6 +4958,15 @@ QString QString::toLower() const + if (!d->size) + return *this; + ++#ifdef QT_USE_ICU ++ { ++ QString result; ++ if (qt_u_strToLower(*this, &result, QLocale())) ++ return result; ++ // else fall through and use Qt's toUpper ++ } ++#endif ++ + const ushort *e = d->data + d->size; + + // this avoids one out of bounds check in the loop +@@ -5034,6 +5058,15 @@ QString QString::toUpper() const + if (!d->size) + return *this; + ++#ifdef QT_USE_ICU ++ { ++ QString result; ++ if (qt_u_strToUpper(*this, &result, QLocale())) ++ return result; ++ // else fall through and use Qt's toUpper ++ } ++#endif ++ + const ushort *e = d->data + d->size; + + // this avoids one out of bounds check in the loop +diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri +index d81ab04..46c39f3 100644 +--- a/src/corelib/tools/tools.pri ++++ b/src/corelib/tools/tools.pri +@@ -92,6 +92,11 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp + contains(QT_CONFIG, zlib):include($$PWD/../../3rdparty/zlib.pri) + else:include($$PWD/../../3rdparty/zlib_dependency.pri) + ++contains(QT_CONFIG,icu) { ++ SOURCES += tools/qlocale_icu.cpp ++ DEFINES += QT_USE_ICU ++} ++ + DEFINES += HB_EXPORT=Q_CORE_EXPORT + INCLUDEPATH += ../3rdparty/harfbuzz/src + HEADERS += ../3rdparty/harfbuzz/src/harfbuzz.h +diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro +index 3813e4e..d991365 100644 +--- a/tests/auto/qchar/qchar.pro ++++ b/tests/auto/qchar/qchar.pro +@@ -13,3 +13,5 @@ symbian: { + } else { + DEFINES += SRCDIR=\\\"$$PWD/\\\" + } ++ ++contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU +diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp +index 45dd7eb..514a836 100644 +--- a/tests/auto/qchar/tst_qchar.cpp ++++ b/tests/auto/qchar/tst_qchar.cpp +@@ -103,7 +103,8 @@ tst_QChar::~tst_QChar() + { } + + void tst_QChar::initTestCase() +-{ } ++{ ++} + + void tst_QChar::cleanupTestCase() + { } +@@ -114,6 +115,7 @@ void tst_QChar::init() + int argc = 0; + app = new QCoreApplication(argc, NULL); + #endif ++ QLocale::setDefault(QLocale::C); + } + + void tst_QChar::cleanup() +@@ -143,9 +145,36 @@ void tst_QChar::toUpper() + QVERIFY(QChar::toUpper((uint)0x1c8) == 0x1c7); + QVERIFY(QChar::toUpper((uint)0x1c9) == 0x1c7); + +- QVERIFY(QChar::toUpper((uint)0x10400) == 0x10400); +- QVERIFY(QChar::toUpper((uint)0x10428) == 0x10400); ++ QCOMPARE(QChar::toUpper((uint)0x10400), 0x10400u); ++ QCOMPARE(QChar::toUpper((uint)0x10428), 0x10400u); ++ ++#ifdef QT_USE_ICU ++ QCOMPARE(QChar('i').toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort('i')), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint('i')), uint('I')); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // in Turkish locale, upper-caseing a 'i' will result in a capital I plus dot (0x0130) ++ QCOMPARE(QChar('i').toUpper(), QChar(0x0130u)); ++ QCOMPARE(QChar::toUpper(ushort('i')), ushort(0x0130u)); ++ QCOMPARE(QChar::toUpper(uint('i')), 0x0130u); ++ ++ // upper-casing a lower-case i without dot (0x0131) will result in 'I' ++ QCOMPARE(QChar(0x0131u).toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort(0x0131u)), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint(0x0131u)), uint('I')); ++ ++ // upper-casing an upper-case 0x0130 should do nothing ++ QCOMPARE(QChar(0x0130u).toUpper(), QChar(0x0130u)); ++ QCOMPARE(QChar::toUpper(ushort(0x0130u)), ushort(0x0130u)); ++ QCOMPARE(QChar::toUpper(uint(0x0130u)), uint(0x0130u)); + ++ // upper-casing an upper-case I should do nothing ++ QCOMPARE(QChar('I').toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort('I')), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint('I')), uint('I')); ++#endif + } + + void tst_QChar::toLower() +@@ -170,6 +199,34 @@ void tst_QChar::toLower() + + QVERIFY(QChar::toLower((uint)0x10400) == 0x10428); + QVERIFY(QChar::toLower((uint)0x10428) == 0x10428); ++ ++#ifdef QT_USE_ICU ++ QCOMPARE(QChar('I').toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort('I')), ushort('i')); ++ QCOMPARE(QChar::toLower(uint('I')), uint('i')); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // in turkish locale, lower-casing an 'I' will result with a lower-case i without dot (0x0131) ++ QCOMPARE(QChar('I').toLower(), QChar(0x0131u)); ++ QCOMPARE(QChar::toLower(ushort('I')), ushort(0x0131u)); ++ QCOMPARE(QChar::toLower(uint('I')), uint(0x0131u)); ++ ++ // lower-casing a captial I with dot (0x0130) will result in 'i' ++ QCOMPARE(QChar(0x0130u).toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort(0x0130u)), ushort('i')); ++ QCOMPARE(QChar::toLower(uint(0x0130u)), uint('i')); ++ ++ // lower-casing a lower-case i should do nothing ++ QCOMPARE(QChar('i').toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort('i')), ushort('i')); ++ QCOMPARE(QChar::toLower(uint('i')), uint('i')); ++ ++ // lower-casing a lower-case i without dot (0x0131) should do nothing ++ QCOMPARE(QChar(0x0131u).toLower(), QChar(0x0131u)); ++ QCOMPARE(QChar::toLower(ushort(0x0131u)), ushort(0x0131u)); ++ QCOMPARE(QChar::toLower(uint(0x0131u)), uint(0x0131u)); ++#endif + } + + void tst_QChar::toTitle() +diff --git a/tests/auto/qstring/qstring.pro b/tests/auto/qstring/qstring.pro +index ed758c6..92dd755 100644 +--- a/tests/auto/qstring/qstring.pro ++++ b/tests/auto/qstring/qstring.pro +@@ -6,3 +6,5 @@ symbian:LIBS += -llibm + QT = core + + DEFINES += QT_NO_CAST_TO_ASCII ++ ++contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU +diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp +index ecae3d8..6baf9fc 100644 +--- a/tests/auto/qstring/tst_qstring.cpp ++++ b/tests/auto/qstring/tst_qstring.cpp +@@ -210,6 +210,8 @@ private slots: + void task262677remove(); + void QTBUG10404_compareRef(); + void QTBUG9281_arg_locale(); ++ ++ void toUpperLower_icu(); + }; + + typedef QList<int> IntList; +@@ -1544,6 +1546,11 @@ void tst_QString::toUpper() + QCOMPARE( lower.toUpper(), upper); + + ++#ifdef QT_USE_ICU ++ // test doesn't work with ICU support, since QChar is unaware of any locale ++ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); ++ QVERIFY(false); ++#else + for (int i = 0; i < 65536; ++i) { + QString str(1, QChar(i)); + QString upper = str.toUpper(); +@@ -1551,6 +1558,7 @@ void tst_QString::toUpper() + if (upper.length() == 1) + QVERIFY(upper == QString(1, QChar(i).toUpper())); + } ++#endif + } + + void tst_QString::toLower() +@@ -1582,6 +1590,11 @@ void tst_QString::toLower() + upper += QChar(QChar::lowSurrogate(0x10400)); + QCOMPARE( upper.toLower(), lower); + ++#ifdef QT_USE_ICU ++ // test doesn't work with ICU support, since QChar is unaware of any locale ++ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); ++ QVERIFY(false); ++#else + for (int i = 0; i < 65536; ++i) { + QString str(1, QChar(i)); + QString lower = str.toLower(); +@@ -1589,6 +1602,7 @@ void tst_QString::toLower() + if (lower.length() == 1) + QVERIFY(str.toLower() == QString(1, QChar(i).toLower())); + } ++#endif + } + + void tst_QString::trimmed() +@@ -4200,6 +4214,8 @@ void tst_QString::localeAwareCompare() + + #elif defined (Q_WS_MAC) + QSKIP("Setting the locale is not supported on OS X (you can set the C locale, but that won't affect CFStringCompare which is used to compare strings)", SkipAll); ++#elif defined(QT_USE_ICU) ++ QLocale::setDefault(QLocale(locale)); + #else + if (!locale.isEmpty()) { + const char *newLocale = setlocale(LC_ALL, locale.toLatin1()); +@@ -4211,6 +4227,11 @@ void tst_QString::localeAwareCompare() + } + #endif + ++#ifdef QT_USE_ICU ++ // ### for c1, ICU disagrees with libc on how to compare ++ QEXPECT_FAIL("c1", "ICU disagrees with test", Abort); ++#endif ++ + int testres = QString::localeAwareCompare(s1, s2); + if (result < 0) { + QVERIFY(testres < 0); +@@ -4912,6 +4933,40 @@ void tst_QString::QTBUG9281_arg_locale() + QLocale::setDefault(QLocale::C); + } + ++void tst_QString::toUpperLower_icu() ++{ ++#ifndef QT_USE_ICU ++ QSKIP("Qt was built without ICU support", QTest::SkipAll); ++#endif ++ ++ QString s = QString::fromLatin1("i"); ++ ++ QCOMPARE(s.toUpper(), QString::fromLatin1("I")); ++ QCOMPARE(s.toLower(), QString::fromLatin1("i")); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // turkish locale has a capital I with a dot (U+0130, utf8 c4b0) ++ ++ QCOMPARE(s.toUpper(), QString::fromUtf8("\xc4\xb0")); ++ QCOMPARE(QString::fromUtf8("\xc4\xb0").toLower(), s); ++ ++ // nothing should happen here ++ QCOMPARE(s.toLower(), s); ++ QCOMPARE(QString::fromLatin1("I").toUpper(), QString::fromLatin1("I")); ++ ++ // U+0131, utf8 c4b1 is the lower-case i without a dot ++ QString sup = QString::fromUtf8("\xc4\xb1"); ++ ++ QCOMPARE(sup.toUpper(), QString::fromLatin1("I")); ++ QCOMPARE(QString::fromLatin1("I").toLower(), sup); ++ ++ // nothing should happen here ++ QCOMPARE(sup.toLower(), sup); ++ QCOMPARE(QString::fromLatin1("i").toLower(), QString::fromLatin1("i")); ++ ++ // the cleanup function will restore the default locale ++} + + + QTEST_APPLESS_MAIN(tst_QString) diff --git a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff new file mode 100644 index 0000000..f5ddb67 --- /dev/null +++ b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff @@ -0,0 +1,13 @@ +Index: qt-maemo-qtp/configure +=================================================================== +--- qt-maemo-qtp.orig/configure ++++ qt-maemo-qtp/configure +@@ -8465,7 +8465,7 @@ + # .projects.3 -> the rest + rm -f .projects .projects.1 .projects.2 .projects.3 + +-QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -print | sed 's-/\./-/-'` ++QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -a ! -path '*/.pc/*' -print | sed 's-/\./-/-'` + if [ -z "$AWK" ]; then + for p in `echo $QMAKE_PROJECTS`; do + echo "$p" >> .projects diff --git a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff new file mode 100644 index 0000000..61dfbf9 --- /dev/null +++ b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff @@ -0,0 +1,56 @@ +Index: qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qstandardgestures.cpp ++++ qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp +@@ -66,6 +66,9 @@ + #else + static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); + #endif ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QPanGesture; + } +@@ -157,7 +160,11 @@ + { + if (target && target->isWidgetType()) { + static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } ++ + return new QPinchGesture; + } + +@@ -286,6 +293,9 @@ + { + if (target && target->isWidgetType()) { + static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QSwipeGesture; + } +@@ -424,6 +434,9 @@ + { + if (target && target->isWidgetType()) { + static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QTapGesture; + } +@@ -495,6 +508,9 @@ + { + if (target && target->isWidgetType()) { + static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QTapAndHoldGesture; + } diff --git a/config.profiles/harmattan/patches/qgltexturecache.diff b/config.profiles/harmattan/patches/qgltexturecache.diff new file mode 100644 index 0000000..0fa8ad2 --- /dev/null +++ b/config.profiles/harmattan/patches/qgltexturecache.diff @@ -0,0 +1,23 @@ +Index: qt-maemo-qtp/src/opengl/qgl.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/qgl.cpp ++++ qt-maemo-qtp/src/opengl/qgl.cpp +@@ -1831,18 +1831,6 @@ + void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost) + { + QWriteLocker locker(&m_lock); +- if (m_cache.totalCost() + cost > m_cache.maxCost()) { +- // the cache is full - make an attempt to remove something +- const QList<QGLTextureCacheKey> keys = m_cache.keys(); +- int i = 0; +- while (i < m_cache.count() +- && (m_cache.totalCost() + cost > m_cache.maxCost())) { +- QGLTexture *tex = m_cache.object(keys.at(i)); +- if (tex->context == ctx) +- m_cache.remove(keys.at(i)); +- ++i; +- } +- } + const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; + m_cache.insert(cacheKey, texture, cost); + } diff --git a/config.profiles/harmattan/patches/qwidget_x11.diff b/config.profiles/harmattan/patches/qwidget_x11.diff new file mode 100644 index 0000000..8bcb011 --- /dev/null +++ b/config.profiles/harmattan/patches/qwidget_x11.diff @@ -0,0 +1,39 @@ +commit 4ecc45086102807901a3bd2b9e02a169ca212716 +Author: Harald Fernengel <harald.fernengel@nokia.com> +Date: Thu Dec 9 10:51:01 2010 +0100 + + Fix a rare race condition when showing windows + + When setting a window to translucent shortly before showing it with the + OpenGL graphics system, the hijacking would call XDestroyWindow without + resetting the internal state. This might lead to the window waiting for + a map notify message forever. + + The patch now properly resets the internal state when destroying the old + window, so it'll get mapped correctly when show() is called. + + Reviewed-by: Denis Dzyubenko + +Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +@@ -961,8 +961,17 @@ + inputContext->setFocusWidget(q); + } + +- if (destroyw) ++ if (destroyw) { + qt_XDestroyWindow(q, dpy, destroyw); ++ if (QTLWExtra *topData = maybeTopData()) { ++#ifndef QT_NO_XSYNC ++ if (topData->syncUpdateCounter) ++ XSyncDestroyCounter(dpy, topData->syncUpdateCounter); ++#endif ++ // we destroyed our old window - reset the top-level state ++ createTLSysExtra(); ++ } ++ } + + // newly created windows are positioned at the window system's + // (0,0) position. If the parent uses wrect mapping to expand the diff --git a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff new file mode 100644 index 0000000..4866cfb --- /dev/null +++ b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff @@ -0,0 +1,17 @@ +Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +@@ -1353,6 +1353,12 @@ + //cannot trust that !isWindow() implies parentWidget() before create + return (q->isWindow() || !q->parentWidget()) ? p : q->parentWidget()->d_func()->mapToGlobal(p); + } ++ ++ // we're not embedded - use the client rect to compute the global position ++ if (!q->window()->d_func()->topData()->embedded) ++ return mapFromWS(QPoint(pos.x() - q->data->crect.left(), pos.y() - q->data->crect.top())); ++ ++ // otherwise, go through the (slow-ish) X11 round-trip + int x, y; + Window child; + QPoint p = mapToWS(pos); diff --git a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff new file mode 100644 index 0000000..af55a60 --- /dev/null +++ b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff @@ -0,0 +1,12 @@ +Index: qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/painting/qgraphicssystem_runtime.cpp ++++ qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp +@@ -285,7 +285,6 @@ + + void QRuntimeWindowSurface::setGeometry(const QRect &rect) + { +- QWindowSurface::setGeometry(rect); + m_windowSurface->setGeometry(rect); + } + diff --git a/config.profiles/harmattan/patches/series b/config.profiles/harmattan/patches/series new file mode 100644 index 0000000..f2ee5f9 --- /dev/null +++ b/config.profiles/harmattan/patches/series @@ -0,0 +1,14 @@ +tst_qscrollbar.diff +signon_authenticator4.diff +pinch_gesture_sent_twice.diff +no_read_pro_from_quilt_dir.diff +tst_qvariant.diff +icu.diff +qgltexturecache.diff +qwidget_x11.diff +qwidget_x11_mapping.diff +glshadercache.diff +temppath.diff +tst_qprogressbar.diff +default_widget_size.diff +runtime-window-geometry-revert.diff diff --git a/config.profiles/harmattan/patches/signon_authenticator4.diff b/config.profiles/harmattan/patches/signon_authenticator4.diff new file mode 100644 index 0000000..63e8d51 --- /dev/null +++ b/config.profiles/harmattan/patches/signon_authenticator4.diff @@ -0,0 +1,230 @@ +Index: qt-maemo-qtp/src/3rdparty/signon/signon.pri +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/3rdparty/signon/signon.pri +@@ -0,0 +1,2 @@ ++# signon dependency ++CONFIG += qdbus +Index: qt-maemo-qtp/src/network/access/access.pri +=================================================================== +--- qt-maemo-qtp.orig/src/network/access/access.pri ++++ qt-maemo-qtp/src/network/access/access.pri +@@ -61,3 +61,4 @@ + access/qnetworkdiskcache.cpp + + include($$PWD/../../3rdparty/zlib_dependency.pri) ++include($$PWD/../../3rdparty/signon/signon.pri) +Index: qt-maemo-qtp/src/network/kernel/qauthenticator.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/network/kernel/qauthenticator.cpp ++++ qt-maemo-qtp/src/network/kernel/qauthenticator.cpp +@@ -129,6 +129,9 @@ + \sa QSslSocket + */ + ++#ifndef QT_NO_SIGNON ++#include <QtDBus/QtDBus> ++#endif //QT_NO_SIGNON + + /*! + Constructs an empty authentication object +@@ -421,17 +424,40 @@ + { + QByteArray response; + const char *methodString = 0; ++#ifndef QT_NO_SIGNON ++ bool valid = false; ++ qint32 id = 0; ++#endif //QT_NO_SIGNON ++ + switch(method) { + case QAuthenticatorPrivate::None: + methodString = ""; + phase = Done; + break; + case QAuthenticatorPrivate::Plain: ++#ifndef QT_NO_SIGNON ++ id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); ++ response = '\0' + signon.value(QLatin1String("UserName")).toString().toUtf8() ++ + '\0' + signon.value(QLatin1String("Secret")).toString().toUtf8(); ++ } else ++#endif //QT_NO_SIGNON + response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); + phase = Done; + break; + case QAuthenticatorPrivate::Basic: + methodString = "Basic "; ++#ifndef QT_NO_SIGNON ++ id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); ++ response = signon.value(QLatin1String("UserName")).toString().toLatin1() ++ + ':' + signon.value(QLatin1String("Secret")).toString().toLatin1(); ++ } else ++#endif //QT_NO_SIGNON + response = user.toLatin1() + ':' + password.toLatin1(); + response = response.toBase64(); + phase = Done; +@@ -613,6 +639,90 @@ + return hash.result().toHex(); + } + ++#ifndef QT_NO_SIGNON ++ ++static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args) ++{ ++ //check dbus connection ++ QDBusConnection connection = QDBusConnection::sessionBus(); ++ if (!QDBusConnection::sessionBus().isConnected()) { ++ qCritical() << "DBus connection failed"; ++ return QVariantMap(); ++ } ++ ++ QDBusMessage msg = ++ QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), ++ QLatin1String("/com/nokia/SingleSignOn") , ++ QLatin1String("com.nokia.SingleSignOn.AuthService"), ++ QLatin1String("getAuthSessionObjectPath")); ++ msg << id << method; ++ QDBusReply<QString> pathReply = connection.call(msg); ++ ++ QString sessionPath; ++ if (pathReply.isValid()) { ++ sessionPath = pathReply.value(); ++ } else { ++ qDebug() << pathReply.error(); ++ return QVariantMap(); ++ } ++ ++ //authenticate using auth session ++ msg = QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), ++ sessionPath, QString(), ++ QLatin1String("process")); ++ msg << args << method; ++ QDBusReply<QVariantMap> reply = connection.call(msg); ++ ++ if (reply.isValid()) { ++ QVariantMap map = reply.value(); ++ return map; ++ } else { ++ qDebug() << reply.error(); ++ return QVariantMap(); ++ } ++ return QVariantMap(); ++} ++ ++static QByteArray signonDigestMd5( ++ const quint32 id, ++ const QByteArray &alg, ++ QString &user, ++ const QByteArray &realm, ++ const QByteArray &nonce, /* nonce from server */ ++ QByteArray &nonceCount, /* 8 hex digits */ ++ QByteArray &cNonce, /* client nonce */ ++ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ ++ const QByteArray &method, /* method from the request */ ++ const QByteArray &digestUri, /* requested URL */ ++ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ ++ ) ++{ ++ QByteArray digest = QByteArray(); ++ nonceCount = "00000001"; ++ ++ QVariantMap args; ++ args.insert(QLatin1String("Algorithm"), alg); ++ args.insert(QLatin1String("Realm"), QLatin1String(realm)); ++ args.insert(QLatin1String("nonce"), nonce); ++ args.insert(QLatin1String("nonceCount"), nonceCount); ++ args.insert(QLatin1String("cNonce"), cNonce); ++ args.insert(QLatin1String("qop"), qop); ++ args.insert(QLatin1String("method"), method); ++ args.insert(QLatin1String("digestUri"), digestUri); ++ args.insert(QLatin1String("Entity"), hEntity); ++ ++ QVariantMap response = signonResponse(id, QLatin1String("digest"), args); ++ ++ if (response.isEmpty()) ++ return digest; ++ digest = response.value(QLatin1String("Digest")).toByteArray(); ++ user = response.value(QLatin1String("UserName")).toString(); ++ cNonce = response.value(QLatin1String("cNonce")).toByteArray(); ++ ++ return digest; ++} ++#endif //QT_NO_SIGNON ++ + QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge, const QByteArray &method, const QByteArray &path) + { + QHash<QByteArray,QByteArray> options = parseDigestAuthenticationChallenge(challenge); +@@ -625,9 +735,23 @@ + QByteArray nonce = options.value("nonce"); + QByteArray opaque = options.value("opaque"); + QByteArray qop = options.value("qop"); ++ QByteArray response; + + // qDebug() << "calculating digest: method=" << method << "path=" << path; +- QByteArray response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), ++ ++#ifndef QT_NO_SIGNON ++ bool valid = false; ++ qint32 id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ response = signonDigestMd5(id, options.value("algorithm"), user, ++ realm.toLatin1(), ++ nonce, nonceCountString, ++ cnonce, qop, method, ++ path, QByteArray()); ++ } else ++#endif //QT_NO_SIGNON ++ response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), + realm.toLatin1(), password.toLatin1(), + nonce, nonceCountString, + cnonce, qop, method, +Index: qt-maemo-qtp/src/network/kernel/qauthenticator_p.h +=================================================================== +--- qt-maemo-qtp.orig/src/network/kernel/qauthenticator_p.h ++++ qt-maemo-qtp/src/network/kernel/qauthenticator_p.h +@@ -109,6 +109,23 @@ + + }; + ++#ifndef QT_NO_SIGNON ++ static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args); ++ static QByteArray signonDigestMd5( ++ const quint32 id, ++ const QByteArray &alg, ++ QString &user, ++ const QByteArray &realm, ++ const QByteArray &nonce, /* nonce from server */ ++ QByteArray &nonceCount, /* 8 hex digits */ ++ QByteArray &cNonce, /* client nonce */ ++ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ ++ const QByteArray &method, /* method from the request */ ++ const QByteArray &digestUri, /* requested URL */ ++ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ ++ ); ++#endif //QT_NO_SIGNON ++ + + QT_END_NAMESPACE + +Index: qt-maemo-qtp/src/src.pro +=================================================================== +--- qt-maemo-qtp.orig/src/src.pro ++++ qt-maemo-qtp/src/src.pro +@@ -4,8 +4,9 @@ + unset(SRC_SUBDIRS) + win32:SRC_SUBDIRS += src_winmain + symbian:SRC_SUBDIRS += src_s60main +-SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib ++SRC_SUBDIRS += src_corelib src_xml + !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus ++SRC_SUBDIRS += src_network src_sql src_testlib + !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui + !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support + diff --git a/config.profiles/harmattan/patches/temppath.diff b/config.profiles/harmattan/patches/temppath.diff new file mode 100644 index 0000000..065c2d0 --- /dev/null +++ b/config.profiles/harmattan/patches/temppath.diff @@ -0,0 +1,28 @@ +Index: qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h +=================================================================== +--- qt-maemo-qtp.orig/mkspecs/linux-g++-maemo/qplatformdefs.h ++++ qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h +@@ -43,3 +43,8 @@ + + #define QT_GUI_DOUBLE_CLICK_RADIUS 20 + #define QT_GUI_DRAG_DISTANCE 16 ++ ++// TMPDIR sometimes points to /tmp and sometimes to /var/tmp ++// To guarantee native platform key generation for QSharedMemory and friends, ++// we must hard code the temp path to /var/tmp here. ++#define QT_UNIX_TEMP_PATH_OVERRIDE "/var/tmp" +Index: qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/corelib/io/qfsfileengine_unix.cpp ++++ qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp +@@ -643,7 +643,9 @@ + + QString QFSFileEngine::tempPath() + { +-#if defined(Q_OS_SYMBIAN) ++#if defined(QT_UNIX_TEMP_PATH_OVERRIDE) ++ QString temp = QLatin1String(QT_UNIX_TEMP_PATH_OVERRIDE); ++#elif defined(Q_OS_SYMBIAN) + TFileName symbianPath = PathInfo::PhoneMemoryRootPath(); + QString temp = QDir::fromNativeSeparators(qt_TDesC2QString(symbianPath)); + temp += QLatin1String( "temp/"); diff --git a/config.profiles/harmattan/patches/tst_qprogressbar.diff b/config.profiles/harmattan/patches/tst_qprogressbar.diff new file mode 100644 index 0000000..d252fe3 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qprogressbar.diff @@ -0,0 +1,19 @@ +Index: qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qprogressbar/tst_qprogressbar.cpp ++++ qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp +@@ -179,10 +179,14 @@ + bar.repainted = false; + bar.setFormat("%v of %m (%p%)"); + qApp->processEvents(); ++ ++#if 0 // Removed + #ifndef Q_WS_MAC + // The Mac scroll bar is animated, which means we get paint events all the time. + QVERIFY(!bar.repainted); + #endif ++#endif ++ + QCOMPARE(bar.text(), QString("1 of 10 (10%)")); + bar.setRange(5, 5); + bar.setValue(5); diff --git a/config.profiles/harmattan/patches/tst_qscrollbar.diff b/config.profiles/harmattan/patches/tst_qscrollbar.diff new file mode 100644 index 0000000..3c777a9 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qscrollbar.diff @@ -0,0 +1,12 @@ +Index: qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qscrollbar/tst_qscrollbar.cpp ++++ qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp +@@ -104,6 +104,7 @@ + + void tst_QScrollBar::task_209492() + { ++ QSKIP("Unstable test on Harmattan", SkipSingle); + class MyScrollArea : public QScrollArea + { + public: diff --git a/config.profiles/harmattan/patches/tst_qvariant.diff b/config.profiles/harmattan/patches/tst_qvariant.diff new file mode 100644 index 0000000..bcded52 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qvariant.diff @@ -0,0 +1,21 @@ +Index: qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qvariant/tst_qvariant.cpp ++++ qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp +@@ -3122,6 +3122,7 @@ + + void tst_QVariant::numericalConvert() + { ++ int low_int = 3; + QVariant vfloat(float(5.3)); + QVariant vdouble(double(5.3)); + QVariant vreal(qreal(5.3)); +@@ -3137,7 +3138,7 @@ + + for(int i = 0; i < vect.size(); i++) { + double num = 5.3; +- if (i >= 3 && i <= 7) ++ if (i >= low_int && i <= 7) + num = 5; + QVariant *v = vect.at(i); + QCOMPARE(v->toFloat() , float(num)); diff --git a/config.profiles/harmattan/qt4-acceptance-tests.lintian b/config.profiles/harmattan/qt4-acceptance-tests.lintian new file mode 100644 index 0000000..c44aad8 --- /dev/null +++ b/config.profiles/harmattan/qt4-acceptance-tests.lintian @@ -0,0 +1,6 @@ +qt4-acceptance-tests: unknown-control-file digsigsums +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusconnection +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qhash +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qlist +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qmap +qt4-acceptance-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/qt4-declarative-qmlviewer.install b/config.profiles/harmattan/qt4-declarative-qmlviewer.install new file mode 100644 index 0000000..2822108 --- /dev/null +++ b/config.profiles/harmattan/qt4-declarative-qmlviewer.install @@ -0,0 +1,3 @@ +usr/bin/qmlviewer +usr/share/applications/QMLViewer.desktop +usr/share/icons/hicolor/64x64/apps/QMLViewer.png diff --git a/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian b/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian new file mode 100644 index 0000000..4acdec6 --- /dev/null +++ b/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian @@ -0,0 +1 @@ +qt4-declarative-qmlviewer: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/qt4-doc-html.doc-base b/config.profiles/harmattan/qt4-doc-html.doc-base new file mode 100644 index 0000000..58063c6 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.doc-base @@ -0,0 +1,11 @@ +Document: qt4-doc-html +Title: Qt4 Reference Documentation +Author: Trolltech AS +Abstract: Qt is a cross-platform C++ application framework. Qt's + primary feature is its rich set of widgets that provide standard GUI + functionality. +Section: Apps/programming + +Format: HTML +Index: /usr/share/doc/qt4-doc-html/html/index.html +Files: /usr/share/doc/qt4-doc-html/html/*.html diff --git a/config.profiles/harmattan/qt4-doc-html.install b/config.profiles/harmattan/qt4-doc-html.install new file mode 100644 index 0000000..8467be4 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.install @@ -0,0 +1,2 @@ +usr/share/qt4/doc/html + diff --git a/config.profiles/harmattan/qt4-doc-html.links b/config.profiles/harmattan/qt4-doc-html.links new file mode 100644 index 0000000..d1fed65 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.links @@ -0,0 +1,2 @@ +usr/share/qt4/doc/html usr/share/doc/qt4-doc-html/html + diff --git a/config.profiles/harmattan/qt4-doc.install b/config.profiles/harmattan/qt4-doc.install new file mode 100644 index 0000000..1037a6c --- /dev/null +++ b/config.profiles/harmattan/qt4-doc.install @@ -0,0 +1,3 @@ +usr/share/qt4/doc/qch/* +usr/share/qt4/doc/src/* + diff --git a/config.profiles/harmattan/qt4-linguist-tools.install b/config.profiles/harmattan/qt4-linguist-tools.install new file mode 100644 index 0000000..73c0bb1 --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.install @@ -0,0 +1,4 @@ +usr/bin/native-lrelease +usr/bin/host-lrelease +usr/bin/lupdate +usr/bin/lconvert diff --git a/config.profiles/harmattan/qt4-linguist-tools.lintian b/config.profiles/harmattan/qt4-linguist-tools.lintian new file mode 100644 index 0000000..0f8ed2b --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.lintian @@ -0,0 +1,4 @@ +qt4-linguist-tools: unknown-control-file digsigsums +qt4-linguist-tools: binary-from-other-architecture ./usr/bin/host-lrelease +qt4-linguist-tools: binary-or-shlib-defines-rpath ./usr/bin/host-lrelease /scratchbox/host_shared/lib +qt4-linguist-tools: binary-or-shlib-defines-rpath ./usr/bin/host-lrelease /host_usr/lib diff --git a/config.profiles/harmattan/qt4-linguist-tools.postinst b/config.profiles/harmattan/qt4-linguist-tools.postinst new file mode 100644 index 0000000..2453b95 --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.postinst @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +PREFIX=native +if [ -f /targets/links/scratchbox.config ]; then + PREFIX=host +fi + +BINARIES="lrelease" + +for bin in $BINARIES; do + ln -sf "/usr/bin/${PREFIX}-${bin}" "/usr/bin/${bin}" +done + +#DEBHELPER# diff --git a/config.profiles/harmattan/qt4-linguist-tools.prerm b/config.profiles/harmattan/qt4-linguist-tools.prerm new file mode 100644 index 0000000..04b51bd --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.prerm @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +BINARIES="lrelease" + +case "$1" in + upgrade) ;; + remove|failed-upgrade|deconfigure) + for bin in $BINARIES; do + rm -f "/usr/bin/${bin}" + done + ;; +esac + +#DEBHELPER# diff --git a/config.profiles/harmattan/qt4-maemo-auto-tests.lintian b/config.profiles/harmattan/qt4-maemo-auto-tests.lintian new file mode 100644 index 0000000..3745c80 --- /dev/null +++ b/config.profiles/harmattan/qt4-maemo-auto-tests.lintian @@ -0,0 +1,41 @@ +qt4-maemo-auto-tests: unknown-control-file digsigsums +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusabstractadaptor +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusabstractinterface +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuscontext +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusinterface +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuslocalcalls +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusmetaobject +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusmetatype +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuspendingcall +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuspendingreply +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusreply +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusservicewatcher +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusthreading +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusxmlparser +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdebug +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qmutexlocker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkaddressentry +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcookie +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcookiejar +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkproxy +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkrequest +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qobjectrace +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpainterpathstroker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpen +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpoint +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpolygon +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qquaternion +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qqueue +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qrand +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qreadlocker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qreadwritelock +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qrect +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qringbuffer +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscopedpointer +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptclass +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptcontextinfo +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptstring +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptvalueiterator +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qsequentialanimationgroup +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qset +qt4-maemo-auto-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/readdir-hppa-test.c b/config.profiles/harmattan/readdir-hppa-test.c new file mode 100644 index 0000000..eb893ba --- /dev/null +++ b/config.profiles/harmattan/readdir-hppa-test.c @@ -0,0 +1,25 @@ +#include <sys/types.h> +#include <dirent.h> +#include <errno.h> +#include <stdio.h> + +main() { + int return_code; + DIR *dir; + struct dirent entry; + struct dirent *result; + + if ((dir = opendir(".")) == NULL) + perror("opendir() error"); + else { + // puts("contents of .:"); + for (return_code = readdir_r(dir, &entry, &result); + result != NULL && return_code == 0; + return_code = readdir_r(dir, &entry, &result)) + printf("%s\n", entry.d_name); + if (return_code != 0) + perror("readdir_r() error"); + closedir(dir); + } +} + diff --git a/config.profiles/harmattan/rules b/config.profiles/harmattan/rules new file mode 100755 index 0000000..3042551 --- /dev/null +++ b/config.profiles/harmattan/rules @@ -0,0 +1,404 @@ +#!/usr/bin/make -f + +export QTDIR := $(shell pwd) +export PATH := $(QTDIR)/bin:$(PATH) +# workaround to use lrelease. +export LD_LIBRARY_PATH := $(QTDIR)/lib:$(LD_LIBRARY_PATH) +export QT_PLUGIN_PATH := $(QTDIR)/plugins +export DH_VERBOSE=1 + +# Only present in official source package +#QTVERSION := $(shell ls changes-* | cut -f2 -d '-') +CURRENTVERSION := $(shell head -1 debian/changelog | sed 's/[^(]*(\([^)]*\)).*/\1/') + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/makefile.mk +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include /usr/share/cdbs/1/rules/utils.mk + +# Find out how many parallel threads to run +TMP_BUILD_OPTS = $(subst $(comma),$(space),$(DEB_BUILD_OPTIONS)) +ifneq (,$(filter parallel=%,$(TMP_BUILD_OPTS))) + NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(TMP_BUILD_OPTS))) + PARALLEL_MAKEFLAGS += -j$(NUMJOBS) +endif +BUILD_NOOPT := no +ifneq (,$(filter noopt,$(TMP_BUILD_OPTS))) + BUILD_NOOPT := yes +endif +BUILD_DOCS := yes +ifneq (,$(filter nodoc,$(TMP_BUILD_OPTS))) + BUILD_DOCS := no +endif +ifneq (,$(filter nodocs,$(TMP_BUILD_OPTS))) + BUILD_DOCS := no +endif +TRY_TARGET_BUILD := no +ifneq (,$(filter native-tools,$(TMP_BUILD_OPTS))) + TRY_TARGET_BUILD := yes +endif + +DEB_MAKE_INVOKE := $(MAKE) $(PARALLEL_MAKEFLAGS) +DEB_MAKE_BUILD_TARGET := sub-src +DEB_MAKE_INSTALL_TARGET := INSTALL_ROOT=$(DEB_DESTDIR) install +DEB_DH_INSTALL_SOURCEDIR := debian/tmp + +# Ensure the *.debug files aren't included in any package other than libqt4-dbg +DEB_DH_INSTALL_ARGS := --exclude=.debug + +DEB_MAKE_CLEAN_TARGET := confclean distclean + +# Shlibs of the current upstream version +DEB_DH_MAKESHLIBS_ARGS_ALL := -V + +DEB_DH_SHLIBDEPS_ARGS_ALL := --exclude=.debug -Xusr/bin/host- + +# Only present in official source package +#DEB_INSTALL_CHANGELOGS_ALL := changes-$(QTVERSION) + +QT_MAEMO_TESTDIR := debian/tests +export QMAKEFEATURES=$(CURDIR)/debian/tests +export QMAKE_INVOKE=$(CURDIR)/bin/qmake +export QMAKE_BUILD_ROOT=$(CURDIR) + +#Test packages that will run using -style option +QT_AUTOTESTS_GUI_STYLE := "libqt4-gui-tests" + +# Select OpenGL backend driver +# Enable multituch support +ifeq ($(DEB_HOST_ARCH),arm) + CONFIG_ARCH_OPT = armv6 +else + ifeq ($(DEB_HOST_ARCH),armel) + CONFIG_ARCH_OPT = armv6 + else + CONFIG_ARCH_OPT = i386 + endif + +endif + +EXTRA_CONFIGURE_OPTS += -DQT_QLOCALE_USES_FCVT -DQT_EXPERIMENTAL_CLIENT_DECORATIONS -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE + +# Check if running inside scratchbox, and that host-gcc works +IN_SBOX = $(shell if [ -f /targets/links/scratchbox.config ]; then echo yes; else echo no; fi) +HOST_GCC_WORKS = $(shell if host-gcc --version > /dev/null; then echo yes; else echo no; fi) +TARGET_BUILD = no +ifeq ($(TRY_TARGET_BUILD),yes) + ifeq ($(IN_SBOX),yes) + ifeq ($(HOST_GCC_WORKS),yes) + TARGET_BUILD = yes + endif + endif +# Except don't use host-gcc if building for i386 + ifeq ($(DEB_HOST_ARCH),i386) + TARGET_BUILD = no + endif +endif + +TARGET_PLATFORM = linux-g++-maemo +HOST_PLATFORM = unsupported/linux-host-g++ +PLATFORM_FLAG = -platform $(TARGET_PLATFORM) +FORCE_PKG_CONFIG_FLAG = +HOST_EXLUDES = +ifeq ($(TARGET_BUILD),yes) + PLATFORM_FLAG = -platform $(HOST_PLATFORM) \ + -xplatform $(TARGET_PLATFORM) + FORCE_PKG_CONFIG_FLAG = -force-pkg-config + HOST_EXCLUDES := usr/bin/host- usr/bin/qmake +endif + +DEB_STRIP_EXCLUDE := $(HOST_EXCLUDES) + +# Determine target architecture +ifeq ($(DEB_HOST_ARCH_OS),linux) + ifeq ($(CONFIG_ARCH_OPT),armv6) + GL_BACKEND=es2 + EXTRA_CONFIGURE_OPTS += -graphicssystem runtime \ + -runtimegraphicssystem meego + CONFIG_BUILD_OPT = -release + else + GL_BACKEND=desktop + CONFIG_BUILD_OPT = -debug + endif +else + TARGET_PLATFORM = glibc-g++ +endif + +#If noopt is selected, force -debug and some compilation flags +ifeq ($(BUILD_NOOPT),yes) + CONFIG_BUILD_OPT = -debug + CFLAGS = -g + CXXFLAGS = -g + export CFLAGS + export CXXFLAGS +endif + +MAKE_DOCS := -make docs +DOCS_EXCLUDE := +ifeq ($(BUILD_DOCS),no) + MAKE_DOCS := -nomake docs +endif + +common-build-arch:: debian/stamp-makefile-build-tools + +debian/stamp-makefile-build-tools: debian/stamp-makefile-build + $(DEB_MAKE_INVOKE) sub-tools + touch $@ + +common-configure-arch:: config.status + +config.status: + # Create mkspecs/glibc-g++ from mkspecs/linux-g++, needed by GNU/kFreeBSD + # we cannot use directly linux-g++ due to src/corelib/io/io.pri + rm -rf mkspecs/glibc-g++ + cp -a mkspecs/linux-g++ mkspecs/glibc-g++ + ./configure -opensource \ + -confirm-license \ + $(CONFIG_BUILD_OPT) \ + -prefix "/usr" \ + -bindir "/usr/bin" \ + -libdir "/usr/lib" \ + -docdir "/usr/share/qt4/doc" \ + -headerdir "/usr/include/qt4" \ + -datadir "/usr/share/qt4" \ + -plugindir "/usr/lib/qt4/plugins" \ + -importdir "/usr/lib/qt4/imports" \ + -translationdir "/usr/share/qt4/translations" \ + -sysconfdir "/etc/xdg" \ + $(PLATFORM_FLAG) \ + $(FORCE_PKG_CONFIG_FLAG) \ + -arch $(CONFIG_ARCH_OPT) \ + -fast \ + -no-optimized-qmake \ + -reduce-relocations \ + -no-separate-debug-info \ + -no-rpath \ + -system-zlib \ + -system-libtiff \ + -system-libpng \ + -system-libjpeg \ + -no-nas-sound \ + -qt-gif \ + -no-qt3support \ + -no-libmng \ + -opengl $(GL_BACKEND) \ + -accessibility \ + -make tools \ + $(MAKE_DOCS) \ + -nomake examples \ + -nomake demos \ + -little-endian \ + -no-cups \ + -no-gtkstyle \ + -exceptions \ + -no-xinerama \ + -no-xcursor \ + -dbus-linked \ + -glib \ + -no-pch \ + -gstreamer \ + -svg \ + -no-webkit \ + -no-sql-ibase \ + -xmlpatterns \ + -system-sqlite \ + -plugin-sql-sqlite \ + -openssl \ + -phonon \ + -xinput2 \ + -icu \ + $(EXTRA_CONFIGURE_OPTS) + +BINARY_NAMES := qmake moc lrelease rcc uic +HOST_BINARIES := $(addprefix $(CURDIR)/bin/, $(addprefix host-, $(BINARY_NAMES))) + +# host-prefixed binaries are to be copied anyway regardless of the platform +common-build-arch:: $(HOST_BINARIES) debian/stamp-makefile-build-target-binaries + +$(HOST_BINARIES): + cp "$(subst host-,,$@)" "$@" + if [ -n "$(HOST_EXCLUDES)" ]; then host-strip --strip-all "$@"; fi + +debian/stamp-makefile-build-target-binaries: $(HOST_BINARIES) +# Build target-platform tools when cross-compiling + # First make sure qdoc3 is built + if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) -C tools/qdoc3; fi + # Keep qmake as is while building the rest, build into native-qmake + (cd qmake && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE) "TARGET=$(QTDIR)/bin/native-qmake") + # bootstrap needs to be first + for dir in src/tools/bootstrap src/tools/moc tools/linguist/lrelease src/tools/rcc src/tools/uic; do \ + (cd "$$dir" && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE)) \ + done + #Use the host binaries for the rest of the Qt build + for binary in moc rcc uic lrelease; do \ + mv "$(CURDIR)/bin/$$binary" "$(CURDIR)/bin/native-$$binary" ; \ + cp "$(CURDIR)/bin/host-$$binary" "$(CURDIR)/bin/$$binary"; \ + done + touch $@ + +#Build the auto tests +TEST_PACKAGES := $(filter %-tests, $(DEB_PACKAGES)) +common-build-arch:: $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) + +BUILD_TEST_PACKAGE_NAME = $(subst debian/stamp-makefile-build-autotest-,,$@) +BUILD_TEST_DIR = build_tests/$(BUILD_TEST_PACKAGE_NAME) +$(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) : + rm -f tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro + cp debian/tests/$(BUILD_TEST_PACKAGE_NAME).pro tests/auto + mkdir -p $(BUILD_TEST_DIR) + cd $(BUILD_TEST_DIR) && $(QMAKE_INVOKE) -recursive $(CURDIR)/tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro CONFIG+=maemo_tests + $(DEB_MAKE_INVOKE) -C $(BUILD_TEST_DIR) + touch $@ + + +clean:: +# Extra stuff missed by confclean/distclean + + # Misc. files + rm -f \ + config.status \ + config.tests/.qmake.cache \ + .qmake.cache \ + examples/dbus/*/Makefile.* \ + mkspecs/qconfig.pri \ + src/corelib/global/qconfig.* \ + src/tools/uic/qclass_lib_map.h \ + lib/*.so.* \ + lib/*.la \ + tests/auto/libqt4-gui-tests.pri \ + tests/auto/maemo-auto.pro \ + tests/auto/qt4-acceptance-tests.pri \ + tests/auto/qt4-maemo-auto-tests.pri \ + ; + + # Misc. directories + rm -rf \ + examples/tools/plugandpaint/plugins/ \ + examples/tools/styleplugin/styles/ \ + mkspecs/glibc-g++/ \ + plugins/ \ + include/ \ + doc-build/ \ + doc/html/ \ + doc/qch/ \ + ; + + # hppa test directory + rm -rf debian/hppa-tmp + + # Leftover dirs + find -depth -type d \( -false \ + -o -name debug-shared \ + -o -name debug-static \ + -o -name \*.gch \ + -o -name .moc\* \ + -o -name .obj\* \ + -o -name .pch \ + -o -name pkgconfig \ + -o -name .rcc \ + -o -name release-shared \ + -o -name release-static \ + -o -name .uic \ + \) -print0 | xargs -0 rm -rf + + # Leftover files and all symlinks except those in .git + find \( -false \ + -o \( -name \*.a -a ! -path \*/tests/auto/qdir/types/\*.a \) \ + -o -name Makefile.Debug \ + -o -name Makefile.Release \ + -o -name \*.o \ + -o -name \*.prl \ + -o \( -name \*.so -a ! -path \*/tests/auto/qlibrary/library_path/invalid.so \) \ + -o -name \*.so.debug \ + -o -type l \ + \! -path ./.git/\* \ + \) -print0 | xargs -0 rm -rf + + # Delete all Makefiles, excluding some from src/3rdparty + find $(CURDIR) -name Makefile \ + ! -path $(CURDIR)/src/3rdparty/Makefile \ + ! -path $(CURDIR)/src/3rdparty/freetype/\* \ + ! -path $(CURDIR)/src/3rdparty/zlib/\* \ + ! -path $(CURDIR)/src/3rdparty/ptmalloc/Makefile \ + ! -path $(CURDIR)/util/gencmap/Makefile \ + -print0 | xargs -0 rm -rf + + # Any remaining executables + find $(CURDIR) -type f -perm +111 -exec file -i '{}' \; \ + | grep -e application/x-executable \ + | cut -d ':' -f 1 | xargs rm -f + + # Generated on build + rm -f debian/shlibs.local + rm -f debian/stamp-makefile-build-tools + rm -f debian/stamp-makefile-build-docs + rm -f debian/stamp-makefile-build-target-binaries + rm -f $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) + rm -f $(addprefix debian/,$(addsuffix .install, $(TEST_PACKAGES))) + rm -f $(addprefix tests/auto/,$(addsuffix .pro, $(TEST_PACKAGES))) + rm -rf build_tests/ + + +common-install-arch:: + mkdir -p $(DEB_DESTDIR)/usr/share/qt4/translations/ + cp $(CURDIR)/translations/*.ts $(DEB_DESTDIR)/usr/share/qt4/translations/. + find $(DEB_DESTDIR)/usr/share/qt4/translations/ -type f -name "*.ts" | xargs $(CURDIR)/bin/lrelease + rm -rf $(DEB_DESTDIR)/usr/share/qt4/translations/*.ts +# Fix wrong path in pkgconfig files + find $(DEB_DESTDIR)/usr/lib/pkgconfig -type f -name '*.pc' \ + -exec perl -pi -e "s, -L$(CURDIR)/?\S+,,g" {} \; +# Fix wrong path in prl files + find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ + -exec perl -pi -e "s, -L$(CURDIR)/\S+,,g" {} \; + find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ + -exec sed -i -e "/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/" {} \; + + +install/qt4-declarative-qmlviewer:: + install -p -D "debian/QMLViewer.desktop" "$(DEB_DESTDIR)/usr/share/applications/QMLViewer.desktop" + install -p -D "debian/QMLViewer.png" "$(DEB_DESTDIR)/usr/share/icons/hicolor/64x64/apps/QMLViewer.png" + + +$(patsubst %,install/%,$(TEST_PACKAGES)) :: install/%: + rm -f debian/$(cdbs_curpkg).install + $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) $(DEB_MAKE_INSTALL_TARGET) + $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) QTM_TEST_INSTALL_FILE=$(CURDIR)/debian/$(cdbs_curpkg).install installtests + if [ -z "$(findstring $(cdbs_curpkg),$(QT_AUTOTESTS_GUI_STYLE))" ]; then \ + $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) \ + -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ + else \ + $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) -c "-style plastique" \ + -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ + fi + +common-install-arch:: + find "$(CURDIR)/bin" -name "host-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; + find "$(CURDIR)/bin" -name "native-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; + + +install/libqt4-doc:: + mkdir -p "$(DEB_DESTDIR)/usr/share/qt4/doc/html/" + if [ "x$(BUILD_DOCS)" = "xno" ]; then touch "$(DEB_DESTDIR)/usr/share/qt4/doc/html/BUILT_WITH_NODOCS"; fi + +common-build-indep:: debian/stamp-makefile-build-docs + +debian/stamp-makefile-build-docs: + if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) docs; fi + touch $@ + +binary-predeb/libqt4-dev:: + sed -i -e 's/#PLATFORM_ARG#/$(TARGET_PLATFORM)/g' debian/$(cdbs_curpkg)/DEBIAN/postinst + +# Automatically install lintian overrides, stolen from debian-qt-kde.mk +$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%: + if test -e debian/$(cdbs_curpkg).lintian; then \ + install -p -D -m644 debian/$(cdbs_curpkg).lintian \ + debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \ + fi + +# Generate shlibs local files +$(patsubst %,binary-fixup/%,$(DEB_ALL_PACKAGES)) :: binary-fixup/%: binary-strip/% + if test -e debian/$(cdbs_curpkg)/DEBIAN/shlibs ; then \ + sed 's/>=[^)]*/= $(CURRENTVERSION)/' debian/$(cdbs_curpkg)/DEBIAN/shlibs >> debian/shlibs.local ;\ + fi + diff --git a/config.profiles/harmattan/source.lintian-overrides b/config.profiles/harmattan/source.lintian-overrides new file mode 100644 index 0000000..1835a30 --- /dev/null +++ b/config.profiles/harmattan/source.lintian-overrides @@ -0,0 +1,5 @@ +qt4-x11 source: changelog-should-mention-nmu +qt4-x11 source: native-package-with-dash-version +qt4-x11 source: source-nmu-has-incorrect-version-number +qt4-x11 source: virtual-package-depends-without-real-package-depends build-depends: libgl-dev +qt4-x11 source: virtual-package-depends-without-real-package-depends build-depends: libgl1 diff --git a/config.profiles/harmattan/source/format b/config.profiles/harmattan/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/config.profiles/harmattan/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/config.profiles/harmattan/tests/create_tests_xml b/config.profiles/harmattan/tests/create_tests_xml new file mode 100755 index 0000000..d6122bc --- /dev/null +++ b/config.profiles/harmattan/tests/create_tests_xml @@ -0,0 +1,174 @@ +#!/bin/sh + +############################################################################# +## +## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + + +set -e +#set -u + +xmlInstallDir="usr/share" + +testSuiteHeader="testsuite_header.txt" +testSuiteFooter="testsuite_footer.txt" +testSetTemplate="testset.txt" + + +#------------------------------------------------------------------------------- +#Parameters: $1 the project file where the tests are defined +#------------------------------------------------------------------------------- +create_test_xml() +{ + + mkdir -p "$installDir/$xmlInstallDir/$packageName" + xmlFile="$installDir/$xmlInstallDir/$packageName/tests.xml" + + + begin_test_suite $xmlFile + + for testApp in $(< "$installFile"); do + if file -i "$installDir/$testApp"|grep -e "application/x-executable" ; then + add_test_set "$testApp" "$xmlFile" + fi + done + + end_test_suite $xmlFile + + echo "$xmlInstallDir/$packageName/tests.xml" >> "$installFile" + +} + +#------------------------------------------------------------------------------- +#Parameters: $1 the xml output file' +#------------------------------------------------------------------------------- +begin_test_suite() +{ + optstr="/<suite/s;name=\"[^\"]*\";name=\"$packageName\";g" + template="$templateDir/$testSuiteHeader" + runsed $optstr $template > "$1" +} + +#Parameters: $1 the xml output file +end_test_suite() +{ + cat "$templateDir/$testSuiteFooter" >> "$1" +} + +#------------------------------------------------------------------------------- +#Parameters: $1 the name of the test application +#Parameters: $2 the xml output file +#------------------------------------------------------------------------------- +add_test_set() +{ + templateSetFile="$templateDir/$testSetTemplate" + testSuiteName=$(basename $1) + add_set_name "$testSuiteName" "$templateSetFile" |add_description "$testSuiteName" |add_case_name "$testSuiteName" |add_step "$1" >> "$2" +} + +add_set_name() +{ + optstr="/<set/s;name=\"[^\"]*\";name=\"${packageName}_$1\";g" + runsed "$optstr" "$2" +} + +add_case_name() +{ + optstr="/<case/s;name=\"[^\"]*\";name=\"$1\";g" + runsed "$optstr" "$2" +} + +add_description() +{ + optstr="s;<description>.*</description>;<description>${packageName}:$1</description>;g" + runsed "$optstr" "$2" +} + +add_step() +{ + if [ -n "$testCliOptions" ]; then + optstr="s;<step>.*</step>;<step>$1 $testCliOptions</step>;g" + else + optstr="s;<step>.*</step>;<step>$1</step>;g" + fi + runsed "$optstr" "$2" +} + +runsed() +{ + sedopt=$(echo $1) + cmd='sed -e "$sedopt" $2' + eval $cmd +} + + +#======= main ========= + +programName="$0" +usage="Usage: `basename $programName` -t <template_dir> -d <debian_dir> \ +-i <dir_where_tests_will_be_installed> <project_files>" + +if [ $# -le 0 ]; then + echo "$usage" 1>&2 + exit 1 +fi + +while [ $# -gt 0 ]; do + case "$1" in + -t) templateDir=$(cd "$2"; pwd) + shift + ;; + -i) installDir=$(cd "$2"; pwd) + shift + ;; + -p) installFile="$2" + packageName=$(basename "$installFile" ".install") + shift + ;; + -c) testCliOptions="$2" + shift + ;; + *) projFileList="$projFileList $1";; + esac + shift +done + + +create_test_xml diff --git a/config.profiles/harmattan/tests/libqt4-gui-tests.pro b/config.profiles/harmattan/tests/libqt4-gui-tests.pro new file mode 100644 index 0000000..d00f139 --- /dev/null +++ b/config.profiles/harmattan/tests/libqt4-gui-tests.pro @@ -0,0 +1,64 @@ +#Staging tests for gui +TEMPLATE = subdirs + +SUBDIRS += modeltest \ + qabstractbutton \ + qabstractitemmodel \ + qabstractprintdialog \ + qabstractproxymodel \ + qabstractslider \ + qabstractspinbox \ + qabstracttextdocumentlayout \ + qabstractvideobuffer \ + qabstractvideosurface \ + qaction \ + qfileiconprovider \ + qfocusframe \ + qfont \ + qfontmetrics \ + qformlayout \ + qgraphicslayout \ + qnetworkcachemetadata \ + qpaintengine \ + qpalette \ + qparallelanimationgroup \ + qpauseanimation \ + qpicture \ + qplaintextedit \ + qpointer \ + qprinterinfo \ + qprogressbar \ + qprogressdialog \ + qpropertyanimation \ + qradiobutton \ + qregexpvalidator \ + qscriptenginedebugger \ + qscrollarea \ + qscrollbar \ + qsharedpointer_and_qwidget \ + qsignalmapper \ + qslider \ + qsortfilterproxymodel \ + qspinbox \ + qstackedlayout \ + qstackedwidget \ + qstandarditem \ + qstandarditemmodel \ + qstatemachine \ + qstringlistmodel \ + qstyleoption \ + qsyntaxhighlighter \ + qtextblock \ + qtextcursor \ + qtextformat \ + qtextlist \ + qtextobject \ + qtextscriptengine \ + qtexttable \ + qtoolbox \ + qtoolbutton \ + qtreewidgetitemiterator \ + qundogroup \ + qundostack \ + qvideosurfaceformat \ + qwidgetaction diff --git a/config.profiles/harmattan/tests/maemo_tests.prf b/config.profiles/harmattan/tests/maemo_tests.prf new file mode 100644 index 0000000..1b87781 --- /dev/null +++ b/config.profiles/harmattan/tests/maemo_tests.prf @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + +load(qttest_p4) + +installtests.CONFIG = recursive +!contains(TEMPLATE, subdirs): for(install_set, INSTALLS) { + contains(install_set, target) { + installtests.commands += echo $${target.path}/$${TARGET} >> \$(QTM_TEST_INSTALL_FILE) ; + } else { + install_set_path=$$member($${install_set}.path) + installtests.commands += echo $${install_set_path} >> \$(QTM_TEST_INSTALL_FILE) ; + } +} + +QMAKE_EXTRA_TARGETS += installtests + +DEFINES -= $$find(DEFINES, SRCDIR.*) +DEFINES += SRCDIR=\\\"$${target.path}\\\" diff --git a/config.profiles/harmattan/tests/qt4-acceptance-tests.pro b/config.profiles/harmattan/tests/qt4-acceptance-tests.pro new file mode 100644 index 0000000..4549f7a --- /dev/null +++ b/config.profiles/harmattan/tests/qt4-acceptance-tests.pro @@ -0,0 +1,6 @@ +#Acceptance tests +TEMPLATE = subdirs +SUBDIRS += qdbusconnection \ + qhash \ + qlist \ + qmap diff --git a/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro b/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro new file mode 100644 index 0000000..bd218f5 --- /dev/null +++ b/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro @@ -0,0 +1,44 @@ +#Staging tests that require no data or style ibfo +TEMPLATE = subdirs +SUBDIRS += qdbusabstractadaptor \ + qdbusabstractinterface \ + qdbuscontext \ + qdbusinterface \ + qdbuslocalcalls \ + qdbusmetaobject \ + qdbusmetatype \ + qdbuspendingcall \ + qdbuspendingreply \ + qdbusreply \ + qdbusservicewatcher \ + qdbusthreading \ + qdbusxmlparser \ + qdebug \ + qeventloop \ + qmutexlocker \ + qnetworkaddressentry \ + qnetworkproxy \ + qnetworkrequest \ + qnetworkcookie \ + qnetworkcookiejar \ + qobjectrace \ + qpainterpathstroker \ + qpen \ + qpoint \ + qpolygon \ + qquaternion \ + qqueue \ + qrand \ + qreadlocker \ + qreadwritelock \ + qrect \ + qringbuffer \ + qscopedpointer \ + qscriptclass \ + qscriptcontextinfo \ + qscriptstring \ + qscriptvalueiterator \ + qsequentialanimationgroup \ + qset \ + qwaitcondition + diff --git a/config.profiles/harmattan/tests/tests.xml b/config.profiles/harmattan/tests/tests.xml new file mode 100644 index 0000000..e276bfa --- /dev/null +++ b/config.profiles/harmattan/tests/tests.xml @@ -0,0 +1,320 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<testdefinition version="1.0"> + <suite domain="Application framework" level="Component" name="qt4-acceptance-tests" type="Functional"> + <description /> + <set feature="qt" level="Component" name="acceptance_tst_qhash" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash</description> + <case level="Component" name="tst_qhash-insert1" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:insert1</description> + <step>/usr/tests/qt4/tst_qhash insert1</step> + </case> + <case level="Component" name="tst_qhash-erase" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:erase</description> + <step>/usr/tests/qt4/tst_qhash erase</step> + </case> + <case level="Component" name="tst_qhash-key" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:key</description> + <step>/usr/tests/qt4/tst_qhash key</step> + </case> + <case level="Component" name="tst_qhash-count" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:count</description> + <step>/usr/tests/qt4/tst_qhash count</step> + </case> + <case level="Component" name="tst_qhash-clear" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:clear</description> + <step>/usr/tests/qt4/tst_qhash clear</step> + </case> + <case level="Component" name="tst_qhash-empty" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:empty</description> + <step>/usr/tests/qt4/tst_qhash empty</step> + </case> + <case level="Component" name="tst_qhash-find" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:find</description> + <step>/usr/tests/qt4/tst_qhash find</step> + </case> + <case level="Component" name="tst_qhash-constFind" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:constFind</description> + <step>/usr/tests/qt4/tst_qhash constFind</step> + </case> + <case level="Component" name="tst_qhash-contains" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:contains</description> + <step>/usr/tests/qt4/tst_qhash contains</step> + </case> + <case level="Component" name="tst_qhash-take" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:take</description> + <step>/usr/tests/qt4/tst_qhash take</step> + </case> + <case level="Component" name="tst_qhash-operator_eq" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:operator_eq</description> + <step>/usr/tests/qt4/tst_qhash operator_eq</step> + </case> + <case level="Component" name="tst_qhash-rehash_isnt_quadratic" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:rehash_isnt_quadratic</description> + <step>/usr/tests/qt4/tst_qhash rehash_isnt_quadratic</step> + </case> + <case level="Component" name="tst_qhash-dont_need_default_constructor" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:dont_need_default_constructor</description> + <step>/usr/tests/qt4/tst_qhash dont_need_default_constructor</step> + </case> + <case level="Component" name="tst_qhash-qhash" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:qhash</description> + <step>/usr/tests/qt4/tst_qhash qhash</step> + </case> + <case level="Component" name="tst_qhash-qmultihash_specific" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:qmultihash_specific</description> + <step>/usr/tests/qt4/tst_qhash qmultihash_specific</step> + </case> + <case level="Component" name="tst_qhash-compare" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:compare</description> + <step>/usr/tests/qt4/tst_qhash compare</step> + </case> + <case level="Component" name="tst_qhash-compare2" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:compare2</description> + <step>/usr/tests/qt4/tst_qhash compare2</step> + </case> + <case level="Component" name="tst_qhash-iterators" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:iterators</description> + <step>/usr/tests/qt4/tst_qhash iterators</step> + </case> + <case level="Component" name="tst_qhash-keys_values_uniqueKeys" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:keys_values_uniqueKeys</description> + <step>/usr/tests/qt4/tst_qhash keys_values_uniqueKeys</step> + </case> + <case level="Component" name="tst_qhash-noNeedlessRehashes" type="Functional"> + <description>qt4-acceptance-tests:tst_qhash:noNeedlessRehashes</description> + <step>/usr/tests/qt4/tst_qhash noNeedlessRehashes</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + <set feature="qt" level="Component" name="acceptance_tst_qdbusconnection" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection</description> + <case level="Component" name="tst_qdbusconnection-noConnection" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:noConnection</description> + <step>/usr/tests/qt4/tst_qdbusconnection noConnection</step> + </case> + <case level="Component" name="tst_qdbusconnection-connectToBus" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:connectToBus</description> + <step>/usr/tests/qt4/tst_qdbusconnection connectToBus</step> + </case> + <case level="Component" name="tst_qdbusconnection-connect" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:connect</description> + <step>/usr/tests/qt4/tst_qdbusconnection connect</step> + </case> + <case level="Component" name="tst_qdbusconnection-send" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:send</description> + <step>/usr/tests/qt4/tst_qdbusconnection send</step> + </case> + <case level="Component" name="tst_qdbusconnection-sendAsync" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:sendAsync</description> + <step>/usr/tests/qt4/tst_qdbusconnection sendAsync</step> + </case> + <case level="Component" name="tst_qdbusconnection-sendSignal" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:sendSignal</description> + <step>/usr/tests/qt4/tst_qdbusconnection sendSignal</step> + </case> + <case level="Component" name="tst_qdbusconnection-registerObject" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:registerObject</description> + <step>/usr/tests/qt4/tst_qdbusconnection registerObject</step> + </case> + <case level="Component" name="tst_qdbusconnection-registerObject2" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:registerObject2</description> + <step>/usr/tests/qt4/tst_qdbusconnection registerObject2</step> + </case> + <case level="Component" name="tst_qdbusconnection-registerQObjectChildren" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:registerQObjectChildren</description> + <step>/usr/tests/qt4/tst_qdbusconnection registerQObjectChildren</step> + </case> + <case level="Component" name="tst_qdbusconnection-callSelf" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:callSelf</description> + <step>/usr/tests/qt4/tst_qdbusconnection callSelf</step> + </case> + <case level="Component" name="tst_qdbusconnection-callSelfByAnotherName" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:callSelfByAnotherName</description> + <step>/usr/tests/qt4/tst_qdbusconnection callSelfByAnotherName</step> + </case> + <case level="Component" name="tst_qdbusconnection-multipleInterfacesInQObject" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:multipleInterfacesInQObject</description> + <step>/usr/tests/qt4/tst_qdbusconnection multipleInterfacesInQObject</step> + </case> + <case level="Component" name="tst_qdbusconnection-slotsWithLessParameters" type="Functional"> + <description>qt4-acceptance-tests:tst_qdbusconnection:slotsWithLessParameters</description> + <step>/usr/tests/qt4/tst_qdbusconnection slotsWithLessParameters</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + <set feature="qt" level="Component" name="acceptance_tst_qaction" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction</description> + <case level="Component" name="tst_qaction-getSetCheck" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:getSetCheck</description> + <step>/usr/tests/qt4/tst_qaction getSetCheck</step> + </case> + <case level="Component" name="tst_qaction-setText" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:setText</description> + <step>/usr/tests/qt4/tst_qaction setText</step> + </case> + <case level="Component" name="tst_qaction-setIconText" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:setIconText</description> + <step>/usr/tests/qt4/tst_qaction setIconText</step> + </case> + <case level="Component" name="tst_qaction-actionEvent" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:actionEvent</description> + <step>/usr/tests/qt4/tst_qaction actionEvent</step> + </case> + <case level="Component" name="tst_qaction-setStandardKeys" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:setStandardKeys</description> + <step>/usr/tests/qt4/tst_qaction setStandardKeys</step> + </case> + <case level="Component" name="tst_qaction-alternateShortcuts" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:alternateShortcuts</description> + <step>/usr/tests/qt4/tst_qaction alternateShortcuts</step> + </case> + <case level="Component" name="tst_qaction-enabledVisibleInteraction" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:enabledVisibleInteraction</description> + <step>/usr/tests/qt4/tst_qaction enabledVisibleInteraction</step> + </case> + <case level="Component" name="tst_qaction-task200823_tooltip" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:task200823_tooltip</description> + <step>/usr/tests/qt4/tst_qaction task200823_tooltip</step> + </case> + <case level="Component" name="tst_qaction-task229128TriggeredSignalWithoutActiongroup" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:task229128TriggeredSignalWithoutActiongroup</description> + <step>/usr/tests/qt4/tst_qaction task229128TriggeredSignalWithoutActiongroup</step> + </case> + <case level="Component" name="tst_qaction-task229128TriggeredSignalWhenInActiongroup" type="Functional"> + <description>qt4-acceptance-tests:tst_qaction:task229128TriggeredSignalWhenInActiongroup</description> + <step>/usr/tests/qt4/tst_qaction task229128TriggeredSignalWhenInActiongroup</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + <set feature="qt" level="Component" name="acceptance_tst_qlist" type="Functional"> + <description>qt4-acceptance-tests:tst_qlist</description> + <case level="Component" name="tst_qlist-length" type="Functional"> + <description>qt4-acceptance-tests:tst_qlist:length</description> + <step>/usr/tests/qt4/tst_qlist length</step> + </case> + <case level="Component" name="tst_qlist-lengthSignature" type="Functional"> + <description>qt4-acceptance-tests:tst_qlist:lengthSignature</description> + <step>/usr/tests/qt4/tst_qlist lengthSignature</step> + </case> + <case level="Component" name="tst_qlist-append" type="Functional"> + <description>qt4-acceptance-tests:tst_qlist:append</description> + <step>/usr/tests/qt4/tst_qlist append</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + <set feature="qt" level="Component" name="acceptance_tst_qgraphicslayout" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout</description> + <case level="Component" name="tst_qgraphicslayout-sizeHints" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:sizeHints</description> + <step>/usr/tests/qt4/tst_qgraphicslayout sizeHints</step> + </case> + <case level="Component" name="tst_qgraphicslayout-compressLayoutRequest" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:compressLayoutRequest</description> + <step>/usr/tests/qt4/tst_qgraphicslayout compressLayoutRequest</step> + </case> + <case level="Component" name="tst_qgraphicslayout-automaticReparenting" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:automaticReparenting</description> + <step>/usr/tests/qt4/tst_qgraphicslayout automaticReparenting</step> + </case> + <case level="Component" name="tst_qgraphicslayout-verifyActivate" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:verifyActivate</description> + <step>/usr/tests/qt4/tst_qgraphicslayout verifyActivate</step> + </case> + <case level="Component" name="tst_qgraphicslayout-constructors" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:constructors</description> + <step>/usr/tests/qt4/tst_qgraphicslayout constructors</step> + </case> + <case level="Component" name="tst_qgraphicslayout-alternativeLayoutItems" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:alternativeLayoutItems</description> + <step>/usr/tests/qt4/tst_qgraphicslayout alternativeLayoutItems</step> + </case> + <case level="Component" name="tst_qgraphicslayout-ownership" type="Functional"> + <description>qt4-acceptance-tests:tst_qgraphicslayout:ownership</description> + <step>/usr/tests/qt4/tst_qgraphicslayout ownership</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + <set feature="qt" level="Component" name="acceptance_tst_qmap" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap</description> + <case level="Component" name="tst_qmap-count" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:count</description> + <step>/usr/tests/qt4/tst_qmap count</step> + </case> + <case level="Component" name="tst_qmap-clear" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:clear</description> + <step>/usr/tests/qt4/tst_qmap clear</step> + </case> + <case level="Component" name="tst_qmap-beginEnd" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:beginEnd</description> + <step>/usr/tests/qt4/tst_qmap beginEnd</step> + </case> + <case level="Component" name="tst_qmap-key" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:key</description> + <step>/usr/tests/qt4/tst_qmap key</step> + </case> + <case level="Component" name="tst_qmap-operator_eq" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:operator_eq</description> + <step>/usr/tests/qt4/tst_qmap operator_eq</step> + </case> + <case level="Component" name="tst_qmap-empty" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:empty</description> + <step>/usr/tests/qt4/tst_qmap empty</step> + </case> + <case level="Component" name="tst_qmap-contains" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:contains</description> + <step>/usr/tests/qt4/tst_qmap contains</step> + </case> + <case level="Component" name="tst_qmap-find" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:find</description> + <step>/usr/tests/qt4/tst_qmap find</step> + </case> + <case level="Component" name="tst_qmap-constFind" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:constFind</description> + <step>/usr/tests/qt4/tst_qmap constFind</step> + </case> + <case level="Component" name="tst_qmap-lowerUpperBound" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:lowerUpperBound</description> + <step>/usr/tests/qt4/tst_qmap lowerUpperBound</step> + </case> + <case level="Component" name="tst_qmap-mergeCompare" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:mergeCompare</description> + <step>/usr/tests/qt4/tst_qmap mergeCompare</step> + </case> + <case level="Component" name="tst_qmap-take" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:take</description> + <step>/usr/tests/qt4/tst_qmap take</step> + </case> + <case level="Component" name="tst_qmap-iterators" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:iterators</description> + <step>/usr/tests/qt4/tst_qmap iterators</step> + </case> + <case level="Component" name="tst_qmap-keys_values_uniqueKeys" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:keys_values_uniqueKeys</description> + <step>/usr/tests/qt4/tst_qmap keys_values_uniqueKeys</step> + </case> + <case level="Component" name="tst_qmap-qmultimap_specific" type="Functional"> + <description>qt4-acceptance-tests:tst_qmap:qmultimap_specific</description> + <step>/usr/tests/qt4/tst_qmap qmultimap_specific</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> + </suite> +</testdefinition> diff --git a/config.profiles/harmattan/tests/testset.txt b/config.profiles/harmattan/tests/testset.txt new file mode 100644 index 0000000..62de93d --- /dev/null +++ b/config.profiles/harmattan/tests/testset.txt @@ -0,0 +1,11 @@ + <set feature="qt" level="Component" name="##Package-name_test_name##" type="Functional"> + <description>##Package-name:test_name##</description> + <case level="Component" name="##tst_foo##" type="Functional"> + <description>##Package-name:test_name##</description> + <step>##/usr/tests/qtm/tst_foo##</step> + </case> + <environments> + <scratchbox>true</scratchbox> + <hardware>true</hardware> + </environments> + </set> diff --git a/config.profiles/harmattan/tests/testsuite_footer.txt b/config.profiles/harmattan/tests/testsuite_footer.txt new file mode 100644 index 0000000..8c71c93 --- /dev/null +++ b/config.profiles/harmattan/tests/testsuite_footer.txt @@ -0,0 +1,2 @@ + </suite> +</testdefinition> diff --git a/config.profiles/harmattan/tests/testsuite_header.txt b/config.profiles/harmattan/tests/testsuite_header.txt new file mode 100644 index 0000000..4c57f76 --- /dev/null +++ b/config.profiles/harmattan/tests/testsuite_header.txt @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<testdefinition version="1.0"> + <suite domain="Application framework" level="Component" name="##Add your name here##" type="Functional"> + <description /> -- cgit v0.12 From 9c5aa419ba467ff2d59440bafe2ca82d1065afec Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 10 Mar 2011 10:59:20 +0200 Subject: Polish splitview implementation Remove calls to unnecessary methods. Remove unnecessary checks. Fix whitespace. Reviewed-by: Laszlo Agocs --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 90 +++++++++++-------------- 1 file changed, 40 insertions(+), 50 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 86cea60..af48a92 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -382,23 +382,19 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) return; } - QSymbianControl *symControl = static_cast<QSymbianControl*>(S60->splitViewLastWidget->effectiveWinId()); + QSymbianControl *symControl = static_cast<QSymbianControl*>(gv->effectiveWinId()); symControl->CancelLongTapTimer(); - const bool alwaysResize = (gv && gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); - QWidget *windowToMove = gv ? gv : symControl->widget(); - if (!S60->splitViewLastWidget->isWindow()) - windowToMove = S60->splitViewLastWidget->window(); + const bool alwaysResize = (gv->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff); + QWidget *windowToMove = gv->window(); - bool userResize = S60->splitViewLastWidget->testAttribute(Qt::WA_Resized); - bool userMove = windowToMove->testAttribute(Qt::WA_Moved); + bool userResize = gv->testAttribute(Qt::WA_Resized); - if (gv) - windowToMove->setUpdatesEnabled(false); + windowToMove->setUpdatesEnabled(false); - if (gv && !alwaysResize) { - disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); - if (gv && gv->scene()) { + if (!alwaysResize) { + if (gv->scene()) { + disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); QGraphicsItem *rootItem; foreach (QGraphicsItem *item, gv->scene()->items()) { if (!item->parentItem()) { @@ -418,12 +414,10 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) windowToMove->setWindowState(m_splitViewPreviousWindowStates); if (m_splitViewResizeBy) - S60->splitViewLastWidget->updateGeometry(); - if (gv) - windowToMove->setUpdatesEnabled(true); + gv->updateGeometry(); + windowToMove->setUpdatesEnabled(true); - S60->splitViewLastWidget->setAttribute(Qt::WA_Resized, userResize); //not a user resize - windowToMove->setAttribute(Qt::WA_Moved, userMove); //not a user move + gv->setAttribute(Qt::WA_Resized, userResize); //not a user resize m_splitViewResizeBy = 0; if (!keepInputWidget) { @@ -496,50 +490,46 @@ void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) int windowTop = widget->window()->pos().y(); const bool userResize = widget->testAttribute(Qt::WA_Resized); - const bool userMove = windowToMove->testAttribute(Qt::WA_Moved); QRect splitViewRect = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); - if (gv) { - // When resizing a window widget, it will lose its maximized window state. - // Native applications hide statuspane in splitview state, so lets move to - // fullscreen mode. This makes available area slightly bigger, which helps usability - // and greatly reduces event passing in orientation switch cases, - // as the statuspane size is not changing. + // When resizing a window widget, it will lose its maximized window state. + // Native applications hide statuspane in splitview state, so lets move to + // fullscreen mode. This makes available area slightly bigger, which helps usability + // and greatly reduces event passing in orientation switch cases, + // as the statuspane size is not changing. - if (!(windowToMove->windowState() & Qt::WindowFullScreen)) { - windowToMove->setWindowState( - (windowToMove->windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowFullScreen); - } + if (!(windowToMove->windowState() & Qt::WindowFullScreen)) { + windowToMove->setWindowState( + (windowToMove->windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowFullScreen); + } - if (alwaysResize) { - windowToMove->setUpdatesEnabled(false); - if (!moveWithinVisibleArea) - m_splitViewResizeBy = widget->height(); + if (alwaysResize) { + windowToMove->setUpdatesEnabled(false); + if (!moveWithinVisibleArea) + m_splitViewResizeBy = widget->height(); - windowTop = widget->geometry().top(); - widget->resize(widget->width(), splitViewRect.height() - windowTop); + windowTop = widget->geometry().top(); + widget->resize(widget->width(), splitViewRect.height() - windowTop); - if (gv && gv->scene()) { - const QRectF microFocusRect = gv->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF(); - gv->ensureVisible(microFocusRect); - } - windowToMove->setUpdatesEnabled(true); - } else { - if (!moveWithinVisibleArea) { - // Check if the widget contains cursorPositionChanged signal and connect to it. - const char *signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())).constData(); - int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal + 1); - if (index != -1) - connect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); - } - translateInputWidget(); + if (gv->scene()) { + const QRectF microFocusRect = gv->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF(); + gv->ensureVisible(microFocusRect); + } + windowToMove->setUpdatesEnabled(true); + } else { + if (!moveWithinVisibleArea) { + // Check if the widget contains cursorPositionChanged signal and connect to it. + const char *signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged())).constData(); + int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal + 1); + if (index != -1) + connect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); } + translateInputWidget(); } widget->setAttribute(Qt::WA_Resized, userResize); //not a user resize - windowToMove->setAttribute(Qt::WA_Moved, userMove); //not a user move } static QTextCharFormat qt_TCharFormat2QTextCharFormat(const TCharFormat &cFormat, bool validStyleColor) @@ -836,7 +826,7 @@ void QCoeFepInputContext::translateInputWidget() // New Y position should be ideally at the center of the splitview area. // If that would expose unpainted canvas, limit the tranformation to the visible scene bottom. - const qreal maxY = gv->sceneRect().bottom() - splitViewRect.bottom() + m_transformation.height(); + const qreal maxY = gv->sceneRect().bottom() - splitViewRect.bottom() + m_transformation.height(); qreal dy = -(qMin(maxY, (cursor.bottom() - vkbRect.top() / 2))); // Do not allow transform above screen top. -- cgit v0.12 From e1ce31e9ecf7e773895632fcf3087369a50c04f1 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Thu, 10 Mar 2011 11:22:05 +0200 Subject: Avoid image conversion in fromSymbianCFbsBitmap for certain formats. From now on the image data coming from CFbsBitmap will not be forced to RGB32 or ARGB32_Premultiplied in openvg. This allows copy-less creation and drawing of pixmaps not just from bitmaps with display mode EColor16MAP and EColor16MU, but also a few other modes, like EColor64K. Painting into such pixmaps or drawing them via the raster engine is potentially slower in such cases, which is now reflected in the fromSymbianCFbsBitmap documentation. Note that this patch has no effect on extended bitmaps (e.g. skin graphics), those must always be rasterized first regardless of the display mode. Task-number: QTBUG-18027 Reviewed-by: Jani Hautakangas --- src/gui/image/qpixmap_s60.cpp | 2 ++ src/openvg/qpaintengine_vg.cpp | 5 ++++- src/openvg/qvg_symbian.cpp | 23 ++++++++++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index ca5f133..fbdebf3 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -374,6 +374,8 @@ CFbsBitmap *QPixmap::toSymbianCFbsBitmap() const To be sure that QPixmap does not modify your original instance, you should make a copy of your \c CFbsBitmap before calling this function. If the CFbsBitmap is not valid this function will return a null QPixmap. + For performance reasons it is recommended to use a \a bitmap with a display + mode of EColor16MAP or EColor16MU whenever possible. \warning This function is only available on Symbian OS. diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index f0f198f..f1b3277 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -4018,6 +4018,8 @@ VGImageFormat qt_vg_image_to_vg_format(QImage::Format format) switch (format) { case QImage::Format_MonoLSB: return VG_BW_1; + case QImage::Format_Indexed8: + return VG_sL_8; case QImage::Format_ARGB32_Premultiplied: return VG_sARGB_8888_PRE; case QImage::Format_RGB32: @@ -4028,7 +4030,8 @@ VGImageFormat qt_vg_image_to_vg_format(QImage::Format format) return VG_sRGB_565; case QImage::Format_ARGB4444_Premultiplied: return VG_sARGB_4444; - default: break; + default: + break; } return VG_sARGB_8888; // XXX } diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 5eb64bd..405151d 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -150,6 +150,21 @@ void QVGPixmapData::releaseNativeImageHandle() } } +static inline bool conversionLessFormat(QImage::Format format) +{ + switch (format) { + case QImage::Format_RGB16: // EColor64K + case QImage::Format_RGB32: // EColor16MU + case QImage::Format_ARGB32: // EColor16MA + case QImage::Format_ARGB32_Premultiplied: // EColor16MAP + case QImage::Format_MonoLSB: // EGray2 + case QImage::Format_Indexed8: // EGray256, EColor256 + return true; + default: + return false; + } +} + void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) { if (type == QPixmapData::SgImage && pixmap) { @@ -178,9 +193,11 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) source = QVolatileImage(bitmap); // duplicates only, if possible if (source.isNull()) return; - // Here we may need to copy if the formats do not match. - // (e.g. for display modes other than EColor16MAP and EColor16MU) - source.ensureFormat(idealFormat(&source.imageRef(), Qt::AutoColor)); + if (!conversionLessFormat(source.format())) { + // Here we may need to copy if the formats do not match. + // (e.g. for display modes other than EColor16MAP and EColor16MU) + source.ensureFormat(idealFormat(&source.imageRef(), Qt::AutoColor)); + } recreate = true; } else if (type == QPixmapData::VolatileImage && pixmap) { QVolatileImage *img = static_cast<QVolatileImage *>(pixmap); -- cgit v0.12 From bbc6358d5259951e3f1ede41301d303bc10948ba Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Thu, 10 Mar 2011 11:58:24 +0100 Subject: Windows: Activate the context menu on tray icons when shown. Task-number: QTBUG-14807 Reviewed-by: Markus Goetz --- src/gui/util/qsystemtrayicon_win.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/util/qsystemtrayicon_win.cpp b/src/gui/util/qsystemtrayicon_win.cpp index 2b7935b..5a0e179 100644 --- a/src/gui/util/qsystemtrayicon_win.cpp +++ b/src/gui/util/qsystemtrayicon_win.cpp @@ -305,6 +305,7 @@ bool QSystemTrayIconSys::winEvent( MSG *m, long *result ) case WM_CONTEXTMENU: if (q->contextMenu()) { q->contextMenu()->popup(gpos); + q->contextMenu()->activateWindow(); } emit q->activated(QSystemTrayIcon::Context); break; -- cgit v0.12 From 1e2410b5e486344d86cf02888a978fcda94fe02a Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Wed, 16 Feb 2011 10:24:12 +0100 Subject: Objective-c prf may not override OBJECTIVE_CFLAGS settings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Morten Johan Sørvig --- mkspecs/common/gcc-base-macx.conf | 15 +++++++++++---- mkspecs/features/mac/objective_c.prf | 9 --------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/mkspecs/common/gcc-base-macx.conf b/mkspecs/common/gcc-base-macx.conf index 5c9a8a1..2894f86 100644 --- a/mkspecs/common/gcc-base-macx.conf +++ b/mkspecs/common/gcc-base-macx.conf @@ -24,10 +24,16 @@ QMAKE_CXXFLAGS_PPC += $$QMAKE_CFLAGS_PPC QMAKE_CXXFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64 QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2 -QMAKE_OBJECTIVE_CFLAGS_X86 += $$QMAKE_CFLAGS_X86 -QMAKE_OBJECTIVE_CFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64 -QMAKE_OBJECTIVE_CFLAGS_PPC += $$QMAKE_CFLAGS_PPC -QMAKE_OBJECTIVE_CFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64 +QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS +QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS +QMAKE_OBJECTIVE_CFLAGS_X86 = $$QMAKE_CFLAGS_X86 +QMAKE_OBJECTIVE_CFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64 +QMAKE_OBJECTIVE_CFLAGS_PPC = $$QMAKE_CFLAGS_PPC +QMAKE_OBJECTIVE_CFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64 QMAKE_LFLAGS_X86 += $$QMAKE_CFLAGS_X86 QMAKE_LFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64 @@ -41,3 +47,4 @@ QMAKE_LFLAGS_INCREMENTAL += -undefined suppress -flat_namespace QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE} QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE} QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE} + diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf index ca693ba..0f25f41 100644 --- a/mkspecs/features/mac/objective_c.prf +++ b/mkspecs/features/mac/objective_c.prf @@ -9,15 +9,6 @@ for(source, SOURCES) { isEmpty(QMAKE_OBJECTIVE_CC):QMAKE_OBJECTIVE_CC = $$QMAKE_CC -QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS -QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG -QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -QMAKE_OBJECTIVE_CFLAGS_X86 = $$QMAKE_CFLAGS_X86 -QMAKE_OBJECTIVE_CFLAGS_PPC = $$QMAKE_CFLAGS_PPC -QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS - OBJECTIVE_C_OBJECTS_DIR = $$OBJECTS_DIR isEmpty(OBJECTIVE_C_OBJECTS_DIR):OBJECTIVE_C_OBJECTS_DIR = . isEmpty(QMAKE_EXT_OBJECTIVE_C):QMAKE_EXT_OBJECTIVE_C = .mm .m -- cgit v0.12 From bf1eb9a98bedae2c1b261ed4d7d92d4a1dbe28e3 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Fri, 4 Mar 2011 14:11:53 +0100 Subject: Build JavaScriptCore also under unusual platform combination. Reviewed-by: Jedrzej Nowacki Reviewed-by: Simon Hausmann --- src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h index 5abe9a1..cb4a963 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h @@ -635,6 +635,9 @@ #define ENABLE_REPAINT_THROTTLING 1 #define HAVE_READLINE 1 #define WTF_PLATFORM_CF 1 +#endif + +#if OS(IPHONE_OS) && !PLATFORM(QT) #define WTF_USE_PTHREADS 1 #define HAVE_PTHREAD_RWLOCK 1 #endif -- cgit v0.12 From c84d09e1c5dd8fc3e989a07372abba8ed589ec67 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Mon, 7 Mar 2011 15:24:42 +0100 Subject: Build QProcess on platforms that don't have _NSGetEnviron MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/corelib/io/qprocess.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index a44c1e1..e11cef9 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -2232,10 +2232,10 @@ bool QProcess::startDetached(const QString &program) } QT_BEGIN_INCLUDE_NAMESPACE -#ifdef Q_OS_MAC +#if defined(Q_OS_MAC) && !defined(QT_NO_CORESERVICES) # include <crt_externs.h> # define environ (*_NSGetEnviron()) -#elif defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) +#elif defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) || (defined(Q_OS_MAC) && defined(QT_NO_CORESERVICES)) static char *qt_empty_environ[] = { 0 }; #define environ qt_empty_environ #elif !defined(Q_OS_WIN) -- cgit v0.12 From 177f6ec7a92e6108491a040e714485d840a40c71 Mon Sep 17 00:00:00 2001 From: Liang Qi <liang.qi@nokia.com> Date: Thu, 10 Mar 2011 13:20:39 +0100 Subject: Get the number of cores from HAL on Symbian. Task-number: QTBUG-2199 Reviewed-by: Shane Kearns --- src/corelib/thread/qthread_unix.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 5177339..9bfd85a 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -54,6 +54,11 @@ #include <private/qeventdispatcher_unix_p.h> #endif +#ifdef Q_OS_SYMBIAN +#include <hal.h> +#include <hal_data.h> +#endif + #include "qthreadstorage.h" #include "qthread_p.h" @@ -63,6 +68,12 @@ #include <sched.h> #include <errno.h> +// You only find these enumerations on Symbian^3 onwards, so we need to provide our own +// to remain compatible with older releases. They won't be called by pre-Sym^3 SDKs. + +// HALData::ENumCpus +#define QT_HALData_ENumCpus 119 + #ifdef Q_OS_BSD4 #include <sys/sysctl.h> #endif @@ -422,8 +433,20 @@ int QThread::idealThreadCount() // as of aug 2008 Integrity only supports one single core CPU cores = 1; #elif defined(Q_OS_SYMBIAN) - // ### TODO - Get the number of cores from HAL? when multicore architectures (SMP) are supported - cores = 1; + if (QSysInfo::symbianVersion() >= QSysInfo::SV_SF_3) { + TInt inumcpus; + TInt err; + err = HAL::Get(QT_HALData_ENumCpus, inumcpus); + if (err != KErrNone) { + cores = 1; + } else if ( inumcpus <= 0 ) { + cores = 1; + } else { + cores = inumcpus; + } + } else { + cores = 1; + } #elif defined(Q_OS_VXWORKS) // VxWorks # if defined(QT_VXWORKS_HAS_CPUSET) -- cgit v0.12 From 3e2db2ed3c8f12534871cc1fb014210b471d55cf Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Thu, 10 Mar 2011 13:30:37 +0100 Subject: tst_qnetworkreply: fix MiniHttpServer crash Reviewed-by: Markus Goetz --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 93e3051..a7e6f9f 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -498,7 +498,6 @@ public slots: if (doClose && client->bytesToWrite() == 0) { client->disconnectFromHost(); disconnect(client, 0, this, 0); - client = 0; } } }; -- cgit v0.12 From 096eed1745d78ae8377f0231871100fd5ba6a78e Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Thu, 10 Mar 2011 13:31:36 +0100 Subject: QNAM HTTP: Pair channels with requests at a later state. Connect a new channel only when there is no one currently available. Only pair the request with the channel once we know if it got connected or not. This leads to faster sending on requests as we reuse already connected channels that became free in the meanwhile. Task-number: QTBUG-17084 Reviewed-by: Markus Goetz Reviewed-by: Peter Hartmann --- src/network/access/qhttpnetworkconnection.cpp | 37 ++++++++++++---------- src/network/access/qhttpnetworkconnection_p.h | 2 +- .../access/qhttpnetworkconnectionchannel.cpp | 33 +++++++++++++++---- 3 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 35c3a67..29ae5b0 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -487,7 +487,7 @@ void QHttpNetworkConnectionPrivate::requeueRequest(const HttpMessagePair &pair) QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection); } -void QHttpNetworkConnectionPrivate::dequeueAndSendRequest(QAbstractSocket *socket) +bool QHttpNetworkConnectionPrivate::dequeueRequest(QAbstractSocket *socket) { Q_ASSERT(socket); @@ -500,8 +500,7 @@ void QHttpNetworkConnectionPrivate::dequeueAndSendRequest(QAbstractSocket *socke prepareRequest(messagePair); channels[i].request = messagePair.first; channels[i].reply = messagePair.second; - channels[i].sendRequest(); - return; + return true; } if (!lowPriorityQueue.isEmpty()) { @@ -511,9 +510,9 @@ void QHttpNetworkConnectionPrivate::dequeueAndSendRequest(QAbstractSocket *socke prepareRequest(messagePair); channels[i].request = messagePair.first; channels[i].reply = messagePair.second; - channels[i].sendRequest(); - return; + return true; } + return false; } // this is called from _q_startNextRequest and when a request has been sent down a socket from the channel @@ -784,17 +783,8 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() // try to get a free AND connected socket for (int i = 0; i < channelCount; ++i) { if (!channels[i].reply && !channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) { - dequeueAndSendRequest(channels[i].socket); - } - } - - // return fast if there is nothing to do - if (highPriorityQueue.isEmpty() && lowPriorityQueue.isEmpty()) - return; - // try to get a free unconnected socket - for (int i = 0; i < channelCount; ++i) { - if (!channels[i].reply && !channels[i].isSocketBusy()) { - dequeueAndSendRequest(channels[i].socket); + if (dequeueRequest(channels[i].socket)) + channels[i].sendRequest(); } } @@ -811,6 +801,21 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() for (int i = 0; i < channelCount; i++) if (channels[i].socket->state() == QAbstractSocket::ConnectedState) fillPipeline(channels[i].socket); + + // If there is not already any connected channels we need to connect a new one. + // We do not pair the channel with the request until we know if it is + // connected or not. This is to reuse connected channels before we connect new once. + int queuedRequest = highPriorityQueue.count() + lowPriorityQueue.count(); + for (int i = 0; i < channelCount; ++i) { + if (channels[i].socket->state() == QAbstractSocket::ConnectingState) + queuedRequest--; + if ( queuedRequest <=0 ) + break; + if (!channels[i].reply && !channels[i].isSocketBusy() && (channels[i].socket->state() == QAbstractSocket::UnconnectedState)) { + channels[i].ensureConnection(); + queuedRequest--; + } + } } diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index d4748c1..874ea22 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -161,7 +161,7 @@ public: QHttpNetworkReply *queueRequest(const QHttpNetworkRequest &request); void requeueRequest(const HttpMessagePair &pair); // e.g. after pipeline broke - void dequeueAndSendRequest(QAbstractSocket *socket); + bool dequeueRequest(QAbstractSocket *socket); void prepareRequest(HttpMessagePair &request); void fillPipeline(QAbstractSocket *socket); diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 60094b0..23dd518 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -502,6 +502,7 @@ void QHttpNetworkConnectionChannel::_q_receiveReply() // called when unexpectedly reading a -1 or when data is expected but socket is closed void QHttpNetworkConnectionChannel::handleUnexpectedEOF() { + Q_ASSERT(reply); if (reconnectAttempts <= 0) { // too many errors reading/receiving/parsing the status, close the socket and emit error requeueCurrentlyPipelinedRequests(); @@ -524,7 +525,8 @@ bool QHttpNetworkConnectionChannel::ensureConnection() // resend this request after we receive the disconnected signal if (socketState == QAbstractSocket::ClosingState) { - resendCurrent = true; + if (reply) + resendCurrent = true; return false; } @@ -646,6 +648,7 @@ bool QHttpNetworkConnectionChannel::expand(bool dataComplete) void QHttpNetworkConnectionChannel::allDone() { + Q_ASSERT(reply); #ifndef QT_NO_COMPRESS // expand the whole data. if (reply->d_func()->expectContent() && reply->d_func()->autoDecompress && !reply->d_func()->streamEnd) { @@ -741,6 +744,7 @@ void QHttpNetworkConnectionChannel::allDone() void QHttpNetworkConnectionChannel::detectPipeliningSupport() { + Q_ASSERT(reply); // detect HTTP Pipelining support QByteArray serverHeaderField; if ( @@ -824,6 +828,7 @@ void QHttpNetworkConnectionChannel::handleStatus() bool QHttpNetworkConnectionChannel::resetUploadData() { + Q_ASSERT(reply); QNonContiguousByteDevice* uploadByteDevice = request.uploadByteDevice(); if (!uploadByteDevice) return true; @@ -881,7 +886,8 @@ void QHttpNetworkConnectionChannel::closeAndResendCurrentRequest() { requeueCurrentlyPipelinedRequests(); close(); - resendCurrent = true; + if (reply) + resendCurrent = true; if (qobject_cast<QHttpNetworkConnection*>(connection)) QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); } @@ -983,10 +989,10 @@ void QHttpNetworkConnectionChannel::_q_connected() //channels[i].reconnectAttempts = 2; if (!pendingEncrypt) { state = QHttpNetworkConnectionChannel::IdleState; + if (!reply) + connection->d_func()->dequeueRequest(socket); if (reply) sendRequest(); - else - close(); } } @@ -1040,6 +1046,9 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket QPointer<QHttpNetworkConnection> that = connection; QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString()); + // Need to dequeu the request so that we can emit the error. + if (!reply) + connection->d_func()->dequeueRequest(socket); if (reply) { reply->d_func()->errorString = errorString; emit reply->finishedWithError(errorCode, errorString); @@ -1054,7 +1063,11 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket #ifndef QT_NO_NETWORKPROXY void QHttpNetworkConnectionChannel::_q_proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator* auth) { - connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth); + // Need to dequeue the request before we can emit the error. + if (!reply) + connection->d_func()->dequeueRequest(socket); + if (reply) + connection->d_func()->emitProxyAuthenticationRequired(this, proxy, auth); } #endif @@ -1070,7 +1083,10 @@ void QHttpNetworkConnectionChannel::_q_encrypted() return; // ### error state = QHttpNetworkConnectionChannel::IdleState; pendingEncrypt = false; - sendRequest(); + if (!reply) + connection->d_func()->dequeueRequest(socket); + if (reply) + sendRequest(); } void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) @@ -1081,7 +1097,10 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors) // Also pause the connection because socket notifiers may fire while an user // dialog is displaying connection->d_func()->pauseConnection(); - emit reply->sslErrors(errors); + if (pendingEncrypt && !reply) + connection->d_func()->dequeueRequest(socket); + if (reply) + emit reply->sslErrors(errors); connection->d_func()->resumeConnection(); } -- cgit v0.12 From d4bfaafbd7dc59f971c1abe67e8245163ca39132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= <christian.stromme@nokia.com> Date: Thu, 10 Mar 2011 13:38:14 +0100 Subject: Configuring a static Qt build did not exclude WebKit if the -webkit option was given. Since the script only checked the value of canBuildWebKit when CFG_WEBKIT was set to "auto", a static WebKit build was still possible, this again resulted in build (linking) errors later in the build process. Note: The changes in this patch means that -static will take precedence over -webkit. Reviewed-by: Simon Hausmann --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index cddea86..a542314 100755 --- a/configure +++ b/configure @@ -7479,7 +7479,7 @@ else QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_SVG" fi -if [ "$CFG_WEBKIT" = "auto" ]; then +if [ "$CFG_WEBKIT" != "no" ]; then CFG_WEBKIT="$canBuildWebKit" fi -- cgit v0.12 From 4500aa5227f75c3f10f82e5e5b452eb6bee386ae Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Thu, 10 Mar 2011 14:15:09 +0100 Subject: Fix corner of scroll area so it is stylable on Mac. Task-number: QTBUG-13055 Reviewed-by: Olivier Goffart --- src/gui/styles/qmacstyle_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm index ac05789..f2ad782 100644 --- a/src/gui/styles/qmacstyle_mac.mm +++ b/src/gui/styles/qmacstyle_mac.mm @@ -3084,7 +3084,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai } break; case PE_PanelScrollAreaCorner: { - const QBrush brush(qApp->palette().brush(QPalette::Base)); + const QBrush brush(opt->palette().brush(QPalette::Base)); p->fillRect(opt->rect, brush); p->setPen(QPen(QColor(217, 217, 217))); p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); -- cgit v0.12 From e250660cced1f0bcb16494c23277f9205833ec03 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Mon, 18 Oct 2010 09:49:18 +0200 Subject: Add proof-of-concept UIKit based lighthouse platform. See the README in the uikit platform plugin for details. --- mkspecs/qws/macx-iphonedevice-g++/Info.plist.lib | 18 + mkspecs/qws/macx-iphonedevice-g++/qmake.conf | 44 ++ mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h | 97 +++++ .../qws/macx-iphonesimulator-g++/Info.plist.lib | 18 + mkspecs/qws/macx-iphonesimulator-g++/qmake.conf | 45 ++ .../qws/macx-iphonesimulator-g++/qplatformdefs.h | 97 +++++ src/plugins/platforms/uikit/README | 45 ++ .../platforms/uikit/examples/qmltest/main.mm | 33 ++ .../platforms/uikit/examples/qmltest/qml/main.qml | 112 +++++ .../moc_qmlapplicationviewer.cpp | 69 ++++ .../qmlapplicationviewer/qmlapplicationviewer.cpp | 155 +++++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 39 ++ .../uikit/examples/qmltest/qmltest-Info.plist | 28 ++ .../qmltest/qmltest.xcodeproj/project.pbxproj | 455 +++++++++++++++++++++ .../uikit/examples/qmltest/qmltest_Prefix.pch | 8 + src/plugins/platforms/uikit/main.mm | 74 ++++ src/plugins/platforms/uikit/quikiteventloop.h | 68 +++ src/plugins/platforms/uikit/quikiteventloop.mm | 158 +++++++ src/plugins/platforms/uikit/quikitintegration.h | 72 ++++ src/plugins/platforms/uikit/quikitintegration.mm | 104 +++++ src/plugins/platforms/uikit/quikitscreen.h | 75 ++++ src/plugins/platforms/uikit/quikitscreen.mm | 81 ++++ src/plugins/platforms/uikit/quikitwindow.h | 70 ++++ src/plugins/platforms/uikit/quikitwindow.mm | 88 ++++ src/plugins/platforms/uikit/quikitwindowsurface.h | 83 ++++ src/plugins/platforms/uikit/quikitwindowsurface.mm | 242 +++++++++++ src/plugins/platforms/uikit/uikit.pro | 23 ++ 27 files changed, 2401 insertions(+) create mode 100644 mkspecs/qws/macx-iphonedevice-g++/Info.plist.lib create mode 100644 mkspecs/qws/macx-iphonedevice-g++/qmake.conf create mode 100644 mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h create mode 100644 mkspecs/qws/macx-iphonesimulator-g++/Info.plist.lib create mode 100644 mkspecs/qws/macx-iphonesimulator-g++/qmake.conf create mode 100644 mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h create mode 100644 src/plugins/platforms/uikit/README create mode 100644 src/plugins/platforms/uikit/examples/qmltest/main.mm create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qml/main.qml create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist create mode 100755 src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj create mode 100644 src/plugins/platforms/uikit/examples/qmltest/qmltest_Prefix.pch create mode 100644 src/plugins/platforms/uikit/main.mm create mode 100644 src/plugins/platforms/uikit/quikiteventloop.h create mode 100644 src/plugins/platforms/uikit/quikiteventloop.mm create mode 100644 src/plugins/platforms/uikit/quikitintegration.h create mode 100644 src/plugins/platforms/uikit/quikitintegration.mm create mode 100644 src/plugins/platforms/uikit/quikitscreen.h create mode 100644 src/plugins/platforms/uikit/quikitscreen.mm create mode 100644 src/plugins/platforms/uikit/quikitwindow.h create mode 100644 src/plugins/platforms/uikit/quikitwindow.mm create mode 100644 src/plugins/platforms/uikit/quikitwindowsurface.h create mode 100644 src/plugins/platforms/uikit/quikitwindowsurface.mm create mode 100644 src/plugins/platforms/uikit/uikit.pro diff --git a/mkspecs/qws/macx-iphonedevice-g++/Info.plist.lib b/mkspecs/qws/macx-iphonedevice-g++/Info.plist.lib new file mode 100644 index 0000000..97609ed --- /dev/null +++ b/mkspecs/qws/macx-iphonedevice-g++/Info.plist.lib @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> +<plist version="0.9"> +<dict> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>@SHORT_VERSION@</string> + <key>CFBundleGetInfoString</key> + <string>Created by Qt/QMake</string> + <key>CFBundleSignature</key> + <string>@TYPEINFO@</string> + <key>CFBundleExecutable</key> + <string>@LIBRARY@</string> + <key>NOTE</key> + <string>Please, do NOT change this file -- It was generated by Qt/QMake.</string> +</dict> +</plist> diff --git a/mkspecs/qws/macx-iphonedevice-g++/qmake.conf b/mkspecs/qws/macx-iphonedevice-g++/qmake.conf new file mode 100644 index 0000000..2cef3df --- /dev/null +++ b/mkspecs/qws/macx-iphonedevice-g++/qmake.conf @@ -0,0 +1,44 @@ +# +# qmake configuration for iphone-device-g++ +# +include(../../common/mac.conf) +include(../../common/g++-macx.conf) + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +# Do not compile a few things +DEFINES += QT_NO_AUDIO_BACKEND QT_NO_NETWORKPROXY QT_NO_FILESYSTEMWATCHER + +# You may need to change this to point to the iOS SDK you want to use. +QMAKE_IOS_DEV_PATH = /Developer/Platforms/iPhoneOS.platform/Developer +QMAKE_IOS_SDK = $$QMAKE_IOS_DEV_PATH/SDKs/iPhoneOS4.2.sdk +DEFINES += __IPHONE_OS_VERSION_MIN_REQUIRED=40200 + +#clear +QMAKE_MACOSX_DEPLOYMENT_TARGET = + +# TARGET_PLATFORM = ios +QMAKE_CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 +QMAKE_CXX = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 +QMAKE_LINK = $$QMAKE_CXX +QMAKE_LINK_SHLIB = $$QMAKE_CXX + +QMAKE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 -gdwarf-2 +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_OBJECTIVE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch +QMAKE_LFLAGS += -arch armv7 -marm -miphoneos-version-min=4.2 -Wl,-syslibroot,$$QMAKE_IOS_SDK + +QMAKE_INCDIR_OPENGL = +QMAKE_LIBS_OPENGL = +QMAKE_LIBS_OPENGL_QT = + +#QMAKE_RESOURCE = +QMAKE_FIX_RPATH = $$QMAKE_IOS_DEV_PATH/usr/bin/install_name_tool -id +QMAKE_AR = $$QMAKE_IOS_DEV_PATH/usr/bin/ar cq +QMAKE_RANLIB = $$QMAKE_IOS_DEV_PATH/usr/bin/ranlib -s + +load(qt_config) diff --git a/mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h b/mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h new file mode 100644 index 0000000..425fda3 --- /dev/null +++ b/mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +// Get Qt defines/settings + +#include "qglobal.h" + +// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs + +#include <unistd.h> + + +// We are hot - unistd.h should have turned on the specific APIs we requested + + +#include <pthread.h> +#include <dirent.h> +#include <fcntl.h> +#include <grp.h> +#include <pwd.h> +#include <signal.h> +#define QT_NO_LIBRARY_UNLOAD + +#include <sys/types.h> +#include <sys/ioctl.h> +#include <sys/ipc.h> +#include <sys/time.h> +#include <sys/shm.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <netinet/in.h> +#ifndef QT_NO_IPV6IFNAME +#include <net/if.h> +#endif + +#include "../../common/posix/qplatformdefs.h" + +#undef QT_OPEN_LARGEFILE +#undef QT_SOCKLEN_T +#undef QT_SIGNAL_IGNORE + +#define QT_OPEN_LARGEFILE 0 + +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) +#define QT_SOCKLEN_T socklen_t +#else +#define QT_SOCKLEN_T int +#endif + +#define QT_SIGNAL_IGNORE (void (*)(int))1 + +#define QT_SNPRINTF ::snprintf +#define QT_VSNPRINTF ::vsnprintf + +#endif // QPLATFORMDEFS_H diff --git a/mkspecs/qws/macx-iphonesimulator-g++/Info.plist.lib b/mkspecs/qws/macx-iphonesimulator-g++/Info.plist.lib new file mode 100644 index 0000000..97609ed --- /dev/null +++ b/mkspecs/qws/macx-iphonesimulator-g++/Info.plist.lib @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> +<plist version="0.9"> +<dict> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>@SHORT_VERSION@</string> + <key>CFBundleGetInfoString</key> + <string>Created by Qt/QMake</string> + <key>CFBundleSignature</key> + <string>@TYPEINFO@</string> + <key>CFBundleExecutable</key> + <string>@LIBRARY@</string> + <key>NOTE</key> + <string>Please, do NOT change this file -- It was generated by Qt/QMake.</string> +</dict> +</plist> diff --git a/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf b/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf new file mode 100644 index 0000000..9a06857 --- /dev/null +++ b/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf @@ -0,0 +1,45 @@ +# +# qmake configuration for macx-g++ +# +include(../../common/mac.conf) +include(../../common/g++-macx.conf) + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +# Do not compile a few things +DEFINES += QT_NO_AUDIO_BACKEND QT_NO_NETWORKPROXY QT_NO_FILESYSTEMWATCHER + +# You may need to change this to point to the iOS SDK you want to use. +QMAKE_IOS_DEV_PATH = /Developer/Platforms/iPhoneSimulator.platform/Developer +QMAKE_IOS_SDK = $$QMAKE_IOS_DEV_PATH/SDKs/iPhoneSimulator4.2.sdk +DEFINES += __IPHONE_OS_VERSION_MIN_REQUIRED=40200 +#clear +QMAKE_MACOSX_DEPLOYMENT_TARGET = + +# TARGET_PLATFORM = ios +QMAKE_CC = /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 +QMAKE_CXX = /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 +QMAKE_LINK = $$QMAKE_CXX +QMAKE_LINK_SHLIB = $$QMAKE_CXX + +QMAKE_CFLAGS += -arch i386 -isysroot $$QMAKE_IOS_SDK +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_OBJECTIVE_CFLAGS += -arch i386 -isysroot $$QMAKE_IOS_SDK -fobjc-abi-version=2 -fobjc-legacy-dispatch +QMAKE_LFLAGS += -arch i386 -Wl,-syslibroot,$$QMAKE_IOS_SDK + +QMAKE_INCDIR_OPENGL = +QMAKE_LIBS_OPENGL = +QMAKE_LIBS_OPENGL_QT = + +#QMAKE_RESOURCE = +QMAKE_FIX_RPATH = $$QMAKE_IOS_DEV_PATH/usr/bin/install_name_tool -id +QMAKE_AR = $$QMAKE_IOS_DEV_PATH/usr/bin/ar cq +QMAKE_RANLIB = $$QMAKE_IOS_DEV_PATH/usr/bin/ranlib -s + +load(qt_config) + +QMAKE_OBJECTIVE_CFLAGS_X86 += -arch i386 -isysroot $$QMAKE_IOS_SDK -fobjc-abi-version=2 -fobjc-legacy-dispatch diff --git a/mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h b/mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h new file mode 100644 index 0000000..425fda3 --- /dev/null +++ b/mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +// Get Qt defines/settings + +#include "qglobal.h" + +// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs + +#include <unistd.h> + + +// We are hot - unistd.h should have turned on the specific APIs we requested + + +#include <pthread.h> +#include <dirent.h> +#include <fcntl.h> +#include <grp.h> +#include <pwd.h> +#include <signal.h> +#define QT_NO_LIBRARY_UNLOAD + +#include <sys/types.h> +#include <sys/ioctl.h> +#include <sys/ipc.h> +#include <sys/time.h> +#include <sys/shm.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <netinet/in.h> +#ifndef QT_NO_IPV6IFNAME +#include <net/if.h> +#endif + +#include "../../common/posix/qplatformdefs.h" + +#undef QT_OPEN_LARGEFILE +#undef QT_SOCKLEN_T +#undef QT_SIGNAL_IGNORE + +#define QT_OPEN_LARGEFILE 0 + +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) +#define QT_SOCKLEN_T socklen_t +#else +#define QT_SOCKLEN_T int +#endif + +#define QT_SIGNAL_IGNORE (void (*)(int))1 + +#define QT_SNPRINTF ::snprintf +#define QT_VSNPRINTF ::vsnprintf + +#endif // QPLATFORMDEFS_H diff --git a/src/plugins/platforms/uikit/README b/src/plugins/platforms/uikit/README new file mode 100644 index 0000000..19ec83f --- /dev/null +++ b/src/plugins/platforms/uikit/README @@ -0,0 +1,45 @@ +This is a proof-of-concept implemenation of a UIKit based +QPA plugin. Note that this is completely unsupported, and it is probable +that many parts of QtCore and other Qt Modules don't work properly. + +1) Build Qt + +The example Xcode project in the examples subdirectory requires that you do shadow +builds of Qt in qt-lighthouse-ios-simulator and qt-lighthouse-ios-device directories +parallel to the sources. To build for simulator make sure that both the Simulator +configuration *and* the simulator specific target are active. To build for device +make sure that both the Device configuration *and* the device specific target are +active. + +The setup is configured to use the iOS 4.2 SDKs, you might want to edit the mkspecs +to fit your need. + +After configuring and building Qt you need to also build src/plugins/platforms/uikit. + +Simulator: +---------- +configure -qpa -xplatform qws/macx-iphonesimulator-g++ -arch i386 -developer-build -no-accessibility -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations + +Device: +------- +configure -qpa -xplatform qws/macx-iphonedevice-g++ -arch armv7 -developer-build -no-accessibility -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations + +2) XCode setup: +- there are examples in the examples subdirectory of the platform plugin +- to create something fresh do something like: + - Xcode: Create a "View-based Appplication" + - remove the nibs and view controller and app controller files + - remove the reference to "Main nib file" from plist file + - create a main.mm like in the examples + - add the qmlapplicationviewer sources to your project (including the moc_*.h) + (best to link, not copy), the code for this is from the Qt Creator + mobile Qt Quick application template + - Add the Qt .a libraries, uikit platform plugin and libz (v1.2.3) to Frameworks + - add "$(SRCROOT)/../../../../qt-lighthouse-ios-device/include" (or -simulator) + to the include search paths. + - add "$(SRCROOT)/../qmltest" to the include search path if you didn't copy but + linked to the qmlapplicationviewer + - for device set the architecture to armv7 only + +3) Done: Build and Run. + diff --git a/src/plugins/platforms/uikit/examples/qmltest/main.mm b/src/plugins/platforms/uikit/examples/qmltest/main.mm new file mode 100644 index 0000000..d90be56 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/main.mm @@ -0,0 +1,33 @@ +// +// main.m +// qmltest +// +// Created by Eike Troll on 18.02.11. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import <UIKit/UIKit.h> + +#include "qmlapplicationviewer/qmlapplicationviewer.h" + +#include <QtGui/QApplication> +#include <QtCore/QtPlugin> + +Q_IMPORT_PLUGIN(UIKit) + +int main(int argc, char *argv[]) { + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + setenv("QT_QPA_PLATFORM","uikit",1); + + QApplication app(argc, argv); + QmlApplicationViewer viewer; + viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; + viewer.setMainQmlFile(QString::fromUtf8([[resourcePath stringByAppendingPathComponent:@"qml/main.qml"] UTF8String])); + viewer.showMaximized(); + int retVal = app.exec(); + [pool release]; + return retVal; +} diff --git a/src/plugins/platforms/uikit/examples/qmltest/qml/main.qml b/src/plugins/platforms/uikit/examples/qmltest/qml/main.qml new file mode 100644 index 0000000..889a6d0 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qml/main.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: box + width: 350; height: 250 + + Rectangle { + id: redSquare + width: 80; height: 80 + anchors.top: parent.top; anchors.left: parent.left; anchors.margins: 10 + color: "red" + + Text { text: "Click"; font.pixelSize: 16; anchors.centerIn: parent } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + + onEntered: info.text = 'Entered' + onExited: info.text = 'Exited (pressed=' + pressed + ')' + + onPressed: { + info.text = 'Pressed (button=' + (mouse.button == Qt.RightButton ? 'right' : 'left') + + ' shift=' + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')' + var posInBox = redSquare.mapToItem(box, mouse.x, mouse.y) + posInfo.text = + mouse.x + ',' + mouse.y + ' in square' + + ' (' + posInBox.x + ',' + posInBox.y + ' in window)' + } + + onReleased: { + info.text = 'Released (isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')' + posInfo.text = '' + } + + onPressAndHold: info.text = 'Press and hold' + onClicked: info.text = 'Clicked (wasHeld=' + mouse.wasHeld + ')' + onDoubleClicked: info.text = 'Double clicked' + } + } + + Rectangle { + id: blueSquare + width: 80; height: 80 + x: box.width - width - 10; y: 10 // making this item draggable, so don't use anchors + color: "blue" + + Text { text: "Drag"; font.pixelSize: 16; color: "white"; anchors.centerIn: parent } + + MouseArea { + anchors.fill: parent + drag.target: blueSquare + drag.axis: Drag.XandYAxis + drag.minimumX: 0 + drag.maximumX: box.width - parent.width + drag.minimumY: 0 + drag.maximumY: box.height - parent.width + } + } + + Text { + id: info + anchors.bottom: posInfo.top; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + + onTextChanged: console.log(text) + } + + Text { + id: posInfo + anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 30 + } +} diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp new file mode 100644 index 0000000..7733ce2 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'qmlapplicationviewer.h' +** +** Created: Fri Feb 18 17:53:42 2011 +** by: The Qt Meta Object Compiler version 62 (Qt 4.7.2) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "qmlapplicationviewer.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'qmlapplicationviewer.h' doesn't include <QObject>." +#elif Q_MOC_OUTPUT_REVISION != 62 +#error "This file was generated using the moc from 4.7.2. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_QmlApplicationViewer[] = { + + // content: + 5, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + 0 // eod +}; + +static const char qt_meta_stringdata_QmlApplicationViewer[] = { + "QmlApplicationViewer\0" +}; + +const QMetaObject QmlApplicationViewer::staticMetaObject = { + { &QDeclarativeView::staticMetaObject, qt_meta_stringdata_QmlApplicationViewer, + qt_meta_data_QmlApplicationViewer, 0 } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &QmlApplicationViewer::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *QmlApplicationViewer::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *QmlApplicationViewer::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_QmlApplicationViewer)) + return static_cast<void*>(const_cast< QmlApplicationViewer*>(this)); + return QDeclarativeView::qt_metacast(_clname); +} + +int QmlApplicationViewer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDeclarativeView::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..7844e46 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,155 @@ +// checksum 0x17fa version 0x3000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include <QtCore/QCoreApplication> +#include <QtCore/QDir> +#include <QtCore/QFileInfo> +#include <QtDeclarative/QDeclarativeComponent> +#include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeContext> + +#if defined(QMLJSDEBUGGER) +#include <qt_private/qdeclarativedebughelper_p.h> +#endif + +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) +#include <jsdebuggeragent.h> +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) +#include <qdeclarativeviewobserver.h> +#endif + +#if defined(QMLJSDEBUGGER) + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QString mainQmlFile; + friend class QmlApplicationViewer; + static QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + const QString pathInShareDir = QCoreApplication::applicationDirPath() + + QLatin1String("/../share/") + + QFileInfo(QCoreApplication::applicationFilePath()).fileName() + + QLatin1Char('/') + path; + if (QFileInfo(pathInShareDir).exists()) + return pathInShareDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) : + QDeclarativeView(parent), + m_d(new QmlApplicationViewerPrivate) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); +#if defined(QMLJSDEBUGGER) && !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(engine()); +#endif +#if defined(QMLJSDEBUGGER) && !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(this, parent); +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete m_d; +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + m_d->mainQmlFile = QmlApplicationViewerPrivate::adjustPath(file); + setSource(QUrl::fromLocalFile(m_d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + engine()->addImportPath(QmlApplicationViewerPrivate::adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +//#if defined(Q_OS_SYMBIAN) +// // If the version of Qt on the device is < 4.7.2, that attribute won't work +// if (orientation != ScreenOrientationAuto) { +// const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.')); +// if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { +// qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); +// return; +// } +// } +//#endif // Q_OS_SYMBIAN +// +// Qt::WidgetAttribute attribute; +// switch (orientation) { +//#if QT_VERSION < 0x040702 +// // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes +// case ScreenOrientationLockPortrait: +// attribute = static_cast<Qt::WidgetAttribute>(128); +// break; +// case ScreenOrientationLockLandscape: +// attribute = static_cast<Qt::WidgetAttribute>(129); +// break; +// default: +// case ScreenOrientationAuto: +// attribute = static_cast<Qt::WidgetAttribute>(130); +// break; +//#else // QT_VERSION < 0x040702 +// case ScreenOrientationLockPortrait: +// attribute = Qt::WA_LockPortraitOrientation; +// break; +// case ScreenOrientationLockLandscape: +// attribute = Qt::WA_LockLandscapeOrientation; +// break; +// default: +// case ScreenOrientationAuto: +// attribute = Qt::WA_AutoOrientation; +// break; +//#endif // QT_VERSION < 0x040702 +// }; +// setAttribute(attribute, true); +} + +void QmlApplicationViewer::showExpanded() +{ +#ifdef Q_OS_SYMBIAN + showFullScreen(); +#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) + showMaximized(); +#else + show(); +#endif +} diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..0e4de04 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,39 @@ +// checksum 0x5a59 version 0x3000a +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include <QtDeclarative/QDeclarativeView> + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + void setOrientation(ScreenOrientation orientation); + void showExpanded(); + +private: + class QmlApplicationViewerPrivate *m_d; +}; + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist b/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist new file mode 100644 index 0000000..1566585 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest-Info.plist @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleDisplayName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>LSRequiresIPhoneOS</key> + <true/> +</dict> +</plist> diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj new file mode 100755 index 0000000..e105b73 --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj @@ -0,0 +1,455 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; + D3CAA7C813264AAD008BB877 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7C713264AAD008BB877 /* main.mm */; }; + D3CAA7E613264EA6008BB877 /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7E313264EA6008BB877 /* moc_qmlapplicationviewer.cpp */; }; + D3CAA7E713264EA6008BB877 /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7E413264EA6008BB877 /* qmlapplicationviewer.cpp */; }; + D3CAA7EC13264F52008BB877 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7C713264AAD008BB877 /* main.mm */; }; + D3CAA7ED13264F52008BB877 /* moc_qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7E313264EA6008BB877 /* moc_qmlapplicationviewer.cpp */; }; + D3CAA7EE13264F52008BB877 /* qmlapplicationviewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3CAA7E413264EA6008BB877 /* qmlapplicationviewer.cpp */; }; + D3CAA7F013264F52008BB877 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + D3CAA7F113264F52008BB877 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; + D3CAA7FA13264F8A008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; + D3CAA80613264FD5008BB877 /* libQtCore_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */; }; + D3CAA80713264FD5008BB877 /* libQtDeclarative_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */; }; + D3CAA80813264FD6008BB877 /* libQtGui_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */; }; + D3CAA80913264FD6008BB877 /* libQtScript_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */; }; + D3CAA80A13264FD7008BB877 /* libQtSql_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */; }; + D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; + D3CAA81313265005008BB877 /* libquikit_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81213265005008BB877 /* libquikit_debug.a */; }; + D3CAA81B13265056008BB877 /* libQtCore_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81613265056008BB877 /* libQtCore_debug.a */; }; + D3CAA81C13265056008BB877 /* libQtDeclarative_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81713265056008BB877 /* libQtDeclarative_debug.a */; }; + D3CAA81D13265056008BB877 /* libQtGui_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81813265056008BB877 /* libQtGui_debug.a */; }; + D3CAA81E13265056008BB877 /* libQtScript_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81913265056008BB877 /* libQtScript_debug.a */; }; + D3CAA81F13265056008BB877 /* libQtSql_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81A13265056008BB877 /* libQtSql_debug.a */; }; + D3CAA8211326507D008BB877 /* libquikit_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA8201326507D008BB877 /* libquikit_debug.a */; }; + D3CAA8261326520A008BB877 /* libQtNetwork_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */; }; + D3CAA82813265220008BB877 /* libQtNetwork_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA82713265220008BB877 /* libQtNetwork_debug.a */; }; + D3CAA88A132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; + D3CAA88B132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; + D3CAA89113265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; + D3CAA89213265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 1D6058910D05DD3D006BFB54 /* qmltest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = qmltest.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 32CA4F630368D1EE00C91783 /* qmltest_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qmltest_Prefix.pch; sourceTree = "<group>"; }; + 8D1107310486CEB800E47090 /* qmltest-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "qmltest-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; }; + D3CAA7C713264AAD008BB877 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; }; + D3CAA7E313264EA6008BB877 /* moc_qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_qmlapplicationviewer.cpp; path = qmlapplicationviewer/moc_qmlapplicationviewer.cpp; sourceTree = "<group>"; }; + D3CAA7E413264EA6008BB877 /* qmlapplicationviewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qmlapplicationviewer.cpp; path = qmlapplicationviewer/qmlapplicationviewer.cpp; sourceTree = "<group>"; }; + D3CAA7E513264EA6008BB877 /* qmlapplicationviewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qmlapplicationviewer.h; path = qmlapplicationviewer/qmlapplicationviewer.h; sourceTree = "<group>"; }; + D3CAA7F613264F52008BB877 /* qmltest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = qmltest.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.3.dylib; path = usr/lib/libz.1.2.3.dylib; sourceTree = SDKROOT; }; + D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtCore_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtDeclarative_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtGui_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtGui_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtScript_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtSql_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81213265005008BB877 /* libquikit_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/plugins/platforms/libquikit_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81613265056008BB877 /* libQtCore_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtCore_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81713265056008BB877 /* libQtDeclarative_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtDeclarative_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81813265056008BB877 /* libQtGui_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtGui_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtGui_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81913265056008BB877 /* libQtScript_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtScript_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA81A13265056008BB877 /* libQtSql_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtSql_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA8201326507D008BB877 /* libquikit_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/plugins/platforms/libquikit_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtNetwork_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA82713265220008BB877 /* libQtNetwork_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtNetwork_debug.a"; sourceTree = SOURCE_ROOT; }; + D3CAA836132652E5008BB877 /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fonts; path = ../../../../../../lib/fonts; sourceTree = SOURCE_ROOT; }; + D3CAA88E13265310008BB877 /* qml */ = {isa = PBXFileReference; lastKnownFileType = folder; path = qml; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, + D3CAA7FA13264F8A008BB877 /* libz.1.2.3.dylib in Frameworks */, + D3CAA81B13265056008BB877 /* libQtCore_debug.a in Frameworks */, + D3CAA81C13265056008BB877 /* libQtDeclarative_debug.a in Frameworks */, + D3CAA81D13265056008BB877 /* libQtGui_debug.a in Frameworks */, + D3CAA81E13265056008BB877 /* libQtScript_debug.a in Frameworks */, + D3CAA81F13265056008BB877 /* libQtSql_debug.a in Frameworks */, + D3CAA8211326507D008BB877 /* libquikit_debug.a in Frameworks */, + D3CAA82813265220008BB877 /* libQtNetwork_debug.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3CAA7EF13264F52008BB877 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D3CAA7F013264F52008BB877 /* Foundation.framework in Frameworks */, + D3CAA7F113264F52008BB877 /* UIKit.framework in Frameworks */, + D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */, + D3CAA80613264FD5008BB877 /* libQtCore_debug.a in Frameworks */, + D3CAA80713264FD5008BB877 /* libQtDeclarative_debug.a in Frameworks */, + D3CAA80813264FD6008BB877 /* libQtGui_debug.a in Frameworks */, + D3CAA80913264FD6008BB877 /* libQtScript_debug.a in Frameworks */, + D3CAA80A13264FD7008BB877 /* libQtSql_debug.a in Frameworks */, + D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */, + D3CAA81313265005008BB877 /* libquikit_debug.a in Frameworks */, + D3CAA8261326520A008BB877 /* libQtNetwork_debug.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 1D6058910D05DD3D006BFB54 /* qmltest.app */, + D3CAA7F613264F52008BB877 /* qmltest.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + isa = PBXGroup; + children = ( + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + D3CAA7E213264E8C008BB877 /* QMLApplicationViewer */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = CustomTemplate; + sourceTree = "<group>"; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32CA4F630368D1EE00C91783 /* qmltest_Prefix.pch */, + D3CAA7C713264AAD008BB877 /* main.mm */, + ); + name = "Other Sources"; + sourceTree = "<group>"; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + D3CAA88E13265310008BB877 /* qml */, + D3CAA836132652E5008BB877 /* fonts */, + 8D1107310486CEB800E47090 /* qmltest-Info.plist */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + D3CAA81513265035008BB877 /* Simulator */, + D3CAA8141326500A008BB877 /* Device */, + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 1D30AB110D05D00D00671497 /* Foundation.framework */, + 288765A40DF7441C002DB57D /* CoreGraphics.framework */, + D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + D3CAA7E213264E8C008BB877 /* QMLApplicationViewer */ = { + isa = PBXGroup; + children = ( + D3CAA7E313264EA6008BB877 /* moc_qmlapplicationviewer.cpp */, + D3CAA7E413264EA6008BB877 /* qmlapplicationviewer.cpp */, + D3CAA7E513264EA6008BB877 /* qmlapplicationviewer.h */, + ); + name = QMLApplicationViewer; + sourceTree = "<group>"; + }; + D3CAA8141326500A008BB877 /* Device */ = { + isa = PBXGroup; + children = ( + D3CAA81213265005008BB877 /* libquikit_debug.a */, + D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */, + D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */, + D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */, + D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */, + D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */, + D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */, + ); + name = Device; + sourceTree = "<group>"; + }; + D3CAA81513265035008BB877 /* Simulator */ = { + isa = PBXGroup; + children = ( + D3CAA8201326507D008BB877 /* libquikit_debug.a */, + D3CAA81613265056008BB877 /* libQtCore_debug.a */, + D3CAA81713265056008BB877 /* libQtDeclarative_debug.a */, + D3CAA81813265056008BB877 /* libQtGui_debug.a */, + D3CAA82713265220008BB877 /* libQtNetwork_debug.a */, + D3CAA81913265056008BB877 /* libQtScript_debug.a */, + D3CAA81A13265056008BB877 /* libQtSql_debug.a */, + ); + name = Simulator; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1D6058900D05DD3D006BFB54 /* qmltest simulator */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "qmltest simulator" */; + buildPhases = ( + 1D60588D0D05DD3D006BFB54 /* Resources */, + 1D60588E0D05DD3D006BFB54 /* Sources */, + 1D60588F0D05DD3D006BFB54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "qmltest simulator"; + productName = qmltest; + productReference = 1D6058910D05DD3D006BFB54 /* qmltest.app */; + productType = "com.apple.product-type.application"; + }; + D3CAA7E813264F52008BB877 /* qmltest device */ = { + isa = PBXNativeTarget; + buildConfigurationList = D3CAA7F313264F52008BB877 /* Build configuration list for PBXNativeTarget "qmltest device" */; + buildPhases = ( + D3CAA7E913264F52008BB877 /* Resources */, + D3CAA7EB13264F52008BB877 /* Sources */, + D3CAA7EF13264F52008BB877 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "qmltest device"; + productName = qmltest; + productReference = D3CAA7F613264F52008BB877 /* qmltest.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "qmltest" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1D6058900D05DD3D006BFB54 /* qmltest simulator */, + D3CAA7E813264F52008BB877 /* qmltest device */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1D60588D0D05DD3D006BFB54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3CAA88A132652E5008BB877 /* fonts in Resources */, + D3CAA89113265310008BB877 /* qml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3CAA7E913264F52008BB877 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3CAA88B132652E5008BB877 /* fonts in Resources */, + D3CAA89213265310008BB877 /* qml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1D60588E0D05DD3D006BFB54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3CAA7C813264AAD008BB877 /* main.mm in Sources */, + D3CAA7E613264EA6008BB877 /* moc_qmlapplicationviewer.cpp in Sources */, + D3CAA7E713264EA6008BB877 /* qmlapplicationviewer.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3CAA7EB13264F52008BB877 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3CAA7EC13264F52008BB877 /* main.mm in Sources */, + D3CAA7ED13264F52008BB877 /* moc_qmlapplicationviewer.cpp in Sources */, + D3CAA7EE13264F52008BB877 /* qmlapplicationviewer.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1D6058940D05DD3E006BFB54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = qmltest_Prefix.pch; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/include\"/**"; + INFOPLIST_FILE = "qmltest-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/lib\"", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/plugins/platforms\"", + ); + PRODUCT_NAME = qmltest; + }; + name = Debug; + }; + 1D6058950D05DD3E006BFB54 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = qmltest_Prefix.pch; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/include\"/**"; + INFOPLIST_FILE = "qmltest-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/lib\"", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-simulator/plugins/platforms\"", + ); + PRODUCT_NAME = qmltest; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = iphoneos; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + PREBINDING = NO; + SDKROOT = iphoneos; + }; + name = Release; + }; + D3CAA7F413264F52008BB877 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = qmltest_Prefix.pch; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/include\"/**"; + INFOPLIST_FILE = "qmltest-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/lib\"", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/plugins/platforms\"", + ); + PRODUCT_NAME = qmltest; + }; + name = Debug; + }; + D3CAA7F513264F52008BB877 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = qmltest_Prefix.pch; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/include\"/**"; + INFOPLIST_FILE = "qmltest-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/lib\"", + "\"$(SRCROOT)/../../../../../../../qt-lighthouse-ios-device/plugins/platforms\"", + ); + PRODUCT_NAME = qmltest; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "qmltest simulator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D6058940D05DD3E006BFB54 /* Debug */, + 1D6058950D05DD3E006BFB54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "qmltest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D3CAA7F313264F52008BB877 /* Build configuration list for PBXNativeTarget "qmltest device" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D3CAA7F413264F52008BB877 /* Debug */, + D3CAA7F513264F52008BB877 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest_Prefix.pch b/src/plugins/platforms/uikit/examples/qmltest/qmltest_Prefix.pch new file mode 100644 index 0000000..c06715c --- /dev/null +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest_Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'qmltest' target in the 'qmltest' project +// + +#ifdef __OBJC__ + #import <Foundation/Foundation.h> + #import <UIKit/UIKit.h> +#endif diff --git a/src/plugins/platforms/uikit/main.mm b/src/plugins/platforms/uikit/main.mm new file mode 100644 index 0000000..05e0d02 --- /dev/null +++ b/src/plugins/platforms/uikit/main.mm @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <UIKit/UIKit.h> + +#include <QtGui/QPlatformIntegrationPlugin> +#include "quikitintegration.h" + +QT_BEGIN_NAMESPACE + +class QUIKitIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&, const QStringList&); +}; + +QStringList QUIKitIntegrationPlugin::keys() const +{ + QStringList list; + list << "UIKit"; + return list; +} + +QPlatformIntegration * QUIKitIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.toLower() == "uikit") + return new QUIKitIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(UIKit, QUIKitIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/quikiteventloop.h b/src/plugins/platforms/uikit/quikiteventloop.h new file mode 100644 index 0000000..5c18999 --- /dev/null +++ b/src/plugins/platforms/uikit/quikiteventloop.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QUIKITEVENTLOOP_H +#define QUIKITEVENTLOOP_H + +#include <QtGui/QPlatformEventLoopIntegration> + +@class EventLoopHelper; +@class NSTimer; + +QT_BEGIN_NAMESPACE + +class QUIKitEventLoop : public QPlatformEventLoopIntegration +{ +public: + QUIKitEventLoop(); + ~QUIKitEventLoop(); + + void startEventLoop(); + void quitEventLoop(); + void qtNeedsToProcessEvents(); + + EventLoopHelper *mHelper; + NSTimer *mTimer; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm new file mode 100644 index 0000000..4469ae9 --- /dev/null +++ b/src/plugins/platforms/uikit/quikiteventloop.mm @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "quikiteventloop.h" +#include "quikitwindow.h" +#include "quikitwindowsurface.h" + +#include <UIKit/UIKit.h> + +#include <QtGui/QApplication> +#include <QtGui/QWidget> +#include <QtDebug> + +@interface QUIKitAppDelegate : NSObject <UIApplicationDelegate> { +} +@end + +@interface EventLoopHelper : NSObject { + QUIKitEventLoop *mIntegration; +} + +- (id)initWithEventLoopIntegration:(QUIKitEventLoop *)integration; + +- (void)processEvents; +- (void)processEventsAndSchedule; + +@end + +@implementation QUIKitAppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + foreach (QWidget *widget, qApp->topLevelWidgets()) { + QRect geom = widget->geometry(); + CGRect bar = [UIApplication sharedApplication].statusBarFrame; + if (geom.y() <= bar.size.height) { + geom.setY(bar.size.height); + widget->setGeometry(geom); + } + QUIKitWindow *platformWindow = static_cast<QUIKitWindow *>(widget->platformWindow()); + platformWindow->ensureNativeWindow(); + QUIKitWindowSurface *surface = static_cast<QUIKitWindowSurface*>(widget->windowSurface()); + UIView *view = surface->nativeView(); + [platformWindow->nativeWindow() addSubview:view]; + [platformWindow->nativeWindow() makeKeyAndVisible]; + } + return YES; +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + // TODO this isn't called for some reason + qDebug() << "quit"; + qApp->quit(); +} + +@end + +@implementation EventLoopHelper + +- (id)initWithEventLoopIntegration:(QUIKitEventLoop *)integration +{ + if (self = [self init]) { + mIntegration = integration; + } + return self; +} + +- (void)processEvents +{ + QPlatformEventLoopIntegration::processEvents(); +} + +- (void)processEventsAndSchedule +{ + QPlatformEventLoopIntegration::processEvents(); + qint64 nextTime = mIntegration->nextTimerEvent(); + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSDate *nextDate = [[NSDate date] dateByAddingTimeInterval:((double)nextTime/1000)]; + [mIntegration->mTimer setFireDate:nextDate]; + [pool release]; +} + +@end + +QT_BEGIN_NAMESPACE + +QUIKitEventLoop::QUIKitEventLoop() +{ + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + mHelper = [[EventLoopHelper alloc] initWithEventLoopIntegration:this]; + mTimer = [[NSTimer timerWithTimeInterval:0.030 target:mHelper selector:@selector(processEventsAndSchedule) userInfo:nil repeats:YES] retain]; + [pool release]; +} + +QUIKitEventLoop::~QUIKitEventLoop() +{ + [mTimer release]; + [mHelper release]; +} + +void QUIKitEventLoop::startEventLoop() +{ + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + [[NSRunLoop currentRunLoop] addTimer:[mTimer autorelease] forMode:NSDefaultRunLoopMode]; + UIApplicationMain(qApp->argc(), qApp->argv(), nil, @"QUIKitAppDelegate"); + [pool release]; +} + +void QUIKitEventLoop::quitEventLoop() +{ + +} + +void QUIKitEventLoop::qtNeedsToProcessEvents() +{ + [mHelper performSelectorOnMainThread:@selector(processEvents) withObject:nil waitUntilDone:NO]; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/quikitintegration.h b/src/plugins/platforms/uikit/quikitintegration.h new file mode 100644 index 0000000..e448881 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitintegration.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_UIKIT_H +#define QPLATFORMINTEGRATION_UIKIT_H + +#include <QtGui/QPlatformIntegration> + +QT_BEGIN_NAMESPACE + +class QUIKitIntegration : public QPlatformIntegration +{ +public: + QUIKitIntegration(); + ~QUIKitIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList<QPlatformScreen *> screens() const; + + QPlatformFontDatabase *fontDatabase() const; + + QPlatformEventLoopIntegration *createEventLoopIntegration() const; + +private: + QList<QPlatformScreen *> mScreens; +}; + +QT_END_NAMESPACE + +#endif + diff --git a/src/plugins/platforms/uikit/quikitintegration.mm b/src/plugins/platforms/uikit/quikitintegration.mm new file mode 100644 index 0000000..f1fc402 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitintegration.mm @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "quikitintegration.h" +#include "quikitwindow.h" +#include "quikitwindowsurface.h" +#include "quikitscreen.h" +#include "quikiteventloop.h" + +#include <QtGui/QApplication> + +#include <private/qpixmap_raster_p.h> + +#include <UIKit/UIKit.h> + +#include <QtDebug> + +QT_BEGIN_NAMESPACE + +QUIKitIntegration::QUIKitIntegration() +{ + mScreens << new QUIKitScreen(0); +} + +QUIKitIntegration::~QUIKitIntegration() +{ +} + +QPixmapData *QUIKitIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QPlatformWindow *QUIKitIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QUIKitWindow(widget); +} + +QList<QPlatformScreen *> QUIKitIntegration::screens() const +{ + return mScreens; +} + +QWindowSurface *QUIKitIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QUIKitWindowSurface(widget); +} + +QPlatformEventLoopIntegration *QUIKitIntegration::createEventLoopIntegration() const +{ + return new QUIKitEventLoop(); +} + +QPlatformFontDatabase * QUIKitIntegration::fontDatabase() const +{ + static bool initialized = false; + if (!initialized) { + initialized = true; + setenv("QT_QPA_FONTDIR",[[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"fonts"] UTF8String],1); + } + return QPlatformIntegration::fontDatabase(); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/quikitscreen.h b/src/plugins/platforms/uikit/quikitscreen.h new file mode 100644 index 0000000..0253795 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitscreen.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QUIKITSCREEN_H +#define QUIKITSCREEN_H + +#include <UIKit/UIKit.h> + +#include <QtGui/QPlatformScreen> + +QT_BEGIN_NAMESPACE + +class QUIKitScreen : public QPlatformScreen +{ +public: + QUIKitScreen(int screenIndex); + ~QUIKitScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + + UIScreen *uiScreen() const; + +private: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + int m_index; +}; + +QT_END_NAMESPACE + + +#endif diff --git a/src/plugins/platforms/uikit/quikitscreen.mm b/src/plugins/platforms/uikit/quikitscreen.mm new file mode 100644 index 0000000..718ba54 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitscreen.mm @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "quikitscreen.h" + +#include <QtDebug> + +QT_BEGIN_NAMESPACE + +QUIKitScreen::QUIKitScreen(int screenIndex) + : QPlatformScreen(), + m_index(screenIndex) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + UIScreen *screen = [[UIScreen screens] objectAtIndex:screenIndex]; + UIScreenMode *mode = [screen currentMode]; + CGSize size = [mode size]; + m_geometry = QRect(0, 0, size.width, size.height); + CGRect bounds = [screen bounds]; // in 'points', 1p == 1/160in + +// qreal xDpi = size.width * 160. / bounds.size.width; +// qreal yDpi = size.height * 160. / bounds.size.height; +// qDebug() << xDpi << yDpi; + + m_format = QImage::Format_ARGB32; + + m_depth = 24; + + const qreal inch = 25.4; + m_physicalSize = QSize(qRound(bounds.size.width * inch / 160.), qRound(bounds.size.height * inch / 160.)); + [pool release]; +} + +QUIKitScreen::~QUIKitScreen() +{ +} + +UIScreen *QUIKitScreen::uiScreen() const +{ + return [[UIScreen screens] objectAtIndex:m_index]; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/quikitwindow.h b/src/plugins/platforms/uikit/quikitwindow.h new file mode 100644 index 0000000..8e8c51b --- /dev/null +++ b/src/plugins/platforms/uikit/quikitwindow.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QUIKITWINDOW_H +#define QUIKITWINDOW_H + +#include <QPlatformWindow> +#include <UIKit/UIKit.h> + +QT_BEGIN_NAMESPACE + +class QUIKitScreen; + +class QUIKitWindow : public QPlatformWindow +{ +public: + explicit QUIKitWindow(QWidget *tlw); + ~QUIKitWindow(); + + UIWindow *nativeWindow() const { return mWindow; } + void setGeometry(const QRect &rect); + + UIWindow *ensureNativeWindow(); + +private: + QUIKitScreen *mScreen; + UIWindow *mWindow; +}; + +QT_END_NAMESPACE + +#endif // QUIKITWINDOW_H diff --git a/src/plugins/platforms/uikit/quikitwindow.mm b/src/plugins/platforms/uikit/quikitwindow.mm new file mode 100644 index 0000000..4ac7447 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitwindow.mm @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "quikitwindow.h" + +#include "quikitscreen.h" + +#include <QtDebug> + +QT_BEGIN_NAMESPACE + +QUIKitWindow::QUIKitWindow(QWidget *tlw) : + QPlatformWindow(tlw), + mWindow(nil) +{ + mScreen = static_cast<QUIKitScreen *>(QPlatformScreen::platformScreenForWidget(tlw)); + CGRect screenBounds = [mScreen->uiScreen() bounds]; + QRect geom(screenBounds.origin.x, screenBounds.origin.y, screenBounds.size.width, screenBounds.size.height); + setGeometry(geom); + // TODO ensure the native window if the application is already running +} + +QUIKitWindow::~QUIKitWindow() +{ + [mWindow release]; +} + +void QUIKitWindow::setGeometry(const QRect &rect) +{ + if (mWindow) { + mWindow.frame = CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()); + [mWindow setNeedsDisplay]; + } + QPlatformWindow::setGeometry(rect); +} + +UIWindow *QUIKitWindow::ensureNativeWindow() +{ + if (!mWindow) { + CGRect screenBounds = [mScreen->uiScreen() bounds]; + QRect geom = geometry(); + CGRect frame = CGRectMake(geom.x(), geom.y(), geom.width(), geom.height()); + mWindow = [[UIWindow alloc] initWithFrame:frame]; + mWindow.screen = mScreen->uiScreen(); + mWindow.frame = frame; // for some reason setting the screen resets frame.origin + [mWindow setNeedsDisplay]; + } +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/quikitwindowsurface.h b/src/plugins/platforms/uikit/quikitwindowsurface.h new file mode 100644 index 0000000..2c22d7f --- /dev/null +++ b/src/plugins/platforms/uikit/quikitwindowsurface.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QUIKITWINDOWSURFACE_H +#define QUIKITWINDOWSURFACE_H + +#include <QtGui/QPlatformIntegration> +#include <QtGui/QImage> +#include <QtGui/QWindowSystemInterface> + +#include <UIKit/UIKit.h> + +@interface QImageView : UIView +{ + CGImageRef m_cgImage; + QWidget *m_widget; +} + +- (void)setImage:(QImage *)image; +- (void)setWidget:(QWidget *)widget; + +//- (QList<struct QWindowSystemInterface::TouchPoint>)touchPointsForTouches:(NSSet *)touches; +- (void)sendMouseEventForTouches:(NSSet *)touches withEvent:(UIEvent *)event fakeButtons:(Qt::MouseButtons)buttons; +@end + +QT_BEGIN_NAMESPACE + +class QUIKitWindowSurface : public QWindowSurface +{ +public: + QUIKitWindowSurface(QWidget *window); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize (const QSize &size); + + QImageView *nativeView() const { return mView; } +private: + QImage *mImage; + QImageView *mView; +}; + +QT_END_NAMESPACE + +#endif // QUIKITWINDOWSURFACE_H diff --git a/src/plugins/platforms/uikit/quikitwindowsurface.mm b/src/plugins/platforms/uikit/quikitwindowsurface.mm new file mode 100644 index 0000000..f21bb77 --- /dev/null +++ b/src/plugins/platforms/uikit/quikitwindowsurface.mm @@ -0,0 +1,242 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "quikitwindowsurface.h" +#include "quikitwindow.h" + +#include <QtDebug> + +@implementation QImageView + +- (void)dealloc +{ + CGImageRelease(m_cgImage); + [super dealloc]; +} + +- (void)setImage:(QImage *)image +{ + CGImageRelease(m_cgImage); + + const uchar *imageData = image->bits(); + int bitDepth = image->depth(); + int colorBufferSize = 8; + int bytesPrLine = image->bytesPerLine(); + int width = image->width(); + int height = image->height(); + + CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB(); + + CGDataProviderRef cgDataProviderRef = CGDataProviderCreateWithData( + NULL, + imageData, + image->byteCount(), + NULL); + + m_cgImage = CGImageCreate(width, + height, + colorBufferSize, + bitDepth, + bytesPrLine, + cgColourSpaceRef, + kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little, + cgDataProviderRef, + NULL, + false, + kCGRenderingIntentDefault); + + CGDataProviderRelease(cgDataProviderRef); + CGColorSpaceRelease(cgColourSpaceRef); +} + +- (void)setWidget:(QWidget *)widget +{ + m_widget = widget; +} + +- (void)drawRect:(CGRect)rect +{ + + if (!m_cgImage) + return; + + CGContextRef cgContext = UIGraphicsGetCurrentContext(); + CGContextSaveGState( cgContext ); + + int dy = rect.origin.y + CGRectGetMaxY(rect); + CGContextTranslateCTM(cgContext, 0, dy); + CGContextScaleCTM(cgContext, 1, -1); + CGImageRef subImage = CGImageCreateWithImageInRect(m_cgImage, rect); + CGContextDrawImage(cgContext,rect,subImage); + CGImageRelease(subImage); + + CGContextRestoreGState(cgContext); +} + +//- (QList<struct QWindowSystemInterface::TouchPoint>)touchPointsForTouches:(NSSet *)touches +//{ +// NSEnumerator *enumerator = [touches objectEnumerator]; +// id touch; +// int count = 0; +// QList<struct QWindowSystemInterface::TouchPoint> result; +// while ((touch = [enumerator nextObject])) { +// CGPoint locationInView = [touch locationInView:self]; +// CGRect bounds = [self bounds]; +// struct QWindowSystemInterface::TouchPoint p; +// p.id = count; +// p.isPrimary = true; +// p.normalPosition = QPointF(locationInView.x / bounds.size.width, +// locationInView.y / bounds.size.height); +// p.area = QRectF(locationInView.x, locationInView.y, 1, 1); +// p.pressure = 1.; +// switch ([touch phase]) { +// case UITouchPhaseBegan: +// p.state = Qt::TouchPointPressed; +// break; +// case UITouchPhaseMoved: +// p.state = Qt::TouchPointMoved; +// break; +// case UITouchPhaseStationary: +// p.state = Qt::TouchPointStationary; +// break; +// case UITouchPhaseEnded: +// case UITouchPhaseCancelled: +// p.state = Qt::TouchPointReleased; +// break; +// } +// result << p; +// qDebug() << p.id << ":" << p.normalPosition << p.area << p.state; +// ++count; +// } +// qDebug() << result.size(); +// return result; +//} + +- (void)sendMouseEventForTouches:(NSSet *)touches withEvent:(UIEvent *)event fakeButtons:(Qt::MouseButtons)buttons +{ + UITouch *touch = [touches anyObject]; + CGPoint locationInView = [touch locationInView:self]; + QPoint p(locationInView.x, locationInView.y); + // TODO handle global touch point? for status bar? + QWindowSystemInterface::handleMouseEvent(m_widget, (ulong)(event.timestamp*1000), + p, p, buttons); +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + //QWindowSystemInterface::handleTouchEvent(m_widget, (ulong)(event.timestamp*1000), + // QEvent::TouchBegin, QTouchEvent::TouchScreen, + // [self touchPointsForTouches:touches]); + [self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::LeftButton]; +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event +{ + //QWindowSystemInterface::handleTouchEvent(m_widget, (ulong)(event.timestamp*1000), + // QEvent::TouchUpdate, QTouchEvent::TouchScreen, + // [self touchPointsForTouches:touches]); + [self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::LeftButton]; +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event +{ + //QWindowSystemInterface::handleTouchEvent(m_widget, (ulong)(event.timestamp*1000), + // QEvent::TouchEnd, QTouchEvent::TouchScreen, + // [self touchPointsForTouches:touches]); + [self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::NoButton]; +} + +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event +{ + //QWindowSystemInterface::handleTouchEvent(m_widget, (ulong)(event.timestamp*1000), + // QEvent::TouchEnd, QTouchEvent::TouchScreen, + // [self touchPointsForTouches:touches]); + [self sendMouseEventForTouches:touches withEvent:event fakeButtons:Qt::NoButton]; +} + +@end + +QT_BEGIN_NAMESPACE + +QUIKitWindowSurface::QUIKitWindowSurface(QWidget *window) + : QWindowSurface(window) +{ + QUIKitWindow *platformWindow = static_cast<QUIKitWindow *>(window->platformWindow()); + Q_ASSERT(platformWindow); + const QRect geo = window->geometry(); + mView = [[QImageView alloc] initWithFrame:CGRectMake(geo.x(),geo.y(),geo.width(),geo.height())]; + [mView setMultipleTouchEnabled:YES]; + [mView setWidget:window]; + mImage = new QImage(window->size(),QImage::Format_ARGB32_Premultiplied); + [mView setImage:mImage]; + if (platformWindow->nativeWindow()) { + [platformWindow->nativeWindow() addSubview:mView]; + [mView setNeedsDisplay]; + } +} + +QPaintDevice *QUIKitWindowSurface::paintDevice() +{ + return mImage; +} + +void QUIKitWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect geo = region.boundingRect(); + [mView setNeedsDisplayInRect:CGRectMake(geo.x(),geo.y(),geo.width(),geo.height())]; +} + +void QUIKitWindowSurface::resize (const QSize &size) +{ + QWindowSurface::resize(size); + + delete mImage; + mImage = new QImage(size,QImage::Format_ARGB32_Premultiplied); + [mView setImage:mImage]; + const QRect geo = geometry(); + [mView setFrame:CGRectMake(geo.x(), geo.y(), size.width(), size.height())]; + [mView setNeedsDisplay]; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/uikit/uikit.pro b/src/plugins/platforms/uikit/uikit.pro new file mode 100644 index 0000000..b73c334 --- /dev/null +++ b/src/plugins/platforms/uikit/uikit.pro @@ -0,0 +1,23 @@ +TARGET = quikit +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +OBJECTIVE_SOURCES = main.mm \ + quikitintegration.mm \ + quikitwindow.mm \ + quikitscreen.mm \ + quikiteventloop.mm \ + quikitwindowsurface.mm + +OBJECTIVE_HEADERS = quikitintegration.h \ + quikitwindow.h \ + quikitscreen.h \ + quikiteventloop.h \ + quikitwindowsurface.h + +#add libz for freetype. +LIBS += -lz + +#include(../fontdatabases/basicunix/basicunix.pri) +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target -- cgit v0.12 From 3c3176f43f049e0c26e56f04881bd8047e731915 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Thu, 10 Mar 2011 15:54:45 +0200 Subject: Background app visible after split view closed When using an app with graphicsview + vertical scrollbar that has previously opened the splitview, when closing the keyboard, the application is not reset to the original geometry correctly. This is caused by invalid operation in the resetSplitView() method that does not resize the graphics view back to original size AND might even leave it with incorrect window state. Task-number: QTBUG-17937 Reviewed-by: Guoqing Zhang --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index af48a92..73aa982 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -405,16 +405,16 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) if (rootItem) rootItem->resetTransform(); } + } else { + if (m_splitViewResizeBy) + gv->resize(gv->rect().width(), m_splitViewResizeBy); } - // Resizing might have led to widget losing its original windowstate. // Restore previous window state. if (m_splitViewPreviousWindowStates != windowToMove->windowState()) windowToMove->setWindowState(m_splitViewPreviousWindowStates); - if (m_splitViewResizeBy) - gv->updateGeometry(); windowToMove->setUpdatesEnabled(true); gv->setAttribute(Qt::WA_Resized, userResize); //not a user resize -- cgit v0.12 From db1ccf9d57f19cf01efb020b6d1967ef6084a8e3 Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Thu, 10 Mar 2011 15:07:15 +0100 Subject: Mac: Center the Window title on Cocoa. Task-number: QTBUG-13593 Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qwidget_mac.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 9a5a5f1..14a90ef 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -3239,6 +3239,8 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset) ReleaseIconRef(previousIcon); #else QMacCocoaAutoReleasePool pool; + if (icon.isNull()) + return; NSButton *iconButton = [qt_mac_window_for(q) standardWindowButton:NSWindowDocumentIconButton]; if (iconButton == nil) { QCFString string(q->windowTitle()); -- cgit v0.12 From 433e4380c98b9369a7d55894e9d34f8c87ba06e9 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Thu, 10 Mar 2011 17:11:09 +0200 Subject: Fix for fromSymbianCFbsBitmap changing the source data unexpectedly. Inverting the pixels for bitmaps of mode EGray2 is done in-place, which is wrong if the bitmap handle was duplicated. Instead, we need to make a copy. This also means that we cannot treat EGray2 a conversion-less format in openvg, but such images are likely to be used as masks only, so optimizing just for mere drawing in case of this format is not really necessary. Reviewed-by: Jani Hautakangas --- src/gui/image/qvolatileimagedata_symbian.cpp | 3 +++ src/openvg/qvg_symbian.cpp | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qvolatileimagedata_symbian.cpp b/src/gui/image/qvolatileimagedata_symbian.cpp index 474d0ef..6e2909b 100644 --- a/src/gui/image/qvolatileimagedata_symbian.cpp +++ b/src/gui/image/qvolatileimagedata_symbian.cpp @@ -392,6 +392,9 @@ void QVolatileImageData::initWithBitmap(CFbsBitmap *source) } else if (needsCopy) { // Rasterize extended and compressed bitmaps. bitmap = rasterizeBitmap(source, EColor16MAP); + } else if (source->DisplayMode() == EGray2) { + // The pixels will be inverted, must make a copy. + bitmap = rasterizeBitmap(source, source->DisplayMode()); } else { // Efficient path: no pixel data copying. Just duplicate. This of course // means the original bitmap's data may get modified, but that's fine diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 405151d..2924d41 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -157,7 +157,6 @@ static inline bool conversionLessFormat(QImage::Format format) case QImage::Format_RGB32: // EColor16MU case QImage::Format_ARGB32: // EColor16MA case QImage::Format_ARGB32_Premultiplied: // EColor16MAP - case QImage::Format_MonoLSB: // EGray2 case QImage::Format_Indexed8: // EGray256, EColor256 return true; default: -- cgit v0.12 From 555f52c498c3ba67041c880701a66224e7b321b0 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas <jani.hautakangas@nokia.com> Date: Wed, 9 Mar 2011 15:15:02 +0200 Subject: Don't use EGL surfaces for translucency with 32MB GPU chip. Add dynamic GPU chip detection on Symbian to decide if translucent EGL surfaces can be used. With 32MB GPU memory there is not enough memory to create for example transparent video overlay widgets and that's why hw surfaces must not be used. Task-number: QTBUG-18024 Reviewed-by: Jason Barron --- src/gui/kernel/qapplication_p.h | 2 ++ src/gui/kernel/qapplication_s60.cpp | 27 +++++++++++++++++++++- src/gui/kernel/qwidget_s60.cpp | 15 +++++++----- src/opengl/qgraphicssystem_gl.cpp | 12 ++++++++++ .../graphicssystems/openvg/qgraphicssystem_vg.cpp | 12 ++++++---- 5 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 43634ef..3d2c9d6 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -599,6 +599,8 @@ public: int pressureSupported; int maxTouchPressure; QList<QTouchEvent::TouchPoint> appAllTouchPoints; + + bool useTranslucentEGLSurfaces; #endif private: diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 6e43c8b..43b9b01 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -100,7 +100,6 @@ static const int KGoomMemoryGoodEvent = 0x20026790; static const int KSplitViewOpenEvent = 0x2001E2C0; static const int KSplitViewCloseEvent = 0x2001E2C1; - #if defined(QT_DEBUG) static bool appNoGrab = false; // Grabbing enabled #endif @@ -1665,6 +1664,32 @@ void qt_init(QApplicationPrivate * /* priv */, int) QObject::connect(qApp, SIGNAL(aboutToQuit()), qApp, SLOT(_q_aboutToQuit())); #endif +#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE + QApplicationPrivate::instance()->useTranslucentEGLSurfaces = true; + + const TUid KIvePropertyCat = {0x2726beef}; + enum TIvePropertyChipType { + EVCBCM2727B1 = 0x00000000, + EVCBCM2763A0 = 0x04000100, + EVCBCM2763B0 = 0x04000102, + EVCBCM2763C0 = 0x04000103, + EVCBCM2763C1 = 0x04000104, + EVCBCMUnknown = 0x7fffffff + }; + + TInt chipType = EVCBCMUnknown; + if (RProperty::Get(KIvePropertyCat, 0 /*chip type*/, chipType) == KErrNone) { + if (chipType == EVCBCM2727B1) { + // We have only 32MB GPU memory. Use raster surfaces + // for transparent TLWs. + QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false; + } + } else { + QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false; + } +#else + QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false; +#endif /* ### Commented out for now as parameter handling not needed in SOS(yet). Code below will break testlib with -o flag int argc = priv->argc; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index be212fb..62d09fe 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -813,17 +813,21 @@ void QWidgetPrivate::s60UpdateIsOpaque() RWindow *const window = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow()); #ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE - window->SetSurfaceTransparency(!isOpaque); - extra->topextra->nativeWindowTransparencyEnabled = !isOpaque; -#else + if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces) { + window->SetSurfaceTransparency(!isOpaque); + extra->topextra->nativeWindowTransparencyEnabled = !isOpaque; + return; + } +#endif if (!isOpaque) { const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); if (window->SetTransparencyAlphaChannel() == KErrNone) { window->SetBackgroundColor(TRgb(255, 255, 255, 0)); extra->topextra->nativeWindowTransparencyEnabled = 1; - if (extra->topextra->backingStore.data() && - QApplicationPrivate::graphics_system_name == QLatin1String("openvg")) { + if (extra->topextra->backingStore.data() && ( + QApplicationPrivate::graphics_system_name == QLatin1String("openvg") + || QApplicationPrivate::graphics_system_name == QLatin1String("opengl"))) { // Semi-transparent EGL surfaces aren't supported. We need to // recreate backing store to get translucent surface (raster surface). extra->topextra->backingStore.create(q); @@ -834,7 +838,6 @@ void QWidgetPrivate::s60UpdateIsOpaque() window->SetTransparentRegion(TRegionFix<1>()); extra->topextra->nativeWindowTransparencyEnabled = 0; } -#endif } void QWidgetPrivate::setWindowIcon_sys(bool forceReset) diff --git a/src/opengl/qgraphicssystem_gl.cpp b/src/opengl/qgraphicssystem_gl.cpp index 79911fb..3574756 100644 --- a/src/opengl/qgraphicssystem_gl.cpp +++ b/src/opengl/qgraphicssystem_gl.cpp @@ -53,6 +53,10 @@ #include "private/qwindowsurface_x11gl_p.h" #endif +#if defined(Q_OS_SYMBIAN) +#include <QtGui/private/qapplication_p.h> +#endif + QT_BEGIN_NAMESPACE extern QGLWidget *qt_gl_getShareWidget(); @@ -86,6 +90,14 @@ QWindowSurface *QGLGraphicsSystem::createWindowSurface(QWidget *widget) const } #endif +#if defined(Q_OS_SYMBIAN) + if (!QApplicationPrivate::instance()->useTranslucentEGLSurfaces) { + QWidgetPrivate *d = qt_widget_private(widget); + if (!d->isOpaque && widget->testAttribute(Qt::WA_TranslucentBackground)) + return d->createDefaultWindowSurface_sys(); + } +#endif + return new QGLWindowSurface(widget); } diff --git a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp index 1da58e1..4b4f677 100644 --- a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp +++ b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp @@ -43,7 +43,7 @@ #include <QtOpenVG/private/qpixmapdata_vg_p.h> #include <QtOpenVG/private/qwindowsurface_vg_p.h> #include <QtOpenVG/private/qvgimagepool_p.h> -#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) +#if defined(Q_OS_SYMBIAN) #include <QtGui/private/qwidget_p.h> #endif #include <QtGui/private/qapplication_p.h> @@ -70,10 +70,12 @@ QPixmapData *QVGGraphicsSystem::createPixmapData(QPixmapData::PixelType type) co QWindowSurface *QVGGraphicsSystem::createWindowSurface(QWidget *widget) const { -#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE) - QWidgetPrivate *d = qt_widget_private(widget); - if (!d->isOpaque && widget->testAttribute(Qt::WA_TranslucentBackground)) - return d->createDefaultWindowSurface_sys(); +#if defined(Q_OS_SYMBIAN) + if (!QApplicationPrivate::instance()->useTranslucentEGLSurfaces) { + QWidgetPrivate *d = qt_widget_private(widget); + if (!d->isOpaque && widget->testAttribute(Qt::WA_TranslucentBackground)) + return d->createDefaultWindowSurface_sys(); + } #endif return new QVGWindowSurface(widget); } -- cgit v0.12 From 1b326932d48c0e584f9d5173fa5f892c5086fee8 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Thu, 10 Mar 2011 16:17:14 +0100 Subject: Not requiring valid QTextBlock in previous() Commit 64852122ba7 introduced a regression in QTextBlock::previous(), programs that do doc.end().previous() will not be able to retrieve the last valid block. Revert this change so that we can keep the behavior consistent with previous versions. Task-number: QTBUG-18026 Reviewed-by: Eskil --- src/gui/text/qtextobject.cpp | 2 +- tests/auto/qtextblock/tst_qtextblock.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index e323fd0..94f2fc7 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -1504,7 +1504,7 @@ QTextBlock QTextBlock::next() const */ QTextBlock QTextBlock::previous() const { - if (!isValid()) + if (!p) return QTextBlock(); return QTextBlock(p, p->blockMap().previous(n)); diff --git a/tests/auto/qtextblock/tst_qtextblock.cpp b/tests/auto/qtextblock/tst_qtextblock.cpp index 7b41874..cec3a6a 100644 --- a/tests/auto/qtextblock/tst_qtextblock.cpp +++ b/tests/auto/qtextblock/tst_qtextblock.cpp @@ -75,6 +75,7 @@ private slots: void fragmentOverBlockBoundaries(); void excludeParagraphSeparatorFragment(); void backwardsBlockIterator(); + void previousBlock_qtbug18026(); private: QTextDocument *doc; @@ -174,5 +175,11 @@ void tst_QTextBlock::backwardsBlockIterator() QCOMPARE(it.fragment().position(), 0); } +void tst_QTextBlock::previousBlock_qtbug18026() +{ + QTextBlock last = doc->end().previous(); + QVERIFY(last.isValid()); +} + QTEST_MAIN(tst_QTextBlock) #include "tst_qtextblock.moc" -- cgit v0.12 From 98a4ec8358c6da17c8dd77c504a7e4d76e8c612a Mon Sep 17 00:00:00 2001 From: Liang Qi <liang.qi@nokia.com> Date: Thu, 10 Mar 2011 16:43:53 +0100 Subject: Cast int to HALData::TAttribute for QT_HALData_ENumCpus and compile with RVCT4. Reviewed-by: Jani Hautakangas Reviewed-by: Shane Kearns --- src/corelib/thread/qthread_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 9bfd85a..c2bc895 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -436,7 +436,7 @@ int QThread::idealThreadCount() if (QSysInfo::symbianVersion() >= QSysInfo::SV_SF_3) { TInt inumcpus; TInt err; - err = HAL::Get(QT_HALData_ENumCpus, inumcpus); + err = HAL::Get((HALData::TAttribute)QT_HALData_ENumCpus, inumcpus); if (err != KErrNone) { cores = 1; } else if ( inumcpus <= 0 ) { -- cgit v0.12 From 1b3514e4b2d9a41f73bf5b87caf73ce409eadf2a Mon Sep 17 00:00:00 2001 From: Yoann Lopes <yoann.lopes@nokia.com> Date: Thu, 10 Mar 2011 17:24:46 +0100 Subject: Fix QGraphicsScene returning incorrect focus item. When the scene was losing and regaining focus, it was incorrectly setting the focus on any item that had its focus previously explicitly cleared. Autotest included. Task-number: QTBUG-16401 Reviewed-by: TrustMe --- src/gui/graphicsview/qgraphicsitem.cpp | 4 ++- src/gui/graphicsview/qgraphicsscene.cpp | 11 ++++++--- src/gui/graphicsview/qgraphicsscene_p.h | 1 + tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 31 ++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 52e4d79..9c3198b 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5577,8 +5577,10 @@ void QGraphicsItemPrivate::setSubFocus(QGraphicsItem *rootItem, QGraphicsItem *s parent->d_ptr->subFocusItemChange(); } while (!parent->isPanel() && (parent = parent->d_ptr->parent) && (visible || !parent->d_ptr->visible)); - if (scene && !scene->isActive()) + if (scene && !scene->isActive()) { + scene->d_func()->passiveFocusItem = subFocusItem; scene->d_func()->lastFocusItem = subFocusItem; + } } /*! diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 5e5077b..699d561 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -306,6 +306,7 @@ QGraphicsScenePrivate::QGraphicsScenePrivate() rectAdjust(2), focusItem(0), lastFocusItem(0), + passiveFocusItem(0), tabFocusFirst(0), activePanel(0), lastActivePanel(0), @@ -630,6 +631,8 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item) focusItem = 0; if (item == lastFocusItem) lastFocusItem = 0; + if (item == passiveFocusItem) + passiveFocusItem = 0; if (item == activePanel) { // ### deactivate... activePanel = 0; @@ -2985,7 +2988,7 @@ void QGraphicsScene::removeItem(QGraphicsItem *item) QGraphicsItem *QGraphicsScene::focusItem() const { Q_D(const QGraphicsScene); - return isActive() ? d->focusItem : d->lastFocusItem; + return isActive() ? d->focusItem : d->passiveFocusItem; } /*! @@ -3059,6 +3062,7 @@ void QGraphicsScene::clearFocus() Q_D(QGraphicsScene); if (d->hasFocus) { d->hasFocus = false; + d->passiveFocusItem = d->focusItem; setFocusItem(0, Qt::OtherFocusReason); } } @@ -3761,9 +3765,9 @@ void QGraphicsScene::focusInEvent(QFocusEvent *focusEvent) focusEvent->ignore(); break; default: - if (d->lastFocusItem) { + if (d->passiveFocusItem) { // Set focus on the last focus item - setFocusItem(d->lastFocusItem, focusEvent->reason()); + setFocusItem(d->passiveFocusItem, focusEvent->reason()); } break; } @@ -3782,6 +3786,7 @@ void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent) { Q_D(QGraphicsScene); d->hasFocus = false; + d->passiveFocusItem = d->focusItem; setFocusItem(0, focusEvent->reason()); // Remove all popups when the scene loses focus. diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h index 815c70b..2b47105 100644 --- a/src/gui/graphicsview/qgraphicsscene_p.h +++ b/src/gui/graphicsview/qgraphicsscene_p.h @@ -150,6 +150,7 @@ public: quint32 rectAdjust; QGraphicsItem *focusItem; QGraphicsItem *lastFocusItem; + QGraphicsItem *passiveFocusItem; QGraphicsWidget *tabFocusFirst; QGraphicsItem *activePanel; QGraphicsItem *lastActivePanel; diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index b221cd9..5a5c9b7 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -289,6 +289,7 @@ private slots: void taskQTBUG_7863_paintIntoCacheWithTransparentParts(); void taskQT_3674_doNotCrash(); void taskQTBUG_15977_renderWithDeviceCoordinateCache(); + void taskQTBUG_16401_focusItem(); }; void tst_QGraphicsScene::initTestCase() @@ -4652,5 +4653,35 @@ void tst_QGraphicsScene::taskQTBUG_15977_renderWithDeviceCoordinateCache() QCOMPARE(image, expected); } +void tst_QGraphicsScene::taskQTBUG_16401_focusItem() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100); + rect->setFlag(QGraphicsItem::ItemIsFocusable); + + view.show(); + QTest::qWaitForWindowShown(&view); + QApplication::setActiveWindow(&view); + + QVERIFY(!scene.focusItem()); + + rect->setFocus(); + QCOMPARE(scene.focusItem(), rect); + QFocusEvent focusOut(QEvent::FocusOut); + QApplication::sendEvent(&view, &focusOut); + QVERIFY(!scene.focusItem()); + QFocusEvent focusIn(QEvent::FocusIn); + QApplication::sendEvent(&view, &focusIn); + QCOMPARE(scene.focusItem(), rect); + + rect->clearFocus(); + QVERIFY(!scene.focusItem()); + QApplication::sendEvent(&view, &focusOut); + QVERIFY(!scene.focusItem()); + QApplication::sendEvent(&view, &focusIn); + QVERIFY(!scene.focusItem()); +} + QTEST_MAIN(tst_QGraphicsScene) #include "tst_qgraphicsscene.moc" -- cgit v0.12 From dc96e9a935d8a48bae173b4febfb3bf32b34788d Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Thu, 10 Mar 2011 17:53:45 +0100 Subject: Fix http in combination with QT_NO_NETWORKPROXY. --- src/corelib/global/qfeatures.h | 2 +- src/corelib/global/qfeatures.txt | 2 +- src/network/access/qhttpnetworkconnectionchannel.cpp | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index b26563a..d1a73a6 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -579,7 +579,7 @@ #endif // Hyper Text Transfer Protocol -#if !defined(QT_NO_HTTP) && (defined(QT_NO_HOSTINFO) || defined(QT_NO_NETWORKPROXY)) +#if !defined(QT_NO_HTTP) && defined(QT_NO_HOSTINFO) #define QT_NO_HTTP #endif diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index f07fbd5..4d938a9 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -1050,7 +1050,7 @@ SeeAlso: ??? Feature: HTTP Description: Supports HTTP file access. Section: Networking -Requires: HOSTINFO NETWORKPROXY +Requires: HOSTINFO Name: Hyper Text Transfer Protocol SeeAlso: ??? diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 079f608..228bc58 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -91,8 +91,10 @@ void QHttpNetworkConnectionChannel::init() #else socket = new QTcpSocket; #endif +#ifndef QT_NO_NETWORKPROXY // Set by QNAM anyway, but let's be safe here socket->setProxy(QNetworkProxy::NoProxy); +#endif QObject::connect(socket, SIGNAL(bytesWritten(qint64)), this, SLOT(_q_bytesWritten(qint64)), @@ -581,13 +583,15 @@ bool QHttpNetworkConnectionChannel::ensureConnection() #endif } else { // In case of no proxy we can use the Unbuffered QTcpSocket +#ifndef QT_NO_NETWORKPROXY if (connection->d_func()->networkProxy.type() == QNetworkProxy::NoProxy && connection->cacheProxy().type() == QNetworkProxy::NoProxy && connection->transparentProxy().type() == QNetworkProxy::NoProxy) { +#endif socket->connectToHost(connectHost, connectPort, QIODevice::ReadWrite | QIODevice::Unbuffered); // For an Unbuffered QTcpSocket, the read buffer size has a special meaning. socket->setReadBufferSize(1*1024); - +#ifndef QT_NO_NETWORKPROXY } else { socket->connectToHost(connectHost, connectPort); @@ -596,6 +600,7 @@ bool QHttpNetworkConnectionChannel::ensureConnection() // here and there. socket->setReadBufferSize(64*1024); } +#endif } return false; } -- cgit v0.12 From b2fb53bcfcac393c31a1dd4f2ef5e6111cb9f51c Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Thu, 10 Mar 2011 20:45:04 +0100 Subject: XmlPatterns actually compiles and runs. --- src/plugins/platforms/uikit/README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/uikit/README b/src/plugins/platforms/uikit/README index 19ec83f..7477cb0 100644 --- a/src/plugins/platforms/uikit/README +++ b/src/plugins/platforms/uikit/README @@ -18,11 +18,11 @@ After configuring and building Qt you need to also build src/plugins/platforms/u Simulator: ---------- -configure -qpa -xplatform qws/macx-iphonesimulator-g++ -arch i386 -developer-build -no-accessibility -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations +configure -qpa -xplatform qws/macx-iphonesimulator-g++ -arch i386 -developer-build -no-accessibility -no-qt3support -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations Device: ------- -configure -qpa -xplatform qws/macx-iphonedevice-g++ -arch armv7 -developer-build -no-accessibility -no-qt3support -no-xmlpatterns -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations +configure -qpa -xplatform qws/macx-iphonedevice-g++ -arch armv7 -developer-build -no-accessibility -no-qt3support -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations 2) XCode setup: - there are examples in the examples subdirectory of the platform plugin -- cgit v0.12 From 2ecb0ea77c04424f6f557ca8a13c1d86666763df Mon Sep 17 00:00:00 2001 From: Jani Hautakangas <jani.hautakangas@nokia.com> Date: Thu, 10 Mar 2011 17:50:12 +0200 Subject: Fix for major regression in OpenVG clipping OpenVG paint engine didn't reset it's mask fallback state correctly when engine was resetted. Task-number: QTBUG-17966 Reviewed-by: Jason Barron --- src/openvg/qpaintengine_vg.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index f1b3277..3d50558 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -2333,6 +2333,7 @@ bool QVGPaintEngine::isDefaultClipRect(const QRect& rect) void QVGPaintEngine::clipEnabledChanged() { #if defined(QVG_SCISSOR_CLIP) + vgSeti(VG_MASKING, VG_FALSE); // disable mask fallback updateScissor(); #else Q_D(QVGPaintEngine); -- cgit v0.12 From ce59628ba366800fe2f3afdadc37be02f98480a7 Mon Sep 17 00:00:00 2001 From: Rohan McGovern <rohan.mcgovern@nokia.com> Date: Fri, 11 Mar 2011 09:39:27 +1000 Subject: Update copyright year to 2011. Reviewed-by: Trust Me (cherry picked from commit 774a3536b00c4d6e4c4c10b708e31b4373a338e3) --- bin/elf2e32_qtwrapper.pl | 2 +- config.profiles/symbian/translations/qt_fr_symbian.ts | 4 ++-- config.profiles/symbian/translations/qt_pl_symbian.ts | 4 ++-- config.profiles/symbian/translations/qt_ru_symbian.ts | 4 ++-- config.profiles/symbian/translations/qt_zh_cn_symbian.ts | 2 +- config.profiles/symbian/translations/qt_zh_tw_symbian.ts | 4 ++-- config.tests/mac/coreservices/coreservices.mm | 2 +- config.tests/unix/opengldesktop/opengldesktop.cpp | 2 +- doc/src/examples/multicastreceiver.qdoc | 2 +- doc/src/examples/multicastsender.qdoc | 2 +- doc/src/examples/wheel.qdoc | 2 +- doc/src/snippets/declarative/application.qml | 2 +- doc/src/snippets/declarative/focus/focusColumn.qml | 2 +- doc/src/snippets/declarative/states/statechangescript.qml | 2 +- doc/src/snippets/declarative/webview/webview.qml | 2 +- examples/declarative/positioners/layoutdirection/layoutdirection.qml | 2 +- examples/declarative/touchinteraction/pincharea/flickresize.qml | 2 +- examples/network/multicastreceiver/main.cpp | 2 +- examples/network/multicastreceiver/receiver.cpp | 2 +- examples/network/multicastreceiver/receiver.h | 2 +- examples/network/multicastsender/main.cpp | 2 +- examples/network/multicastsender/sender.cpp | 2 +- examples/network/multicastsender/sender.h | 2 +- examples/scroller/graphicsview/main.cpp | 2 +- examples/scroller/plot/main.cpp | 2 +- examples/scroller/plot/plotwidget.cpp | 2 +- examples/scroller/plot/plotwidget.h | 2 +- examples/scroller/plot/settingswidget.cpp | 2 +- examples/scroller/plot/settingswidget.h | 2 +- examples/scroller/wheel/main.cpp | 2 +- examples/scroller/wheel/wheelwidget.cpp | 2 +- examples/scroller/wheel/wheelwidget.h | 2 +- mkspecs/common/mac/qplatformdefs.h | 2 +- mkspecs/qws/linux-nacl-g++/qplatformdefs.h | 2 +- mkspecs/qws/macx-nacl-g++/qplatformdefs.h | 2 +- mkspecs/symbian-armcc/qplatformdefs.h | 2 +- mkspecs/symbian-gcce/qplatformdefs.h | 2 +- mkspecs/unsupported/linux-armcc/qplatformdefs.h | 2 +- mkspecs/unsupported/linux-clang/qplatformdefs.h | 2 +- mkspecs/unsupported/macx-clang/qplatformdefs.h | 2 +- src/corelib/arch/qatomic_armv5.h | 2 +- src/corelib/arch/qatomic_armv7.h | 2 +- src/corelib/global/qconfig-minimal-system-dependencies.h | 2 +- src/corelib/global/qnaclunimplemented.cpp | 2 +- src/corelib/global/qnaclunimplemented.h | 2 +- src/corelib/io/qdir_p.h | 2 +- src/corelib/io/qfilesystemengine.cpp | 2 +- src/corelib/io/qfilesystemengine_mac.cpp | 2 +- src/corelib/io/qfilesystemengine_p.h | 2 +- src/corelib/io/qfilesystemengine_symbian.cpp | 2 +- src/corelib/io/qfilesystemengine_unix.cpp | 2 +- src/corelib/io/qfilesystemengine_win.cpp | 2 +- src/corelib/io/qfilesystementry.cpp | 2 +- src/corelib/io/qfilesystementry_p.h | 2 +- src/corelib/io/qfilesystemiterator_p.h | 2 +- src/corelib/io/qfilesystemiterator_symbian.cpp | 2 +- src/corelib/io/qfilesystemiterator_unix.cpp | 2 +- src/corelib/io/qfilesystemiterator_win.cpp | 2 +- src/corelib/io/qfilesystemmetadata_p.h | 2 +- src/corelib/kernel/qsystemerror.cpp | 2 +- src/corelib/kernel/qsystemerror_p.h | 2 +- src/corelib/plugin/qelfparser_p.cpp | 2 +- src/corelib/plugin/qelfparser_p.h | 2 +- src/declarative/debugger/qdeclarativedebugserver.cpp | 2 +- src/declarative/debugger/qdeclarativedebugserver_p.h | 2 +- src/declarative/debugger/qdeclarativedebugserverconnection_p.h | 2 +- src/declarative/debugger/qdeclarativedebugservice_p_p.h | 2 +- src/declarative/graphicsitems/qdeclarativepincharea.cpp | 2 +- src/declarative/graphicsitems/qdeclarativepincharea_p.h | 2 +- src/declarative/graphicsitems/qdeclarativepincharea_p_p.h | 2 +- src/declarative/qml/qperformancetimer.cpp | 2 +- src/declarative/qml/qperformancetimer_p.h | 2 +- src/declarative/util/qdeclarativeapplication.cpp | 2 +- src/declarative/util/qdeclarativeapplication_p.h | 2 +- src/gui/image/qpixmap_blitter.cpp | 2 +- src/gui/image/qpixmap_blitter_p.h | 2 +- src/gui/kernel/qcocoaintrospection_mac.mm | 2 +- src/gui/kernel/qcocoaintrospection_p.h | 2 +- src/gui/kernel/qdesktopwidget_qpa_p.h | 2 +- src/gui/kernel/qeventdispatcher_glib_qpa.cpp | 2 +- src/gui/kernel/qeventdispatcher_glib_qpa_p.h | 2 +- src/gui/kernel/qeventdispatcher_qpa.cpp | 2 +- src/gui/kernel/qeventdispatcher_qpa_p.h | 2 +- src/gui/kernel/qplatformclipboard_qpa.cpp | 2 +- src/gui/kernel/qplatformclipboard_qpa.h | 2 +- src/gui/kernel/qplatformcursor_qpa.cpp | 2 +- src/gui/kernel/qplatformeventloopintegration_qpa.cpp | 2 +- src/gui/kernel/qplatformeventloopintegration_qpa.h | 2 +- src/gui/kernel/qplatformglcontext_qpa.cpp | 2 +- src/gui/kernel/qplatformglcontext_qpa.h | 2 +- src/gui/kernel/qplatformintegration_qpa.cpp | 2 +- src/gui/kernel/qplatformintegration_qpa.h | 2 +- src/gui/kernel/qplatformintegrationfactory_qpa.cpp | 2 +- src/gui/kernel/qplatformintegrationfactory_qpa_p.h | 2 +- src/gui/kernel/qplatformintegrationplugin_qpa.cpp | 2 +- src/gui/kernel/qplatformintegrationplugin_qpa.h | 2 +- src/gui/kernel/qplatformscreen_qpa.cpp | 2 +- src/gui/kernel/qplatformscreen_qpa.h | 2 +- src/gui/kernel/qplatformwindow_qpa.cpp | 2 +- src/gui/kernel/qplatformwindow_qpa.h | 2 +- src/gui/kernel/qplatformwindowformat_qpa.cpp | 2 +- src/gui/kernel/qplatformwindowformat_qpa.h | 2 +- src/gui/kernel/qwindowsysteminterface_qpa.cpp | 2 +- src/gui/kernel/qwindowsysteminterface_qpa.h | 2 +- src/gui/painting/qblittable.cpp | 2 +- src/gui/painting/qblittable_p.h | 2 +- src/gui/painting/qpaintengine_blitter.cpp | 2 +- src/gui/painting/qpaintengine_blitter_p.h | 2 +- src/gui/painting/qprintengine_pdf.cpp | 2 +- src/gui/painting/qprinterinfo_p.h | 2 +- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 2 +- src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 2 +- src/gui/text/qfont_qpa.cpp | 2 +- src/gui/text/qfontdatabase_qpa.cpp | 2 +- src/gui/text/qfontengine_coretext.mm | 2 +- src/gui/text/qfontengine_coretext_p.h | 2 +- src/gui/text/qfontengine_mac_p.h | 2 +- src/gui/text/qfontengine_qpa.cpp | 2 +- src/gui/text/qfontengine_qpa_p.h | 2 +- src/gui/text/qglyphs.cpp | 2 +- src/gui/text/qglyphs.h | 2 +- src/gui/text/qglyphs_p.h | 2 +- src/gui/text/qplatformfontdatabase_qpa.cpp | 2 +- src/gui/text/qplatformfontdatabase_qpa.h | 2 +- src/gui/util/qflickgesture.cpp | 2 +- src/gui/util/qflickgesture_p.h | 2 +- src/gui/util/qscroller.cpp | 2 +- src/gui/util/qscroller.h | 2 +- src/gui/util/qscroller_mac.mm | 2 +- src/gui/util/qscroller_p.h | 2 +- src/gui/util/qscrollerproperties.cpp | 2 +- src/gui/util/qscrollerproperties.h | 2 +- src/gui/util/qscrollerproperties_p.h | 2 +- src/network/access/qhttpthreaddelegate.cpp | 2 +- src/network/access/qhttpthreaddelegate_p.h | 2 +- src/network/access/qnetworkreplydataimpl.cpp | 2 +- src/network/access/qnetworkreplydataimpl_p.h | 2 +- src/network/access/qnetworkreplyfileimpl_p.h | 2 +- src/network/bearer/qsharednetworksession_p.h | 2 +- src/opengl/gl2paintengineex/qglshadercache_meego_p.h | 2 +- src/opengl/gl2paintengineex/qglshadercache_p.h | 2 +- src/opengl/qgl_qpa.cpp | 2 +- src/opengl/qglfunctions.cpp | 2 +- src/opengl/qglfunctions.h | 2 +- src/opengl/qglpixelbuffer_stub.cpp | 2 +- src/opengl/util/meego/main.cpp | 2 +- src/plugins/generic/tslib/main.cpp | 2 +- src/plugins/generic/tslib/qtslib.cpp | 2 +- src/plugins/generic/tslib/qtslib.h | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h | 2 +- src/plugins/platforms/directfb/qdirectfbblitter.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbblitter.h | 2 +- src/plugins/platforms/directfb/qdirectfbconvenience.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbconvenience.h | 2 +- src/plugins/platforms/directfb/qdirectfbcursor.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbcursor.h | 2 +- src/plugins/platforms/directfb/qdirectfbglcontext.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbglcontext.h | 2 +- src/plugins/platforms/directfb/qdirectfbinput.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbinput.h | 2 +- src/plugins/platforms/directfb/qdirectfbintegration.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbintegration.h | 2 +- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbwindow.h | 2 +- src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbwindowsurface.h | 2 +- src/plugins/platforms/eglconvenience/qeglconvenience.cpp | 2 +- src/plugins/platforms/eglconvenience/qeglconvenience.h | 2 +- src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp | 2 +- src/plugins/platforms/eglconvenience/qeglplatformcontext.h | 2 +- src/plugins/platforms/eglfs/main.cpp | 2 +- src/plugins/platforms/eglfs/qeglfsintegration.cpp | 2 +- src/plugins/platforms/eglfs/qeglfsintegration.h | 2 +- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 2 +- src/plugins/platforms/eglfs/qeglfsscreen.h | 2 +- src/plugins/platforms/eglfs/qeglfswindow.cpp | 2 +- src/plugins/platforms/eglfs/qeglfswindow.h | 2 +- src/plugins/platforms/eglfs/qeglfswindowsurface.cpp | 2 +- src/plugins/platforms/eglfs/qeglfswindowsurface.h | 2 +- src/plugins/platforms/fb_base/fb_base.cpp | 2 +- src/plugins/platforms/fb_base/fb_base.h | 2 +- .../platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp | 2 +- .../platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h | 2 +- .../platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 2 +- src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h | 2 +- .../platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h | 2 +- src/plugins/platforms/minimal/main.cpp | 2 +- src/plugins/platforms/minimal/qminimalintegration.cpp | 2 +- src/plugins/platforms/minimal/qminimalintegration.h | 2 +- src/plugins/platforms/minimal/qminimalwindowsurface.cpp | 2 +- src/plugins/platforms/minimal/qminimalwindowsurface.h | 2 +- src/plugins/platforms/openkode/main.cpp | 2 +- src/plugins/platforms/openkode/openkodekeytranslator.h | 2 +- src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp | 2 +- src/plugins/platforms/openkode/qopenkodeeventloopintegration.h | 2 +- src/plugins/platforms/openkode/qopenkodeintegration.cpp | 2 +- src/plugins/platforms/openkode/qopenkodeintegration.h | 2 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 2 +- src/plugins/platforms/openkode/qopenkodewindow.h | 2 +- src/plugins/platforms/openkode/shaders/frag.glslf | 2 +- src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp | 2 +- src/plugins/qmltooling/tcpserver/qtcpserverconnection.h | 2 +- tests/arthur/baselineserver/src/baselineserver.cpp | 2 +- tests/arthur/baselineserver/src/baselineserver.h | 2 +- tests/arthur/baselineserver/src/main.cpp | 2 +- tests/arthur/baselineserver/src/report.cpp | 2 +- tests/arthur/baselineserver/src/report.h | 2 +- tests/arthur/common/baselineprotocol.cpp | 2 +- tests/arthur/common/baselineprotocol.h | 2 +- tests/arthur/common/lookup3.cpp | 2 +- tests/arthur/common/qbaselinetest.cpp | 2 +- tests/arthur/common/qbaselinetest.h | 2 +- tests/auto/baselineexample/tst_baselineexample.cpp | 2 +- .../qdeclarativeapplication/tst_qdeclarativeapplication.cpp | 2 +- tests/auto/declarative/qperformancetimer/tst_qperformancetimer.cpp | 2 +- tests/auto/lancelot/tst_lancelot.cpp | 2 +- tests/auto/qabstractfileengine/tst_qabstractfileengine.cpp | 2 +- tests/auto/qfilesystementry/tst_qfilesystementry.cpp | 2 +- tests/auto/qglfunctions/tst_qglfunctions.cpp | 2 +- tests/auto/qglyphs/tst_qglyphs.cpp | 2 +- tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp | 2 +- tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp | 2 +- tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp | 2 +- tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp | 2 +- tests/auto/qscriptvaluegenerated/testgen/testgenerator.h | 2 +- tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp | 2 +- tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h | 2 +- tests/auto/qscroller/tst_qscroller.cpp | 2 +- tests/auto/qstringref/tst_qstringref.cpp | 2 +- tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp | 2 +- .../declarative/qperformancetimer/tst_qperformancetimer.cpp | 2 +- tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp | 2 +- tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp | 2 +- tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp | 2 +- tests/benchmarks/script/sunspider/tst_sunspider.cpp | 2 +- tests/benchmarks/script/v8/tst_v8.cpp | 2 +- tests/manual/mkspecs/test.sh | 2 +- tools/assistant/tools/assistant/doc/assistant.qdocconf | 2 +- tools/assistant/tools/assistant/globalactions.cpp | 2 +- tools/assistant/tools/assistant/globalactions.h | 2 +- tools/assistant/tools/assistant/openpagesmanager.cpp | 2 +- tools/assistant/tools/assistant/openpagesmanager.h | 2 +- tools/assistant/tools/assistant/openpagesmodel.cpp | 2 +- tools/assistant/tools/assistant/openpagesmodel.h | 2 +- tools/assistant/tools/assistant/openpagesswitcher.cpp | 2 +- tools/assistant/tools/assistant/openpagesswitcher.h | 2 +- tools/assistant/tools/assistant/openpageswidget.cpp | 2 +- tools/doxygen/config/footer.html | 2 +- tools/qdoc3/doc/qdoc-manual.qdocconf | 2 +- tools/qdoc3/jscodemarker.cpp | 2 +- tools/qdoc3/qmlcodemarker.cpp | 2 +- tools/qdoc3/qmlcodeparser.cpp | 2 +- tools/qdoc3/qmlmarkupvisitor.cpp | 2 +- tools/qdoc3/qmlmarkupvisitor.h | 2 +- tools/qdoc3/qmlvisitor.cpp | 2 +- tools/qdoc3/test/carbide-eclipse-integration.qdocconf | 2 +- tools/qdoc3/test/jambi.qdocconf | 2 +- tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf | 2 +- tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf | 2 +- tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf | 2 +- tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf | 2 +- tools/qdoc3/test/standalone-eclipse-integration.qdocconf | 2 +- translations/assistant_cs.ts | 2 +- translations/assistant_sl.ts | 2 +- translations/designer_cs.ts | 2 +- translations/linguist_cs.ts | 4 ++-- translations/linguist_sl.ts | 2 +- translations/qt_cs.ts | 4 ++-- translations/qt_gl.ts | 4 ++-- translations/qtconfig_sl.ts | 2 +- util/qlalr/doc/qlalr.qdocconf | 2 +- 276 files changed, 283 insertions(+), 283 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index a90877e..02f4f0d 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################# ## -## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ## All rights reserved. ## Contact: Nokia Corporation (qt-info@nokia.com) ## diff --git a/config.profiles/symbian/translations/qt_fr_symbian.ts b/config.profiles/symbian/translations/qt_fr_symbian.ts index c0b0699..e10f963 100644 --- a/config.profiles/symbian/translations/qt_fr_symbian.ts +++ b/config.profiles/symbian/translations/qt_fr_symbian.ts @@ -2660,8 +2660,8 @@ Voulez-vous quand même le supprimer ?</translation> <translation><h3>Présentation de Qt</h3><p>Ce programme utilise Qt version %1.</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt est une boîte à outils C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou source libre) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2010 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt est une boîte à outils C++ pour le développement d’applications multiplateformes.</p><p>Qt fournit une portabilité source unique pour MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux et les principales variantes commerciales d’Unix. Qt est également disponible pour appareils intégrés tels que Qt pour Embedded Linux et Qt pour Windows CE.</p><p>Il existe trois options de licence différentes conçues pour s’adapter aux besoins d’utilisateurs variés.</p><p>Qt concédée sous notre contrat de licence commerciale est destinée au développement de logiciels propriétaires/commerciaux dont vous ne souhaitez pas partager le code source avec des tiers ou qui ne peuvent se conformer aux termes de la LGPL GNU version 2.1 ou GPL GNU version 3.0.</p><p>Qt concédée sous la LGPL GNU version 2.1 est destinée au développement d’applications Qt (propriétaires ou source libre) à condition que vous vous conformiez aux conditions générales de la LGPL GNU version 2.1.</p><p>Qt concédée sous la licence publique générale GNU version 3.0 est destinée au développement d’applications Qt lorsque vous souhaitez utiliser ces applications avec d’autres logiciels soumis aux termes de la GPL GNU version 3.0 ou lorsque vous acceptez les termes de la GPL GNU version 3.0.</p><p>Veuillez consulter<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> pour un aperçu des concessions de licences Qt.</p><p>Copyright (C) 2011 Nokia Corporation et/ou ses filiales.</p><p>Qt est un produit Nokia. Voir <a href="http://qt.nokia.com/">qt.nokia.com</a> pour de plus amples informations.</p></translation> </message> <message> <source>About Qt</source> diff --git a/config.profiles/symbian/translations/qt_pl_symbian.ts b/config.profiles/symbian/translations/qt_pl_symbian.ts index 4208c55..e3902ae 100644 --- a/config.profiles/symbian/translations/qt_pl_symbian.ts +++ b/config.profiles/symbian/translations/qt_pl_symbian.ts @@ -2664,8 +2664,8 @@ Czy na pewno chcesz go skasować?</translation> <translation><h3>Informacje o Qt</h3><p> Ten program używa Qt w wersji %1.</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt jest zestawem narzędzi programistycznych dedykowanym dla języka C++. Służy on do opracowywania aplikacji międzyplatformowych.</p><p>Qt umożliwia jednoźródłowe przenoszenie między systemami MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux i wszystkimi głównymi wersjami komercyjnymi systemu Unix. Środowisko Qt jest dostępne dla urządzeń wbudowanych opartych na systemie Linux ( Qt dla wbudowanego systemu Linux) oraz Windows CE.</p><p>Zestaw Qt jest dostępny w trzech różnych opcjach licencjonowania stworzonych w celu zadowolenia naszych różnych użytkowników.</p><p>Qt podlegający licencji zgodnie z naszą komercyjną umową licencyjną jest odpowiedni do opracowywania oprogramowań własnościowych/komercyjnych, dzięki czemu kod źródłowy nie jest udostępniany osobom trzecim. W przeciwnym razie zestaw Qt jest niezgodny z warunkami licencji GNU LGPL w wersji 2.1 lub GNU GPL w wersji 3.0.</p><p>Środowisko Qt objęte licencją GNU LGPL w wersji 2.1 nadaje się do tworzenia aplikacji Qt (własnościowych lub oprogramowań otwartych) tylko wtedy, gdy przestrzegane są warunki licencji GNU LGPL w wersji 2.1.</p><p>Qt objęty Powszechną Licencją Publiczną GNU w wersji 3.0 jest odpowiedni do opracowywania aplikacji QT, aby móc korzystać z aplikacji w połączeniu z oprogramowaniem podlegającym warunkom licencji GNU GPL w wersji 3.0 lub aby przestrzegać warunków licencji GNU GPL w wersji 3.0.</p><p>Więcej informacji na temat licencji Qt można znaleźć na stronie <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>Copyright (C) 2010 Nokia Corporation i/lub oddziały firmy.</p><p>Qt jest produktem firmy Nokia. Dodatkowe informacje znajdują się na stronie <a href="http://qt.nokia.com/">qt.nokia.com</a> </p></translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt jest zestawem narzędzi programistycznych dedykowanym dla języka C++. Służy on do opracowywania aplikacji międzyplatformowych.</p><p>Qt umożliwia jednoźródłowe przenoszenie między systemami MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux i wszystkimi głównymi wersjami komercyjnymi systemu Unix. Środowisko Qt jest dostępne dla urządzeń wbudowanych opartych na systemie Linux ( Qt dla wbudowanego systemu Linux) oraz Windows CE.</p><p>Zestaw Qt jest dostępny w trzech różnych opcjach licencjonowania stworzonych w celu zadowolenia naszych różnych użytkowników.</p><p>Qt podlegający licencji zgodnie z naszą komercyjną umową licencyjną jest odpowiedni do opracowywania oprogramowań własnościowych/komercyjnych, dzięki czemu kod źródłowy nie jest udostępniany osobom trzecim. W przeciwnym razie zestaw Qt jest niezgodny z warunkami licencji GNU LGPL w wersji 2.1 lub GNU GPL w wersji 3.0.</p><p>Środowisko Qt objęte licencją GNU LGPL w wersji 2.1 nadaje się do tworzenia aplikacji Qt (własnościowych lub oprogramowań otwartych) tylko wtedy, gdy przestrzegane są warunki licencji GNU LGPL w wersji 2.1.</p><p>Qt objęty Powszechną Licencją Publiczną GNU w wersji 3.0 jest odpowiedni do opracowywania aplikacji QT, aby móc korzystać z aplikacji w połączeniu z oprogramowaniem podlegającym warunkom licencji GNU GPL w wersji 3.0 lub aby przestrzegać warunków licencji GNU GPL w wersji 3.0.</p><p>Więcej informacji na temat licencji Qt można znaleźć na stronie <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>Copyright (C) 2011 Nokia Corporation i/lub oddziały firmy.</p><p>Qt jest produktem firmy Nokia. Dodatkowe informacje znajdują się na stronie <a href="http://qt.nokia.com/">qt.nokia.com</a> </p></translation> </message> <message> <source>About Qt</source> diff --git a/config.profiles/symbian/translations/qt_ru_symbian.ts b/config.profiles/symbian/translations/qt_ru_symbian.ts index b7e69cb..08b201e 100644 --- a/config.profiles/symbian/translations/qt_ru_symbian.ts +++ b/config.profiles/symbian/translations/qt_ru_symbian.ts @@ -2661,8 +2661,8 @@ Do you want to delete it anyway?</source> <translation><h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2010 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p></translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt - это инструментарий для разработки кроссплатформенных приложений на C++.</p><p>Qt предоставляет совместимость на уровне исходных текстов между MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux и всеми популярными коммерческими вариантами Unix. Также Qt доступна для встраиваемых устройств в виде Qt для Embedded Linux и Qt для Windows CE.</p><p>Qt доступна под тремя различными лицензиями, разработанными для удовлетворения различных требований.</p><p>Qt под нашей коммерческой лицензией предназначена для развития проприетарного/коммерческого программного обеспечения, когда Вы не желаете предоставлять исходные тексты третьим сторонам, или в случае невозможности принятия условий лицензий GNU LGPL версии 2.1 или GNU GPL версии 3.0.</p><p>Qt под лицензией GNU LGPL версии 2.1 предназначена для разработки программного обеспечения с открытыми исходными текстами или коммерческого программного обеспечения при соблюдении условий лицензии GNU LGPL версии 2.1.</p><p>Qt под лицензией GNU General Public License версии 3.0 предназначена для разработки программных приложений в тех случаях, когда Вы хотели бы использовать такие приложения в сочетании с программным обеспечением на условиях лицензии GNU GPL с версии 3.0 или если Вы готовы соблюдать условия лицензии GNU GPL версии 3.0.</p><p>Обратитесь к <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> для обзора лицензий Qt.</p><p>Copyright (C) 2011 Корпорация Nokia и/или её дочерние подразделения.</p><p>Qt - продукт компании Nokia. Обратитесь к <a href="http://qt.nokia.com/">qt.nokia.com</a> для получения дополнительной информации.</p></translation> </message> <message> <source>About Qt</source> diff --git a/config.profiles/symbian/translations/qt_zh_cn_symbian.ts b/config.profiles/symbian/translations/qt_zh_cn_symbian.ts index b1b9941..91ac2af 100644 --- a/config.profiles/symbian/translations/qt_zh_cn_symbian.ts +++ b/config.profiles/symbian/translations/qt_zh_cn_symbian.ts @@ -2662,7 +2662,7 @@ Do you want to delete it anyway?</source> <translation><h3>关于Qt</h3><p>此程序使用Qt版本%1。</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> <translation><p>Qt是一个C++工具箱,用于跨平台应用程序开发。</p><p>Qt具有单一源跨可移植性,可跨越MS&nbsp;Windows、Mac&nbsp;OS&nbsp;X、Linux和所有主要的商业Unix类平台进行移植。Qt还适用于嵌入式设备,如Qt for Embedded Linux和Qt for Windows CE。</p><p>Qt有三种不同许可方式,以满足各种用户需求。</p><p>假如您要开发专利/商业软件,但不希望与第三方共享任何源代码,或者无法符合GNU LGPL版本2.1或GNU GPL版本3.0的条款,则按照我们的商业许可证协议授权的Qt非常适用。</p><p>假如您能够符合GNU LGPL版本2.1的条款和条件,则按照GNU LGPL版本2.1授权的Qt非常适合开发Qt应用程序(专有或开放源码)。</p><p>假如在开发Qt应用程序过程中,您希望这类应用程序能与遵循GNU GPL版本3.0的软件合用,或者您愿意符合GNU GPL版本3.0条款,则按照GNU通用公共许可证版本3.0授权的Qt非常适用。</p><p>请参阅<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>了解Qt授权概况。</p><p>版权所有 (C) 2010 诺基亚公司和/或附属公司。</p><p>Qt是一款诺基亚产品。请参阅<a href="http://qt.nokia.com/">qt.nokia.com</a>了解详情。</p></translation> </message> <message> diff --git a/config.profiles/symbian/translations/qt_zh_tw_symbian.ts b/config.profiles/symbian/translations/qt_zh_tw_symbian.ts index 3b1fb51..c9eb563 100644 --- a/config.profiles/symbian/translations/qt_zh_tw_symbian.ts +++ b/config.profiles/symbian/translations/qt_zh_tw_symbian.ts @@ -2649,8 +2649,8 @@ Do you want to delete it anyway?</source> <translation><h3>關於Qt</h3><p>本程式使用Qt %1版。</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt是一套應用於跨平台應用程式開發的C++工具集。</p><p>Qt提供橫跨MS&nbsp;Windows、Mac&nbsp;OS&nbsp;X、Linux及各主要商業Unix系統的單一來源移植能力。Qt也提供適用於嵌入式裝置的版本,例如Qt for Embedded Linux和Qt for Windows CE。</p><p>針對不同使用者的需求,Qt有三種不同授權方式。</p><p>商業授權合約下的Qt授權適用於專利/商業軟體的開發,在這種情況中,您可能不想與第三方分享任何原始碼或無法遵從GNU LGPL 2.1版或GNU GPL 3.0版的條款。</p><p>GNU LGPL 2.1版下的Qt授權適用於開發Qt應用程式(專利或開放原始碼),您必須遵從GNU LGPL 2.1版的條款與條件。</p><p>GNU GPL 3.0版下的Qt授權適用於開發Qt應用程式,在這種情況中,您希望將此應用程式搭配基於GNU GPL 3.0版開發的軟體一起使用,或您樂意遵從GNU GPL 3.0版的條款。</p><p>請參閱<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>,此頁面對於Qt授權會有概略的介紹。</p><p>Copyright (C) 2010 諾基亞公司及/或其子公司。</p><p>Qt是一項諾基亞產品。如需詳細資訊,請參閱<a href="http://qt.nokia.com/">qt.nokia.com</a>。</p></translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt是一套應用於跨平台應用程式開發的C++工具集。</p><p>Qt提供橫跨MS&nbsp;Windows、Mac&nbsp;OS&nbsp;X、Linux及各主要商業Unix系統的單一來源移植能力。Qt也提供適用於嵌入式裝置的版本,例如Qt for Embedded Linux和Qt for Windows CE。</p><p>針對不同使用者的需求,Qt有三種不同授權方式。</p><p>商業授權合約下的Qt授權適用於專利/商業軟體的開發,在這種情況中,您可能不想與第三方分享任何原始碼或無法遵從GNU LGPL 2.1版或GNU GPL 3.0版的條款。</p><p>GNU LGPL 2.1版下的Qt授權適用於開發Qt應用程式(專利或開放原始碼),您必須遵從GNU LGPL 2.1版的條款與條件。</p><p>GNU GPL 3.0版下的Qt授權適用於開發Qt應用程式,在這種情況中,您希望將此應用程式搭配基於GNU GPL 3.0版開發的軟體一起使用,或您樂意遵從GNU GPL 3.0版的條款。</p><p>請參閱<a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>,此頁面對於Qt授權會有概略的介紹。</p><p>Copyright (C) 2011 諾基亞公司及/或其子公司。</p><p>Qt是一項諾基亞產品。如需詳細資訊,請參閱<a href="http://qt.nokia.com/">qt.nokia.com</a>。</p></translation> </message> <message> <source>About Qt</source> diff --git a/config.tests/mac/coreservices/coreservices.mm b/config.tests/mac/coreservices/coreservices.mm index 0091e49..c70802c 100644 --- a/config.tests/mac/coreservices/coreservices.mm +++ b/config.tests/mac/coreservices/coreservices.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/config.tests/unix/opengldesktop/opengldesktop.cpp b/config.tests/unix/opengldesktop/opengldesktop.cpp index 969767c..a3d8548 100644 --- a/config.tests/unix/opengldesktop/opengldesktop.cpp +++ b/config.tests/unix/opengldesktop/opengldesktop.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/examples/multicastreceiver.qdoc b/doc/src/examples/multicastreceiver.qdoc index 9c4dda4..776c5fa 100644 --- a/doc/src/examples/multicastreceiver.qdoc +++ b/doc/src/examples/multicastreceiver.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/examples/multicastsender.qdoc b/doc/src/examples/multicastsender.qdoc index be5fb6a..bfb91a6 100644 --- a/doc/src/examples/multicastsender.qdoc +++ b/doc/src/examples/multicastsender.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/examples/wheel.qdoc b/doc/src/examples/wheel.qdoc index 992aba6..995ff87 100644 --- a/doc/src/examples/wheel.qdoc +++ b/doc/src/examples/wheel.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/snippets/declarative/application.qml b/doc/src/snippets/declarative/application.qml index 06f83f2..fa8cf0b 100644 --- a/doc/src/snippets/declarative/application.qml +++ b/doc/src/snippets/declarative/application.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/snippets/declarative/focus/focusColumn.qml b/doc/src/snippets/declarative/focus/focusColumn.qml index 42ee3da..e6a6fcf 100644 --- a/doc/src/snippets/declarative/focus/focusColumn.qml +++ b/doc/src/snippets/declarative/focus/focusColumn.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/snippets/declarative/states/statechangescript.qml b/doc/src/snippets/declarative/states/statechangescript.qml index b885137..37cc31f 100644 --- a/doc/src/snippets/declarative/states/statechangescript.qml +++ b/doc/src/snippets/declarative/states/statechangescript.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/doc/src/snippets/declarative/webview/webview.qml b/doc/src/snippets/declarative/webview/webview.qml index c1cef33..dac8010 100644 --- a/doc/src/snippets/declarative/webview/webview.qml +++ b/doc/src/snippets/declarative/webview/webview.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/declarative/positioners/layoutdirection/layoutdirection.qml b/examples/declarative/positioners/layoutdirection/layoutdirection.qml index 3e23b15..89a860e 100644 --- a/examples/declarative/positioners/layoutdirection/layoutdirection.qml +++ b/examples/declarative/positioners/layoutdirection/layoutdirection.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/declarative/touchinteraction/pincharea/flickresize.qml b/examples/declarative/touchinteraction/pincharea/flickresize.qml index 9439ace..cf5278d 100644 --- a/examples/declarative/touchinteraction/pincharea/flickresize.qml +++ b/examples/declarative/touchinteraction/pincharea/flickresize.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastreceiver/main.cpp b/examples/network/multicastreceiver/main.cpp index 8483271..0411631 100644 --- a/examples/network/multicastreceiver/main.cpp +++ b/examples/network/multicastreceiver/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastreceiver/receiver.cpp b/examples/network/multicastreceiver/receiver.cpp index 073fdce..77446b9 100644 --- a/examples/network/multicastreceiver/receiver.cpp +++ b/examples/network/multicastreceiver/receiver.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastreceiver/receiver.h b/examples/network/multicastreceiver/receiver.h index e226028..fd1a673 100644 --- a/examples/network/multicastreceiver/receiver.h +++ b/examples/network/multicastreceiver/receiver.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastsender/main.cpp b/examples/network/multicastsender/main.cpp index 9309322..56e35c9 100644 --- a/examples/network/multicastsender/main.cpp +++ b/examples/network/multicastsender/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastsender/sender.cpp b/examples/network/multicastsender/sender.cpp index 7fa9750..aab94aa 100644 --- a/examples/network/multicastsender/sender.cpp +++ b/examples/network/multicastsender/sender.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/network/multicastsender/sender.h b/examples/network/multicastsender/sender.h index f119883..75ce4c9 100644 --- a/examples/network/multicastsender/sender.h +++ b/examples/network/multicastsender/sender.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/graphicsview/main.cpp b/examples/scroller/graphicsview/main.cpp index 77d00f0..6378f91 100644 --- a/examples/scroller/graphicsview/main.cpp +++ b/examples/scroller/graphicsview/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/plot/main.cpp b/examples/scroller/plot/main.cpp index 1e7db64..a98abfc 100644 --- a/examples/scroller/plot/main.cpp +++ b/examples/scroller/plot/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/plot/plotwidget.cpp b/examples/scroller/plot/plotwidget.cpp index a03f613..c47f107 100644 --- a/examples/scroller/plot/plotwidget.cpp +++ b/examples/scroller/plot/plotwidget.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/plot/plotwidget.h b/examples/scroller/plot/plotwidget.h index c96ceac..dc886d8 100644 --- a/examples/scroller/plot/plotwidget.h +++ b/examples/scroller/plot/plotwidget.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/plot/settingswidget.cpp b/examples/scroller/plot/settingswidget.cpp index 1929eb6..792d8d0 100644 --- a/examples/scroller/plot/settingswidget.cpp +++ b/examples/scroller/plot/settingswidget.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/plot/settingswidget.h b/examples/scroller/plot/settingswidget.h index 13edbf4..e0ffb4a 100644 --- a/examples/scroller/plot/settingswidget.h +++ b/examples/scroller/plot/settingswidget.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/wheel/main.cpp b/examples/scroller/wheel/main.cpp index 203c930..22bae5c 100644 --- a/examples/scroller/wheel/main.cpp +++ b/examples/scroller/wheel/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/wheel/wheelwidget.cpp b/examples/scroller/wheel/wheelwidget.cpp index 0449f53..54daca3 100644 --- a/examples/scroller/wheel/wheelwidget.cpp +++ b/examples/scroller/wheel/wheelwidget.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/examples/scroller/wheel/wheelwidget.h b/examples/scroller/wheel/wheelwidget.h index 8f49169..1e41c02 100644 --- a/examples/scroller/wheel/wheelwidget.h +++ b/examples/scroller/wheel/wheelwidget.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/common/mac/qplatformdefs.h b/mkspecs/common/mac/qplatformdefs.h index 5d1f99a..114a1a3 100644 --- a/mkspecs/common/mac/qplatformdefs.h +++ b/mkspecs/common/mac/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h index 01b26d9..9ea192f 100644 --- a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h index 01b26d9..9ea192f 100644 --- a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/symbian-armcc/qplatformdefs.h b/mkspecs/symbian-armcc/qplatformdefs.h index 6f084d3..0eb74ca 100644 --- a/mkspecs/symbian-armcc/qplatformdefs.h +++ b/mkspecs/symbian-armcc/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/symbian-gcce/qplatformdefs.h b/mkspecs/symbian-gcce/qplatformdefs.h index 8549347..9d95a37 100644 --- a/mkspecs/symbian-gcce/qplatformdefs.h +++ b/mkspecs/symbian-gcce/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/unsupported/linux-armcc/qplatformdefs.h b/mkspecs/unsupported/linux-armcc/qplatformdefs.h index a1ce6a1..31927a6 100644 --- a/mkspecs/unsupported/linux-armcc/qplatformdefs.h +++ b/mkspecs/unsupported/linux-armcc/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/unsupported/linux-clang/qplatformdefs.h b/mkspecs/unsupported/linux-clang/qplatformdefs.h index 2dd7b80..f4f27f3 100644 --- a/mkspecs/unsupported/linux-clang/qplatformdefs.h +++ b/mkspecs/unsupported/linux-clang/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/mkspecs/unsupported/macx-clang/qplatformdefs.h b/mkspecs/unsupported/macx-clang/qplatformdefs.h index 72f3ac7..eea6495 100644 --- a/mkspecs/unsupported/macx-clang/qplatformdefs.h +++ b/mkspecs/unsupported/macx-clang/qplatformdefs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h index 820be7b..ac8fe96 100644 --- a/src/corelib/arch/qatomic_armv5.h +++ b/src/corelib/arch/qatomic_armv5.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/arch/qatomic_armv7.h b/src/corelib/arch/qatomic_armv7.h index a95c4ea..b35866b 100644 --- a/src/corelib/arch/qatomic_armv7.h +++ b/src/corelib/arch/qatomic_armv7.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/global/qconfig-minimal-system-dependencies.h b/src/corelib/global/qconfig-minimal-system-dependencies.h index 63319b9..a44391c 100644 --- a/src/corelib/global/qconfig-minimal-system-dependencies.h +++ b/src/corelib/global/qconfig-minimal-system-dependencies.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp index 1a89b8df..5116d80 100644 --- a/src/corelib/global/qnaclunimplemented.cpp +++ b/src/corelib/global/qnaclunimplemented.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h index 2d3d426..09c6c49 100644 --- a/src/corelib/global/qnaclunimplemented.h +++ b/src/corelib/global/qnaclunimplemented.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qdir_p.h b/src/corelib/io/qdir_p.h index 5f97c1f..7f77a84 100644 --- a/src/corelib/io/qdir_p.h +++ b/src/corelib/io/qdir_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index cf19224..00c33bd 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine_mac.cpp b/src/corelib/io/qfilesystemengine_mac.cpp index 30d7fa5..1c0056b 100644 --- a/src/corelib/io/qfilesystemengine_mac.cpp +++ b/src/corelib/io/qfilesystemengine_mac.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine_p.h b/src/corelib/io/qfilesystemengine_p.h index a3ec0ab..d6033e6 100644 --- a/src/corelib/io/qfilesystemengine_p.h +++ b/src/corelib/io/qfilesystemengine_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine_symbian.cpp b/src/corelib/io/qfilesystemengine_symbian.cpp index 84c3aa1..41a550a 100644 --- a/src/corelib/io/qfilesystemengine_symbian.cpp +++ b/src/corelib/io/qfilesystemengine_symbian.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 030be1b..1becea5 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 19c94e5..82c6eba 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystementry.cpp b/src/corelib/io/qfilesystementry.cpp index d4c6d0a..ccbb10d 100644 --- a/src/corelib/io/qfilesystementry.cpp +++ b/src/corelib/io/qfilesystementry.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystementry_p.h b/src/corelib/io/qfilesystementry_p.h index 2ce0a83..d4d16d0 100644 --- a/src/corelib/io/qfilesystementry_p.h +++ b/src/corelib/io/qfilesystementry_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemiterator_p.h b/src/corelib/io/qfilesystemiterator_p.h index 66f4b1e..2dc4a9f 100644 --- a/src/corelib/io/qfilesystemiterator_p.h +++ b/src/corelib/io/qfilesystemiterator_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemiterator_symbian.cpp b/src/corelib/io/qfilesystemiterator_symbian.cpp index e316526..23c726a 100644 --- a/src/corelib/io/qfilesystemiterator_symbian.cpp +++ b/src/corelib/io/qfilesystemiterator_symbian.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemiterator_unix.cpp b/src/corelib/io/qfilesystemiterator_unix.cpp index 00ccd41..3efdd9e 100644 --- a/src/corelib/io/qfilesystemiterator_unix.cpp +++ b/src/corelib/io/qfilesystemiterator_unix.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemiterator_win.cpp b/src/corelib/io/qfilesystemiterator_win.cpp index b5fce12..0e94130 100644 --- a/src/corelib/io/qfilesystemiterator_win.cpp +++ b/src/corelib/io/qfilesystemiterator_win.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/io/qfilesystemmetadata_p.h b/src/corelib/io/qfilesystemmetadata_p.h index 7f75b05..f7f1fa1 100644 --- a/src/corelib/io/qfilesystemmetadata_p.h +++ b/src/corelib/io/qfilesystemmetadata_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/kernel/qsystemerror.cpp b/src/corelib/kernel/qsystemerror.cpp index 953ed95..3381afa 100644 --- a/src/corelib/kernel/qsystemerror.cpp +++ b/src/corelib/kernel/qsystemerror.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/kernel/qsystemerror_p.h b/src/corelib/kernel/qsystemerror_p.h index c2a13a8..e96e85a 100644 --- a/src/corelib/kernel/qsystemerror_p.h +++ b/src/corelib/kernel/qsystemerror_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp index c60b3d5..fc5b0d9 100644 --- a/src/corelib/plugin/qelfparser_p.cpp +++ b/src/corelib/plugin/qelfparser_p.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h index 8087da5..163d2c1 100644 --- a/src/corelib/plugin/qelfparser_p.h +++ b/src/corelib/plugin/qelfparser_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp index ea3d9a3..1581675 100644 --- a/src/declarative/debugger/qdeclarativedebugserver.cpp +++ b/src/declarative/debugger/qdeclarativedebugserver.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/debugger/qdeclarativedebugserver_p.h b/src/declarative/debugger/qdeclarativedebugserver_p.h index ec3e60f..68ea4d8 100644 --- a/src/declarative/debugger/qdeclarativedebugserver_p.h +++ b/src/declarative/debugger/qdeclarativedebugserver_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h index 631da74..0c2bdb4 100644 --- a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h +++ b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/debugger/qdeclarativedebugservice_p_p.h b/src/declarative/debugger/qdeclarativedebugservice_p_p.h index d2c8dda..d0423f7 100644 --- a/src/declarative/debugger/qdeclarativedebugservice_p_p.h +++ b/src/declarative/debugger/qdeclarativedebugservice_p_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/graphicsitems/qdeclarativepincharea.cpp b/src/declarative/graphicsitems/qdeclarativepincharea.cpp index eae83f6..28b862f 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea.cpp +++ b/src/declarative/graphicsitems/qdeclarativepincharea.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p.h index 6d04708..5d06db0 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea_p.h +++ b/src/declarative/graphicsitems/qdeclarativepincharea_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h index 5641e35..1e1bfa4 100644 --- a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/qml/qperformancetimer.cpp b/src/declarative/qml/qperformancetimer.cpp index 1d7ca80..3b1e09b 100644 --- a/src/declarative/qml/qperformancetimer.cpp +++ b/src/declarative/qml/qperformancetimer.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/qml/qperformancetimer_p.h b/src/declarative/qml/qperformancetimer_p.h index 14310bf..2787921 100644 --- a/src/declarative/qml/qperformancetimer_p.h +++ b/src/declarative/qml/qperformancetimer_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/util/qdeclarativeapplication.cpp b/src/declarative/util/qdeclarativeapplication.cpp index e0f6df2..3e66e14 100644 --- a/src/declarative/util/qdeclarativeapplication.cpp +++ b/src/declarative/util/qdeclarativeapplication.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/declarative/util/qdeclarativeapplication_p.h b/src/declarative/util/qdeclarativeapplication_p.h index caaed18..f59a5fb 100644 --- a/src/declarative/util/qdeclarativeapplication_p.h +++ b/src/declarative/util/qdeclarativeapplication_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index e8a7b89..26d3b87 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 55b5618..9f4260c 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qcocoaintrospection_mac.mm b/src/gui/kernel/qcocoaintrospection_mac.mm index 9b536b7..70c893a 100644 --- a/src/gui/kernel/qcocoaintrospection_mac.mm +++ b/src/gui/kernel/qcocoaintrospection_mac.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qcocoaintrospection_p.h b/src/gui/kernel/qcocoaintrospection_p.h index b9422e8..1c7d6ac 100644 --- a/src/gui/kernel/qcocoaintrospection_p.h +++ b/src/gui/kernel/qcocoaintrospection_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qdesktopwidget_qpa_p.h b/src/gui/kernel/qdesktopwidget_qpa_p.h index 47ccca2..abee8a1 100644 --- a/src/gui/kernel/qdesktopwidget_qpa_p.h +++ b/src/gui/kernel/qdesktopwidget_qpa_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp index 01d40ca..603aa2d 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h index 1c32ab2..701f673 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h +++ b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index 519d2a6..7701612 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qeventdispatcher_qpa_p.h b/src/gui/kernel/qeventdispatcher_qpa_p.h index 8065c3e..d4d2be1 100644 --- a/src/gui/kernel/qeventdispatcher_qpa_p.h +++ b/src/gui/kernel/qeventdispatcher_qpa_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformclipboard_qpa.cpp b/src/gui/kernel/qplatformclipboard_qpa.cpp index fff4e19..e169f08 100644 --- a/src/gui/kernel/qplatformclipboard_qpa.cpp +++ b/src/gui/kernel/qplatformclipboard_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformclipboard_qpa.h b/src/gui/kernel/qplatformclipboard_qpa.h index 3f7bfbb..78cd444 100644 --- a/src/gui/kernel/qplatformclipboard_qpa.h +++ b/src/gui/kernel/qplatformclipboard_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformcursor_qpa.cpp b/src/gui/kernel/qplatformcursor_qpa.cpp index ac557b9..2ea8332 100644 --- a/src/gui/kernel/qplatformcursor_qpa.cpp +++ b/src/gui/kernel/qplatformcursor_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp index fdb3852..0ed43eb 100644 --- a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.h b/src/gui/kernel/qplatformeventloopintegration_qpa.h index 6e0f984..87df7ae 100644 --- a/src/gui/kernel/qplatformeventloopintegration_qpa.h +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 1673aed..86740e8 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 807ed3d..a680c85 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 0cac57d..7fb7fbd 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 7050245..e40cb48 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp index 17a130d..4135c9e 100644 --- a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp +++ b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa_p.h b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h index 77e1da1..a6042a8 100644 --- a/src/gui/kernel/qplatformintegrationfactory_qpa_p.h +++ b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.cpp b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp index 3bf2474..62920b6 100644 --- a/src/gui/kernel/qplatformintegrationplugin_qpa.cpp +++ b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.h b/src/gui/kernel/qplatformintegrationplugin_qpa.h index 9c37cf7..17bcba0 100644 --- a/src/gui/kernel/qplatformintegrationplugin_qpa.h +++ b/src/gui/kernel/qplatformintegrationplugin_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformscreen_qpa.cpp b/src/gui/kernel/qplatformscreen_qpa.cpp index 118835f..c9f3dc6 100644 --- a/src/gui/kernel/qplatformscreen_qpa.cpp +++ b/src/gui/kernel/qplatformscreen_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h index 1f52764..b3bb121 100644 --- a/src/gui/kernel/qplatformscreen_qpa.h +++ b/src/gui/kernel/qplatformscreen_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index b6b6693..19bf7a9 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index abc35d1..41a4bac 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index 44b0698..ddc6239 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 790385b..fa01a8a 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index b6177b0..c53eedb 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h index 39c2f79..9dce7ea 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qblittable.cpp b/src/gui/painting/qblittable.cpp index f4b84a9..5802531 100644 --- a/src/gui/painting/qblittable.cpp +++ b/src/gui/painting/qblittable.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h index cb56cb2..9d0e822 100644 --- a/src/gui/painting/qblittable_p.h +++ b/src/gui/painting/qblittable_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 2e8d9dd..500748e 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index c8aa536..be8b2bc 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qprintengine_pdf.cpp b/src/gui/painting/qprintengine_pdf.cpp index f262144..b7f5160 100644 --- a/src/gui/painting/qprintengine_pdf.cpp +++ b/src/gui/painting/qprintengine_pdf.cpp @@ -936,7 +936,7 @@ void QPdfEnginePrivate::writeInfo() xprintf("\n/Creator "); printString(creator); xprintf("\n/Producer "); - printString(QString::fromLatin1("Qt " QT_VERSION_STR " (C) 2010 Nokia Corporation and/or its subsidiary(-ies)")); + printString(QString::fromLatin1("Qt " QT_VERSION_STR " (C) 2011 Nokia Corporation and/or its subsidiary(-ies)")); QDateTime now = QDateTime::currentDateTime().toUTC(); QTime t = now.time(); QDate d = now.date(); diff --git a/src/gui/painting/qprinterinfo_p.h b/src/gui/painting/qprinterinfo_p.h index 7781d59..fcc1acb 100644 --- a/src/gui/painting/qprinterinfo_p.h +++ b/src/gui/painting/qprinterinfo_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 02ba8db..e7434c7 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 3bc0404..e1157d7 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfont_qpa.cpp b/src/gui/text/qfont_qpa.cpp index 7b09b59..ff12da8 100644 --- a/src/gui/text/qfont_qpa.cpp +++ b/src/gui/text/qfont_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp index e6d99c6..7bcce56 100644 --- a/src/gui/text/qfontdatabase_qpa.cpp +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 2ae60b1..a24a79e 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index b4450fa..7d17aef 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontengine_mac_p.h b/src/gui/text/qfontengine_mac_p.h index 5577c76..6967348 100644 --- a/src/gui/text/qfontengine_mac_p.h +++ b/src/gui/text/qfontengine_mac_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp index cccbc92..851bb59 100644 --- a/src/gui/text/qfontengine_qpa.cpp +++ b/src/gui/text/qfontengine_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qfontengine_qpa_p.h b/src/gui/text/qfontengine_qpa_p.h index 467fca6..e15beae 100644 --- a/src/gui/text/qfontengine_qpa_p.h +++ b/src/gui/text/qfontengine_qpa_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qglyphs.cpp b/src/gui/text/qglyphs.cpp index 2447752..affa08a 100644 --- a/src/gui/text/qglyphs.cpp +++ b/src/gui/text/qglyphs.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qglyphs.h b/src/gui/text/qglyphs.h index 282ecb4..5f37136 100644 --- a/src/gui/text/qglyphs.h +++ b/src/gui/text/qglyphs.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qglyphs_p.h b/src/gui/text/qglyphs_p.h index c39f5d0..c632e2f 100644 --- a/src/gui/text/qglyphs_p.h +++ b/src/gui/text/qglyphs_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index afe762a..ef4e565 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index a1faea9..e0e4f04 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qflickgesture.cpp b/src/gui/util/qflickgesture.cpp index eb0cc8d..8baca07 100644 --- a/src/gui/util/qflickgesture.cpp +++ b/src/gui/util/qflickgesture.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qflickgesture_p.h b/src/gui/util/qflickgesture_p.h index c3c263b..451b579 100644 --- a/src/gui/util/qflickgesture_p.h +++ b/src/gui/util/qflickgesture_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscroller.cpp b/src/gui/util/qscroller.cpp index d60f44e..ac5607c 100644 --- a/src/gui/util/qscroller.cpp +++ b/src/gui/util/qscroller.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscroller.h b/src/gui/util/qscroller.h index 7d7e1ca..a026be4 100644 --- a/src/gui/util/qscroller.h +++ b/src/gui/util/qscroller.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscroller_mac.mm b/src/gui/util/qscroller_mac.mm index 3203036..f544788 100644 --- a/src/gui/util/qscroller_mac.mm +++ b/src/gui/util/qscroller_mac.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscroller_p.h b/src/gui/util/qscroller_p.h index d16eef9..fb2b257 100644 --- a/src/gui/util/qscroller_p.h +++ b/src/gui/util/qscroller_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscrollerproperties.cpp b/src/gui/util/qscrollerproperties.cpp index b159e05..85e2e82 100644 --- a/src/gui/util/qscrollerproperties.cpp +++ b/src/gui/util/qscrollerproperties.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscrollerproperties.h b/src/gui/util/qscrollerproperties.h index e292d8d..75d8932 100644 --- a/src/gui/util/qscrollerproperties.h +++ b/src/gui/util/qscrollerproperties.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/gui/util/qscrollerproperties_p.h b/src/gui/util/qscrollerproperties_p.h index 093f615..76d8b0a 100644 --- a/src/gui/util/qscrollerproperties_p.h +++ b/src/gui/util/qscrollerproperties_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp index b5cf00a..81410a4 100644 --- a/src/network/access/qhttpthreaddelegate.cpp +++ b/src/network/access/qhttpthreaddelegate.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h index 086a35d..3b598aa 100644 --- a/src/network/access/qhttpthreaddelegate_p.h +++ b/src/network/access/qhttpthreaddelegate_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/access/qnetworkreplydataimpl.cpp b/src/network/access/qnetworkreplydataimpl.cpp index 52cfe95..a09ff5c 100644 --- a/src/network/access/qnetworkreplydataimpl.cpp +++ b/src/network/access/qnetworkreplydataimpl.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/access/qnetworkreplydataimpl_p.h b/src/network/access/qnetworkreplydataimpl_p.h index 6c62d28..2048376 100644 --- a/src/network/access/qnetworkreplydataimpl_p.h +++ b/src/network/access/qnetworkreplydataimpl_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/access/qnetworkreplyfileimpl_p.h b/src/network/access/qnetworkreplyfileimpl_p.h index 393e3cd..c5126de 100644 --- a/src/network/access/qnetworkreplyfileimpl_p.h +++ b/src/network/access/qnetworkreplyfileimpl_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/network/bearer/qsharednetworksession_p.h b/src/network/bearer/qsharednetworksession_p.h index dc84166..57b3a49 100644 --- a/src/network/bearer/qsharednetworksession_p.h +++ b/src/network/bearer/qsharednetworksession_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/gl2paintengineex/qglshadercache_meego_p.h b/src/opengl/gl2paintengineex/qglshadercache_meego_p.h index 5f51fc2..d20c731 100644 --- a/src/opengl/gl2paintengineex/qglshadercache_meego_p.h +++ b/src/opengl/gl2paintengineex/qglshadercache_meego_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/gl2paintengineex/qglshadercache_p.h b/src/opengl/gl2paintengineex/qglshadercache_p.h index 29616ae..6e496ab 100644 --- a/src/opengl/gl2paintengineex/qglshadercache_p.h +++ b/src/opengl/gl2paintengineex/qglshadercache_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 0f4b305..f7991b7 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp index 8a544c1..29e32ff 100644 --- a/src/opengl/qglfunctions.cpp +++ b/src/opengl/qglfunctions.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/qglfunctions.h b/src/opengl/qglfunctions.h index 88f43c0..44d9bad 100644 --- a/src/opengl/qglfunctions.h +++ b/src/opengl/qglfunctions.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/qglpixelbuffer_stub.cpp b/src/opengl/qglpixelbuffer_stub.cpp index 2caef6b..98203fd 100644 --- a/src/opengl/qglpixelbuffer_stub.cpp +++ b/src/opengl/qglpixelbuffer_stub.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/opengl/util/meego/main.cpp b/src/opengl/util/meego/main.cpp index 5522855..65d6e57 100644 --- a/src/opengl/util/meego/main.cpp +++ b/src/opengl/util/meego/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp index 502c6a0..3c2d21c 100644 --- a/src/plugins/generic/tslib/main.cpp +++ b/src/plugins/generic/tslib/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/generic/tslib/qtslib.cpp b/src/plugins/generic/tslib/qtslib.cpp index 12963a0..0143db4 100644 --- a/src/plugins/generic/tslib/qtslib.cpp +++ b/src/plugins/generic/tslib/qtslib.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/generic/tslib/qtslib.h b/src/plugins/generic/tslib/qtslib.h index 5eab8b9..4309185 100644 --- a/src/plugins/generic/tslib/qtslib.h +++ b/src/plugins/generic/tslib/qtslib.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp index b8ea5d5..d090e85 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h index 7f794bc..08ba2fa 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp index 67b3f56..f708033 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h index 84f0699..64a3623 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp b/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp index da4b728..8af4d40 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h b/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h index b730415..793d325 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h +++ b/src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp index d379b65..19998ce 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp +++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h index 1e874ba..bd5dbda 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.h +++ b/src/plugins/platforms/directfb/qdirectfbblitter.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp index 91a1b3a..01cef83 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.h b/src/plugins/platforms/directfb/qdirectfbconvenience.h index 3669159..e85c502 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.h +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index 51502f8..3cd81ac 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h index ea8b7b0..f37bbed 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.h +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp index 033ff1e..ee46691 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.h b/src/plugins/platforms/directfb/qdirectfbglcontext.h index 1785666..f25b1a7 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.h +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp index 9d2a8a8..30654bf 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.cpp +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index bca155f..35a345c 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 8639bdb..52b7774 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index 965bdd2..bfd4af4 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index 1cd23ad..040580b 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index 19491c5..4c6476a 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp index b1a8899..81f989d 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h index aaa74d4..a762bf6 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index 1612f79..24c21e6 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index 98c30b8..f624e97 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 4b83a22..126dc74 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h index ac53559..4b98619 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/main.cpp index d0a82b7..c07e546 100644 --- a/src/plugins/platforms/eglfs/main.cpp +++ b/src/plugins/platforms/eglfs/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index a48fde8..f4a97fc 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h index 0342539..c199653 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.h +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index db90ff2..2200d1d 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h index bfbfa62..6a2a504 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.h +++ b/src/plugins/platforms/eglfs/qeglfsscreen.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp index b5b7e05..2ef12aa 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h index 43f185b..ad51114 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.h +++ b/src/plugins/platforms/eglfs/qeglfswindow.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp index ebc04bd..393e646 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.h b/src/plugins/platforms/eglfs/qeglfswindowsurface.h index f8aca40..2fa655b 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.h +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index b000a18..e118ce8 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 45a5663..c5ae378 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp index ee520be..895f8af 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h index 0af118d..f04d453 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 9b9be07..2a3fd5a 100644 --- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h index cf62b88..ee441f7 100644 --- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h index 327c8f5..bfe014a 100644 --- a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h +++ b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp index 82c15c2..b15f183 100644 --- a/src/plugins/platforms/minimal/main.cpp +++ b/src/plugins/platforms/minimal/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index c90e92e..f72fadb 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h index 95b952e..133feee 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.h +++ b/src/plugins/platforms/minimal/qminimalintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp index acf0e6e..dd8c9b7 100644 --- a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.h b/src/plugins/platforms/minimal/qminimalwindowsurface.h index 98b26f6..bfeeaca 100644 --- a/src/plugins/platforms/minimal/qminimalwindowsurface.h +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp index 527747e..ead17a4 100644 --- a/src/plugins/platforms/openkode/main.cpp +++ b/src/plugins/platforms/openkode/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/openkodekeytranslator.h b/src/plugins/platforms/openkode/openkodekeytranslator.h index 0070edc..502bf03 100644 --- a/src/plugins/platforms/openkode/openkodekeytranslator.h +++ b/src/plugins/platforms/openkode/openkodekeytranslator.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp index aefabf0..4ca82db 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h index 73b287f..cef3465 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 763e69e..5176397 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index a067491..ade3366 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 01f8d21..66530a5 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 4992807..83b04b4 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openkode/shaders/frag.glslf b/src/plugins/platforms/openkode/shaders/frag.glslf index c768437..ceac785 100644 --- a/src/plugins/platforms/openkode/shaders/frag.glslf +++ b/src/plugins/platforms/openkode/shaders/frag.glslf @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp b/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp index 69c1ef5..e1298e8 100644 --- a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp +++ b/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h b/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h index a6e17e6..66a10e1 100644 --- a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h +++ b/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index d3710ac..0c0871a 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/baselineserver/src/baselineserver.h b/tests/arthur/baselineserver/src/baselineserver.h index 33b2ed7..cae490f 100644 --- a/tests/arthur/baselineserver/src/baselineserver.h +++ b/tests/arthur/baselineserver/src/baselineserver.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/baselineserver/src/main.cpp b/tests/arthur/baselineserver/src/main.cpp index 02fc2fa..3a03b2f 100644 --- a/tests/arthur/baselineserver/src/main.cpp +++ b/tests/arthur/baselineserver/src/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/baselineserver/src/report.cpp b/tests/arthur/baselineserver/src/report.cpp index 88b5625..5854706 100644 --- a/tests/arthur/baselineserver/src/report.cpp +++ b/tests/arthur/baselineserver/src/report.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/baselineserver/src/report.h b/tests/arthur/baselineserver/src/report.h index 685539e..d549a72 100644 --- a/tests/arthur/baselineserver/src/report.h +++ b/tests/arthur/baselineserver/src/report.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp index cff74cc..0e7e507 100644 --- a/tests/arthur/common/baselineprotocol.cpp +++ b/tests/arthur/common/baselineprotocol.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h index 2315bc3..259555d 100644 --- a/tests/arthur/common/baselineprotocol.h +++ b/tests/arthur/common/baselineprotocol.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/common/lookup3.cpp b/tests/arthur/common/lookup3.cpp index 8cdc64b..1aa501f 100644 --- a/tests/arthur/common/lookup3.cpp +++ b/tests/arthur/common/lookup3.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/common/qbaselinetest.cpp b/tests/arthur/common/qbaselinetest.cpp index 79241d5..1d028f8 100644 --- a/tests/arthur/common/qbaselinetest.cpp +++ b/tests/arthur/common/qbaselinetest.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/arthur/common/qbaselinetest.h b/tests/arthur/common/qbaselinetest.h index e27cda2..dc32109 100644 --- a/tests/arthur/common/qbaselinetest.h +++ b/tests/arthur/common/qbaselinetest.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/baselineexample/tst_baselineexample.cpp b/tests/auto/baselineexample/tst_baselineexample.cpp index b97cc63..02af816 100644 --- a/tests/auto/baselineexample/tst_baselineexample.cpp +++ b/tests/auto/baselineexample/tst_baselineexample.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp b/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp index 64f327b..1168471 100644 --- a/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp +++ b/tests/auto/declarative/qdeclarativeapplication/tst_qdeclarativeapplication.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/declarative/qperformancetimer/tst_qperformancetimer.cpp b/tests/auto/declarative/qperformancetimer/tst_qperformancetimer.cpp index 2029c8a..057a8ca 100644 --- a/tests/auto/declarative/qperformancetimer/tst_qperformancetimer.cpp +++ b/tests/auto/declarative/qperformancetimer/tst_qperformancetimer.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/lancelot/tst_lancelot.cpp b/tests/auto/lancelot/tst_lancelot.cpp index 0e8757b..e515c48 100644 --- a/tests/auto/lancelot/tst_lancelot.cpp +++ b/tests/auto/lancelot/tst_lancelot.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qabstractfileengine/tst_qabstractfileengine.cpp b/tests/auto/qabstractfileengine/tst_qabstractfileengine.cpp index 5952252..1178169 100644 --- a/tests/auto/qabstractfileengine/tst_qabstractfileengine.cpp +++ b/tests/auto/qabstractfileengine/tst_qabstractfileengine.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qfilesystementry/tst_qfilesystementry.cpp b/tests/auto/qfilesystementry/tst_qfilesystementry.cpp index 4375f99..dea6d2e 100644 --- a/tests/auto/qfilesystementry/tst_qfilesystementry.cpp +++ b/tests/auto/qfilesystementry/tst_qfilesystementry.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qglfunctions/tst_qglfunctions.cpp b/tests/auto/qglfunctions/tst_qglfunctions.cpp index 73e63b5..8756438 100644 --- a/tests/auto/qglfunctions/tst_qglfunctions.cpp +++ b/tests/auto/qglfunctions/tst_qglfunctions.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qglyphs/tst_qglyphs.cpp b/tests/auto/qglyphs/tst_qglyphs.cpp index da91063..1c0aa9e 100644 --- a/tests/auto/qglyphs/tst_qglyphs.cpp +++ b/tests/auto/qglyphs/tst_qglyphs.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp index 41da16e..2baee27 100644 --- a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp +++ b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp b/tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp index 1679512..c4fb0e3 100644 --- a/tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp +++ b/tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp b/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp index b13f723..e4b9e4e 100644 --- a/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp +++ b/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp b/tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp index e8b5e0a..78e949c 100644 --- a/tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp +++ b/tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptvaluegenerated/testgen/testgenerator.h b/tests/auto/qscriptvaluegenerated/testgen/testgenerator.h index 1c61fc5..be4f79f 100644 --- a/tests/auto/qscriptvaluegenerated/testgen/testgenerator.h +++ b/tests/auto/qscriptvaluegenerated/testgen/testgenerator.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp b/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp index 962a2af..529558f 100644 --- a/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp +++ b/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h b/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h index 8248ef3..f625399 100644 --- a/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h +++ b/tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qscroller/tst_qscroller.cpp b/tests/auto/qscroller/tst_qscroller.cpp index b4e4ddf..a9b3d9f 100644 --- a/tests/auto/qscroller/tst_qscroller.cpp +++ b/tests/auto/qscroller/tst_qscroller.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/qstringref/tst_qstringref.cpp b/tests/auto/qstringref/tst_qstringref.cpp index 585e14e..301559e 100644 --- a/tests/auto/qstringref/tst_qstringref.cpp +++ b/tests/auto/qstringref/tst_qstringref.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index b0c5702..aa4c15a 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/declarative/qperformancetimer/tst_qperformancetimer.cpp b/tests/benchmarks/declarative/qperformancetimer/tst_qperformancetimer.cpp index 497a556..a03e095 100644 --- a/tests/benchmarks/declarative/qperformancetimer/tst_qperformancetimer.cpp +++ b/tests/benchmarks/declarative/qperformancetimer/tst_qperformancetimer.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp index f94767b..fd5132c 100644 --- a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp +++ b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp b/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp index 4016be1..a9e49b5 100644 --- a/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp +++ b/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp b/tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp index 62f3c2a..926d2ce 100644 --- a/tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp +++ b/tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/script/sunspider/tst_sunspider.cpp b/tests/benchmarks/script/sunspider/tst_sunspider.cpp index 9e2bb6f..da1458e 100644 --- a/tests/benchmarks/script/sunspider/tst_sunspider.cpp +++ b/tests/benchmarks/script/sunspider/tst_sunspider.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/benchmarks/script/v8/tst_v8.cpp b/tests/benchmarks/script/v8/tst_v8.cpp index b9cb859..c23395a 100644 --- a/tests/benchmarks/script/v8/tst_v8.cpp +++ b/tests/benchmarks/script/v8/tst_v8.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/manual/mkspecs/test.sh b/tests/manual/mkspecs/test.sh index 7e942a4..0aae76a 100755 --- a/tests/manual/mkspecs/test.sh +++ b/tests/manual/mkspecs/test.sh @@ -1,7 +1,7 @@ #!/bin/bash ############################################################################# ## -## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ## All rights reserved. ## Contact: Nokia Corporation (qt-info@nokia.com) ## diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf index 491f159..4bd3842 100644 --- a/tools/assistant/tools/assistant/doc/assistant.qdocconf +++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf @@ -10,7 +10,7 @@ description = "Qt Assistant" HTML.{postheader,address} = "" HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\">Trademarks</td>\n" \ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.8.0</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/assistant/tools/assistant/globalactions.cpp b/tools/assistant/tools/assistant/globalactions.cpp index 0eeab21..7fc59eb 100644 --- a/tools/assistant/tools/assistant/globalactions.cpp +++ b/tools/assistant/tools/assistant/globalactions.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/globalactions.h b/tools/assistant/tools/assistant/globalactions.h index ca8d7eb..a9059a9 100644 --- a/tools/assistant/tools/assistant/globalactions.h +++ b/tools/assistant/tools/assistant/globalactions.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesmanager.cpp b/tools/assistant/tools/assistant/openpagesmanager.cpp index 75b8653..272d9e2 100644 --- a/tools/assistant/tools/assistant/openpagesmanager.cpp +++ b/tools/assistant/tools/assistant/openpagesmanager.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesmanager.h b/tools/assistant/tools/assistant/openpagesmanager.h index 5837392..c34686c 100644 --- a/tools/assistant/tools/assistant/openpagesmanager.h +++ b/tools/assistant/tools/assistant/openpagesmanager.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesmodel.cpp b/tools/assistant/tools/assistant/openpagesmodel.cpp index 2663b85..3517693 100644 --- a/tools/assistant/tools/assistant/openpagesmodel.cpp +++ b/tools/assistant/tools/assistant/openpagesmodel.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesmodel.h b/tools/assistant/tools/assistant/openpagesmodel.h index 64013a6..dd28a7c 100644 --- a/tools/assistant/tools/assistant/openpagesmodel.h +++ b/tools/assistant/tools/assistant/openpagesmodel.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesswitcher.cpp b/tools/assistant/tools/assistant/openpagesswitcher.cpp index d4b7d82..8e7f29b 100644 --- a/tools/assistant/tools/assistant/openpagesswitcher.cpp +++ b/tools/assistant/tools/assistant/openpagesswitcher.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpagesswitcher.h b/tools/assistant/tools/assistant/openpagesswitcher.h index e27db6b..80c7e96 100644 --- a/tools/assistant/tools/assistant/openpagesswitcher.h +++ b/tools/assistant/tools/assistant/openpagesswitcher.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/assistant/tools/assistant/openpageswidget.cpp b/tools/assistant/tools/assistant/openpageswidget.cpp index b7ac33e..db03712 100644 --- a/tools/assistant/tools/assistant/openpageswidget.cpp +++ b/tools/assistant/tools/assistant/openpageswidget.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/doxygen/config/footer.html b/tools/doxygen/config/footer.html index 8e99c72..d7e968d 100644 --- a/tools/doxygen/config/footer.html +++ b/tools/doxygen/config/footer.html @@ -1,6 +1,6 @@ <p /><address><hr /><div align="center"> <table width="100%" cellspacing="0" border="0"><tr class="address"> -<td width="30%">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies).</td> +<td width="30%">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies).</td> <td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td> <td width="30%" align="right"><div align="right">Qt $projectnumber</div></td> </tr></table></div></address> diff --git a/tools/qdoc3/doc/qdoc-manual.qdocconf b/tools/qdoc3/doc/qdoc-manual.qdocconf index 9514d63..53486be 100644 --- a/tools/qdoc3/doc/qdoc-manual.qdocconf +++ b/tools/qdoc3/doc/qdoc-manual.qdocconf @@ -174,7 +174,7 @@ HTML.footer = "" \ " </div> \n" \ " <div class=\"footer\">\n" \ " <p>\n" \ - " <acronym title=\"Copyright\">©</acronym> 2008-2010 Nokia Corporation and/or its\n" \ + " <acronym title=\"Copyright\">©</acronym> 2008-2011 Nokia Corporation and/or its\n" \ " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ " in Finland and/or other countries worldwide.</p>\n" \ " <p>\n" \ diff --git a/tools/qdoc3/jscodemarker.cpp b/tools/qdoc3/jscodemarker.cpp index 5a513f7..e0b7c50 100644 --- a/tools/qdoc3/jscodemarker.cpp +++ b/tools/qdoc3/jscodemarker.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/qmlcodemarker.cpp b/tools/qdoc3/qmlcodemarker.cpp index a7dc5a0..bdb2631 100644 --- a/tools/qdoc3/qmlcodemarker.cpp +++ b/tools/qdoc3/qmlcodemarker.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/qmlcodeparser.cpp b/tools/qdoc3/qmlcodeparser.cpp index 9c1d4ee..269a566 100644 --- a/tools/qdoc3/qmlcodeparser.cpp +++ b/tools/qdoc3/qmlcodeparser.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/qmlmarkupvisitor.cpp b/tools/qdoc3/qmlmarkupvisitor.cpp index 7acac48..f849319 100644 --- a/tools/qdoc3/qmlmarkupvisitor.cpp +++ b/tools/qdoc3/qmlmarkupvisitor.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/qmlmarkupvisitor.h b/tools/qdoc3/qmlmarkupvisitor.h index 709a858..6cee613 100644 --- a/tools/qdoc3/qmlmarkupvisitor.h +++ b/tools/qdoc3/qmlmarkupvisitor.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/qmlvisitor.cpp b/tools/qdoc3/qmlvisitor.cpp index 9295624..7045313 100644 --- a/tools/qdoc3/qmlvisitor.cpp +++ b/tools/qdoc3/qmlvisitor.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tools/qdoc3/test/carbide-eclipse-integration.qdocconf b/tools/qdoc3/test/carbide-eclipse-integration.qdocconf index 4d43403..ff50ce6 100644 --- a/tools/qdoc3/test/carbide-eclipse-integration.qdocconf +++ b/tools/qdoc3/test/carbide-eclipse-integration.qdocconf @@ -6,7 +6,7 @@ macro.TheEclipseIntegration = Carbide.c++ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\"><a href=\"http://qt.nokia.com/doc\">Trademarks</a></td>\n" \ "<td width=\"30%\" align=\"right\"><div align=\"right\">Carbide.c++</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/qdoc3/test/jambi.qdocconf b/tools/qdoc3/test/jambi.qdocconf index aa87826..3f4b42d 100644 --- a/tools/qdoc3/test/jambi.qdocconf +++ b/tools/qdoc3/test/jambi.qdocconf @@ -42,7 +42,7 @@ HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0 HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt Jambi \\version</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf b/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf index fa15d90..a69d7a1 100644 --- a/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_ja_JP-online.qdocconf @@ -149,7 +149,7 @@ HTML.footer = \ " </div> \n" \ " <div class=\"footer\">\n" \ " <p>\n" \ - " <acronym title=\"Copyright\">©</acronym> 2008-2010 Nokia Corporation and/or its\n" \ + " <acronym title=\"Copyright\">©</acronym> 2008-2011 Nokia Corporation and/or its\n" \ " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ " in Finland and/or other countries worldwide.</p>\n" \ " <p>\n" \ diff --git a/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf index 18ed5c1..74a4d14 100644 --- a/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_ja_JP.qdocconf @@ -36,7 +36,7 @@ HTML.footer = \ " </div> \n" \ " <div class=\"footer\">\n" \ " <p>\n" \ - " <acronym title=\"Copyright\">©</acronym> 2008-2010 Nokia Corporation and/or its\n" \ + " <acronym title=\"Copyright\">©</acronym> 2008-2011 Nokia Corporation and/or its\n" \ " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ " in Finland and/or other countries worldwide.</p>\n" \ " <p>\n" \ diff --git a/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf b/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf index 285ec27..ed2162e 100644 --- a/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_zh_CN-online.qdocconf @@ -149,7 +149,7 @@ HTML.footer = \ " </div> \n" \ " <div class=\"footer\">\n" \ " <p>\n" \ - " <acronym title=\"Copyright\">©</acronym> 2008-2010 Nokia Corporation and/or its\n" \ + " <acronym title=\"Copyright\">©</acronym> 2008-2011 Nokia Corporation and/or its\n" \ " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ " in Finland and/or other countries worldwide.</p>\n" \ " <p>\n" \ diff --git a/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf b/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf index 402ee9e..b4c8f7b 100644 --- a/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-html-templates_zh_CN.qdocconf @@ -149,7 +149,7 @@ HTML.footer = \ " </div> \n" \ " <div class=\"footer\">\n" \ " <p>\n" \ - " <acronym title=\"Copyright\">©</acronym> 2008-2010 Nokia Corporation and/or its\n" \ + " <acronym title=\"Copyright\">©</acronym> 2008-2011 Nokia Corporation and/or its\n" \ " subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation \n" \ " in Finland and/or other countries worldwide.</p>\n" \ " <p>\n" \ diff --git a/tools/qdoc3/test/standalone-eclipse-integration.qdocconf b/tools/qdoc3/test/standalone-eclipse-integration.qdocconf index 96c2c98..850a2db 100644 --- a/tools/qdoc3/test/standalone-eclipse-integration.qdocconf +++ b/tools/qdoc3/test/standalone-eclipse-integration.qdocconf @@ -5,7 +5,7 @@ macro.TheEclipseIntegration = The Qt Eclipse Integration HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\"><a href=\"http://qt.nokia.com/doc/trademarks.html\">Trademarks</a></td>\n" \ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt Eclipse Integration 1.5.3</div></td>\n" \ "</tr></table></div></address>" diff --git a/translations/assistant_cs.ts b/translations/assistant_cs.ts index 9b9e486..be54f86 100755 --- a/translations/assistant_cs.ts +++ b/translations/assistant_cs.ts @@ -1078,7 +1078,7 @@ Grund: <translation>Nepodařilo se najít příslušnou položku obsahu.</translation> </message> <message> - <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p></source> + <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></source> <translation><center><h3>%1</h3><p>Verze %2</p></center><p>Autorské právo (C) 2009 Nokia Corporation a/nebo její dceřinná společnost(i).</p></translation> </message> <message> diff --git a/translations/assistant_sl.ts b/translations/assistant_sl.ts index a7f79e0..40dff80 100644 --- a/translations/assistant_sl.ts +++ b/translations/assistant_sl.ts @@ -1088,7 +1088,7 @@ Razlog: </message> <message> <source><center><h3>%1</h3><p>Version %2</p></center><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p></source> - <translation><center><h3>%1</h3><p>Različica %2</p></center><p>Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.</p><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> + <translation><center><h3>%1</h3><p>Različica %2</p></center><p>Avtorske pravice © 2011 Nokia Corporation in/ali njene podružnice.</p><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> </message> <message> <source>About %1</source> diff --git a/translations/designer_cs.ts b/translations/designer_cs.ts index 4099695..3db20bd 100755 --- a/translations/designer_cs.ts +++ b/translations/designer_cs.ts @@ -3259,7 +3259,7 @@ Chcete tuto předlohu přepsat?</translation> <translation><br/>Qt Designer je obrazový návrhář uživatelského rozhraní pro programy Qt.<br/></translation> </message> <message> - <source>%1<br/>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> + <source>%1<br/>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> <translation>%1<br/>Autorské právo (C) 2009 Nokia Corporation a/nebo její dceřinná společnost(i).</translation> </message> <message> diff --git a/translations/linguist_cs.ts b/translations/linguist_cs.ts index 5023355..fb56289 100755 --- a/translations/linguist_cs.ts +++ b/translations/linguist_cs.ts @@ -1907,8 +1907,8 @@ Všechny soubory (*)</translation> <translation>Verze %1</translation> </message> <message> - <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist je nástrojem pro přidávání překladů do programů Qt.</p><p>Copyright (C) 2010 Nokia Corporation a/nebo její dceřinná společnost(i).</translation> + <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist je nástrojem pro přidávání překladů do programů Qt.</p><p>Copyright (C) 2011 Nokia Corporation a/nebo její dceřinná společnost(i).</translation> </message> <message> <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source> diff --git a/translations/linguist_sl.ts b/translations/linguist_sl.ts index 4499133..b5769e4 100644 --- a/translations/linguist_sl.ts +++ b/translations/linguist_sl.ts @@ -1749,7 +1749,7 @@ Vse datoteke (*)</translation> </message> <message> <source><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist je orodje za dodajanje prevodov programom Qt..</p><p>Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.</p><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> + <translation><center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist je orodje za dodajanje prevodov programom Qt..</p><p>Avtorske pravice © 2011 Nokia Corporation in/ali njene podružnice.</p><p>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></p></translation> </message> <message> <source>Do you want to save the modified files?</source> diff --git a/translations/qt_cs.ts b/translations/qt_cs.ts index 3e72f01..193dfa4 100755 --- a/translations/qt_cs.ts +++ b/translations/qt_cs.ts @@ -3763,8 +3763,8 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <translation>Nápověda</translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> - <translation><p>Qt je sadou softwarových nástrojů C++ určených pro vývoj aplikací napříč platformami.</p><p>Qt poskytuje jednoduchou přenositelnost přes MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, a všechny hlavní obchodní varianty systému Unix. Qt je rovněž dostupný pro vložená zařízení jako Qt pro Embedded Linux a Qt pro Windows CE.</p><p>Qt je dostupné pod třemi rozdílnými licenčními volbami navrženými pro přizpůsobení se potřebám našich různých uživatelů.</p>Qt licencované pod naší obchodní licenční smlouvou je vhodné pro vývoj soukromého/obchodního software, kde si nepřejete sdílet jakýkoli zdrojový kód se třetími stranami, nebo jinak řečeno, když nemůžete vyhovět podmínkám GNU LGPL ve verzi 2.1 nebo GNU GPL ve verzi 3.0.</p><p>Qt licencované pod GNU LGPL ve verzi 2.1 je vhodné pro vývoj Qt aplikací (soukromých nebo s otevřeným zdrojovým kódem), za předpokladu že můžete souhlasit s požadavky a podmínkami GNU LGPL version 2.1.</p><p>Qt licencované pod GNU General Public License ve verzi 3.0 je vhodné pro vývoj aplikací Qt, u nichž si přejete použít takovou aplikaci ve spojení se software, který podléhá požadavkům GNU GPL ve verzi 3.0, nebo kde jste jinak ochoten souhlasit s podmínkami GNU GPL ve verzi 3.0.</p><p>Podívejte se, prosím, na <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> kvůli přehledu licencování Qt.</p><p>Autorské právo (C) 2010 Nokia Corporation a/nebo její dceřinná(é) společnost(i).</p><p>Qt je výrobkem společnosti Nokia. Podívejte se na <a href="http://qt.nokia.com/">qt.nokia.com</a>kvůli více informacím.</p></translation> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <translation><p>Qt je sadou softwarových nástrojů C++ určených pro vývoj aplikací napříč platformami.</p><p>Qt poskytuje jednoduchou přenositelnost přes MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, a všechny hlavní obchodní varianty systému Unix. Qt je rovněž dostupný pro vložená zařízení jako Qt pro Embedded Linux a Qt pro Windows CE.</p><p>Qt je dostupné pod třemi rozdílnými licenčními volbami navrženými pro přizpůsobení se potřebám našich různých uživatelů.</p>Qt licencované pod naší obchodní licenční smlouvou je vhodné pro vývoj soukromého/obchodního software, kde si nepřejete sdílet jakýkoli zdrojový kód se třetími stranami, nebo jinak řečeno, když nemůžete vyhovět podmínkám GNU LGPL ve verzi 2.1 nebo GNU GPL ve verzi 3.0.</p><p>Qt licencované pod GNU LGPL ve verzi 2.1 je vhodné pro vývoj Qt aplikací (soukromých nebo s otevřeným zdrojovým kódem), za předpokladu že můžete souhlasit s požadavky a podmínkami GNU LGPL version 2.1.</p><p>Qt licencované pod GNU General Public License ve verzi 3.0 je vhodné pro vývoj aplikací Qt, u nichž si přejete použít takovou aplikaci ve spojení se software, který podléhá požadavkům GNU GPL ve verzi 3.0, nebo kde jste jinak ochoten souhlasit s podmínkami GNU GPL ve verzi 3.0.</p><p>Podívejte se, prosím, na <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> kvůli přehledu licencování Qt.</p><p>Autorské právo (C) 2011 Nokia Corporation a/nebo její dceřinná(é) společnost(i).</p><p>Qt je výrobkem společnosti Nokia. Podívejte se na <a href="http://qt.nokia.com/">qt.nokia.com</a>kvůli více informacím.</p></translation> </message> <message> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> diff --git a/translations/qt_gl.ts b/translations/qt_gl.ts index 23e71c2..2431a5d 100644 --- a/translations/qt_gl.ts +++ b/translations/qt_gl.ts @@ -3728,7 +3728,7 @@ ou comercial onde non é preciso compartir ningún código fonte con terceiras p <p>Qt é un produto de Nokia. Consulte <a href="http://qt.nokia.com/">qt.nokia.com</a> para máis información.</p></translation> </message> <message> - <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> + <source><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> <translation type="obsolete"><p>Qt é un toolkit de C++ para o desenvolvemento de programas multiplataforma.</p> <p>Qt fornece portabilidade entre MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux e as principais variantes comerciais de Unix cun único código fonte. Qt tamén está dispoñíbel para dispositivos incrustados como Qt para Embedded Linux e Qt para Windows CE.</p> <p>Qt está dispoñíbel en tres opcións de licenzas diferentes deseñadas para adaptarse ás necesidades dos diferentes usuarios.</p> </p>Qt distribuída sob o acordo de licenza comercial é adecuado para o desenvolvemento de software propietario @@ -3736,7 +3736,7 @@ ou comercial onde non é preciso compartir ningún código fonte con terceiras p <p>Qt sob a licenza GNU General Public License versión 2.1 é apropiada para o desenvolvemento de programas Qt (propietario ou de fontes abertas) supoñendo que poda cumprir cos termos e condicións da licenza GNU GPL versión 2.1.</p> <p>Qt sob a licenza GNU General Public License versión 3.0 é apropiada para o desenvolvemento de programas Qt onde desexe empregar tales programas en combinación con software suxeito aos termos da GNU GPL versión 3.0 ou onde desexe cumprir cos termos da GNU GPL versión 3.0.</p> <p>Consulte <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> para ler un resumo das licenzas de Qt.</p> -<p>Copyright (C) 2010 Nokia Corporation ou as súas subsidiarias.</p> +<p>Copyright (C) 2011 Nokia Corporation ou as súas subsidiarias.</p> <p>Qt é un produto de Nokia. Consulte <a href="http://qt.nokia.com/">qt.nokia.com</a> para máis información.</p></translation> </message> <message> diff --git a/translations/qtconfig_sl.ts b/translations/qtconfig_sl.ts index 568efbe..9e09432 100644 --- a/translations/qtconfig_sl.ts +++ b/translations/qtconfig_sl.ts @@ -96,7 +96,7 @@ </message> <message> <source><h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source> - <translation><h3>%1</h3><br/>Različica %2<br/><br/>Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.<br/><br/>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></translation> + <translation><h3>%1</h3><br/>Različica %2<br/><br/>Avtorske pravice © 2011 Nokia Corporation in/ali njene podružnice.<br/><br/>Prevedel: <a href="mailto:jlp@holodeck1.com">Jure Repinc</a>, <a href="http://www.lugos.si/">LUGOS</a></translation> </message> <message> <source>Qt Configuration</source> diff --git a/util/qlalr/doc/qlalr.qdocconf b/util/qlalr/doc/qlalr.qdocconf index ea9eaa6..f5af331 100644 --- a/util/qlalr/doc/qlalr.qdocconf +++ b/util/qlalr/doc/qlalr.qdocconf @@ -59,7 +59,7 @@ HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0 HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt \\version</div></td>\n" \ "</tr></table></div></address>" -- cgit v0.12 From c7787f7df7a507d29b49f66b430e251d1a879ccd Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Fri, 11 Mar 2011 12:03:58 +1000 Subject: Fix compiler warning. Add parentheses around nested || statment. Change-Id: I836b39b438dea5236d2c45a9920cd8307623df3d --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 6c26fd3..12d0c98 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1672,8 +1672,8 @@ void QDeclarativeTextInput::moveCursorSelection(int pos, SelectionMode mode) finder.setPosition(anchor); const QTextBoundaryFinder::BoundaryReasons reasons = finder.boundaryReasons(); - if (anchor < text.length() && !(reasons & QTextBoundaryFinder::StartWord) - || ((reasons & QTextBoundaryFinder::EndWord) && anchor > cursor)) { + if (anchor < text.length() && (!(reasons & QTextBoundaryFinder::StartWord) + || ((reasons & QTextBoundaryFinder::EndWord) && anchor > cursor))) { finder.toPreviousBoundary(); } anchor = finder.position() != -1 ? finder.position() : 0; @@ -1690,8 +1690,8 @@ void QDeclarativeTextInput::moveCursorSelection(int pos, SelectionMode mode) finder.setPosition(anchor); const QTextBoundaryFinder::BoundaryReasons reasons = finder.boundaryReasons(); - if (anchor > 0 && !(reasons & QTextBoundaryFinder::EndWord) - || ((reasons & QTextBoundaryFinder::StartWord) && anchor < cursor)) { + if (anchor > 0 && (!(reasons & QTextBoundaryFinder::EndWord) + || ((reasons & QTextBoundaryFinder::StartWord) && anchor < cursor))) { finder.toNextBoundary(); } anchor = finder.position() != -1 ? finder.position() : text.length(); -- cgit v0.12 From 68415b0bcc3e531dc16516aa6788aeef8bced6f2 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Fri, 11 Mar 2011 12:39:04 +1000 Subject: Fix ListView boundary extents for RTL layout. The delegates were laid out RTL, but the first item was not aligned with the right edge. Also fixes QTBUG-18037. Change-Id: I6387c2f1ad37385376304f8cc76407b34d9fb834 Task-number: QTBUG-16010 Reviewed-by: Joona Petrell --- .../graphicsitems/qdeclarativelistview.cpp | 48 +++++++-- .../qdeclarativelistview/data/headerfooter.qml | 26 +++++ .../tst_qdeclarativelistview.cpp | 117 +++++++++++++++++++++ 3 files changed, 182 insertions(+), 9 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativelistview/data/headerfooter.qml diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index f9f1a48..2c23a1b 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -272,6 +272,22 @@ public: void regenerate() { Q_Q(QDeclarativeListView); if (q->isComponentComplete()) { + if (header) { + if (q->scene()) + q->scene()->removeItem(header->item); + header->item->deleteLater(); + delete header; + header = 0; + } + if (footer) { + if (q->scene()) + q->scene()->removeItem(footer->item); + footer->item->deleteLater(); + delete footer; + footer = 0; + } + updateHeader(); + updateFooter(); clear(); setPosition(0); q->refill(); @@ -2633,7 +2649,8 @@ qreal QDeclarativeListView::maxYExtent() const return height(); if (d->maxExtentDirty) { if (!d->model || !d->model->count()) { - d->maxExtent = 0; + d->maxExtent = d->header ? -d->header->size() : 0; + d->maxExtent += height(); } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { d->maxExtent = -(d->positionAt(d->model->count()-1) - d->highlightRangeStart); if (d->highlightRangeEnd != d->highlightRangeStart) @@ -2661,21 +2678,26 @@ qreal QDeclarativeListView::minXExtent() const qreal highlightStart; qreal highlightEnd; - qreal endPositionFirstItem; + qreal endPositionFirstItem = 0; if (d->isRightToLeft()) { if (d->model && d->model->count()) endPositionFirstItem = d->positionAt(d->model->count()-1); + else if (d->header) + d->minExtent += d->header->size(); highlightStart = d->highlightRangeStartValid ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem) : d->size() - (d->lastPosition()-endPositionFirstItem); highlightEnd = d->highlightRangeEndValid ? d->highlightRangeEnd : d->size(); if (d->footer) d->minExtent += d->footer->size(); + qreal maxX = maxXExtent(); + if (d->minExtent < maxX) + d->minExtent = maxX; } else { endPositionFirstItem = d->endPositionAt(0); highlightStart = d->highlightRangeStart; highlightEnd = d->highlightRangeEnd; - if (d->header) + if (d->header && d->visibleItems.count()) d->minExtent += d->header->size(); } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { @@ -2696,7 +2718,8 @@ qreal QDeclarativeListView::maxXExtent() const if (d->maxExtentDirty) { qreal highlightStart; qreal highlightEnd; - qreal lastItemPosition; + qreal lastItemPosition = 0; + d->maxExtent = 0; if (d->isRightToLeft()) { highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size(); highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size(); @@ -2708,7 +2731,9 @@ qreal QDeclarativeListView::maxXExtent() const lastItemPosition = d->positionAt(d->model->count()-1); } if (!d->model || !d->model->count()) { - d->maxExtent = 0; + if (!d->isRightToLeft()) + d->maxExtent = d->header ? -d->header->size() : 0; + d->maxExtent += width(); } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { d->maxExtent = -(lastItemPosition - highlightStart); if (highlightEnd != highlightStart) { @@ -2720,15 +2745,15 @@ qreal QDeclarativeListView::maxXExtent() const d->maxExtent = -(d->endPosition() - width() + 1); } if (d->isRightToLeft()) { - if (d->header) + if (d->header && d->visibleItems.count()) d->maxExtent -= d->header->size(); } else { if (d->footer) d->maxExtent -= d->footer->size(); + qreal minX = minXExtent(); + if (d->maxExtent > minX) + d->maxExtent = minX; } - qreal minX = minXExtent(); - if (d->maxExtent > minX) - d->maxExtent = minX; d->maxExtentDirty = false; } return d->maxExtent; @@ -2776,6 +2801,11 @@ void QDeclarativeListView::geometryChanged(const QRectF &newGeometry, Q_D(QDeclarativeListView); d->maxExtentDirty = true; d->minExtentDirty = true; + if (d->isRightToLeft() && d->orient == Qt::Horizontal) { + // maintain position relative to the right edge + int dx = newGeometry.width() - oldGeometry.width(); + setContentX(contentX() - dx); + } QDeclarativeFlickable::geometryChanged(newGeometry, oldGeometry); } diff --git a/tests/auto/declarative/qdeclarativelistview/data/headerfooter.qml b/tests/auto/declarative/qdeclarativelistview/data/headerfooter.qml new file mode 100644 index 0000000..5633831 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/headerfooter.qml @@ -0,0 +1,26 @@ +import QtQuick 1.1 + +ListView { + id: view + property bool horizontal: false + property bool rtl: false + width: 240 + height: 320 + + orientation: horizontal ? ListView.Horizontal : ListView.Vertical + header: Rectangle { + objectName: "header" + width: horizontal ? 20 : view.width + height: horizontal ? view.height : 20 + color: "red" + } + footer: Rectangle { + objectName: "footer" + width: horizontal ? 30 : view.width + height: horizontal ? view.height : 30 + color: "blue" + } +// model: testModel + delegate: Text { width: 30; height: 30; text: index + "(" + x + ")" } + layoutDirection: rtl ? Qt.RightToLeft : Qt.LeftToRight +} diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index a699bbe..c87318e 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -103,6 +103,7 @@ private slots: void QTBUG_11105(); void header(); void footer(); + void headerFooter(); void resizeView(); void sizeLessThan1(); void QTBUG_14821(); @@ -1958,6 +1959,112 @@ void tst_QDeclarativeListView::footer() delete canvas; } +class LVAccessor : public QDeclarativeListView +{ +public: + qreal minY() const { return minYExtent(); } + qreal maxY() const { return maxYExtent(); } + qreal minX() const { return minXExtent(); } + qreal maxX() const { return maxXExtent(); } +}; + +void tst_QDeclarativeListView::headerFooter() +{ + { + // Vertical + QDeclarativeView *canvas = createView(); + + TestModel model; + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/headerfooter.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(canvas->rootObject()); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeItem *header = findItem<QDeclarativeItem>(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->y(), 0.0); + + QDeclarativeItem *footer = findItem<QDeclarativeItem>(contentItem, "footer"); + QVERIFY(footer); + QCOMPARE(footer->y(), 20.0); + + QVERIFY(static_cast<LVAccessor*>(listview)->minY() == 0); + QVERIFY(static_cast<LVAccessor*>(listview)->maxY() == 0); + + delete canvas; + } + { + // Horizontal + QDeclarativeView *canvas = createView(); + + TestModel model; + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/headerfooter.qml")); + canvas->rootObject()->setProperty("horizontal", true); + qApp->processEvents(); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(canvas->rootObject()); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeItem *header = findItem<QDeclarativeItem>(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->x(), 0.0); + + QDeclarativeItem *footer = findItem<QDeclarativeItem>(contentItem, "footer"); + QVERIFY(footer); + QCOMPARE(footer->x(), 20.0); + + QVERIFY(static_cast<LVAccessor*>(listview)->minX() == 0); + QVERIFY(static_cast<LVAccessor*>(listview)->maxX() == 0); + + delete canvas; + } + { + // Horizontal RTL + QDeclarativeView *canvas = createView(); + + TestModel model; + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/headerfooter.qml")); + canvas->rootObject()->setProperty("horizontal", true); + canvas->rootObject()->setProperty("rtl", true); + qApp->processEvents(); + + QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(canvas->rootObject()); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeItem *header = findItem<QDeclarativeItem>(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->x(), -20.0); + + QDeclarativeItem *footer = findItem<QDeclarativeItem>(contentItem, "footer"); + QVERIFY(footer); + QCOMPARE(footer->x(), -50.0); + + QCOMPARE(static_cast<LVAccessor*>(listview)->minX(), 240.); + QCOMPARE(static_cast<LVAccessor*>(listview)->maxX(), 240.); + + delete canvas; + } +} + void tst_QDeclarativeListView::resizeView() { QDeclarativeView *canvas = createView(); @@ -2360,6 +2467,7 @@ void tst_QDeclarativeListView::testQtQuick11Attributes_data() void tst_QDeclarativeListView::rightToLeft() { QDeclarativeView *canvas = createView(); + canvas->setFixedSize(640,320); canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/rightToLeft.qml")); qApp->processEvents(); @@ -2376,6 +2484,9 @@ void tst_QDeclarativeListView::rightToLeft() QTRY_VERIFY(model->count() == 3); QTRY_COMPARE(listview->currentIndex(), 0); + // initial position at first item, right edge aligned + QCOMPARE(listview->contentX(), -640.); + QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "item1"); QTRY_VERIFY(item); QTRY_COMPARE(item->x(), -100.0); @@ -2395,6 +2506,12 @@ void tst_QDeclarativeListView::rightToLeft() QTRY_VERIFY(text); QTRY_COMPARE(text->text(), QLatin1String("index: 2")); + QCOMPARE(listview->contentX(), -640.); + + // Ensure resizing maintains position relative to right edge + qobject_cast<QDeclarativeItem*>(canvas->rootObject())->setWidth(600); + QTRY_COMPARE(listview->contentX(), -600.); + delete canvas; } -- cgit v0.12 From 27f0c5054e5326bf16f40436ba4e72927ea89cc1 Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Thu, 10 Mar 2011 16:38:20 +1000 Subject: Don't reveal TextInput text on refocus in PasswordEchoOnEdit mode. In PasswordEchoOnEdit mode return the display text instead of the real text from inputMethodQuery() when not editing the password and clear old password if new input is received through an input method event. Change-Id: I7f24f510bf8e356e460900c3b9ff55ea16b32ab3 Task-number: QTBUG-17562 Reviewed-by: Joona Petrell --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 7 ++++++- src/gui/widgets/qlinecontrol.cpp | 6 +++++- .../qdeclarativetextinput/tst_qdeclarativetextinput.cpp | 10 ++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 12d0c98..b4395e3 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1374,7 +1374,10 @@ QVariant QDeclarativeTextInput::inputMethodQuery(Qt::InputMethodQuery property) case Qt::ImCursorPosition: return QVariant(d->control->cursor()); case Qt::ImSurroundingText: - return QVariant(text()); + if (d->control->echoMode() == PasswordEchoOnEdit && !d->control->passwordEchoEditing()) + return QVariant(displayText()); + else + return QVariant(text()); case Qt::ImCurrentSelection: return QVariant(selectedText()); case Qt::ImMaximumTextLength: @@ -1867,6 +1870,8 @@ void QDeclarativeTextInputPrivate::init() #endif // QT_NO_CLIPBOARD q->connect(control, SIGNAL(updateMicroFocus()), q, SLOT(updateMicroFocus())); + q->connect(control, SIGNAL(displayTextChanged(QString)), + q, SLOT(updateRect())); q->updateSize(); oldValidity = control->hasAcceptableInput(); lastSelectionStart = 0; diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index bffc2b5..5a281ad 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -414,10 +414,14 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) if (isGettingInput) { // If any text is being input, remove selected text. priorState = m_undoState; + if (echoMode() == QLineEdit::PasswordEchoOnEdit && !passwordEchoEditing()) { + updatePasswordEchoEditing(true); + m_selstart = 0; + m_selend = m_text.length(); + } removeSelectedText(); } - int c = m_cursor; // cursor position after insertion of commit string if (event->replacementStart() <= 0) c += event->commitString().length() - qMin(-event->replacementStart(), event->replacementLength()); diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp index 796ac23..45f38a4 100644 --- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp +++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp @@ -1829,13 +1829,23 @@ void tst_qdeclarativetextinput::echoMode() QCOMPARE(input->inputMethodHints(), ref); QCOMPARE(input->text(), initial); QCOMPARE(input->displayText(), QLatin1String("QQQQQQQQ")); + QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QLatin1String("QQQQQQQQ")); QTest::keyPress(canvas, Qt::Key_A);//Clearing previous entry is part of PasswordEchoOnEdit QTest::keyRelease(canvas, Qt::Key_A, Qt::NoModifier ,10); QCOMPARE(input->text(), QLatin1String("a")); QCOMPARE(input->displayText(), QLatin1String("a")); + QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QLatin1String("a")); input->setFocus(false); QVERIFY(input->hasActiveFocus() == false); QCOMPARE(input->displayText(), QLatin1String("Q")); + QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QLatin1String("Q")); + input->setFocus(true); + QInputMethodEvent inputEvent; + inputEvent.setCommitString(initial); + QApplication::sendEvent(canvas, &inputEvent); + QCOMPARE(input->text(), initial); + QCOMPARE(input->displayText(), initial); + QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), initial); delete canvas; } -- cgit v0.12 From c422ed3b861ab92276c91a6672b313f037de6ff6 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Fri, 11 Mar 2011 17:10:16 +1000 Subject: Update QML "What's New" docs. Change-Id: I80d2247cd05ef71907bbf690e8e68a8860a65d4c --- doc/src/declarative/whatsnew.qdoc | 42 +++++++++++++++++++--- src/declarative/graphicsitems/qdeclarativeitem.cpp | 4 +++ .../graphicsitems/qdeclarativetextedit.cpp | 2 +- .../graphicsitems/qdeclarativetextinput.cpp | 2 +- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/doc/src/declarative/whatsnew.qdoc b/doc/src/declarative/whatsnew.qdoc index e8c2124..1a8ebd7 100644 --- a/doc/src/declarative/whatsnew.qdoc +++ b/doc/src/declarative/whatsnew.qdoc @@ -31,20 +31,33 @@ \section1 Qt 4.7.3 includes QtQuick 1.1 -QtQuick 1.1 is a minor feature update. +QtQuick 1.1 is a minor feature update. \e {import QtQuick 1.1} to use the new features. \section2 PinchArea PinchArea provides support for the common two finger pinch gesture. +\section2 LayoutMirroring + +\l {LayoutMirroring}{Layout mirroring} is useful when you need to support both left-to-right and right-to-left layout versions of your application that target different language areas. + +\section2 Anchors + +Added the following property: +\list +\o \l {Item::}{anchors.mirrored} +\endlist + \section2 Text Added the following properties: \list \o \l {Text::}{lineHeight} +\o \l {Text::}{lineHeightMode} \o \l {Text::}{lineCount} \o \l {Text::}{maximumLineCount} \o \l {Text::}{truncated} +\o \l {Text::}{effectiveHorizontalAlignment} \endlist horizontalAlignment now accepts Text.AlignJustify alignment mode. @@ -55,7 +68,11 @@ Added the following properties, methods and signal handlers: \list \o \l {TextEdit::}{canPaste} \o \l {TextEdit::}{lineCount} +\o \l {TextEdit::}{inputMethodComposing} +\o \l {TextEdit::}{mouseSelectionMode} +\o \l {TextEdit::}{effectiveHorizontalAlignment} \o \l {TextEdit::}{deselect()} +\o \l {TextEdit::}{isRightToLeft()} \o \l {TextEdit::}{moveCursorSelection()} to enable selection by word \o \l {TextEdit::}{onLinkActivated} \endlist @@ -64,9 +81,13 @@ Added the following properties, methods and signal handlers: Added the following properties and methods: \list -\o \l{TextInput::}{canPaste} -\o \l{TextInput::}{deselect()} -\o \l{TextInput::}{moveCursorSelection()} to enable selection by word +\o \l {TextInput::}{canPaste} +\o \l {TextInput::}{inputMethodComposing} +\o \l {TextInput::}{mouseSelectionMode} +\o \l {TextInput::}{effectiveHorizontalAlignment} +\o \l {TextInput::}{deselect()} +\o \l {TextInput::}{isRightToLeft()} +\o \l {TextInput::}{moveCursorSelection()} to enable selection by word \endlist \section2 Image, BorderImage and AnimatedImage @@ -92,10 +113,19 @@ Added the following methods: \o \l{Flickable::}{returnToBounds()} \endlist +\section2 MouseArea + +Added the following property: +\list +\o \l{MouseArea::}{preventStealing} +\endlist + \section2 ListView and GridView -Added the following methods: +Added the following properties and methods: \list +\o \l{ListView::}{layoutDirection} +\o \l{ListView::}{effectiveLayoutDirection} \o \l{ListView::}{positionViewAtBeginning()} \o \l{ListView::}{positionViewAtEnd()} \endlist @@ -105,6 +135,7 @@ Added the following methods: Added the following properties: \list \o \l{Flow::}{layoutDirection} +\o \l{Flow::}{effectiveLayoutDirection} \endlist \section2 Repeater @@ -135,6 +166,7 @@ properties. \list \o Functions can be \l{Binding Properties from JavaScript}{assigned to properties from JavaScript} to create property bindings. +\o QtQuick now supports Right to Left layout in positioners, views, anchors and text elements. \endlist diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 1b1c476..9cf1e78 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2317,6 +2317,8 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const \qmlproperty real Item::anchors.verticalCenterOffset \qmlproperty real Item::anchors.baselineOffset + \qmlproperty bool Item::anchors.mirrored + Anchors provide a way to position an item by specifying its relationship with other items. @@ -2374,6 +2376,8 @@ QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline() const To clear an anchor value, set it to \c undefined. + \c anchors.mirrored returns true it the layout has been \l {LayoutMirroring}{mirrored}. + \note You can only anchor an item to siblings or a parent. For more information see \l {anchor-layout}{Anchor Layouts}. diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp index babc020..2cb1c94 100644 --- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp @@ -1508,7 +1508,7 @@ bool QDeclarativeTextEdit::canPaste() const } /*! - \qmlproperty bool TextEdit::isInputMethodComposing() + \qmlproperty bool TextEdit::inputMethodComposing \since QtQuick 1.1 diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index b4395e3..c6de7a0 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -1824,7 +1824,7 @@ void QDeclarativeTextInput::focusInEvent(QFocusEvent *event) } /*! - \qmlproperty bool TextInput::isInputMethodComposing() + \qmlproperty bool TextInput::inputMethodComposing \since QtQuick 1.1 -- cgit v0.12 From 48ebe36a8b5d101c5dcad26d88d6fc0504fc9319 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Fri, 11 Mar 2011 11:31:58 +0100 Subject: Do release build for devices and remove some warnings. --- mkspecs/qws/macx-iphonedevice-g++/qmake.conf | 5 +- mkspecs/qws/macx-iphonesimulator-g++/qmake.conf | 1 + src/plugins/platforms/uikit/README | 2 +- .../qmltest/qmltest.xcodeproj/project.pbxproj | 64 ++++++++++++---------- src/plugins/platforms/uikit/quikiteventloop.mm | 6 +- src/plugins/platforms/uikit/quikitwindow.mm | 1 + 6 files changed, 46 insertions(+), 33 deletions(-) diff --git a/mkspecs/qws/macx-iphonedevice-g++/qmake.conf b/mkspecs/qws/macx-iphonedevice-g++/qmake.conf index 2cef3df..36b9496 100644 --- a/mkspecs/qws/macx-iphonedevice-g++/qmake.conf +++ b/mkspecs/qws/macx-iphonedevice-g++/qmake.conf @@ -2,6 +2,7 @@ # qmake configuration for iphone-device-g++ # include(../../common/mac.conf) +include(../../common/gcc-base-macx.conf) include(../../common/g++-macx.conf) MAKEFILE_GENERATOR = UNIX @@ -27,9 +28,9 @@ QMAKE_CXX = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++- QMAKE_LINK = $$QMAKE_CXX QMAKE_LINK_SHLIB = $$QMAKE_CXX -QMAKE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 -gdwarf-2 +QMAKE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -QMAKE_OBJECTIVE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 -gdwarf-2 -fobjc-abi-version=2 -fobjc-legacy-dispatch +QMAKE_OBJECTIVE_CFLAGS += -arch armv7 -marm -isysroot $$QMAKE_IOS_SDK -fmessage-length=0 -fexceptions -miphoneos-version-min=4.2 -fobjc-abi-version=2 -fobjc-legacy-dispatch QMAKE_LFLAGS += -arch armv7 -marm -miphoneos-version-min=4.2 -Wl,-syslibroot,$$QMAKE_IOS_SDK QMAKE_INCDIR_OPENGL = diff --git a/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf b/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf index 9a06857..dccab70 100644 --- a/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf +++ b/mkspecs/qws/macx-iphonesimulator-g++/qmake.conf @@ -2,6 +2,7 @@ # qmake configuration for macx-g++ # include(../../common/mac.conf) +include(../../common/gcc-base-macx.conf) include(../../common/g++-macx.conf) MAKEFILE_GENERATOR = UNIX diff --git a/src/plugins/platforms/uikit/README b/src/plugins/platforms/uikit/README index 7477cb0..b2984fc 100644 --- a/src/plugins/platforms/uikit/README +++ b/src/plugins/platforms/uikit/README @@ -22,7 +22,7 @@ configure -qpa -xplatform qws/macx-iphonesimulator-g++ -arch i386 -developer-bui Device: ------- -configure -qpa -xplatform qws/macx-iphonedevice-g++ -arch armv7 -developer-build -no-accessibility -no-qt3support -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations +configure -qpa -xplatform qws/macx-iphonedevice-g++ -arch armv7 -developer-build -release -no-accessibility -no-qt3support -no-multimedia -no-phonon -no-phonon-backend -no-svg -no-webkit -no-scripttools -no-openssl -no-sql-mysql -no-sql-odbc -no-cups -no-iconv -no-dbus -no-opengl -static -nomake tools -nomake demos -nomake docs -nomake examples -nomake translations 2) XCode setup: - there are examples in the examples subdirectory of the platform plugin diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj index e105b73..fc4f1df 100755 --- a/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj +++ b/src/plugins/platforms/uikit/examples/qmltest/qmltest.xcodeproj/project.pbxproj @@ -20,25 +20,27 @@ D3CAA7F113264F52008BB877 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; D3CAA7FA13264F8A008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; - D3CAA80613264FD5008BB877 /* libQtCore_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */; }; - D3CAA80713264FD5008BB877 /* libQtDeclarative_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */; }; - D3CAA80813264FD6008BB877 /* libQtGui_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */; }; - D3CAA80913264FD6008BB877 /* libQtScript_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */; }; - D3CAA80A13264FD7008BB877 /* libQtSql_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */; }; D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */; }; - D3CAA81313265005008BB877 /* libquikit_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81213265005008BB877 /* libquikit_debug.a */; }; D3CAA81B13265056008BB877 /* libQtCore_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81613265056008BB877 /* libQtCore_debug.a */; }; D3CAA81C13265056008BB877 /* libQtDeclarative_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81713265056008BB877 /* libQtDeclarative_debug.a */; }; D3CAA81D13265056008BB877 /* libQtGui_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81813265056008BB877 /* libQtGui_debug.a */; }; D3CAA81E13265056008BB877 /* libQtScript_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81913265056008BB877 /* libQtScript_debug.a */; }; D3CAA81F13265056008BB877 /* libQtSql_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA81A13265056008BB877 /* libQtSql_debug.a */; }; D3CAA8211326507D008BB877 /* libquikit_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA8201326507D008BB877 /* libquikit_debug.a */; }; - D3CAA8261326520A008BB877 /* libQtNetwork_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */; }; D3CAA82813265220008BB877 /* libQtNetwork_debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3CAA82713265220008BB877 /* libQtNetwork_debug.a */; }; D3CAA88A132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; D3CAA88B132652E5008BB877 /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA836132652E5008BB877 /* fonts */; }; D3CAA89113265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; D3CAA89213265310008BB877 /* qml in Resources */ = {isa = PBXBuildFile; fileRef = D3CAA88E13265310008BB877 /* qml */; }; + D3D817B2132A2CFD00CDE422 /* libQtCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AA132A2CFD00CDE422 /* libQtCore.a */; }; + D3D817B3132A2CFD00CDE422 /* libQtDeclarative.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AB132A2CFD00CDE422 /* libQtDeclarative.a */; }; + D3D817B4132A2CFD00CDE422 /* libQtGui.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AC132A2CFD00CDE422 /* libQtGui.a */; }; + D3D817B5132A2CFD00CDE422 /* libQtNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AD132A2CFD00CDE422 /* libQtNetwork.a */; }; + D3D817B6132A2CFD00CDE422 /* libQtScript.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AE132A2CFD00CDE422 /* libQtScript.a */; }; + D3D817B7132A2CFD00CDE422 /* libQtSql.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817AF132A2CFD00CDE422 /* libQtSql.a */; }; + D3D817B8132A2CFD00CDE422 /* libQtXml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817B0132A2CFD00CDE422 /* libQtXml.a */; }; + D3D817B9132A2CFD00CDE422 /* libQtXmlPatterns.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */; }; + D3D817BB132A2D0E00CDE422 /* libquikit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3D817BA132A2D0E00CDE422 /* libquikit.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -54,22 +56,24 @@ D3CAA7E513264EA6008BB877 /* qmlapplicationviewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qmlapplicationviewer.h; path = qmlapplicationviewer/qmlapplicationviewer.h; sourceTree = "<group>"; }; D3CAA7F613264F52008BB877 /* qmltest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = qmltest.app; sourceTree = BUILT_PRODUCTS_DIR; }; D3CAA7F913264F8A008BB877 /* libz.1.2.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.3.dylib; path = usr/lib/libz.1.2.3.dylib; sourceTree = SDKROOT; }; - D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtCore_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtDeclarative_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtGui_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtGui_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtScript_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtSql_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA81213265005008BB877 /* libquikit_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/plugins/platforms/libquikit_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA81613265056008BB877 /* libQtCore_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtCore_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA81713265056008BB877 /* libQtDeclarative_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtDeclarative_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA81813265056008BB877 /* libQtGui_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtGui_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtGui_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA81913265056008BB877 /* libQtScript_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtScript_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA81A13265056008BB877 /* libQtSql_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtSql_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA8201326507D008BB877 /* libquikit_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/plugins/platforms/libquikit_debug.a"; sourceTree = SOURCE_ROOT; }; - D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork_debug.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtNetwork_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA82713265220008BB877 /* libQtNetwork_debug.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork_debug.a; path = "../../../../../../../qt-lighthouse-ios-simulator/lib/libQtNetwork_debug.a"; sourceTree = SOURCE_ROOT; }; D3CAA836132652E5008BB877 /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fonts; path = ../../../../../../lib/fonts; sourceTree = SOURCE_ROOT; }; D3CAA88E13265310008BB877 /* qml */ = {isa = PBXFileReference; lastKnownFileType = folder; path = qml; sourceTree = SOURCE_ROOT; }; + D3D817AA132A2CFD00CDE422 /* libQtCore.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtCore.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtCore.a"; sourceTree = SOURCE_ROOT; }; + D3D817AB132A2CFD00CDE422 /* libQtDeclarative.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtDeclarative.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtDeclarative.a"; sourceTree = SOURCE_ROOT; }; + D3D817AC132A2CFD00CDE422 /* libQtGui.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtGui.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtGui.a"; sourceTree = SOURCE_ROOT; }; + D3D817AD132A2CFD00CDE422 /* libQtNetwork.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtNetwork.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtNetwork.a"; sourceTree = SOURCE_ROOT; }; + D3D817AE132A2CFD00CDE422 /* libQtScript.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtScript.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtScript.a"; sourceTree = SOURCE_ROOT; }; + D3D817AF132A2CFD00CDE422 /* libQtSql.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtSql.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtSql.a"; sourceTree = SOURCE_ROOT; }; + D3D817B0132A2CFD00CDE422 /* libQtXml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXml.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXml.a"; sourceTree = SOURCE_ROOT; }; + D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libQtXmlPatterns.a; path = "../../../../../../../qt-lighthouse-ios-device/lib/libQtXmlPatterns.a"; sourceTree = SOURCE_ROOT; }; + D3D817BA132A2D0E00CDE422 /* libquikit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libquikit.a; path = "../../../../../../../qt-lighthouse-ios-device/plugins/platforms/libquikit.a"; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -98,14 +102,16 @@ D3CAA7F013264F52008BB877 /* Foundation.framework in Frameworks */, D3CAA7F113264F52008BB877 /* UIKit.framework in Frameworks */, D3CAA7F213264F52008BB877 /* CoreGraphics.framework in Frameworks */, - D3CAA80613264FD5008BB877 /* libQtCore_debug.a in Frameworks */, - D3CAA80713264FD5008BB877 /* libQtDeclarative_debug.a in Frameworks */, - D3CAA80813264FD6008BB877 /* libQtGui_debug.a in Frameworks */, - D3CAA80913264FD6008BB877 /* libQtScript_debug.a in Frameworks */, - D3CAA80A13264FD7008BB877 /* libQtSql_debug.a in Frameworks */, D3CAA81113264FF0008BB877 /* libz.1.2.3.dylib in Frameworks */, - D3CAA81313265005008BB877 /* libquikit_debug.a in Frameworks */, - D3CAA8261326520A008BB877 /* libQtNetwork_debug.a in Frameworks */, + D3D817B2132A2CFD00CDE422 /* libQtCore.a in Frameworks */, + D3D817B3132A2CFD00CDE422 /* libQtDeclarative.a in Frameworks */, + D3D817B4132A2CFD00CDE422 /* libQtGui.a in Frameworks */, + D3D817B5132A2CFD00CDE422 /* libQtNetwork.a in Frameworks */, + D3D817B6132A2CFD00CDE422 /* libQtScript.a in Frameworks */, + D3D817B7132A2CFD00CDE422 /* libQtSql.a in Frameworks */, + D3D817B8132A2CFD00CDE422 /* libQtXml.a in Frameworks */, + D3D817B9132A2CFD00CDE422 /* libQtXmlPatterns.a in Frameworks */, + D3D817BB132A2D0E00CDE422 /* libquikit.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -178,13 +184,15 @@ D3CAA8141326500A008BB877 /* Device */ = { isa = PBXGroup; children = ( - D3CAA81213265005008BB877 /* libquikit_debug.a */, - D3CAA7FB13264FB9008BB877 /* libQtCore_debug.a */, - D3CAA7FC13264FB9008BB877 /* libQtDeclarative_debug.a */, - D3CAA7FD13264FB9008BB877 /* libQtGui_debug.a */, - D3CAA8251326520A008BB877 /* libQtNetwork_debug.a */, - D3CAA7FE13264FB9008BB877 /* libQtScript_debug.a */, - D3CAA7FF13264FB9008BB877 /* libQtSql_debug.a */, + D3D817BA132A2D0E00CDE422 /* libquikit.a */, + D3D817AA132A2CFD00CDE422 /* libQtCore.a */, + D3D817AB132A2CFD00CDE422 /* libQtDeclarative.a */, + D3D817AC132A2CFD00CDE422 /* libQtGui.a */, + D3D817AD132A2CFD00CDE422 /* libQtNetwork.a */, + D3D817AE132A2CFD00CDE422 /* libQtScript.a */, + D3D817AF132A2CFD00CDE422 /* libQtSql.a */, + D3D817B0132A2CFD00CDE422 /* libQtXml.a */, + D3D817B1132A2CFD00CDE422 /* libQtXmlPatterns.a */, ); name = Device; sourceTree = "<group>"; diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm index 4469ae9..78f046e 100644 --- a/src/plugins/platforms/uikit/quikiteventloop.mm +++ b/src/plugins/platforms/uikit/quikiteventloop.mm @@ -68,9 +68,10 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + Q_UNUSED(launchOptions) foreach (QWidget *widget, qApp->topLevelWidgets()) { QRect geom = widget->geometry(); - CGRect bar = [UIApplication sharedApplication].statusBarFrame; + CGRect bar = application.statusBarFrame; if (geom.y() <= bar.size.height) { geom.setY(bar.size.height); widget->setGeometry(geom); @@ -87,6 +88,7 @@ - (void)applicationWillTerminate:(UIApplication *)application { + Q_UNUSED(application) // TODO this isn't called for some reason qDebug() << "quit"; qApp->quit(); @@ -98,7 +100,7 @@ - (id)initWithEventLoopIntegration:(QUIKitEventLoop *)integration { - if (self = [self init]) { + if ((self = [self init])) { mIntegration = integration; } return self; diff --git a/src/plugins/platforms/uikit/quikitwindow.mm b/src/plugins/platforms/uikit/quikitwindow.mm index 4ac7447..457598b 100644 --- a/src/plugins/platforms/uikit/quikitwindow.mm +++ b/src/plugins/platforms/uikit/quikitwindow.mm @@ -83,6 +83,7 @@ UIWindow *QUIKitWindow::ensureNativeWindow() mWindow.frame = frame; // for some reason setting the screen resets frame.origin [mWindow setNeedsDisplay]; } + return mWindow; } QT_END_NAMESPACE -- cgit v0.12 From 86e7893c2c1a4c316a1db510ab6abeafa7267c3d Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Fri, 11 Mar 2011 11:37:52 +0100 Subject: Fix combining marks handling in Core Text shaper For fonts without combined glyph for combinations like U+0062 U+0300, Core Text will return glyph sequences like <b> <`>, the latter will have advance_x = 0, advance_y = <positive value> to keep it above the previous glyph. To get correct positioning in flipped coordinate, we need to store the negative y advance in Qt. Task-number: QTBUG-15675 Reviewed-by: Eskil --- src/gui/text/qfontengine_coretext.mm | 3 ++- .../qtextscriptengine/tst_qtextscriptengine.cpp | 25 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 2ae60b1..0209689 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -234,7 +234,8 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay int idx = rtlOffset + rtlSign * i; outGlyphs[idx] = tmpGlyphs[i] | fontIndex; outAdvances_x[idx] = QFixed::fromReal(tmpPoints[i + 1].x - tmpPoints[i].x); - outAdvances_y[idx] = QFixed::fromReal(tmpPoints[i + 1].y - tmpPoints[i].y); + // Use negative y advance for flipped coordinate system + outAdvances_y[idx] = QFixed::fromReal(tmpPoints[i].y - tmpPoints[i + 1].y); if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) { outAdvances_x[idx] = outAdvances_x[idx].round(); diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 91d0f3f..4f4e706a 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -56,7 +56,7 @@ -#if defined(Q_WS_X11) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) #define private public #include <private/qtextengine_p.h> #include <qtextlayout.h> @@ -104,6 +104,7 @@ private slots: void khmer(); void linearB(); void controlInSyllable_qtbug14204(); + void combiningMarks_qtbug15675(); }; tst_QTextScriptEngine::tst_QTextScriptEngine() @@ -1133,5 +1134,27 @@ void tst_QTextScriptEngine::controlInSyllable_qtbug14204() #endif } +void tst_QTextScriptEngine::combiningMarks_qtbug15675() +{ +#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA) + QString s; + s.append(QChar(0x0061)); + s.append(QChar(0x0062)); + s.append(QChar(0x0300)); + s.append(QChar(0x0063)); + + QFont font("Monaco"); + QTextLayout layout(s, font); + QTextEngine *e = layout.d; + e->itemize(); + e->shape(0); + + QVERIFY(e->layoutData->items[0].num_glyphs == 4); + QVERIFY(e->layoutData->glyphLayout.advances_y[2] > 0); +#else + QSKIP("Mac specific test", SkipAll); +#endif +} + QTEST_MAIN(tst_QTextScriptEngine) #include "tst_qtextscriptengine.moc" -- cgit v0.12 From 6f5553b95c4df489e0bf047399a90e9a564314e6 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Mon, 7 Mar 2011 14:35:46 +0100 Subject: Fix static text item positioning GL2 paint engine Reviewed-by: Eskil --- src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index bbb75bc..fa38b5d 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1623,8 +1623,8 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp if (c.isNull()) continue; - int x = staticTextItem->glyphPositions[i].x.toInt() + c.baseLineX - margin; - int y = staticTextItem->glyphPositions[i].y.toInt() - c.baseLineY - margin; + int x = qFloor(staticTextItem->glyphPositions[i].x) + c.baseLineX - margin; + int y = qFloor(staticTextItem->glyphPositions[i].y) - c.baseLineY - margin; vertexCoordinates->addQuad(QRectF(x, y, c.w, c.h)); textureCoordinates->addQuad(QRectF(c.x*dx, c.y*dy, c.w * dx, c.h * dy)); -- cgit v0.12 From 0d67f69f6b49841cdef5cd48176598e4bbb349d6 Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Fri, 11 Mar 2011 14:38:22 +0100 Subject: Deprecate QScriptValue::QObjectMember This property flag serves no valid use case. We don't want users to write code that depends on whether the property is a Qt/C++ property or a JS property. Task-number: QTBUG-17760 Reviewed-by: Jedrzej Nowacki --- src/script/api/qscriptvalue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp index 4772fa1..2b54f1f 100644 --- a/src/script/api/qscriptvalue.cpp +++ b/src/script/api/qscriptvalue.cpp @@ -145,7 +145,7 @@ \value PropertySetter The property is defined by a function which will be called to set the property value. - \value QObjectMember This flag is used to indicate that an existing property is a QObject member (a property or method). + \omitvalue QObjectMember This flag is used to indicate that an existing property is a QObject member (a property or method). \value KeepExistingFlags This value is used to indicate to setProperty() that the property's flags should be left unchanged. If the property doesn't exist, the default flags (0) will be used. -- cgit v0.12 From fefc004a71b6744e3ad7d2fe0e1d45824beb3c3a Mon Sep 17 00:00:00 2001 From: Kent Hansen <kent.hansen@nokia.com> Date: Fri, 11 Mar 2011 14:42:58 +0100 Subject: Deprecate QScriptValue::UserRange QScriptValue::PropertyFlags should only represent standard (ECMA) attributes. Since we can't guarantee that the back-end will be able to retain extra "user" bits, we don't want users to write code that rely on them. Task-number: QTBUG-15571 Reviewed-by: Jedrzej Nowacki --- src/script/api/qscriptvalue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp index 2b54f1f..2a22c72 100644 --- a/src/script/api/qscriptvalue.cpp +++ b/src/script/api/qscriptvalue.cpp @@ -149,7 +149,7 @@ \value KeepExistingFlags This value is used to indicate to setProperty() that the property's flags should be left unchanged. If the property doesn't exist, the default flags (0) will be used. - \value UserRange Flags in this range are not used by Qt Script, and can be used for custom purposes. + \omitvalue UserRange Flags in this range are not used by Qt Script, and can be used for custom purposes. */ /*! -- cgit v0.12 From ccd2feb1ec829af15073763218c258cb4d0b0525 Mon Sep 17 00:00:00 2001 From: Rohan McGovern <rohan.mcgovern@nokia.com> Date: Mon, 14 Mar 2011 10:51:50 +1000 Subject: Harmattan: fixed license headers. --- config.profiles/harmattan/configure-pulse.sh | 41 +++++++++++++++++++++++++ config.profiles/harmattan/manpages/lrelease.1 | 44 ++++++++++++++++++++------- config.profiles/harmattan/manpages/lupdate.1 | 44 ++++++++++++++++++++------- config.profiles/harmattan/manpages/moc.1 | 40 +++++++++++++++++++++--- config.profiles/harmattan/manpages/qmake.1 | 38 +++++++++++++++++++++++ config.profiles/harmattan/manpages/qtconfig.1 | 40 +++++++++++++++++++++++- config.profiles/harmattan/manpages/uic.1 | 40 +++++++++++++++++++++--- config.profiles/harmattan/readdir-hppa-test.c | 40 ++++++++++++++++++++++++ 8 files changed, 295 insertions(+), 32 deletions(-) diff --git a/config.profiles/harmattan/configure-pulse.sh b/config.profiles/harmattan/configure-pulse.sh index c683705..bc1615b 100755 --- a/config.profiles/harmattan/configure-pulse.sh +++ b/config.profiles/harmattan/configure-pulse.sh @@ -1,4 +1,45 @@ #/bin/sh +############################################################################# +## +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + # Fail on error set -e diff --git a/config.profiles/harmattan/manpages/lrelease.1 b/config.profiles/harmattan/manpages/lrelease.1 index 174d40c..79a10fe 100644 --- a/config.profiles/harmattan/manpages/lrelease.1 +++ b/config.profiles/harmattan/manpages/lrelease.1 @@ -1,19 +1,41 @@ -.TH lrelease 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.TH lrelease 1 "18 October 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" 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. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. .\" -.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. .\" -.\" Contact info@trolltech.com if any conditions of this licensing are -.\" not clear to you. +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME lrelease \- generate Qt message files from Qt Linguist translation files diff --git a/config.profiles/harmattan/manpages/lupdate.1 b/config.profiles/harmattan/manpages/lupdate.1 index 722657d..c0771df 100644 --- a/config.profiles/harmattan/manpages/lupdate.1 +++ b/config.profiles/harmattan/manpages/lupdate.1 @@ -1,19 +1,41 @@ -.TH lupdate 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.TH lupdate 1 "18 October 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" 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. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. .\" -.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. .\" -.\" Contact info@trolltech.com if any conditions of this licensing are -.\" not clear to you. +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME lupdate \- update Qt Linguist translation files diff --git a/config.profiles/harmattan/manpages/moc.1 b/config.profiles/harmattan/manpages/moc.1 index 131827a..a11e101 100644 --- a/config.profiles/harmattan/manpages/moc.1 +++ b/config.profiles/harmattan/manpages/moc.1 @@ -1,11 +1,41 @@ -.TH moc 1 "24 June 2001" "Trolltech AS" \" -*- nroff -*- +.TH moc 1 "24 June 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" $Id: qt/moc.1 3.3.4 edited May 27 2003 $ +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" Copyright 1992-2002 Trolltech AS. All rights reserved. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is part of Qt and may be distributed and used according to -.\" the terms and conditions described in the LICENSE file. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .nh .SH NAME diff --git a/config.profiles/harmattan/manpages/qmake.1 b/config.profiles/harmattan/manpages/qmake.1 index 62ab78a..b6e2c30 100644 --- a/config.profiles/harmattan/manpages/qmake.1 +++ b/config.profiles/harmattan/manpages/qmake.1 @@ -1,4 +1,42 @@ .TH QMAKE 1 "2005-07-23" +.\" +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) +.\" +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ +.\" .SH NAME qmake \- cross-platform makefile generator for Qt diff --git a/config.profiles/harmattan/manpages/qtconfig.1 b/config.profiles/harmattan/manpages/qtconfig.1 index 08989fb..854c88f 100644 --- a/config.profiles/harmattan/manpages/qtconfig.1 +++ b/config.profiles/harmattan/manpages/qtconfig.1 @@ -1,4 +1,42 @@ -.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.TH "qtconfig" "1" "3.0.3" "Nokia Corporation and/or its subsidiary(-ies)" "" +.\" +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) +.\" +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ +.\" .SH "NAME" .LP qtconfig \- Configuration tool for Qt diff --git a/config.profiles/harmattan/manpages/uic.1 b/config.profiles/harmattan/manpages/uic.1 index 79d03b8..b781900 100644 --- a/config.profiles/harmattan/manpages/uic.1 +++ b/config.profiles/harmattan/manpages/uic.1 @@ -1,9 +1,41 @@ -.TH uic 1 "2 Aug 2001" "Trolltech AS" \" -*- nroff -*- +.TH uic 1 "2 Aug 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2000 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" This file is part of Qt and may be distributed and used according to -.\" the terms and conditions described in the LICENSE file. +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME uic \- Qt user interface compiler diff --git a/config.profiles/harmattan/readdir-hppa-test.c b/config.profiles/harmattan/readdir-hppa-test.c index eb893ba..1162840 100644 --- a/config.profiles/harmattan/readdir-hppa-test.c +++ b/config.profiles/harmattan/readdir-hppa-test.c @@ -1,3 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #include <sys/types.h> #include <dirent.h> #include <errno.h> -- cgit v0.12 From a1a9929acaeccd7027605ffeb9794b034b146c92 Mon Sep 17 00:00:00 2001 From: Andrew den Exter <andrew.den-exter@nokia.com> Date: Mon, 14 Mar 2011 10:47:36 +1000 Subject: Fix TextEdit mouseSelectionMode overriding selectByMouse. If selectByMouse is false don't allow any text selection on mouse move. Change-Id: Ic9f309899bc0de48066a2393e088e15b3a2f06db Task-number: QTBUG-18072 Reviewed-by: Martin Jones --- src/gui/text/qtextcontrol.cpp | 11 +++++++++-- .../qdeclarativetextedit/data/mouseselection_false_words.qml | 7 +++++++ .../qdeclarativetextedit/data/mouseselection_true_words.qml | 7 +++++++ .../qdeclarativetextedit/tst_qdeclarativetextedit.cpp | 2 ++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml create mode 100644 tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index f5da079..6babca1 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -1607,7 +1607,10 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons if (!(buttons & Qt::LeftButton)) return; - if (!((interactionFlags & Qt::TextSelectableByMouse) || (interactionFlags & Qt::TextEditable))) + const bool selectable = interactionFlags & Qt::TextSelectableByMouse; + const bool editable = interactionFlags & Qt::TextEditable; + + if (!selectable && !editable) return; if (!(mousePressed @@ -1623,6 +1626,10 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons startDrag(); return; } + + if (!selectable) + return; + const qreal mouseX = qreal(mousePos.x()); int newCursorPos = q->hitTest(mousePos, Qt::FuzzyHit); @@ -1638,7 +1645,7 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons extendBlockwiseSelection(newCursorPos); else if (selectedWordOnDoubleClick.hasSelection()) extendWordwiseSelection(newCursorPos, mouseX); - else if (interactionFlags & Qt::TextSelectableByMouse) + else setCursorPosition(newCursorPos, QTextCursor::KeepAnchor); if (interactionFlags & Qt::TextEditable) { diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml new file mode 100644 index 0000000..22a9871 --- /dev/null +++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_words.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +TextEdit { + focus: true + text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + selectByMouse: false +} diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml new file mode 100644 index 0000000..d61da46 --- /dev/null +++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_words.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +TextEdit { + focus: true + text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + selectByMouse: true +} diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 7aac76c..f62c2c5 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -1305,6 +1305,8 @@ void tst_qdeclarativetextedit::mouseSelection_data() QTest::newRow("on") << SRCDIR "/data/mouseselection_true.qml" << true; QTest::newRow("off") << SRCDIR "/data/mouseselection_false.qml" << false; QTest::newRow("default") << SRCDIR "/data/mouseselection_default.qml" << false; + QTest::newRow("on word selection") << SRCDIR "/data/mouseselection_true_words.qml" << true; + QTest::newRow("off word selection") << SRCDIR "/data/mouseselection_false_words.qml" << false; } void tst_qdeclarativetextedit::mouseSelection() -- cgit v0.12 From c0fed43b04dec8bd549043d3ea5e28908128082c Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Tue, 22 Feb 2011 15:40:40 +0100 Subject: Introduce QFontEngineDirectWrite Make a font engine for subpixel positioned text on Windows Vista (with platform update) and Windows 7. If selected during configuration, the engine will be selected only when the hinting preference of a font is set to None or Vertical hinting. The font database uses most of the same logic but creates a direct write font based on the LOGFONT rather than a GDI handle. The engine is currently regarded as experimental, meaning that code using it should do substantial testing to make sure it covers their use cases. Task-number: QTBUG-12678 Reviewed-by: Jiang Jiang --- src/gui/gui.pro | 4 + src/gui/text/qfont.cpp | 102 ++++ src/gui/text/qfont.h | 45 +- src/gui/text/qfont_p.h | 7 +- src/gui/text/qfontdatabase.cpp | 21 + src/gui/text/qfontdatabase_win.cpp | 220 +++++-- src/gui/text/qfontengine_p.h | 2 + src/gui/text/qfontengine_win.cpp | 2 +- src/gui/text/qfontengine_win_p.h | 2 +- src/gui/text/qfontenginedirectwrite.cpp | 646 +++++++++++++++++++++ src/gui/text/qfontenginedirectwrite_p.h | 133 +++++ src/gui/text/qtextformat.cpp | 22 + src/gui/text/qtextformat.h | 11 + src/gui/text/text.pri | 6 + .../qtextscriptengine/tst_qtextscriptengine.cpp | 60 ++ tools/configure/configureapp.cpp | 34 +- 16 files changed, 1259 insertions(+), 58 deletions(-) create mode 100644 src/gui/text/qfontenginedirectwrite.cpp create mode 100644 src/gui/text/qfontenginedirectwrite_p.h diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 076fe0a..fda76a2 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -79,6 +79,10 @@ neon:*-g++* { QMAKE_EXTRA_COMPILERS += neon_compiler } +win32:!contains(QT_CONFIG, directwrite) { + DEFINES += QT_NO_DIRECTWRITE +} + contains(QMAKE_MAC_XARCH, no) { DEFINES += QT_NO_MAC_XARCH } else { diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 64eb27a..f77e237 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -383,6 +383,9 @@ void QFontPrivate::resolve(uint mask, const QFontPrivate *other) if (! (mask & QFont::StretchResolved)) request.stretch = other->request.stretch; + if (! (mask & QFont::HintingPreferenceResolved)) + request.hintingPreference = other->request.hintingPreference; + if (! (mask & QFont::UnderlineResolved)) underline = other->underline; @@ -917,6 +920,105 @@ int QFont::pointSize() const } /*! + \since 4.8 + + \enum QFont::HintingPreference + + This enum describes the different levels of hinting that can be applied + to glyphs to improve legibility on displays where it might be warranted + by the density of pixels. + + \value PreferDefaultHinting Use the default hinting level for the target platform. + \value PreferNoHinting If possible, render text without hinting the outlines + of the glyphs. The text layout will be typographically accurate and + scalable, using the same metrics as are used e.g. when printing. + \value PreferVerticalHinting If possible, render text with no horizontal hinting, + but align glyphs to the pixel grid in the vertical direction. The text will appear + crisper on displays where the density is too low to give an accurate rendering + of the glyphs. But since the horizontal metrics of the glyphs are unhinted, the text's + layout will be scalable to higher density devices (such as printers) without impacting + details such as line breaks. + \value PreferFullHinting If possible, render text with hinting in both horizontal and + vertical directions. The text will be altered to optimize legibility on the target + device, but since the metrics will depend on the target size of the text, the positions + of glyphs, line breaks, and other typographical detail will not scale, meaning that a + text layout may look different on devices with different pixel densities. + + Please note that this enum only describes a preference, as the full range of hinting levels + are not supported on all of Qt's supported platforms. The following table details the effect + of a given hinting preference on a selected set of target platforms. + + \table + \header + \o + \o PreferDefaultHinting + \o PreferNoHinting + \o PreferVerticalHinting + \o PreferFullHinting + \row + \o Windows Vista (w/o Platform Update) and earlier + \o Full hinting + \o Full hinting + \o Full hinting + \o Full hinting + \row + \o Windows 7 and Windows Vista (w/Platform Update) and DirectWrite enabled in Qt + \o Full hinting + \o Vertical hinting + \o Vertical hinting + \o Full hinting + \row + \o FreeType + \o Operating System setting + \o No hinting + \o Vertical hinting (light) + \o Full hinting + \row + \o Cocoa on Mac OS X + \o No hinting + \o No hinting + \o No hinting + \o No hinting + \endtable + + \note Please be aware that altering the hinting preference on Windows is available through + the DirectWrite font engine. This is available on Windows Vista after installing the platform + update, and on Windows 7. In order to use this extension, configure Qt using -directwrite. + The target application will then depend on the availability of DirectWrite on the target + system. + +*/ + +/*! + \since 4.8 + + Set the preference for the hinting level of the glyphs to \a hintingPreference. This is a hint + to the underlying font rendering system to use a certain level of hinting, and has varying + support across platforms. See the table in the documentation for QFont::HintingPreference for + more details. + + The default hinting preference is QFont::PreferDefaultHinting. +*/ +void QFont::setHintingPreference(HintingPreference hintingPreference) +{ + detach(); + + d->request.hintingPreference = hintingPreference; + + resolve_mask |= QFont::HintingPreferenceResolved; +} + +/*! + \since 4.8 + + Returns the currently preferred hinting level for glyphs rendered with this font. +*/ +QFont::HintingPreference QFont::hintingPreference() const +{ + return QFont::HintingPreference(d->request.hintingPreference); +} + +/*! Sets the point size to \a pointSize. The point size must be greater than zero. diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index e7e8a40..ea65c17 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -90,7 +90,14 @@ public: NoAntialias = 0x0100, OpenGLCompatible = 0x0200, ForceIntegerMetrics = 0x0400, - NoFontMerging = 0x8000 + NoFontMerging = 0x8000, + }; + + enum HintingPreference { + PreferDefaultHinting = 0, + PreferNoHinting = 1, + PreferVerticalHinting = 2, + PreferFullHinting = 3 }; enum Weight { @@ -133,22 +140,23 @@ public: }; enum ResolveProperties { - FamilyResolved = 0x0001, - SizeResolved = 0x0002, - StyleHintResolved = 0x0004, - StyleStrategyResolved = 0x0008, - WeightResolved = 0x0010, - StyleResolved = 0x0020, - UnderlineResolved = 0x0040, - OverlineResolved = 0x0080, - StrikeOutResolved = 0x0100, - FixedPitchResolved = 0x0200, - StretchResolved = 0x0400, - KerningResolved = 0x0800, - CapitalizationResolved = 0x1000, - LetterSpacingResolved = 0x2000, - WordSpacingResolved = 0x4000, - AllPropertiesResolved = 0x7fff + FamilyResolved = 0x0001, + SizeResolved = 0x0002, + StyleHintResolved = 0x0004, + StyleStrategyResolved = 0x0008, + WeightResolved = 0x0010, + StyleResolved = 0x0020, + UnderlineResolved = 0x0040, + OverlineResolved = 0x0080, + StrikeOutResolved = 0x0100, + FixedPitchResolved = 0x0200, + StretchResolved = 0x0400, + KerningResolved = 0x0800, + CapitalizationResolved = 0x1000, + LetterSpacingResolved = 0x2000, + WordSpacingResolved = 0x4000, + HintingPreferenceResolved = 0x8000, + AllPropertiesResolved = 0xffff }; QFont(); @@ -213,6 +221,9 @@ public: void setCapitalization(Capitalization); Capitalization capitalization() const; + void setHintingPreference(HintingPreference hintingPreference); + HintingPreference hintingPreference() const; + // is raw mode still needed? bool rawMode() const; void setRawMode(bool); diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h index 0a3f76d..b23f96e 100644 --- a/src/gui/text/qfont_p.h +++ b/src/gui/text/qfont_p.h @@ -72,7 +72,7 @@ struct QFontDef : pointSize(-1.0), pixelSize(-1), styleStrategy(QFont::PreferDefault), styleHint(QFont::AnyStyle), weight(50), fixedPitch(false), style(QFont::StyleNormal), stretch(100), - ignorePitch(true) + ignorePitch(true), hintingPreference(QFont::PreferDefaultHinting) #ifdef Q_WS_MAC ,fixedPitchComputed(false) #endif @@ -98,7 +98,8 @@ struct QFontDef uint ignorePitch : 1; uint fixedPitchComputed : 1; // for Mac OS X only - int reserved : 16; // for future extensions + uint hintingPreference : 2; + int reserved : 14; // for future extensions bool exactMatch(const QFontDef &other) const; bool operator==(const QFontDef &other) const @@ -111,6 +112,7 @@ struct QFontDef && styleStrategy == other.styleStrategy && ignorePitch == other.ignorePitch && fixedPitch == other.fixedPitch && family == other.family + && hintingPreference == other.hintingPreference #ifdef Q_WS_X11 && addStyle == other.addStyle #endif @@ -125,6 +127,7 @@ struct QFontDef if (styleHint != other.styleHint) return styleHint < other.styleHint; if (styleStrategy != other.styleStrategy) return styleStrategy < other.styleStrategy; if (family != other.family) return family < other.family; + if (hintingPreference != other.hintingPreference) return hintingPreference < other.hintingPreference; #ifdef Q_WS_X11 if (addStyle != other.addStyle) return addStyle < other.addStyle; diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 1e94bf5..cbe0423 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -81,6 +81,10 @@ # define FM_DEBUG if (false) qDebug #endif +#if defined(Q_WS_WIN) && !defined(QT_NO_DIRECTWRITE) +# include <dwrite.h> +#endif + QT_BEGIN_NAMESPACE #define SMOOTH_SCALABLE 0xffff @@ -643,13 +647,24 @@ public: #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) , symbianExtras(0) #endif +#if defined(Q_WS_WIN) && !defined(QT_NO_DIRECTWRITE) + , directWriteFactory(0) + , directWriteGdiInterop(0) +#endif { } + ~QFontDatabasePrivate() { free(); #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) if (symbianExtras) delete symbianExtras; #endif +#if defined(Q_WS_WIN) && !defined(QT_NO_DIRECTWRITE) + if (directWriteGdiInterop) + directWriteGdiInterop->Release(); + if (directWriteFactory != 0) + directWriteFactory->Release(); +#endif } QtFontFamily *family(const QString &f, bool = false); void free() { @@ -667,6 +682,12 @@ public: #endif QtFontFamily **families; +#if defined(Q_WS_WIN) && !defined(QT_NO_DIRECTWRITE) + IDWriteFactory *directWriteFactory; + IDWriteGdiInterop *directWriteGdiInterop; +#endif + + struct ApplicationFont { QString fileName; QByteArray data; diff --git a/src/gui/text/qfontdatabase_win.cpp b/src/gui/text/qfontdatabase_win.cpp index e2c5116..0bb1d8d 100644 --- a/src/gui/text/qfontdatabase_win.cpp +++ b/src/gui/text/qfontdatabase_win.cpp @@ -49,6 +49,11 @@ #include "qabstractfileengine.h" #include "qendian.h" +#if !defined(QT_NO_DIRECTWRITE) +# include "qsettings.h" +# include "qfontenginedirectwrite_p.h" +#endif + #ifdef Q_OS_WINCE # include <QTemporaryFile> #endif @@ -542,6 +547,65 @@ static void initFontInfo(QFontEngineWin *fe, const QFontDef &request, const QFon } } +#if !defined(QT_NO_DIRECTWRITE) +static void initFontInfo(QFontEngineDirectWrite *fe, const QFontDef &request, + const QFontPrivate *fp, IDWriteFont *font) +{ + fe->fontDef = request; + + IDWriteFontFamily *fontFamily = NULL; + HRESULT hr = font->GetFontFamily(&fontFamily); + + IDWriteLocalizedStrings *familyNames = NULL; + if (SUCCEEDED(hr)) + hr = fontFamily->GetFamilyNames(&familyNames); + + UINT32 index = 0; + BOOL exists = false; + + wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; + + if (SUCCEEDED(hr)) { + int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); + + if (defaultLocaleSuccess) + hr = familyNames->FindLocaleName(localeName, &index, &exists); + + if (SUCCEEDED(hr) && !exists) + hr = familyNames->FindLocaleName(L"en-us", &index, &exists); + } + + if (!exists) + index = 0; + + UINT32 length = 0; + if (SUCCEEDED(hr)) + hr = familyNames->GetStringLength(index, &length); + + wchar_t *name = new (std::nothrow) wchar_t[length+1]; + if (name == NULL) + hr = E_OUTOFMEMORY; + + // Get the family name. + if (SUCCEEDED(hr)) + hr = familyNames->GetString(index, name, length + 1); + + if (SUCCEEDED(hr)) + fe->fontDef.family = QString::fromWCharArray(name); + + delete[] name; + if (familyNames != NULL) + familyNames->Release(); + + if (FAILED(hr)) + qErrnoWarning(hr, "initFontInfo: Failed to get family name"); + + if (fe->fontDef.pointSize < 0) + fe->fontDef.pointSize = fe->fontDef.pixelSize * 72. / fp->dpi; + else if (fe->fontDef.pixelSize == -1) + fe->fontDef.pixelSize = qRound(fe->fontDef.pointSize * fp->dpi / 72.); +} +#endif static const char *other_tryFonts[] = { "Arial", @@ -595,6 +659,14 @@ static const char *kr_tryFonts[] = { static const char **tryFonts = 0; +#if !defined(QT_NO_DIRECTWRITE) +static QString fontNameSubstitute(const QString &familyName) +{ + QLatin1String key("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\" + "FontSubstitutes"); + return QSettings(key, QSettings::NativeFormat).value(familyName, familyName).toString(); +} +#endif static inline HFONT systemFont() { @@ -629,6 +701,15 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &requ HFONT hfont = 0; + +#if !defined(QT_NO_DIRECTWRITE) + bool useDirectWrite = (request.hintingPreference & QFont::PreferNoHinting) + || (request.hintingPreference & QFont::PreferVerticalHinting); + IDWriteFont *directWriteFont = 0; +#else + bool useDirectWrite = false; +#endif + if (fp->rawMode) { // will choose a stock font int f, deffnt = SYSTEM_FONT; QString fam = desc->family->name.toLower(); @@ -745,6 +826,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &requ fam = QLatin1String("Courier New"); memcpy(lf.lfFaceName, fam.utf16(), sizeof(wchar_t) * qMin(fam.length() + 1, 32)); // 32 = Windows hard-coded + hfont = CreateFontIndirect(&lf); if (!hfont) qErrnoWarning("QFontEngine::loadEngine: CreateFontIndirect failed"); @@ -759,52 +841,120 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &requ res = GetTextMetrics(hdc, &tm); avWidth = tm.tmAveCharWidth; ttf = tm.tmPitchAndFamily & TMPF_TRUETYPE; - SelectObject(hdc, oldObj); - if (hfont && (!ttf || request.stretch != 100)) { - DeleteObject(hfont); - if (!res) - qErrnoWarning("QFontEngine::loadEngine: GetTextMetrics failed"); - lf.lfWidth = avWidth * request.stretch/100; - hfont = CreateFontIndirect(&lf); - if (!hfont) - qErrnoWarning("QFontEngine::loadEngine: CreateFontIndirect with stretch failed"); - } + if (!ttf || !useDirectWrite) { + useDirectWrite = false; + + if (hfont && (!ttf || request.stretch != 100)) { + DeleteObject(hfont); + if (!res) + qErrnoWarning("QFontEngine::loadEngine: GetTextMetrics failed"); + lf.lfWidth = avWidth * request.stretch/100; + hfont = CreateFontIndirect(&lf); + if (!hfont) + qErrnoWarning("QFontEngine::loadEngine: CreateFontIndirect with stretch failed"); + } #ifndef Q_WS_WINCE - if (hfont == 0) { - hfont = (HFONT)GetStockObject(ANSI_VAR_FONT); - stockFont = true; - } + if (hfont == 0) { + hfont = (HFONT)GetStockObject(ANSI_VAR_FONT); + stockFont = true; + } #else - if (hfont == 0) { - hfont = (HFONT)GetStockObject(SYSTEM_FONT); - stockFont = true; + if (hfont == 0) { + hfont = (HFONT)GetStockObject(SYSTEM_FONT); + stockFont = true; + } +#endif + + } + +#if !defined(QT_NO_DIRECTWRITE) + else { + // Default to false for DirectWrite (and re-enable once/if everything + // turns out okay) + useDirectWrite = false; + + QFontDatabasePrivate *db = privateDb(); + if (db->directWriteFactory == 0) { + HRESULT hr = DWriteCreateFactory( + DWRITE_FACTORY_TYPE_SHARED, + __uuidof(IDWriteFactory), + reinterpret_cast<IUnknown **>(&db->directWriteFactory) + ); + if (FAILED(hr)) { + qErrnoWarning("QFontEngine::loadEngine: DWriteCreateFactory failed"); + } else { + hr = db->directWriteFactory->GetGdiInterop(&db->directWriteGdiInterop); + if (FAILED(hr)) + qErrnoWarning("QFontEngine::loadEngine: GetGdiInterop failed"); + } + } + + if (db->directWriteGdiInterop != 0) { + QString nameSubstitute = fontNameSubstitute(QString::fromWCharArray(lf.lfFaceName)); + memcpy(lf.lfFaceName, nameSubstitute.utf16(), + sizeof(wchar_t) * qMin(nameSubstitute.length() + 1, LF_FACESIZE)); + + HRESULT hr = db->directWriteGdiInterop->CreateFontFromLOGFONT( + &lf, + &directWriteFont); + if (FAILED(hr)) { + qErrnoWarning("QFontEngine::loadEngine: CreateFontFromLOGFONT failed " + "for %ls (0x%lx)", + lf.lfFaceName, hr); + } else { + DeleteObject(hfont); + useDirectWrite = true; + } + } } #endif } - QFontEngineWin *few = new QFontEngineWin(font_name, hfont, stockFont, lf); - - if (preferClearTypeAA) - few->glyphFormat = QFontEngineGlyphCache::Raster_RGBMask; - - // Also check for OpenType tables when using complex scripts - // ### TODO: This only works for scripts that require OpenType. More generally - // for scripts that do not require OpenType we should just look at the list of - // supported writing systems in the font's OS/2 table. - if (scriptRequiresOpenType(script)) { - HB_Face hbFace = few->harfbuzzFace(); - if (!hbFace || !hbFace->supported_scripts[script]) { - FM_DEBUG(" OpenType support missing for script\n"); - delete few; - return 0; + + QFontEngine *fe = 0; + if (!useDirectWrite) { + QFontEngineWin *few = new QFontEngineWin(font_name, hfont, stockFont, lf); + if (preferClearTypeAA) + few->glyphFormat = QFontEngineGlyphCache::Raster_RGBMask; + + // Also check for OpenType tables when using complex scripts + // ### TODO: This only works for scripts that require OpenType. More generally + // for scripts that do not require OpenType we should just look at the list of + // supported writing systems in the font's OS/2 table. + if (scriptRequiresOpenType(script)) { + HB_Face hbFace = few->harfbuzzFace(); + if (!hbFace || !hbFace->supported_scripts[script]) { + FM_DEBUG(" OpenType support missing for script\n"); + delete few; + return 0; + } } + + initFontInfo(few, request, fp); + fe = few; } - QFontEngine *fe = few; - initFontInfo(few, request, fp); +#if !defined(QT_NO_DIRECTWRITE) + else { + QFontDatabasePrivate *db = privateDb(); + QFontEngineDirectWrite *fedw = new QFontEngineDirectWrite(font_name, + db->directWriteFactory, + db->directWriteGdiInterop, + directWriteFont, + request.pixelSize); + + initFontInfo(fedw, request, fp, directWriteFont); + + fe = fedw; + } + + if (directWriteFont != 0) + directWriteFont->Release(); +#endif + if(script == QUnicodeTables::Common && !(request.styleStrategy & QFont::NoFontMerging) && !(desc->family->writingSystems[QFontDatabase::Symbol] & QtFontFamily::Supported)) { @@ -836,7 +986,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &requ list << QLatin1String(*tf); ++tf; } - QFontEngine *mfe = new QFontEngineMultiWin(few, list); + QFontEngine *mfe = new QFontEngineMultiWin(fe, list); mfe->fontDef = fe->fontDef; fe = mfe; } diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index bbb242b..f501141 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -117,6 +117,8 @@ public: // S60 types S60FontEngine, // Cannot be simply called "S60". Reason is qt_s60Data.h + DirectWrite, + TestFontEngine = 0x1000 }; diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index ecb0384..82d9da0 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -1286,7 +1286,7 @@ QImage QFontEngineWin::alphaRGBMapForGlyph(glyph_t glyph, QFixed, int margin, co // -------------------------------------- Multi font engine -QFontEngineMultiWin::QFontEngineMultiWin(QFontEngineWin *first, const QStringList &fallbacks) +QFontEngineMultiWin::QFontEngineMultiWin(QFontEngine *first, const QStringList &fallbacks) : QFontEngineMulti(fallbacks.size()+1), fallbacks(fallbacks) { diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h index 22085e8..28d8000 100644 --- a/src/gui/text/qfontengine_win_p.h +++ b/src/gui/text/qfontengine_win_p.h @@ -150,7 +150,7 @@ private: class QFontEngineMultiWin : public QFontEngineMulti { public: - QFontEngineMultiWin(QFontEngineWin *first, const QStringList &fallbacks); + QFontEngineMultiWin(QFontEngine *first, const QStringList &fallbacks); void loadEngine(int at); QStringList fallbacks; diff --git a/src/gui/text/qfontenginedirectwrite.cpp b/src/gui/text/qfontenginedirectwrite.cpp new file mode 100644 index 0000000..23fff0d --- /dev/null +++ b/src/gui/text/qfontenginedirectwrite.cpp @@ -0,0 +1,646 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT_NO_DIRECTWRITE + +#include "qfontenginedirectwrite_p.h" + +#include <qendian.h> +#include <dwrite.h> +#include <private/qnativeimage_p.h> + +#include <d2d1.h> + +QT_BEGIN_NAMESPACE + +// Convert from design units to logical pixels +#define DESIGN_TO_LOGICAL(DESIGN_UNIT_VALUE) \ + QFixed::fromReal((qreal(DESIGN_UNIT_VALUE) / qreal(m_unitsPerEm)) * fontDef.pixelSize) + +namespace { + + class GeometrySink: public IDWriteGeometrySink + { + public: + GeometrySink(QPainterPath *path) : m_path(path), m_refCount(0) + { + Q_ASSERT(m_path != 0); + } + + IFACEMETHOD_(void, AddBeziers)(const D2D1_BEZIER_SEGMENT *beziers, UINT bezierCount); + IFACEMETHOD_(void, AddLines)(const D2D1_POINT_2F *points, UINT pointCount); + IFACEMETHOD_(void, BeginFigure)(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin); + IFACEMETHOD(Close)(); + IFACEMETHOD_(void, EndFigure)(D2D1_FIGURE_END figureEnd); + IFACEMETHOD_(void, SetFillMode)(D2D1_FILL_MODE fillMode); + IFACEMETHOD_(void, SetSegmentFlags)(D2D1_PATH_SEGMENT vertexFlags); + + IFACEMETHOD_(unsigned long, AddRef)(); + IFACEMETHOD_(unsigned long, Release)(); + IFACEMETHOD(QueryInterface)(IID const &riid, void **ppvObject); + + private: + inline static QPointF fromD2D1_POINT_2F(const D2D1_POINT_2F &inp) + { + return QPointF(inp.x, inp.y); + } + + unsigned long m_refCount; + QPointF m_startPoint; + QPainterPath *m_path; + }; + + void GeometrySink::AddBeziers(const D2D1_BEZIER_SEGMENT *beziers, + UINT bezierCount) + { + for (uint i=0; i<bezierCount; ++i) { + QPointF c1 = fromD2D1_POINT_2F(beziers[i].point1); + QPointF c2 = fromD2D1_POINT_2F(beziers[i].point2); + QPointF p2 = fromD2D1_POINT_2F(beziers[i].point3); + + m_path->cubicTo(c1, c2, p2); + } + } + + void GeometrySink::AddLines(const D2D1_POINT_2F *points, UINT pointsCount) + { + for (uint i=0; i<pointsCount; ++i) + m_path->lineTo(fromD2D1_POINT_2F(points[i])); + } + + void GeometrySink::BeginFigure(D2D1_POINT_2F startPoint, + D2D1_FIGURE_BEGIN /*figureBegin*/) + { + m_startPoint = fromD2D1_POINT_2F(startPoint); + m_path->moveTo(m_startPoint); + } + + IFACEMETHODIMP GeometrySink::Close() + { + return E_NOTIMPL; + } + + void GeometrySink::EndFigure(D2D1_FIGURE_END figureEnd) + { + if (figureEnd == D2D1_FIGURE_END_CLOSED) + m_path->closeSubpath(); + } + + void GeometrySink::SetFillMode(D2D1_FILL_MODE fillMode) + { + m_path->setFillRule(fillMode == D2D1_FILL_MODE_ALTERNATE + ? Qt::OddEvenFill + : Qt::WindingFill); + } + + void GeometrySink::SetSegmentFlags(D2D1_PATH_SEGMENT /*vertexFlags*/) + { + /* Not implemented */ + } + + IFACEMETHODIMP_(unsigned long) GeometrySink::AddRef() + { + return InterlockedIncrement(&m_refCount); + } + + IFACEMETHODIMP_(unsigned long) GeometrySink::Release() + { + unsigned long newCount = InterlockedDecrement(&m_refCount); + if (newCount == 0) + { + delete this; + return 0; + } + + return newCount; + } + + IFACEMETHODIMP GeometrySink::QueryInterface(IID const &riid, void **ppvObject) + { + if (__uuidof(IDWriteGeometrySink) == riid) { + *ppvObject = this; + } else if (__uuidof(IUnknown) == riid) { + *ppvObject = this; + } else { + *ppvObject = NULL; + return E_FAIL; + } + + AddRef(); + return S_OK; + } + +} + +QFontEngineDirectWrite::QFontEngineDirectWrite(const QString &name, + IDWriteFactory *directWriteFactory, + IDWriteGdiInterop *directWriteGdiInterop, + IDWriteFont *directWriteFont, + qreal pixelSize) + : m_name(name) + , m_directWriteFont(directWriteFont) + , m_directWriteFontFace(0) + , m_directWriteFactory(directWriteFactory) + , m_directWriteBitmapRenderTarget(0) + , m_directWriteGdiInterop(directWriteGdiInterop) + , m_lineThickness(-1) + , m_unitsPerEm(-1) + , m_ascent(-1) + , m_descent(-1) + , m_xHeight(-1) + , m_lineGap(-1) +{ + m_directWriteFont->AddRef(); + m_directWriteFactory->AddRef(); + m_directWriteGdiInterop->AddRef(); + + fontDef.pixelSize = pixelSize; + + HRESULT hr = m_directWriteFont->CreateFontFace(&m_directWriteFontFace); + if (FAILED(hr)) + qErrnoWarning("QFontEngineDirectWrite: CreateFontFace failed"); + + collectMetrics(); +} + +QFontEngineDirectWrite::~QFontEngineDirectWrite() +{ + m_directWriteFont->Release(); + m_directWriteFactory->Release(); + m_directWriteGdiInterop->Release(); + + if (m_directWriteBitmapRenderTarget != 0) + m_directWriteBitmapRenderTarget->Release(); +} + +void QFontEngineDirectWrite::collectMetrics() +{ + if (m_directWriteFont != 0) { + DWRITE_FONT_METRICS metrics; + + m_directWriteFont->GetMetrics(&metrics); + m_unitsPerEm = metrics.designUnitsPerEm; + + m_lineThickness = DESIGN_TO_LOGICAL(metrics.underlineThickness); + m_ascent = DESIGN_TO_LOGICAL(metrics.ascent); + m_descent = DESIGN_TO_LOGICAL(metrics.descent); + m_xHeight = DESIGN_TO_LOGICAL(metrics.xHeight); + m_lineGap = DESIGN_TO_LOGICAL(metrics.lineGap); + } +} + +QFixed QFontEngineDirectWrite::lineThickness() const +{ + if (m_lineThickness > 0) + return m_lineThickness; + else + return QFontEngine::lineThickness(); +} + +bool QFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, uint *length) const +{ + if (m_directWriteFontFace) { + DWORD t = qbswap<quint32>(tag); + + const void *tableData = 0; + void *tableContext = 0; + UINT32 tableSize; + BOOL exists; + HRESULT hr = m_directWriteFontFace->TryGetFontTable( + t, &tableData, &tableSize, &tableContext, &exists + ); + + if (SUCCEEDED(hr)) { + if (!exists) + return false; + + if (buffer == 0) { + *length = tableSize; + return true; + } else if (*length < tableSize) { + return false; + } + + qMemCopy(buffer, tableData, tableSize); + m_directWriteFontFace->ReleaseFontTable(tableContext); + + return true; + } else { + qErrnoWarning("QFontEngineDirectWrite::getSfntTableData: TryGetFontTable failed"); + } + } + + return false; +} + +QFixed QFontEngineDirectWrite::emSquareSize() const +{ + if (m_unitsPerEm > 0) + return m_unitsPerEm; + else + return QFontEngine::emSquareSize(); +} + +inline unsigned int getChar(const QChar *str, int &i, const int len) +{ + unsigned int uc = str[i].unicode(); + if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { + uint low = str[i+1].unicode(); + if (low >= 0xdc00 && low < 0xe000) { + uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; + ++i; + } + } + return uc; +} + +bool QFontEngineDirectWrite::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, + int *nglyphs, QTextEngine::ShaperFlags flags) const +{ + if (m_directWriteFontFace != 0) { + QVarLengthArray<UINT32> codePoints(len); + for (int i=0; i<len; ++i) { + codePoints[i] = getChar(str, i, len); + if (flags & QTextEngine::RightToLeft) + codePoints[i] = QChar::mirroredChar(codePoints[i]); + } + + QVarLengthArray<UINT16> glyphIndices(len); + HRESULT hr = m_directWriteFontFace->GetGlyphIndicesW(codePoints.data(), + len, + glyphIndices.data()); + + if (SUCCEEDED(hr)) { + for (int i=0; i<len; ++i) + glyphs->glyphs[i] = glyphIndices[i]; + + *nglyphs = len; + + if (!(flags & QTextEngine::GlyphIndicesOnly)) + recalcAdvances(glyphs, 0); + + return true; + } else { + qErrnoWarning("QFontEngineDirectWrite::stringToCMap: GetGlyphIndicesW failed"); + } + } + + return false; +} + +void QFontEngineDirectWrite::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags) const +{ + if (m_directWriteFontFace == 0) + return; + + QVarLengthArray<UINT16> glyphIndices(glyphs->numGlyphs); + + // ### Caching? + for(int i=0; i<glyphs->numGlyphs; i++) + glyphIndices[i] = UINT16(glyphs->glyphs[i]); + + QVarLengthArray<DWRITE_GLYPH_METRICS> glyphMetrics(glyphIndices.size()); + HRESULT hr = m_directWriteFontFace->GetDesignGlyphMetrics(glyphIndices.data(), + glyphIndices.size(), + glyphMetrics.data()); + if (SUCCEEDED(hr)) { + for (int i=0; i<glyphs->numGlyphs; ++i) { + glyphs->advances_x[i] = DESIGN_TO_LOGICAL(glyphMetrics[i].advanceWidth); + if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) + glyphs->advances_x[i] = glyphs->advances_x[i].round(); + glyphs->advances_y[i] = 0; + } + } else { + qErrnoWarning("QFontEngineDirectWrite::recalcAdvances: GetDesignGlyphMetrics failed"); + } +} + +void QFontEngineDirectWrite::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, + QPainterPath *path, QTextItem::RenderFlags flags) +{ + if (m_directWriteFontFace == 0) + return; + + QVarLengthArray<UINT16> glyphIndices(nglyphs); + QVarLengthArray<DWRITE_GLYPH_OFFSET> glyphOffsets(nglyphs); + QVarLengthArray<FLOAT> glyphAdvances(nglyphs); + + for (int i=0; i<nglyphs; ++i) { + glyphIndices[i] = glyphs[i]; + glyphOffsets[i].advanceOffset = positions[i].x.toReal(); + glyphOffsets[i].ascenderOffset = -positions[i].y.toReal(); + glyphAdvances[i] = 0.0; + } + + GeometrySink geometrySink(path); + HRESULT hr = m_directWriteFontFace->GetGlyphRunOutline( + fontDef.pixelSize, + glyphIndices.data(), + glyphAdvances.data(), + glyphOffsets.data(), + nglyphs, + false, + flags & QTextItem::RightToLeft, + &geometrySink + ); + + if (FAILED(hr)) + qErrnoWarning("QFontEngineDirectWrite::addGlyphsToPath: GetGlyphRunOutline failed"); +} + +glyph_metrics_t QFontEngineDirectWrite::boundingBox(const QGlyphLayout &glyphs) +{ + if (glyphs.numGlyphs == 0) + return glyph_metrics_t(); + + bool round = fontDef.styleStrategy & QFont::ForceIntegerMetrics; + + QFixed w = 0; + for (int i = 0; i < glyphs.numGlyphs; ++i) { + w += round ? glyphs.effectiveAdvance(i).round() : glyphs.effectiveAdvance(i); + + } + + return glyph_metrics_t(0, -m_ascent, w - lastRightBearing(glyphs), m_ascent + m_descent, w, 0); +} + +glyph_metrics_t QFontEngineDirectWrite::boundingBox(glyph_t g) +{ + if (m_directWriteFontFace == 0) + return glyph_metrics_t(); + + UINT16 glyphIndex = g; + + DWRITE_GLYPH_METRICS glyphMetrics; + HRESULT hr = m_directWriteFontFace->GetDesignGlyphMetrics(&glyphIndex, 1, &glyphMetrics); + if (SUCCEEDED(hr)) { + QFixed advanceWidth = DESIGN_TO_LOGICAL(glyphMetrics.advanceWidth); + QFixed leftSideBearing = DESIGN_TO_LOGICAL(glyphMetrics.leftSideBearing); + QFixed rightSideBearing = DESIGN_TO_LOGICAL(glyphMetrics.rightSideBearing); + QFixed advanceHeight = DESIGN_TO_LOGICAL(glyphMetrics.advanceHeight); + QFixed verticalOriginY = DESIGN_TO_LOGICAL(glyphMetrics.verticalOriginY); + + if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) { + advanceWidth = advanceWidth.round(); + advanceHeight = advanceHeight.round(); + } + + QFixed width = advanceWidth - leftSideBearing - rightSideBearing; + + return glyph_metrics_t(-leftSideBearing, -verticalOriginY, + width, m_ascent + m_descent, + advanceWidth, advanceHeight); + } else { + qErrnoWarning("QFontEngineDirectWrite::boundingBox: GetDesignGlyphMetrics failed"); + } + + return glyph_metrics_t(); +} + +QFixed QFontEngineDirectWrite::ascent() const +{ + return fontDef.styleStrategy & QFont::ForceIntegerMetrics + ? m_ascent.round() + : m_ascent; +} + +QFixed QFontEngineDirectWrite::descent() const +{ + return fontDef.styleStrategy & QFont::ForceIntegerMetrics + ? (m_descent - 1).round() + : (m_descent - 1); +} + +QFixed QFontEngineDirectWrite::leading() const +{ + return fontDef.styleStrategy & QFont::ForceIntegerMetrics + ? m_lineGap.round() + : m_lineGap; +} + +QFixed QFontEngineDirectWrite::xHeight() const +{ + return fontDef.styleStrategy & QFont::ForceIntegerMetrics + ? m_xHeight.round() + : m_xHeight; +} + +qreal QFontEngineDirectWrite::maxCharWidth() const +{ + // ### + return 0; +} + +extern uint qt_pow_gamma[256]; + +QImage QFontEngineDirectWrite::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) +{ + QImage im = imageForGlyph(glyph, subPixelPosition, 0, QTransform()); + + QImage indexed(im.width(), im.height(), QImage::Format_Indexed8); + QVector<QRgb> colors(256); + for (int i=0; i<256; ++i) + colors[i] = qRgba(0, 0, 0, i); + indexed.setColorTable(colors); + + for (int y=0; y<im.height(); ++y) { + uint *src = (uint*) im.scanLine(y); + uchar *dst = indexed.scanLine(y); + for (int x=0; x<im.width(); ++x) { + *dst = qGray(*src); + if (QNativeImage::systemFormat() == QImage::Format_RGB16) + *dst = 255 - qGray(*src); + else + *dst = 255 - (qt_pow_gamma[qGray(*src)] * 255. / 2047.); + + ++dst; + ++src; + } + } + + return indexed; +} + +bool QFontEngineDirectWrite::supportsSubPixelPositions() const +{ + return true; +} + +QImage QFontEngineDirectWrite::imageForGlyph(glyph_t t, + QFixed subPixelPosition, + int margin, + const QTransform &xform) +{ + glyph_metrics_t metrics = QFontEngine::boundingBox(t, xform); + int width = (metrics.width + margin * 2 + 4).ceil().toInt() ; + int height = (metrics.height + margin * 2 + 4).ceil().toInt(); + + UINT16 glyphIndex = t; + FLOAT glyphAdvance = metrics.xoff.toReal(); + + DWRITE_GLYPH_OFFSET glyphOffset; + glyphOffset.advanceOffset = 0; + glyphOffset.ascenderOffset = 0; + + DWRITE_GLYPH_RUN glyphRun; + glyphRun.fontFace = m_directWriteFontFace; + glyphRun.fontEmSize = fontDef.pixelSize; + glyphRun.glyphCount = 1; + glyphRun.glyphIndices = &glyphIndex; + glyphRun.glyphAdvances = &glyphAdvance; + glyphRun.isSideways = false; + glyphRun.bidiLevel = 0; + glyphRun.glyphOffsets = &glyphOffset; + + QFixed x = margin - metrics.x.round() + subPixelPosition; + QFixed y = margin - metrics.y.floor(); + + DWRITE_MATRIX transform; + transform.dx = x.toReal(); + transform.dy = y.toReal(); + transform.m11 = xform.m11(); + transform.m12 = xform.m12(); + transform.m21 = xform.m21(); + transform.m22 = xform.m22(); + + IDWriteGlyphRunAnalysis *glyphAnalysis = NULL; + HRESULT hr = m_directWriteFactory->CreateGlyphRunAnalysis( + &glyphRun, + 1.0f, + &transform, + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC, + DWRITE_MEASURING_MODE_NATURAL, + 0.0, 0.0, + &glyphAnalysis + ); + + if (SUCCEEDED(hr)) { + RECT rect; + rect.left = 0; + rect.top = 0; + rect.right = width; + rect.bottom = height; + + int size = width * height * 3; + BYTE *alphaValues = new BYTE[size]; + qMemSet(alphaValues, size, 0); + + hr = glyphAnalysis->CreateAlphaTexture(DWRITE_TEXTURE_CLEARTYPE_3x1, + &rect, + alphaValues, + size); + + if (SUCCEEDED(hr)) { + QImage img(width, height, QImage::Format_RGB32); + img.fill(0xffffffff); + + for (int y=0; y<height; ++y) { + uint *dest = reinterpret_cast<uint *>(img.scanLine(y)); + BYTE *src = alphaValues + width * 3 * y; + + for (int x=0; x<width; ++x) { + dest[x] = *(src) << 16 + | *(src + 1) << 8 + | *(src + 2); + + src += 3; + } + } + + delete[] alphaValues; + glyphAnalysis->Release(); + + return img; + } else { + delete[] alphaValues; + glyphAnalysis->Release(); + + qErrnoWarning("QFontEngineDirectWrite::imageForGlyph: CreateAlphaTexture failed"); + } + + } else { + qErrnoWarning("QFontEngineDirectWrite::imageForGlyph: CreateGlyphRunAnalysis failed"); + } + + return QImage(); +} + +QImage QFontEngineDirectWrite::alphaRGBMapForGlyph(glyph_t t, + QFixed subPixelPosition, + int margin, + const QTransform &xform) +{ + QImage mask = imageForGlyph(t, subPixelPosition, margin, xform); + return mask.depth() == 32 + ? mask + : mask.convertToFormat(QImage::Format_RGB32); +} + +const char *QFontEngineDirectWrite::name() const +{ + return 0; +} + +bool QFontEngineDirectWrite::canRender(const QChar *string, int len) +{ + for (int i=0; i<len; ++i) { + BOOL exists; + UINT32 codePoint = getChar(string, i, len); + HRESULT hr = m_directWriteFont->HasCharacter(codePoint, &exists); + if (FAILED(hr)) { + qErrnoWarning("QFontEngineDirectWrite::canRender: HasCharacter failed"); + return false; + } else if (!exists) { + return false; + } + } + + return true; +} + +QFontEngine::Type QFontEngineDirectWrite::type() const +{ + return QFontEngine::DirectWrite; +} + +QT_END_NAMESPACE + +#endif // QT_NO_DIRECTWRITE diff --git a/src/gui/text/qfontenginedirectwrite_p.h b/src/gui/text/qfontenginedirectwrite_p.h new file mode 100644 index 0000000..80f90b8 --- /dev/null +++ b/src/gui/text/qfontenginedirectwrite_p.h @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QFONTENGINEDIRECTWRITE_H +#define QFONTENGINEDIRECTWRITE_H + +#ifndef QT_NO_DIRECTWRITE + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "private/qfontengine_p.h" + +struct IDWriteFont ; +struct IDWriteFontFace ; +struct IDWriteFactory ; +struct IDWriteBitmapRenderTarget ; +struct IDWriteGdiInterop ; + +QT_BEGIN_NAMESPACE + +class QFontEngineDirectWrite : public QFontEngine +{ + Q_OBJECT +public: + explicit QFontEngineDirectWrite(const QString &name, + IDWriteFactory *directWriteFactory, + IDWriteGdiInterop *directWriteGdiInterop, + IDWriteFont *directWriteFont, + qreal pixelSize); + ~QFontEngineDirectWrite(); + + QFixed lineThickness() const; + bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; + QFixed emSquareSize() const; + + bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const; + void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags) const; + + void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, + QPainterPath *path, QTextItem::RenderFlags flags); + + glyph_metrics_t boundingBox(const QGlyphLayout &glyphs); + glyph_metrics_t boundingBox(glyph_t g); + + QFixed ascent() const; + QFixed descent() const; + QFixed leading() const; + QFixed xHeight() const; + qreal maxCharWidth() const; + + const char *name() const; + + bool supportsSubPixelPositions() const; + + QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition); + QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, int margin, + const QTransform &xform); + + bool canRender(const QChar *string, int len); + Type type() const; + +private: + QImage imageForGlyph(glyph_t t, QFixed subPixelPosition, int margin, const QTransform &xform); + void collectMetrics(); + + QString m_name; + IDWriteFont *m_directWriteFont; + IDWriteFontFace *m_directWriteFontFace; + IDWriteFactory *m_directWriteFactory; + IDWriteBitmapRenderTarget *m_directWriteBitmapRenderTarget; + IDWriteGdiInterop *m_directWriteGdiInterop; + + QFixed m_lineThickness; + int m_unitsPerEm; + QFixed m_ascent; + QFixed m_descent; + QFixed m_xHeight; + QFixed m_lineGap; + FaceId m_faceId; +}; + +QT_END_NAMESPACE + +#endif // QT_NO_DIRECTWRITE + +#endif // QFONTENGINEDIRECTWRITE_H diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index c9af401..a02ea49 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -411,6 +411,9 @@ void QTextFormatPrivate::recalcFont() const case QTextFormat::FontStyleHint: f.setStyleHint(static_cast<QFont::StyleHint>(props.at(i).value.toInt()), f.styleStrategy()); break; + case QTextFormat::FontHintingPreference: + f.setHintingPreference(static_cast<QFont::HintingPreference>(props.at(i).value.toInt())); + break; case QTextFormat::FontStyleStrategy: f.setStyleStrategy(static_cast<QFont::StyleStrategy>(props.at(i).value.toInt())); break; @@ -1565,6 +1568,25 @@ void QTextCharFormat::setUnderlineStyle(UnderlineStyle style) \sa font() */ +/*! + \since 4.8 + + \fn void QTextCharFormat::setFontHintingPreference(QFont::HintingPreference hintingPreference) + + Sets the hinting preference of the text format's font to be \a hintingPreference. + + \sa setFont(), QFont::setHintingPreference() +*/ + +/*! + \since 4.8 + + \fn QFont::HintingPreference QTextCharFormat::fontHintingPreference() const + + Returns the hinting preference set for this text format. + + \sa font(), QFont::hintingPreference() +*/ /*! \fn QPen QTextCharFormat::textOutline() const diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index 9a573a0..ff28eaa 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -177,6 +177,7 @@ public: FontStyleHint = 0x1FE3, FontStyleStrategy = 0x1FE4, FontKerning = 0x1FE5, + FontHintingPreference = 0x1FE6, FontFamily = 0x2000, FontPointSize = 0x2001, FontSizeAdjustment = 0x2002, @@ -460,6 +461,16 @@ public: QFont::StyleStrategy fontStyleStrategy() const { return static_cast<QFont::StyleStrategy>(intProperty(FontStyleStrategy)); } + inline void setFontHintingPreference(QFont::HintingPreference hintingPreference) + { + setProperty(FontHintingPreference, hintingPreference); + } + + inline QFont::HintingPreference fontHintingPreference() const + { + return static_cast<QFont::HintingPreference>(intProperty(FontHintingPreference)); + } + inline void setFontKerning(bool enable) { setProperty(FontKerning, enable); } inline bool fontKerning() const diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index d3e8f2d..7fb2783 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -81,6 +81,12 @@ win32 { HEADERS += text/qfontengine_win_p.h } +contains(QT_CONFIG, directwrite) { + LIBS_PRIVATE += -ldwrite + HEADERS += text/qfontenginedirectwrite_p.h + SOURCES += text/qfontenginedirectwrite.cpp +} + unix:x11 { HEADERS += \ text/qfontengine_x11_p.h \ diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 4f4e706a..07da68d 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -61,6 +61,9 @@ #include <private/qtextengine_p.h> #include <qtextlayout.h> #undef private +#else +#include <private/qtextengine_p.h> +#include <qtextlayout.h> #endif #include <qfontdatabase.h> @@ -105,6 +108,9 @@ private slots: void linearB(); void controlInSyllable_qtbug14204(); void combiningMarks_qtbug15675(); + + void mirroredChars_data(); + void mirroredChars(); }; tst_QTextScriptEngine::tst_QTextScriptEngine() @@ -1156,5 +1162,59 @@ void tst_QTextScriptEngine::combiningMarks_qtbug15675() #endif } +void tst_QTextScriptEngine::mirroredChars_data() +{ + QTest::addColumn<int>("hintingPreference"); + + QTest::newRow("Default hinting") << int(QFont::PreferDefaultHinting); + QTest::newRow("No hinting") << int(QFont::PreferNoHinting); + QTest::newRow("Vertical hinting") << int(QFont::PreferVerticalHinting); + QTest::newRow("Full hinting") << int(QFont::PreferFullHinting); +} + +void tst_QTextScriptEngine::mirroredChars() +{ + QFETCH(int, hintingPreference); + + QFont font; + font.setHintingPreference(QFont::HintingPreference(hintingPreference)); + + QString s; + s.append(QLatin1Char('(')); + s.append(QLatin1Char(')')); + + HB_Glyph leftParenthesis; + HB_Glyph rightParenthesis; + { + QTextLayout layout(s); + layout.beginLayout(); + layout.createLine(); + layout.endLayout(); + + QTextEngine *e = layout.engine(); + e->itemize(); + e->shape(0); + QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(2)); + + const QGlyphLayout &glyphLayout = e->layoutData->glyphLayout; + leftParenthesis = glyphLayout.glyphs[0]; + rightParenthesis = glyphLayout.glyphs[1]; + } + + { + QTextLayout layout(s); + layout.setFlags(Qt::TextForceRightToLeft); + + QTextEngine *e = layout.engine(); + e->itemize(); + e->shape(0); + QCOMPARE(e->layoutData->items[0].num_glyphs, ushort(2)); + + const QGlyphLayout &glyphLayout = e->layoutData->glyphLayout; + QCOMPARE(glyphLayout.glyphs[0], rightParenthesis); + QCOMPARE(glyphLayout.glyphs[1], leftParenthesis); + } +} + QTEST_MAIN(tst_QTextScriptEngine) #include "tst_qtextscriptengine.moc" diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 19cef9a..4503235 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -281,6 +281,7 @@ Configure::Configure(int& argc, char** argv) dictionary[ "DECLARATIVE" ] = "auto"; dictionary[ "DECLARATIVE_DEBUG" ]= "yes"; dictionary[ "PLUGIN_MANIFESTS" ] = "yes"; + dictionary[ "DIRECTWRITE" ] = "no"; QString version; QFile qglobal_h(sourcePath + "/src/corelib/global/qglobal.h"); @@ -1229,6 +1230,12 @@ void Configure::parseCmdLine() } } + else if (configCmdLine.at(i) == "-directwrite") { + dictionary["DIRECTWRITE"] = "yes"; + } else if (configCmdLine.at(i) == "-no-directwrite") { + dictionary["DIRECTWRITE"] = "no"; + } + else { dictionary[ "HELP" ] = "yes"; cout << "Unknown option " << configCmdLine.at(i) << endl; @@ -1684,7 +1691,9 @@ bool Configure::displayHelp() "[-phonon] [-no-phonon-backend] [-phonon-backend]\n" "[-no-multimedia] [-multimedia] [-no-audio-backend] [-audio-backend]\n" "[-no-script] [-script] [-no-scripttools] [-scripttools]\n" - "[-no-webkit] [-webkit] [-webkit-debug] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7); + "[-no-webkit] [-webkit] [-webkit-debug]\n" + "[-graphicssystem raster|opengl|openvg]\n" + "[-no-directwrite] [-directwrite]\n\n", 0, 7); desc("Installation options:\n\n"); @@ -1881,6 +1890,8 @@ bool Configure::displayHelp() desc("DECLARATIVE", "yes", "-declarative", "Build the declarative module"); desc("DECLARATIVE_DEBUG", "no", "-no-declarative-debug", "Do not build the declarative debugging support"); desc("DECLARATIVE_DEBUG", "yes", "-declarative-debug", "Build the declarative debugging support"); + desc("DIRECTWRITE", "no", "-no-directwrite", "Do not build support for DirectWrite font rendering"); + desc("DIRECTWRITE", "yes", "-directwrite", "Build support for DirectWrite font rendering (experimental, requires DirectWrite availability on target systems, e.g. Windows Vista with Platform Update, Windows 7, etc.)"); desc( "-arch <arch>", "Specify an architecture.\n" "Available values for <arch>:"); @@ -2244,6 +2255,8 @@ bool Configure::checkAvailability(const QString &part) available = false; } } + } else if (part == "DIRECTWRITE") { + available = findFile("dwrite.h") && findFile("d2d1.h") && findFile("dwrite.lib"); } return available; @@ -2399,6 +2412,15 @@ bool Configure::verifyConfiguration() dictionary["SCRIPT"] = "yes"; } + if (dictionary["DIRECTWRITE"] == "yes" && !checkAvailability("DIRECTWRITE")) { + cout << "WARNING: To be able to compile the DirectWrite font engine you will" << endl + << "need the Microsoft DirectWrite and Microsoft Direct2D development" << endl + << "files such as headers and libraries." << endl + << "(Press any key to continue..)"; + if (_getch() == 3) // _Any_ keypress w/no echo(eat <Enter> for stdout) + exit(0); // Exit cleanly for Ctrl+C + } + return true; } @@ -2755,6 +2777,9 @@ void Configure::generateOutputVars() qtConfig += "declarative"; } + if (dictionary["DIRECTWRITE"] == "yes") + qtConfig += "directwrite"; + if (dictionary[ "NATIVE_GESTURES" ] == "yes") qtConfig += "native-gestures"; @@ -2986,6 +3011,10 @@ void Configure::generateCachefile() configStream << " def_files_disabled"; } } + + if (dictionary["DIRECTWRITE"] == "yes") + configStream << "directwrite"; + configStream << endl; configStream << "QT_ARCH = " << dictionary[ "ARCHITECTURE" ] << endl; if (dictionary["QT_EDITION"].contains("OPENSOURCE")) @@ -3454,7 +3483,8 @@ void Configure::displayConfig() cout << "QtScript support............" << dictionary[ "SCRIPT" ] << endl; cout << "QtScriptTools support......." << dictionary[ "SCRIPTTOOLS" ] << endl; cout << "Graphics System............." << dictionary[ "GRAPHICS_SYSTEM" ] << endl; - cout << "Qt3 compatibility..........." << dictionary[ "QT3SUPPORT" ] << endl << endl; + cout << "Qt3 compatibility..........." << dictionary[ "QT3SUPPORT" ] << endl; + cout << "DirectWrite support........." << dictionary[ "DIRECTWRITE" ] << endl << endl; cout << "Third Party Libraries:" << endl; cout << " ZLIB support............" << dictionary[ "ZLIB" ] << endl; -- cgit v0.12 From 8b7c98123eadf9263c6bde4b1263bd64fc388c8d Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Mon, 14 Mar 2011 12:06:04 +0200 Subject: QS60Style: QTreeView::indexRowSizeHint returns incorrect value Fix for http://bugreports.qt.nokia.com/browse/QTBUG-17786. QS60Style tries to work around the hardcoded margin that the QCommonStyle adds to menu items (line 4782 in my QCommonStyle.cpp). Unfortunately regular itemview items are handled in the same code branch in QS60Style, so the class incorrectly reduces the itemview height 8 pixels. The reduction should only happen with menu items. Task-number: QTBUG-17786 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 38a4b7c..87d990e 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -2643,10 +2643,13 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt, sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget); //native items have small empty areas at the beginning and end of menu item sz.setWidth(sz.width() + 2 * pixelMetric(PM_MenuHMargin) + 2 * QS60StylePrivate::pixelMetric(PM_FrameCornerWidth)); - if (QS60StylePrivate::isTouchSupported()) + if (QS60StylePrivate::isTouchSupported()) { //Make itemview easier to use in touch devices + sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin)); //QCommonStyle does not adjust height with horizontal margin, it only adjusts width - sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin) - 8); //QCommonstyle adds 8 to height that this style handles through PM values + if (ct == CT_MenuItem) + sz.setHeight(sz.height() - 8); //QCommonstyle adds 8 to height that this style handles through PM values + } break; #ifndef QT_NO_COMBOBOX case CT_ComboBox: { -- cgit v0.12 From 57bda4d3139edeb76689ac64a8c36e5551093bf9 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Fri, 18 Feb 2011 10:18:49 +0100 Subject: Fix combining marks shaping without GPOS feature in HarfBuzz For certain OpenType fonts like DejaVu Sans Mono, not all combining marks has GPOS feature applied, U+0062 U+0332 is one of the case. Only getting the advances for indivivual glyphs is not enough, we should also do heuristic positioning to put the combining mark in the right place. Task-number: QTBUG-15675 Reviewed-by: Lars Knoll --- src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp | 2 +- .../qtextscriptengine/tst_qtextscriptengine.cpp | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index ef86144..6c4d9f1 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -1232,7 +1232,7 @@ HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool do } if (!face->glyphs_substituted && !glyphs_positioned) { - HB_GetGlyphAdvances(item); + HB_HeuristicPosition(item); return true; // nothing to do for us } diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 07da68d..54c07a2 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -1157,8 +1157,28 @@ void tst_QTextScriptEngine::combiningMarks_qtbug15675() QVERIFY(e->layoutData->items[0].num_glyphs == 4); QVERIFY(e->layoutData->glyphLayout.advances_y[2] > 0); +#elif defined(Q_WS_X11) + QFontDatabase db; + + if (!db.families().contains("DejaVu Sans Mono")) { + QSKIP("Required font (DejaVu Sans Mono) doesn't exist, skip test.", SkipAll); + return; + } + + QString s; + s.append(QChar(0x0062)); + s.append(QChar(0x0332)); + s.append(QChar(0x0063)); + + QTextLayout layout(s, QFont("DejaVu Sans Mono")); + QTextEngine *e = layout.d; + e->itemize(); + e->shape(0); + + QVERIFY(e->layoutData->items[0].num_glyphs == 3); + QVERIFY(e->layoutData->glyphLayout.advances_x[1] == 0); #else - QSKIP("Mac specific test", SkipAll); + QSKIP("X11/Mac specific test", SkipAll); #endif } -- cgit v0.12 From a12d39fddf615a7d75e56403525a64847e4ba5a6 Mon Sep 17 00:00:00 2001 From: Lars Knoll <lars.knoll@nokia.com> Date: Mon, 31 Jan 2011 15:57:53 +0100 Subject: Fix hebrew shaping of characters with multiple diacritics. The old code would work for a maximum of one diacritic and insert dotted circles in valid syllables. --- src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c b/src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c index 67029be..b5431a5 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c +++ b/src/3rdparty/harfbuzz/src/harfbuzz-hebrew.c @@ -84,7 +84,7 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item) logClusters[0] = 0; for (i = 1; i < shaper_item->item.length; ++i) { - hb_uint16 base = shapedChars[slen-1]; + hb_uint16 base = shapedChars[cluster_start]; hb_uint16 shaped = 0; HB_Bool invalid = FALSE; if (uc[i] == Dagesh) { @@ -143,7 +143,7 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item) } if (shaped) { if (shaper_item->font->klass->canRender(shaper_item->font, (HB_UChar16 *)&shaped, 1)) { - shapedChars[slen-1] = shaped; + shapedChars[cluster_start] = shaped; } else shaped = 0; } -- cgit v0.12 From 4d104eb33542b78e233abb9a0d6d4a0ee1495868 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Mon, 14 Mar 2011 12:04:31 +0100 Subject: Add RightToLeft direction forcing to Core Text shaper So that setting Qt::TextForceRightToLeft flag on QTextLayout can work. Reviewed-by: Eskil --- src/gui/text/qfontengine_coretext.mm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 0209689..4b65cf5 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -119,14 +119,25 @@ uint QCoreTextFontEngineMulti::fontIndexForFont(CTFontRef id) const return engines.count() - 1; } -bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags, +bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags, unsigned short *logClusters, const HB_CharAttributes *) const { QCFType<CFStringRef> cfstring = CFStringCreateWithCharactersNoCopy(0, reinterpret_cast<const UniChar *>(str), len, kCFAllocatorNull); QCFType<CFAttributedStringRef> attributedString = CFAttributedStringCreate(0, cfstring, attributeDict); - QCFType<CTTypesetterRef> typeSetter = CTTypesetterCreateWithAttributedString(attributedString); + QCFType<CTTypesetterRef> typeSetter; + + if (flags & QTextEngine::RightToLeft) { + const void *optionKeys[] = { kCTTypesetterOptionForcedEmbeddingLevel }; + const short rtlForcedEmbeddingLevelValue = 1; + const void *rtlOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &rtlForcedEmbeddingLevelValue) }; + QCFType<CFDictionaryRef> options = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, rtlOptionValues, 1, + &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + typeSetter = CTTypesetterCreateWithAttributedStringAndOptions(attributedString, options); + } else + typeSetter = CTTypesetterCreateWithAttributedString(attributedString); + CFRange range = {0, 0}; QCFType<CTLineRef> line = CTTypesetterCreateLine(typeSetter, range); CFArrayRef array = CTLineGetGlyphRuns(line); -- cgit v0.12 From 99aa67f649c44dda8c0da639b4925dbb0e4c9b70 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 14 Mar 2011 13:53:44 +0200 Subject: Fix qgraphicstransform autotest for Symbian, where qreal is float. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-17907 Reviewed-by: Samuel Rødal --- tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp index 79f2213..9434a0b 100644 --- a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp +++ b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp @@ -163,10 +163,11 @@ static inline bool fuzzyCompare(qreal p1, qreal p2) { // increase delta on small machines using float instead of double if (sizeof(qreal) == sizeof(float)) - return (qAbs(p1 - p2) <= 0.00002f * qMin(qAbs(p1), qAbs(p2))); + return (qAbs(p1 - p2) <= 0.00003f * qMin(qAbs(p1), qAbs(p2))); else return (qAbs(p1 - p2) <= 0.00001f * qMin(qAbs(p1), qAbs(p2))); } + static bool fuzzyCompare(const QTransform& t1, const QTransform& t2) { return fuzzyCompare(t1.m11(), t2.m11()) && @@ -180,6 +181,15 @@ static bool fuzzyCompare(const QTransform& t1, const QTransform& t2) fuzzyCompare(t1.m33(), t2.m33()); } +static inline bool fuzzyCompare(const QMatrix4x4& m1, const QMatrix4x4& m2) +{ + bool ok = true; + for (int y = 0; y < 4; ++y) + for (int x = 0; x < 4; ++x) + ok &= fuzzyCompare(m1(y, x), m2(y, x)); + return ok; +} + void tst_QGraphicsTransform::rotation() { QGraphicsRotation rotation; @@ -267,7 +277,7 @@ void tst_QGraphicsTransform::rotation3d() // because the deg2rad value in QTransform is not accurate // enough to match what QMatrix4x4 is doing. } else { - QVERIFY(qFuzzyCompare(t, r)); + QVERIFY(fuzzyCompare(t, r)); } //now let's check that a null vector will not change the transform -- cgit v0.12 From ad5ef5c565b0399c65827d67be8ff00fa8db1a68 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Mon, 14 Mar 2011 14:23:31 +0200 Subject: QS60Style slows down layout switch by updating widgets unnecessarily Remove refreshUi() method frmo QS60Style. It might have been necessary two years ago, when we didn't have proper polishing of QWidgets (when style changed), but it is no longer needed. It just slows down orientation switch. Task-number: QTBUG-17840 Reviewed-by: Tomi Vihria --- src/gui/styles/qs60style.cpp | 19 ------------------- src/gui/styles/qs60style_p.h | 2 -- src/gui/styles/qs60style_s60.cpp | 1 - 3 files changed, 22 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 87d990e..15cb5c6 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -630,25 +630,6 @@ QPixmap QS60StylePrivate::cachedFrame(SkinFrameElements frame, const QSize &size return result; } -void QS60StylePrivate::refreshUI() -{ - QList<QWidget *> widgets = QApplication::allWidgets(); - - for (int i = 0; i < widgets.size(); ++i) { - QWidget *widget = widgets.at(i); - if (widget == 0) - continue; - - if (widget->style()) { - widget->style()->polish(widget); - QEvent event(QEvent::StyleChange); - qApp->sendEvent(widget, &event); - } - widget->update(); - widget->updateGeometry(); - } -} - void QS60StylePrivate::setFont(QWidget *widget) const { QS60StyleEnums::FontCategories fontCategory = QS60StyleEnums::FC_Undefined; diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 242c451..c64cbb1 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -592,8 +592,6 @@ private: static QPixmap cachedFrame(SkinFrameElements frame, const QSize &size, SkinElementFlags flags = KDefaultSkinElementFlags); - static void refreshUI(); - // set S60 font for widget void setFont(QWidget *widget) const; void setThemePalette(QWidget *widget) const; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 600c631..b4785dc 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1429,7 +1429,6 @@ void QS60StylePrivate::handleDynamicLayoutVariantSwitch() { clearCaches(QS60StylePrivate::CC_LayoutChange); setActiveLayout(); - refreshUI(); foreach (QWidget *widget, QApplication::allWidgets()) widget->ensurePolished(); } -- cgit v0.12 From d0e46f9221b614007cc4dea25e0f83d10f1c2f11 Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Mon, 14 Mar 2011 14:20:22 +0100 Subject: Mac Style: Compile Fix Task-number: QTBUG-13055 Reviewed-by: Markus Goetz --- src/gui/styles/qmacstyle_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm index f2ad782..18933ff 100644 --- a/src/gui/styles/qmacstyle_mac.mm +++ b/src/gui/styles/qmacstyle_mac.mm @@ -3084,7 +3084,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai } break; case PE_PanelScrollAreaCorner: { - const QBrush brush(opt->palette().brush(QPalette::Base)); + const QBrush brush(opt->palette.brush(QPalette::Base)); p->fillRect(opt->rect, brush); p->setPen(QPen(QColor(217, 217, 217))); p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); -- cgit v0.12 From 5f2eccbc8a392784868dd9919442642b4a9f9ef8 Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Mon, 14 Mar 2011 14:25:33 +0100 Subject: SSL: Fix certification loading on Mac OS X 10.5 Do not add the expired certificates on Mac OS X 10.5. Task-number: QTBUG-14520 Reviewed-by: Markus Goetz --- src/network/ssl/qsslsocket_openssl.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 84e14ff..0866534 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -312,9 +312,18 @@ init_context: q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); } } + + bool addExpiredCerts = true; +#if defined(Q_OS_MAC) && (MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5) + //On Leopard SSL does not work if we add the expired certificates. + if (QSysInfo::MacintoshVersion == QSysInfo::MV_10_5) + addExpiredCerts = false; +#endif // now add the expired certs - foreach (const QSslCertificate &caCertificate, expiredCerts) { - q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); + if (addExpiredCerts) { + foreach (const QSslCertificate &caCertificate, expiredCerts) { + q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); + } } // Register a custom callback to get all verification errors. -- cgit v0.12 From 25a30c8e258df642a1aa2ffcfb162633611e7259 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Mon, 14 Mar 2011 16:07:33 +0100 Subject: Fix checking hintingPreference in Windows font database This was a left-over of when the API was flags-based. Reviewed-by: Jiang Jiang --- src/gui/text/qfontdatabase_win.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontdatabase_win.cpp b/src/gui/text/qfontdatabase_win.cpp index 0bb1d8d..8279195 100644 --- a/src/gui/text/qfontdatabase_win.cpp +++ b/src/gui/text/qfontdatabase_win.cpp @@ -703,8 +703,8 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, const QFontDef &requ #if !defined(QT_NO_DIRECTWRITE) - bool useDirectWrite = (request.hintingPreference & QFont::PreferNoHinting) - || (request.hintingPreference & QFont::PreferVerticalHinting); + bool useDirectWrite = (request.hintingPreference == QFont::PreferNoHinting) + || (request.hintingPreference == QFont::PreferVerticalHinting); IDWriteFont *directWriteFont = 0; #else bool useDirectWrite = false; -- cgit v0.12 From c30714122c58a3dc6fd8401427da60c4afc4127b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Mon, 14 Mar 2011 14:35:22 +0100 Subject: Prevented infinite recursion in QPainterPath::contains(). Limit the amount of recursions in qt_painterpath_isect_curve to prevent a crash. Task-number: QTBUG-16422 Reviewed-by: Kim --- src/gui/painting/qpainterpath.cpp | 8 ++++---- tests/auto/qpainterpath/tst_qpainterpath.cpp | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index 7ecf10a..88eef99 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -1690,7 +1690,7 @@ static void qt_painterpath_isect_line(const QPointF &p1, } static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, - int *winding) + int *winding, int depth = 0) { qreal y = pt.y(); qreal x = pt.x(); @@ -1705,7 +1705,7 @@ static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, // hit lower limit... This is a rough threshold, but its a // tradeoff between speed and precision. const qreal lower_bound = qreal(.001); - if (bounds.width() < lower_bound && bounds.height() < lower_bound) { + if (depth == 32 || (bounds.width() < lower_bound && bounds.height() < lower_bound)) { // We make the assumption here that the curve starts to // approximate a line after while (i.e. that it doesn't // change direction drastically during its slope) @@ -1718,8 +1718,8 @@ static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, // split curve and try again... QBezier first_half, second_half; bezier.split(&first_half, &second_half); - qt_painterpath_isect_curve(first_half, pt, winding); - qt_painterpath_isect_curve(second_half, pt, winding); + qt_painterpath_isect_curve(first_half, pt, winding, depth + 1); + qt_painterpath_isect_curve(second_half, pt, winding, depth + 1); } } diff --git a/tests/auto/qpainterpath/tst_qpainterpath.cpp b/tests/auto/qpainterpath/tst_qpainterpath.cpp index 00f9b91..4ade9ad 100644 --- a/tests/auto/qpainterpath/tst_qpainterpath.cpp +++ b/tests/auto/qpainterpath/tst_qpainterpath.cpp @@ -290,6 +290,11 @@ void tst_QPainterPath::contains_QPointF_data() QTest::newRow("horizontal cubic, out left") << path << QPointF(0, 100) << false; QTest::newRow("horizontal cubic, out right") << path << QPointF(300, 100) <<false; QTest::newRow("horizontal cubic, in mid") << path << QPointF(150, 100) << true; + + path = QPainterPath(); + path.addEllipse(QRectF(-5000.0, -5000.0, 1500000.0, 1500000.0)); + QTest::newRow("huge ellipse, qreal=float crash") << path << QPointF(1100000.35, 1098000.2) << true; + } void tst_QPainterPath::contains_QPointF() -- cgit v0.12 From 369ad09515fc8dac87613930114f4b3cf6381e81 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete <paul.tvete@nokia.com> Date: Mon, 14 Mar 2011 16:55:19 +0100 Subject: Fix race condition in the non-GL case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure to also flush output when waiting for an ack from the compositor, in case we haven't sent the frame request yet. Reviewed-by: Jørgen --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 11 ++++++++--- src/plugins/platforms/wayland/qwaylanddisplay.h | 4 +++- src/plugins/platforms/wayland/qwaylandshmsurface.cpp | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index d0a0725..27f4334 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -141,7 +141,12 @@ void QWaylandDisplay::displayHandleGlobal(struct wl_display *display, } } -void QWaylandDisplay::eventDispatcher(void) +void QWaylandDisplay::iterate() +{ + wl_display_iterate(mDisplay, WL_DISPLAY_READABLE | WL_DISPLAY_WRITABLE); +} + +void QWaylandDisplay::readEvents(void) { wl_display_iterate(mDisplay, WL_DISPLAY_READABLE); } @@ -189,7 +194,7 @@ QWaylandDisplay::QWaylandDisplay(void) mNativeEglDisplay = 0; #endif - eventDispatcher(); + readEvents(); #ifdef QT_WAYLAND_GL_SUPPORT mEglDisplay = eglGetDisplay((EGLNativeDisplayType)mNativeEglDisplay); @@ -208,7 +213,7 @@ QWaylandDisplay::QWaylandDisplay(void) int fd = wl_display_get_fd(mDisplay, sourceUpdate, this); mReadNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); connect(mReadNotifier, - SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + SIGNAL(activated(int)), this, SLOT(readEvents())); mWriteNotifier = new QSocketNotifier(fd, QSocketNotifier::Write, this); connect(mWriteNotifier, diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h index ca31756..d994ffe 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.h +++ b/src/plugins/platforms/wayland/qwaylanddisplay.h @@ -81,8 +81,10 @@ public: void syncCallback(wl_display_sync_func_t func, void *data); void frameCallback(wl_display_frame_func_t func, void *data); + void iterate(); + public slots: - void eventDispatcher(void); + void readEvents(void); void flushRequests(void); private: diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp index b1cba71..6872bac 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp @@ -111,7 +111,7 @@ QPaintDevice *QWaylandShmWindowSurface::paintDevice() void QWaylandShmWindowSurface::beginPaint(const QRegion &) { while (mWaitingForFrameSync) { - mDisplay->eventDispatcher(); + mDisplay->iterate(); } } -- cgit v0.12 From cdd52ad8acff0af2ecca1cef982228c6bb489feb Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Mon, 14 Mar 2011 17:28:15 +0100 Subject: QNAM HTTP: error() in case connection is closed unexpectedly Task-number: QT-4658 Task-number: QT-3494 Reviewed-by: Peter Hartmann --- .../access/qhttpnetworkconnectionchannel.cpp | 15 +++++++++++++- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 24 +++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 82b5ce3..700b455 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -963,8 +963,20 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket } else { errorCode = QNetworkReply::RemoteHostClosedError; } + } else if (state == QHttpNetworkConnectionChannel::ReadingState) { + if (!reply->d_func()->expectContent()) { + // No content expected, this is a valid way to have the connection closed by the server + return; + } + if (reply->contentLength() == -1 && !reply->d_func()->isChunked()) { + // There was no content-length header and it's not chunked encoding, + // so this is a valid way to have the connection closed by the server + return; + } + // ok, we got a disconnect even though we did not expect it + errorCode = QNetworkReply::RemoteHostClosedError; } else { - return; + errorCode = QNetworkReply::RemoteHostClosedError; } break; case QAbstractSocket::SocketTimeoutError: @@ -992,6 +1004,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket if (reply) { reply->d_func()->errorString = errorString; emit reply->finishedWithError(errorCode, errorString); + reply = 0; } // send the next request QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection); diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 8274140..39bb0fc 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -951,6 +951,7 @@ tst_QNetworkReply::tst_QNetworkReply() qRegisterMetaType<QAuthenticator *>(); qRegisterMetaType<QNetworkProxy>(); qRegisterMetaType<QList<QSslError> >(); + qRegisterMetaType<QNetworkReply::NetworkError>(); Q_SET_DEFAULT_IAP @@ -2572,6 +2573,9 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer_data() QTest::newRow("justHalfStatus+disconnect") << QByteArray("HTTP/1.1") << true; QTest::newRow("justStatus+disconnect") << QByteArray("HTTP/1.1 200 OK\r\n") << true; QTest::newRow("justStatusAndHalfHeaders+disconnect") << QByteArray("HTTP/1.1 200 OK\r\nContent-L") << true; + + QTest::newRow("halfContent+disconnect") << QByteArray("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\nAB") << true; + } void tst_QNetworkReply::ioGetFromHttpBrokenServer() @@ -2583,29 +2587,35 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort()))); QNetworkReplyPtr reply = manager.get(request); + QSignalSpy spy(reply, SIGNAL(error(QNetworkReply::NetworkError))); + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); + QCOMPARE(spy.count(), 1); QVERIFY(reply->error() != QNetworkReply::NoError); } void tst_QNetworkReply::ioGetFromHttpStatus100_data() { QTest::addColumn<QByteArray>("dataToSend"); - QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n"); - QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n"); - QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::addColumn<int>("statusCode"); + QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n") << 200; + QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n") << 200; + QTest::newRow("minimal+404") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204; + QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; } void tst_QNetworkReply::ioGetFromHttpStatus100() { QFETCH(QByteArray, dataToSend); + QFETCH(int, statusCode); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2618,7 +2628,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QCOMPARE(reply->url(), request.url()); QCOMPARE(reply->error(), QNetworkReply::NoError); - QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode); QVERIFY(reply->rawHeader("bla").isNull()); } -- cgit v0.12 From b2c8421ff95ad62cbd67843ad5cd3edf72ecda31 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 14 Mar 2011 14:28:34 +0100 Subject: SSL: introduce new option TlsV1SslV3 for SSL communication currently there are 3 supported protocols: SSL2, SSL3 and TLS1. SSL2 is considered insecure and should not be used anymore. This commit offers an option to use both TLS1 and SSL3, leaving SSL2 out. Part-of-the-patch-by: Darren Lissimore Reviewed-by: Markus Goetz Task-number: QTBUG-12338 --- src/network/ssl/qssl.cpp | 3 + src/network/ssl/qssl.h | 1 + src/network/ssl/qsslsocket_openssl.cpp | 7 +- tests/auto/qsslsocket/tst_qsslsocket.cpp | 150 ++++++++++++++++++++++++------- 4 files changed, 130 insertions(+), 31 deletions(-) diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index 8a450b9..241eb12 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -107,6 +107,9 @@ QT_BEGIN_NAMESPACE \value UnknownProtocol The cipher's protocol cannot be determined. \value AnyProtocol The socket understands SSLv2, SSLv3, and TLSv1. This value is used by QSslSocket only. + \value TlsV1SslV3 On the client side, this will send + a TLS 1.0 Client Hello, enabling TLSv1 and SSLv3 connections. + On the server side, this will enable both SSLv3 and TLSv1 connections. Note: most servers using SSL understand both versions (2 and 3), but it is recommended to use the latest version only for security diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index 4c035fd..e13ee78 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -77,6 +77,7 @@ namespace QSsl { SslV2, TlsV1, AnyProtocol, + TlsV1SslV3, UnknownProtocol = -1 }; } diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 646889c..8da3bb7 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -259,6 +259,7 @@ init_context: case QSsl::SslV3: ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method()); break; + case QSsl::TlsV1SslV3: // TlsV1SslV3 will be disabled below case QSsl::AnyProtocol: default: ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method()); @@ -284,7 +285,11 @@ init_context: } // Enable all bug workarounds. - q_SSL_CTX_set_options(ctx, SSL_OP_ALL); + if (configuration.protocol == QSsl::TlsV1SslV3) { + q_SSL_CTX_set_options(ctx, SSL_OP_ALL|SSL_OP_NO_SSLv2); + } else { + q_SSL_CTX_set_options(ctx, SSL_OP_ALL); + } // Initialize ciphers QByteArray cipherString; diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 4beddad..b420b1d 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -66,6 +66,7 @@ Q_DECLARE_METATYPE(QSslSocket::SslMode) typedef QList<QSslError::SslError> SslErrorList; Q_DECLARE_METATYPE(SslErrorList) Q_DECLARE_METATYPE(QSslError) +Q_DECLARE_METATYPE(QSsl::SslProtocol) #endif #if defined Q_OS_HPUX && defined Q_CC_GNU @@ -145,10 +146,11 @@ private slots: void peerCertificateChain(); void privateKey(); void protocol(); + void protocolServerSide_data(); + void protocolServerSide(); void setCaCertificates(); void setLocalCertificate(); void setPrivateKey(); - void setProtocol(); void setSocketDescriptor(); void waitForEncrypted(); void waitForConnectedEncryptedReadyRead(); @@ -763,14 +765,12 @@ void tst_QSslSocket::protocol() this->socket = socket; QList<QSslCertificate> certs = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem"); -// qDebug() << "certs:" << certs.at(0).issuerInfo(QSslCertificate::CommonName); socket->setCaCertificates(certs); #ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(untrustedWorkaroundSlot(QList<QSslError>))); #endif -// qDebug() << "socket cert:" << socket->caCertificates().at(0).issuerInfo(QSslCertificate::CommonName); QCOMPARE(socket->protocol(), QSsl::TlsV1); { // Fluke allows SSLv3. @@ -835,44 +835,36 @@ void tst_QSslSocket::protocol() QCOMPARE(socket->protocol(), QSsl::AnyProtocol); socket->abort(); } -} - -void tst_QSslSocket::setCaCertificates() -{ - if (!QSslSocket::supportsSsl()) - return; - - QSslSocket socket; - QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates()); - socket.setCaCertificates(QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem")); - QCOMPARE(socket.caCertificates().size(), 1); - socket.setCaCertificates(socket.defaultCaCertificates()); - QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates()); -} - -void tst_QSslSocket::setLocalCertificate() -{ -} - -void tst_QSslSocket::setPrivateKey() -{ -} - -void tst_QSslSocket::setProtocol() -{ + { + // Fluke allows SSLV3, so it allows NoSslV2 + socket->setProtocol(QSsl::TlsV1SslV3); + QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); + socket->connectToHostEncrypted(QtNetworkSettings::serverName(), 443); + QVERIFY(socket->waitForEncrypted()); + QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); + socket->abort(); + QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); + socket->connectToHost(QtNetworkSettings::serverName(), 443); + QVERIFY2(socket->waitForConnected(), qPrintable(socket->errorString())); + socket->startClientEncryption(); + QVERIFY2(socket->waitForEncrypted(), qPrintable(socket->errorString())); + QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); + socket->abort(); + } } class SslServer : public QTcpServer { Q_OBJECT public: - SslServer() : socket(0) { } + SslServer() : socket(0), protocol(QSsl::TlsV1) { } QSslSocket *socket; - + QSsl::SslProtocol protocol; protected: void incomingConnection(int socketDescriptor) { socket = new QSslSocket(this); + socket->setProtocol(protocol); connect(socket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(ignoreErrorSlot())); QFile file(SRCDIR "certs/fluke.key"); @@ -902,6 +894,104 @@ protected slots: } }; +void tst_QSslSocket::protocolServerSide_data() +{ + + QTest::addColumn<QSsl::SslProtocol>("serverProtocol"); + QTest::addColumn<QSsl::SslProtocol>("clientProtocol"); + QTest::addColumn<bool>("works"); + + QTest::newRow("ssl2-ssl2") << QSsl::SslV2 << QSsl::SslV2 << false; // no idea why it does not work, but we don't care about SSL 2 + QTest::newRow("ssl3-ssl3") << QSsl::SslV3 << QSsl::SslV3 << true; + QTest::newRow("tls1-tls1") << QSsl::TlsV1 << QSsl::TlsV1 << true; + QTest::newRow("tls1ssl3-tls1ssl3") << QSsl::TlsV1SslV3 << QSsl::TlsV1SslV3 << true; + QTest::newRow("any-any") << QSsl::AnyProtocol << QSsl::AnyProtocol << true; + + QTest::newRow("ssl2-ssl3") << QSsl::SslV2 << QSsl::SslV3 << false; + QTest::newRow("ssl2-tls1") << QSsl::SslV2 << QSsl::TlsV1 << false; + QTest::newRow("ssl2-tls1ssl3") << QSsl::SslV2 << QSsl::TlsV1SslV3 << false; + QTest::newRow("ssl2-any") << QSsl::SslV2 << QSsl::AnyProtocol << false; // no idea why it does not work, but we don't care about SSL 2 + + QTest::newRow("ssl3-ssl2") << QSsl::SslV3 << QSsl::SslV2 << false; + QTest::newRow("ssl3-tls1") << QSsl::SslV3 << QSsl::TlsV1 << false; + QTest::newRow("ssl3-tls1ssl3") << QSsl::SslV3 << QSsl::TlsV1SslV3 << true; + QTest::newRow("ssl3-any") << QSsl::SslV3 << QSsl::AnyProtocol << true; + + QTest::newRow("tls1-ssl2") << QSsl::TlsV1 << QSsl::SslV2 << false; + QTest::newRow("tls1-ssl3") << QSsl::TlsV1 << QSsl::SslV3 << false; + QTest::newRow("tls1-tls1ssl3") << QSsl::TlsV1 << QSsl::TlsV1SslV3 << true; + QTest::newRow("tls1-any") << QSsl::TlsV1 << QSsl::AnyProtocol << true; + + QTest::newRow("tls1ssl3-ssl2") << QSsl::TlsV1SslV3 << QSsl::SslV2 << false; + QTest::newRow("tls1ssl3-ssl3") << QSsl::TlsV1SslV3 << QSsl::SslV3 << true; + QTest::newRow("tls1ssl3-tls1") << QSsl::TlsV1SslV3 << QSsl::TlsV1 << true; + QTest::newRow("tls1ssl3-tls1") << QSsl::TlsV1SslV3 << QSsl::AnyProtocol << true; + + QTest::newRow("any-ssl2") << QSsl::AnyProtocol << QSsl::SslV2 << false; // no idea why it does not work, but we don't care about SSL 2 + QTest::newRow("any-ssl3") << QSsl::AnyProtocol << QSsl::SslV3 << true; + QTest::newRow("any-tls1") << QSsl::AnyProtocol << QSsl::TlsV1 << true; + QTest::newRow("any-tls1ssl3") << QSsl::AnyProtocol << QSsl::TlsV1SslV3 << true; +} + +void tst_QSslSocket::protocolServerSide() +{ + if (!QSslSocket::supportsSsl()) { + qWarning("SSL not supported, skipping test"); + return; + } + + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + QFETCH(QSsl::SslProtocol, serverProtocol); + SslServer server; + server.protocol = serverProtocol; + QVERIFY(server.listen()); + + QEventLoop loop; + QTimer::singleShot(5000, &loop, SLOT(quit())); + + QSslSocketPtr client = new QSslSocket; + socket = client; + QFETCH(QSsl::SslProtocol, clientProtocol); + socket->setProtocol(clientProtocol); + // upon SSL wrong version error, error will be triggered, not sslErrors + connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), &loop, SLOT(quit())); + connect(socket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(ignoreErrorSlot())); + connect(client, SIGNAL(encrypted()), &loop, SLOT(quit())); + + client->connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort()); + + loop.exec(); + + QFETCH(bool, works); + QAbstractSocket::SocketState expectedState = (works) ? QAbstractSocket::ConnectedState : QAbstractSocket::UnconnectedState; + QCOMPARE(client->state(), expectedState); + QCOMPARE(client->isEncrypted(), works); +} + +void tst_QSslSocket::setCaCertificates() +{ + if (!QSslSocket::supportsSsl()) + return; + + QSslSocket socket; + QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates()); + socket.setCaCertificates(QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem")); + QCOMPARE(socket.caCertificates().size(), 1); + socket.setCaCertificates(socket.defaultCaCertificates()); + QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates()); +} + +void tst_QSslSocket::setLocalCertificate() +{ +} + +void tst_QSslSocket::setPrivateKey() +{ +} + void tst_QSslSocket::setSocketDescriptor() { if (!QSslSocket::supportsSsl()) -- cgit v0.12 From f8f6e15ee3ec0b7aec8421cb5ddaab0ff871e733 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 14 Mar 2011 14:58:53 +0100 Subject: SSL: Switch default version to TlsV1SslV3 (i.e. use TLS 1 or SSL 3) ... and introduce a new enum SecureProtocols. Switching the default version is better for compatibility (e.g. servers using this option will understand both TLS and SSL 3). Reviewed-by: Markus Goetz --- src/network/ssl/qssl.cpp | 4 +++- src/network/ssl/qssl.h | 1 + src/network/ssl/qsslconfiguration.cpp | 4 ++-- src/network/ssl/qsslconfiguration_p.h | 2 +- src/network/ssl/qsslsocket.cpp | 2 +- tests/auto/qsslsocket/tst_qsslsocket.cpp | 18 +++++++++++++++--- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index 241eb12..e3dc84c 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -103,13 +103,15 @@ QT_BEGIN_NAMESPACE \value SslV3 SSLv3 \value SslV2 SSLv2 - \value TlsV1 TLSv1 - the default protocol. + \value TlsV1 TLSv1 \value UnknownProtocol The cipher's protocol cannot be determined. \value AnyProtocol The socket understands SSLv2, SSLv3, and TLSv1. This value is used by QSslSocket only. \value TlsV1SslV3 On the client side, this will send a TLS 1.0 Client Hello, enabling TLSv1 and SSLv3 connections. On the server side, this will enable both SSLv3 and TLSv1 connections. + \value SecureProtocols The default option, using protocols known to be secure. + Currently set to TlsV1SslV3. Note: most servers using SSL understand both versions (2 and 3), but it is recommended to use the latest version only for security diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index e13ee78..7c47361 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -78,6 +78,7 @@ namespace QSsl { TlsV1, AnyProtocol, TlsV1SslV3, + SecureProtocols = TlsV1SslV3, UnknownProtocol = -1 }; } diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index b0d5c90..150f77e 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -213,7 +213,7 @@ bool QSslConfiguration::isNull() const */ QSsl::SslProtocol QSslConfiguration::protocol() const { - return d ? d->protocol : QSsl::TlsV1; + return d ? d->protocol : QSsl::SecureProtocols; } /*! @@ -518,7 +518,7 @@ void QSslConfiguration::setCaCertificates(const QList<QSslCertificate> &certific \list \o no local certificate and no private key - \o protocol TlsV1 + \o protocol SecureProtocols (meaning either TLS 1.0 or SSL 3 will be used) \o the system's default CA certificate list \o the cipher list equal to the list of the SSL libraries' supported SSL ciphers diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index 47adace..1c6815b 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -80,7 +80,7 @@ class QSslConfigurationPrivate: public QSharedData { public: QSslConfigurationPrivate() - : protocol(QSsl::TlsV1), + : protocol(QSsl::TlsV1SslV3), peerVerifyMode(QSslSocket::AutoVerifyPeer), peerVerifyDepth(0) { } diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 224ed67..98e2dc5 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -552,7 +552,7 @@ bool QSslSocket::isEncrypted() const } /*! - Returns the socket's SSL protocol. By default, \l QSsl::TLSv1 is used. + Returns the socket's SSL protocol. By default, \l QSsl::SecureProtocols is used. \sa setProtocol() */ diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index b420b1d..ef5833ef 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -387,7 +387,7 @@ void tst_QSslSocket::constructing() QVERIFY(!socket.waitForConnected(10)); QTest::ignoreMessage(QtWarningMsg, "QSslSocket::waitForDisconnected() is not allowed in UnconnectedState"); QVERIFY(!socket.waitForDisconnected(10)); - QCOMPARE(socket.protocol(), QSsl::TlsV1); + QCOMPARE(socket.protocol(), QSsl::SecureProtocols); QSslConfiguration savedDefault = QSslConfiguration::defaultConfiguration(); @@ -771,7 +771,7 @@ void tst_QSslSocket::protocol() this, SLOT(untrustedWorkaroundSlot(QList<QSslError>))); #endif - QCOMPARE(socket->protocol(), QSsl::TlsV1); + QCOMPARE(socket->protocol(), QSsl::SecureProtocols); { // Fluke allows SSLv3. socket->setProtocol(QSsl::SslV3); @@ -906,31 +906,43 @@ void tst_QSslSocket::protocolServerSide_data() QTest::newRow("tls1-tls1") << QSsl::TlsV1 << QSsl::TlsV1 << true; QTest::newRow("tls1ssl3-tls1ssl3") << QSsl::TlsV1SslV3 << QSsl::TlsV1SslV3 << true; QTest::newRow("any-any") << QSsl::AnyProtocol << QSsl::AnyProtocol << true; + QTest::newRow("secure-secure") << QSsl::SecureProtocols << QSsl::SecureProtocols << true; QTest::newRow("ssl2-ssl3") << QSsl::SslV2 << QSsl::SslV3 << false; QTest::newRow("ssl2-tls1") << QSsl::SslV2 << QSsl::TlsV1 << false; QTest::newRow("ssl2-tls1ssl3") << QSsl::SslV2 << QSsl::TlsV1SslV3 << false; + QTest::newRow("ssl2-secure") << QSsl::SslV2 << QSsl::SecureProtocols << false; QTest::newRow("ssl2-any") << QSsl::SslV2 << QSsl::AnyProtocol << false; // no idea why it does not work, but we don't care about SSL 2 QTest::newRow("ssl3-ssl2") << QSsl::SslV3 << QSsl::SslV2 << false; QTest::newRow("ssl3-tls1") << QSsl::SslV3 << QSsl::TlsV1 << false; QTest::newRow("ssl3-tls1ssl3") << QSsl::SslV3 << QSsl::TlsV1SslV3 << true; + QTest::newRow("ssl3-secure") << QSsl::SslV3 << QSsl::SecureProtocols << true; QTest::newRow("ssl3-any") << QSsl::SslV3 << QSsl::AnyProtocol << true; QTest::newRow("tls1-ssl2") << QSsl::TlsV1 << QSsl::SslV2 << false; QTest::newRow("tls1-ssl3") << QSsl::TlsV1 << QSsl::SslV3 << false; QTest::newRow("tls1-tls1ssl3") << QSsl::TlsV1 << QSsl::TlsV1SslV3 << true; + QTest::newRow("tls1-secure") << QSsl::TlsV1 << QSsl::SecureProtocols << true; QTest::newRow("tls1-any") << QSsl::TlsV1 << QSsl::AnyProtocol << true; QTest::newRow("tls1ssl3-ssl2") << QSsl::TlsV1SslV3 << QSsl::SslV2 << false; QTest::newRow("tls1ssl3-ssl3") << QSsl::TlsV1SslV3 << QSsl::SslV3 << true; QTest::newRow("tls1ssl3-tls1") << QSsl::TlsV1SslV3 << QSsl::TlsV1 << true; - QTest::newRow("tls1ssl3-tls1") << QSsl::TlsV1SslV3 << QSsl::AnyProtocol << true; + QTest::newRow("tls1ssl3-secure") << QSsl::TlsV1SslV3 << QSsl::SecureProtocols << true; + QTest::newRow("tls1ssl3-any") << QSsl::TlsV1SslV3 << QSsl::AnyProtocol << true; + + QTest::newRow("secure-ssl2") << QSsl::SecureProtocols << QSsl::SslV2 << false; + QTest::newRow("secure-ssl3") << QSsl::SecureProtocols << QSsl::SslV3 << true; + QTest::newRow("secure-tls1") << QSsl::SecureProtocols << QSsl::TlsV1 << true; + QTest::newRow("secure-tls1ssl3") << QSsl::SecureProtocols << QSsl::TlsV1SslV3 << true; + QTest::newRow("secure-any") << QSsl::SecureProtocols << QSsl::AnyProtocol << true; QTest::newRow("any-ssl2") << QSsl::AnyProtocol << QSsl::SslV2 << false; // no idea why it does not work, but we don't care about SSL 2 QTest::newRow("any-ssl3") << QSsl::AnyProtocol << QSsl::SslV3 << true; QTest::newRow("any-tls1") << QSsl::AnyProtocol << QSsl::TlsV1 << true; QTest::newRow("any-tls1ssl3") << QSsl::AnyProtocol << QSsl::TlsV1SslV3 << true; + QTest::newRow("any-secure") << QSsl::AnyProtocol << QSsl::SecureProtocols << true; } void tst_QSslSocket::protocolServerSide() -- cgit v0.12 From 1992cdb292d1961d6b210a3c1d2532556d2c9195 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Mon, 14 Mar 2011 15:05:03 +0100 Subject: SSL backend: avoid setting SNI hostname for old SSL versions With this patch, we only use SNI functionality when the SSL version supports it (meaning when using TLS), otherwise the function call would trigger a warning. Reviewed-by: Markus Goetz --- src/network/ssl/qssl.h | 2 +- src/network/ssl/qsslsocket_openssl.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index 7c47361..1980659 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -75,7 +75,7 @@ namespace QSsl { enum SslProtocol { SslV3, SslV2, - TlsV1, + TlsV1, // ### Qt 5: rename to TlsV1_0 or so AnyProtocol, TlsV1SslV3, SecureProtocols = TlsV1SslV3, diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 8da3bb7..664fce2 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -398,7 +398,10 @@ init_context: } #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) - if (client && q_SSLeay() >= 0x00090806fL) { + if ((configuration.protocol == QSsl::TlsV1SslV3 || + configuration.protocol == QSsl::TlsV1 || + configuration.protocol == QSsl::AnyProtocol) && + client && q_SSLeay() >= 0x00090806fL) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. QString tlsHostName = verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName; if (tlsHostName.isEmpty()) -- cgit v0.12 From 774cb9eca9ea243436dbf61cdb7081fc270cdec9 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy <aaron.kennedy@nokia.com> Date: Tue, 15 Mar 2011 10:25:54 +1000 Subject: Remove bindings before assigning constants in VME Change-Id: I4c246cbcf8d0168cb4af028d6d04088fe20cdbba Task-number: QTBUG-17276 --- src/declarative/qml/qdeclarativevme.cpp | 63 ++++++++++++++++++++++ .../data/InlineAssignmentsOverrideBindingsType.qml | 7 +++ .../InlineAssignmentsOverrideBindingsType2.qml | 5 ++ .../data/inlineAssignmentsOverrideBindings.qml | 6 +++ .../tst_qdeclarativelanguage.cpp | 12 ++++- 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index 2d551f2..781e1b8 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -127,6 +127,22 @@ void QDeclarativeVME::runDeferred(QObject *object) run(stack, ctxt, comp, start, count, QBitField()); } +inline bool fastHasBinding(QObject *o, int index) +{ + QDeclarativeData *ddata = static_cast<QDeclarativeData *>(QObjectPrivate::get(o)->declarativeData); + + return ddata && (ddata->bindingBitsSize > index) && + (ddata->bindingBits[index / 32] & (1 << (index % 32))); +} + +static void removeBindingOnProperty(QObject *o, int index) +{ + QDeclarativeAbstractBinding *binding = QDeclarativePropertyPrivate::setBinding(o, index, -1, 0); + if (binding) binding->destroy(); +} + +#define CLEAN_PROPERTY(o, index) if (fastHasBinding(o, index)) removeBindingOnProperty(o, index) + QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, QDeclarativeContextData *ctxt, QDeclarativeCompiledData *comp, @@ -336,6 +352,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreVariant: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + // XXX - can be more efficient QVariant v = QDeclarativeStringConverters::variantFromString(primitives.at(instr.storeString.value)); void *a[] = { &v, 0, &status, &flags }; @@ -347,6 +365,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreVariantInteger: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeInteger.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -357,6 +377,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreVariantDouble: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeDouble.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -367,6 +389,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreVariantBool: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeBool.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -377,6 +401,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreString: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + void *a[] = { (void *)&primitives.at(instr.storeString.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeString.propertyIndex, a); @@ -386,6 +412,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreUrl: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeUrl.propertyIndex); + void *a[] = { (void *)&urls.at(instr.storeUrl.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeUrl.propertyIndex, a); @@ -395,6 +423,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreFloat: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeFloat.propertyIndex); + float f = instr.storeFloat.value; void *a[] = { &f, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -405,6 +435,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreDouble: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDouble.propertyIndex); + double d = instr.storeDouble.value; void *a[] = { &d, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -415,6 +447,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreBool: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeBool.propertyIndex); + void *a[] = { (void *)&instr.storeBool.value, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeBool.propertyIndex, a); @@ -424,6 +458,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreInteger: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeInteger.propertyIndex); + void *a[] = { (void *)&instr.storeInteger.value, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeInteger.propertyIndex, a); @@ -433,6 +469,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreColor: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeColor.propertyIndex); + QColor c = QColor::fromRgba(instr.storeColor.value); void *a[] = { &c, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -443,6 +481,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreDate: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDate.propertyIndex); + QDate d = QDate::fromJulianDay(instr.storeDate.value); void *a[] = { &d, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -453,6 +493,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreTime: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeTime.propertyIndex); + QTime t; t.setHMS(intData.at(instr.storeTime.valueIndex), intData.at(instr.storeTime.valueIndex+1), @@ -467,6 +509,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreDateTime: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDateTime.propertyIndex); + QTime t; t.setHMS(intData.at(instr.storeDateTime.valueIndex+1), intData.at(instr.storeDateTime.valueIndex+2), @@ -482,6 +526,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StorePoint: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QPoint p = QPointF(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)).toPoint(); void *a[] = { &p, 0, &status, &flags }; @@ -493,6 +539,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StorePointF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QPointF p(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)); void *a[] = { &p, 0, &status, &flags }; @@ -504,6 +552,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreSize: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QSize p = QSizeF(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)).toSize(); void *a[] = { &p, 0, &status, &flags }; @@ -515,6 +565,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreSizeF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QSizeF s(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)); void *a[] = { &s, 0, &status, &flags }; @@ -526,6 +578,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreRect: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRect.propertyIndex); + QRect r = QRectF(floatData.at(instr.storeRect.valueIndex), floatData.at(instr.storeRect.valueIndex+1), floatData.at(instr.storeRect.valueIndex+2), @@ -539,6 +593,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreRectF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRect.propertyIndex); + QRectF r(floatData.at(instr.storeRect.valueIndex), floatData.at(instr.storeRect.valueIndex+1), floatData.at(instr.storeRect.valueIndex+2), @@ -552,6 +608,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::StoreVector3D: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeVector3D.propertyIndex); + QVector3D p(floatData.at(instr.storeVector3D.valueIndex), floatData.at(instr.storeVector3D.valueIndex+1), floatData.at(instr.storeVector3D.valueIndex+2)); @@ -565,6 +623,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, { QObject *assignObj = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); void *a[] = { (void *)&assignObj, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -576,6 +635,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, case QDeclarativeInstruction::AssignCustomType: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.assignCustomType.propertyIndex); + QDeclarativeCompiledData::CustomTypeData data = customTypeData.at(instr.assignCustomType.valueIndex); const QString &primitive = primitives.at(data.index); QDeclarativeMetaType::StringConverter converter = @@ -780,6 +841,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, { QObject *assign = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); QVariant v = QVariant::fromValue(assign); void *a[] = { &v, 0, &status, &flags }; @@ -792,6 +854,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack, { QObject *assign = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); int coreIdx = instr.storeObject.propertyIndex; QMetaProperty prop = target->metaObject()->property(coreIdx); diff --git a/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml new file mode 100644 index 0000000..4526cf0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +QtObject { + property InlineAssignmentsOverrideBindingsType2 nested: InlineAssignmentsOverrideBindingsType2 { + value: 19 * 33 + } +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml new file mode 100644 index 0000000..4127ca4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +QtObject { + property int value +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml b/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml new file mode 100644 index 0000000..8f3c5ce --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml @@ -0,0 +1,6 @@ +import QtQuick 1.0 + +InlineAssignmentsOverrideBindingsType { + property int test: nested.value + nested.value: 11 +} diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index f3f41a9..5a2591f 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -134,6 +134,7 @@ private slots: void dontDoubleCallClassBegin(); void reservedWords_data(); void reservedWords(); + void inlineAssignmentsOverrideBindings(); void basicRemote_data(); void basicRemote(); @@ -1413,9 +1414,18 @@ void tst_qdeclarativelanguage::testType(const QString& qml, const QString& type, } } +// QTBUG-17276 +void tst_qdeclarativelanguage::inlineAssignmentsOverrideBindings() +{ + QDeclarativeComponent component(&engine, TEST_FILE("inlineAssignmentsOverrideBindings.qml")); -// Import tests (QT-558) + QObject *o = component.create(); + QVERIFY(o != 0); + QCOMPARE(o->property("test").toInt(), 11); + delete o; +} +// Import tests (QT-558) void tst_qdeclarativelanguage::importsBuiltin_data() { // QT-610 -- cgit v0.12 From ce38c6e3a9b7eb336cbd9cd1e9520a5000c8f8ac Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 15 Mar 2011 13:53:34 +1000 Subject: Regression: currentIndex was not set correctly after model cleared. Change b3080d78f2ff2d98410249e09d5d7d6e20fd155c stopped the currentIndex from being updated when a new item is added to an empty view. Change-Id: I77a0789fcf3693034a2d7aca173fec669b913b18 Task-number: QTBUG-18123 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativegridview.cpp | 6 ++-- .../graphicsitems/qdeclarativelistview.cpp | 6 ++-- .../tst_qdeclarativegridview.cpp | 39 ++++++++++++++++++++++ .../tst_qdeclarativelistview.cpp | 7 ++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 5c2f781..c0cbed0 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2834,11 +2834,9 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) if (d->currentItem) { d->currentItem->index = d->currentIndex; d->currentItem->setPosition(d->colPosAt(d->currentIndex), d->rowPosAt(d->currentIndex)); - } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) { - d->updateCurrent(0); } emit currentIndexChanged(); - } else if (d->itemCount == 0 && d->currentIndex == -1) { + } else if (d->itemCount == 0 && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) { setCurrentIndex(0); } @@ -2906,6 +2904,8 @@ void QDeclarativeGridView::itemsRemoved(int modelIndex, int count) d->currentIndex = -1; if (d->itemCount) d->updateCurrent(qMin(modelIndex, d->itemCount-1)); + else + emit currentIndexChanged(); } // update visibleIndex diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 2c23a1b..6ae1ddc 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -3272,10 +3272,10 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) if (d->currentItem) { d->currentItem->index = d->currentIndex; d->currentItem->setPosition(d->currentItem->position() + diff); - } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) { - d->updateCurrent(0); } emit currentIndexChanged(); + } else if (!d->itemCount && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) { + d->updateCurrent(0); } // Update the indexes of the following visible items. for (; index < d->visibleItems.count(); ++index) { @@ -3356,6 +3356,8 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count) d->currentIndex = -1; if (d->itemCount) d->updateCurrent(qMin(modelIndex, d->itemCount-1)); + else + emit currentIndexChanged(); } // update visibleIndex diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 5ced02b..c183934 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -69,6 +69,7 @@ private slots: void changed(); void inserted(); void removed(); + void clear(); void moved(); void changeFlow(); void currentIndex(); @@ -501,6 +502,44 @@ void tst_QDeclarativeGridView::removed() delete canvas; } +void tst_QDeclarativeGridView::clear() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); + ctxt->setContextProperty("testTopToBottom", QVariant(false)); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid"); + QVERIFY(gridview != 0); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QVERIFY(contentItem != 0); + + model.clear(); + + QVERIFY(gridview->count() == 0); + QVERIFY(gridview->currentItem() == 0); + QVERIFY(gridview->contentY() == 0); + QVERIFY(gridview->currentIndex() == -1); + + // confirm sanity when adding an item to cleared list + model.addItem("New", "1"); + QVERIFY(gridview->count() == 1); + QVERIFY(gridview->currentItem() != 0); + QVERIFY(gridview->currentIndex() == 0); + + delete canvas; +} + void tst_QDeclarativeGridView::moved() { QDeclarativeView *canvas = createView(); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index c87318e..2267a89 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -741,6 +741,13 @@ void tst_QDeclarativeListView::clear() QTRY_VERIFY(listview->count() == 0); QTRY_VERIFY(listview->currentItem() == 0); QTRY_VERIFY(listview->contentY() == 0); + QVERIFY(listview->currentIndex() == -1); + + // confirm sanity when adding an item to cleared list + model.addItem("New", "1"); + QTRY_VERIFY(listview->count() == 1); + QVERIFY(listview->currentItem() != 0); + QVERIFY(listview->currentIndex() == 0); delete canvas; } -- cgit v0.12 From 77342ad3e7beecb75c136ee26c0c77cd1a41b415 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Tue, 15 Mar 2011 14:26:20 +1000 Subject: Border still drawn on Rectangle elements when border.width == 0 The _valid flag did not consider both color alpha and line width in both setters. Change-Id: Iba544d65a0a40e36f1e09091e007418c9eefa0cd Task-number: QTBUG-18102 Reviewed-by: Alan Alpert --- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index d962919..8f59073 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE void QDeclarativePen::setColor(const QColor &c) { _color = c; - _valid = _color.alpha() ? true : false; + _valid = (_color.alpha() && _width >= 1) ? true : false; emit penChanged(); } @@ -80,7 +80,7 @@ void QDeclarativePen::setWidth(int w) return; _width = w; - _valid = (_width < 1) ? false : true; + _valid = (_color.alpha() && _width >= 1) ? true : false; emit penChanged(); } -- cgit v0.12 From e546b6b38f95e6496fd53efba41442cde879819a Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 15 Mar 2011 08:22:13 +0200 Subject: Prevent null pointer crash when closing splitview Prevents crash when focus item is not set and splitview is closed. This is partial fix to QTBUG-17045. Task-number: QTBUG-17045 Reviewed-by: Guoqing Zhang --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 3 ++- src/gui/widgets/qcombobox.cpp | 28 +++++++++++-------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 73aa982..9d8dd41 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -394,7 +394,8 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) if (!alwaysResize) { if (gv->scene()) { - disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + if (gv->scene()->focusItem()) + disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); QGraphicsItem *rootItem; foreach (QGraphicsItem *item, gv->scene()->items()) { if (!item->parentItem()) { diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index dbbf49a..af2440a 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2348,7 +2348,7 @@ void QComboBox::showPopup() initStyleOption(&opt); QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); - QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); + QRect screen = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); QPoint below = mapToGlobal(listRect.bottomLeft()); int belowHeight = screen.bottom() - below.y(); QPoint above = mapToGlobal(listRect.topLeft()); @@ -2476,18 +2476,10 @@ void QComboBox::showPopup() listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty()) { - TRect cbaRect = TRect(); - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect); - AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); - switch (cbaLocation) { - case AknLayoutUtils::EAknCbaLocationRight: - listRect.setRight(screen.right()); - break; - case AknLayoutUtils::EAknCbaLocationLeft: - listRect.setLeft(screen.left()); - break; - } + if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { + // landscape without stacon, menu should be at the right + (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : + listRect.setLeft(screen.left()); } } #endif @@ -2706,7 +2698,7 @@ void QComboBox::changeEvent(QEvent *e) initStyleOption(&opt); if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) { - const QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); + QRect screen = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); QRect listRect(style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); @@ -2721,13 +2713,13 @@ void QComboBox::changeEvent(QEvent *e) listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty()) { + if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { // landscape without stacon, menu should be at the right (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : listRect.setLeft(screen.left()); } - d->container->setGeometry(listRect); } + d->container->setGeometry(listRect); } } #endif @@ -2760,6 +2752,10 @@ void QComboBox::changeEvent(QEvent *e) void QComboBox::resizeEvent(QResizeEvent *) { Q_D(QComboBox); +#ifdef Q_WS_S60 + if (d->viewContainer() && d->viewContainer()->isVisible()) + showPopup(); +#endif d->updateLineEditGeometry(); } -- cgit v0.12 From d919343e91fd5e6771f11cb59d4730ec83ed7381 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 15 Mar 2011 08:32:22 +0200 Subject: Remove changes from fix to QTBUG-17045 that were not related to the fix There were changes included in the fix for QTBUG-17045 that were not supposed to be part of that fix. These changes to qcombobox.cpp are now removed. Task-number: QTBUG-17045 Reviewed-by: TrustMe --- src/gui/widgets/qcombobox.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index af2440a..dbbf49a 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2348,7 +2348,7 @@ void QComboBox::showPopup() initStyleOption(&opt); QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); - QRect screen = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); QPoint below = mapToGlobal(listRect.bottomLeft()); int belowHeight = screen.bottom() - below.y(); QPoint above = mapToGlobal(listRect.topLeft()); @@ -2476,10 +2476,18 @@ void QComboBox::showPopup() listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { - // landscape without stacon, menu should be at the right - (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : - listRect.setLeft(screen.left()); + if (staConTopRect.IsEmpty()) { + TRect cbaRect = TRect(); + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect); + AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); + switch (cbaLocation) { + case AknLayoutUtils::EAknCbaLocationRight: + listRect.setRight(screen.right()); + break; + case AknLayoutUtils::EAknCbaLocationLeft: + listRect.setLeft(screen.left()); + break; + } } } #endif @@ -2698,7 +2706,7 @@ void QComboBox::changeEvent(QEvent *e) initStyleOption(&opt); if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) { - QRect screen = qt_TRect2QRect(static_cast<CEikAppUi*>(S60->appUi())->ClientRect()); + const QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); QRect listRect(style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); @@ -2713,13 +2721,13 @@ void QComboBox::changeEvent(QEvent *e) listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { + if (staConTopRect.IsEmpty()) { // landscape without stacon, menu should be at the right (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : listRect.setLeft(screen.left()); } + d->container->setGeometry(listRect); } - d->container->setGeometry(listRect); } } #endif @@ -2752,10 +2760,6 @@ void QComboBox::changeEvent(QEvent *e) void QComboBox::resizeEvent(QResizeEvent *) { Q_D(QComboBox); -#ifdef Q_WS_S60 - if (d->viewContainer() && d->viewContainer()->isVisible()) - showPopup(); -#endif d->updateLineEditGeometry(); } -- cgit v0.12 From c600cbac60c0453815ee2721e0748a991343b5b2 Mon Sep 17 00:00:00 2001 From: Martin Petersson <martin.petersson@nokia.com> Date: Tue, 15 Mar 2011 09:40:36 +0100 Subject: QMAKE: Fix post build events for VS2010 We have changed 'Use in build' for VS2010 to now use "Excluded From Build" to have the same as in VS2008. This will enable post build event again for VS2010. Reviewed-by: Joerg Bornemann --- qmake/generators/win32/msvc_vcproj.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 0df33d0..8455189 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1072,22 +1072,26 @@ void VcprojGenerator::initPreBuildEventTools() void VcprojGenerator::initPostBuildEventTools() { VCConfiguration &conf = vcProject.Configuration; - if(!project->values("QMAKE_POST_LINK").isEmpty()) { + if (!project->values("QMAKE_POST_LINK").isEmpty()) { QStringList cmdline = VCToolBase::fixCommandLine(var("QMAKE_POST_LINK")); conf.postBuild.CommandLine = cmdline; conf.postBuild.Description = cmdline.join(QLatin1String("\r\n")); + conf.postBuild.ExcludedFromBuild = _False; } QString signature = !project->isEmpty("SIGNATURE_FILE") ? var("SIGNATURE_FILE") : var("DEFAULT_SIGNATURE"); bool useSignature = !signature.isEmpty() && !project->isActiveConfig("staticlib") && !project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH"); - if(useSignature) + if (useSignature) { conf.postBuild.CommandLine.prepend( QLatin1String("signtool sign /F ") + signature + QLatin1String(" \"$(TargetPath)\"")); + conf.postBuild.ExcludedFromBuild = _False; + } - if(!project->values("MSVCPROJ_COPY_DLL").isEmpty()) { + if (!project->values("MSVCPROJ_COPY_DLL").isEmpty()) { conf.postBuild.Description += var("MSVCPROJ_COPY_DLL_DESC"); conf.postBuild.CommandLine += var("MSVCPROJ_COPY_DLL"); + conf.postBuild.ExcludedFromBuild = _False; } } @@ -1218,6 +1222,7 @@ void VcprojGenerator::initPreLinkEventTools() QStringList cmdline = VCToolBase::fixCommandLine(var("QMAKE_PRE_LINK")); conf.preLink.CommandLine = cmdline; conf.preLink.Description = cmdline.join(QLatin1String("\r\n")); + conf.preLink.ExcludedFromBuild = _False; } } -- cgit v0.12 From 6d4ef0ff8fd30e5f50f6f770d651a51584e5cfdc Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Tue, 15 Mar 2011 09:39:13 +0100 Subject: Fix grayscale antialiasing with DirectWrite engine The code that converted DirectWrite's output to grayscale in alphaMapForGlyph() had a bunch of copy-paste errors and had obviously not been tested properly. We invert the input to the gamma function to get the right curve and then invert the output back. See windows font engine for comparison. Reviewed-by: Jiang Jiang --- src/gui/text/qfontenginedirectwrite.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/gui/text/qfontenginedirectwrite.cpp b/src/gui/text/qfontenginedirectwrite.cpp index 23fff0d..af5bab2 100644 --- a/src/gui/text/qfontenginedirectwrite.cpp +++ b/src/gui/text/qfontenginedirectwrite.cpp @@ -485,12 +485,7 @@ QImage QFontEngineDirectWrite::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPo uint *src = (uint*) im.scanLine(y); uchar *dst = indexed.scanLine(y); for (int x=0; x<im.width(); ++x) { - *dst = qGray(*src); - if (QNativeImage::systemFormat() == QImage::Format_RGB16) - *dst = 255 - qGray(*src); - else - *dst = 255 - (qt_pow_gamma[qGray(*src)] * 255. / 2047.); - + *dst = 255 - (qt_pow_gamma[qGray(0xffffffff - *src)] * 255. / 2047.); ++dst; ++src; } -- cgit v0.12 From f7cbd336ba532e29a07d1f81f62e1b12ca53f835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Tue, 15 Mar 2011 10:36:41 +0100 Subject: Properly set the window event masks etc for screens and GL windows too. --- src/plugins/platforms/xcb/qxcbscreen.cpp | 2 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 519db63..f868db8 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -66,7 +66,7 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen, int num | XCB_EVENT_MASK_PROPERTY_CHANGE }; - xcb_configure_window(xcb_connection(), screen->root, mask, values); + xcb_change_window_attributes(xcb_connection(), screen->root, mask, values); } QXcbScreen::~QXcbScreen() diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 005aa0e..9478b5b 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -155,12 +155,14 @@ QXcbWindow::QXcbWindow(QWidget *tlw) 0, // border width XCB_WINDOW_CLASS_INPUT_OUTPUT, // window class m_screen->screen()->root_visual, // visual - mask, // value mask - values); // value list + 0, // value mask + 0); // value list printf("created regular window: %d\n", m_window); } + xcb_change_window_attributes(xcb_connection(), m_window, mask, values); + xcb_atom_t properties[4]; int propertyCount = 0; properties[propertyCount++] = atom(QXcbAtom::WM_DELETE_WINDOW); -- cgit v0.12 From 7480f77039bf104c0b9a0763898038ce988dc4b3 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 15 Mar 2011 11:54:30 +0200 Subject: Regression: QS60Style: Theme background is incorrect Fix for QTBUG-16816 cause theme background to display incorrectly after a layout switch is done. Theme background is shown "tiled" instead of being whole screen size. This is because the setBackgroundTexture() call was removed to "save" QPixmap creation. Unfortunately, it really skips the background texture creation, but does not re-create a new one for the new layout, so portrait background is used again. This leads to tiling the image. Let's just return the call to the setBackgroundTexture() (this will eventually anyway be "optimized" with fix for QTBUG-14910). Task-number: QTBUG-17930 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style_s60.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index b4785dc..8e442bf 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1428,6 +1428,7 @@ QS60Style::QS60Style() void QS60StylePrivate::handleDynamicLayoutVariantSwitch() { clearCaches(QS60StylePrivate::CC_LayoutChange); + setBackgroundTexture(qApp); setActiveLayout(); foreach (QWidget *widget, QApplication::allWidgets()) widget->ensurePolished(); -- cgit v0.12 From 5e47ee6a97f54f1cdac577f76cd338b40e624f32 Mon Sep 17 00:00:00 2001 From: Peter Hartmann <peter.hartmann@nokia.com> Date: Tue, 15 Mar 2011 11:20:17 +0100 Subject: SSL: give protocol enum SecureProtocols an own value ... so that an application that uses SecureProtocols can make use of updates to a Qt version without being recompiled. Reviewed-by: Markus Goetz Reviewed-by: Richard J. Moore --- src/network/ssl/qssl.cpp | 4 ++-- src/network/ssl/qssl.h | 2 +- src/network/ssl/qsslconfiguration_p.h | 2 +- src/network/ssl/qsslsocket_openssl.cpp | 6 ++++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index e3dc84c..5594296 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -110,8 +110,8 @@ QT_BEGIN_NAMESPACE \value TlsV1SslV3 On the client side, this will send a TLS 1.0 Client Hello, enabling TLSv1 and SSLv3 connections. On the server side, this will enable both SSLv3 and TLSv1 connections. - \value SecureProtocols The default option, using protocols known to be secure. - Currently set to TlsV1SslV3. + \value SecureProtocols The default option, using protocols known to be secure; + currently behaves like TlsV1SslV3. Note: most servers using SSL understand both versions (2 and 3), but it is recommended to use the latest version only for security diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index 1980659..24dbb09 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -78,7 +78,7 @@ namespace QSsl { TlsV1, // ### Qt 5: rename to TlsV1_0 or so AnyProtocol, TlsV1SslV3, - SecureProtocols = TlsV1SslV3, + SecureProtocols, UnknownProtocol = -1 }; } diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index 1c6815b..a5af51a 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -80,7 +80,7 @@ class QSslConfigurationPrivate: public QSharedData { public: QSslConfigurationPrivate() - : protocol(QSsl::TlsV1SslV3), + : protocol(QSsl::SecureProtocols), peerVerifyMode(QSslSocket::AutoVerifyPeer), peerVerifyDepth(0) { } diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 664fce2..3d7612a 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -259,7 +259,8 @@ init_context: case QSsl::SslV3: ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method()); break; - case QSsl::TlsV1SslV3: // TlsV1SslV3 will be disabled below + case QSsl::SecureProtocols: // SslV2 will be disabled below + case QSsl::TlsV1SslV3: // SslV2 will be disabled below case QSsl::AnyProtocol: default: ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method()); @@ -285,7 +286,7 @@ init_context: } // Enable all bug workarounds. - if (configuration.protocol == QSsl::TlsV1SslV3) { + if (configuration.protocol == QSsl::TlsV1SslV3 || configuration.protocol == QSsl::SecureProtocols) { q_SSL_CTX_set_options(ctx, SSL_OP_ALL|SSL_OP_NO_SSLv2); } else { q_SSL_CTX_set_options(ctx, SSL_OP_ALL); @@ -400,6 +401,7 @@ init_context: #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) if ((configuration.protocol == QSsl::TlsV1SslV3 || configuration.protocol == QSsl::TlsV1 || + configuration.protocol == QSsl::SecureProtocols || configuration.protocol == QSsl::AnyProtocol) && client && q_SSLeay() >= 0x00090806fL) { // Set server hostname on TLS extension. RFC4366 section 3.1 requires it in ACE format. -- cgit v0.12 From 7dfa50a9b97d28813341329a55aa1a4b5a7de527 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 15 Mar 2011 13:31:39 +0200 Subject: QS60Style: use placeholder texture when polishing widgets and palette Background texture is not created until it is actually painted. This allows skipping the whole background texture creation, if app overwrites the QPalette::Window with its own data (image or color). When widget is drawn and style notices that the widget is still using a placeholder (1*1 red QPixmap) texture, it creates the real texture and uses that for drawing. Note that accessing QPalette::Window will give the placeholder pixmap. Which is then again replaced with the real texture, if it is drawn through the qt_s60_fill_background(). Task-number: QTBUG-14910 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style.cpp | 22 +++++++++++++++++----- src/gui/styles/qs60style_p.h | 4 ++++ src/gui/styles/qs60style_s60.cpp | 14 ++++++++++++-- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 15cb5c6..c100330 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -118,6 +118,7 @@ const short *QS60StylePrivate::m_pmPointer = QS60StylePrivate::data[0]; // theme background texture QPixmap *QS60StylePrivate::m_background = 0; +QPixmap *QS60StylePrivate::m_placeHolderTexture = 0; // theme palette QPalette *QS60StylePrivate::m_themePalette = 0; @@ -155,6 +156,10 @@ const double KTabFontMul = 0.72; QS60StylePrivate::~QS60StylePrivate() { clearCaches(); //deletes also background image + if (m_placeHolderTexture) { + delete m_placeHolderTexture; + m_placeHolderTexture = 0; + } deleteThemePalette(); #ifdef Q_WS_S60 removeAnimations(); @@ -505,7 +510,10 @@ void QS60StylePrivate::setBackgroundTexture(QApplication *app) const { Q_UNUSED(app) QPalette applicationPalette = QApplication::palette(); - applicationPalette.setBrush(QPalette::Window, backgroundTexture()); + // The initial QPalette::Window is just a placeHolder QPixmap to save RAM + // if the actual texture is not needed. The real texture is created just before + // painting it in qt_s60_fill_background(). + applicationPalette.setBrush(QPalette::Window, placeHolderTexture()); setThemePalette(&applicationPalette); } @@ -700,8 +708,10 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const palette->setColor(QPalette::LinkVisited, palette->color(QPalette::Link).darker()); palette->setColor(QPalette::Highlight, s60Color(QS60StyleEnums::CL_QsnHighlightColors, 2, 0)); - // set background image as a texture brush - palette->setBrush(QPalette::Window, backgroundTexture()); + // The initial QPalette::Window is just a placeHolder QPixmap to save RAM + // if the actual texture is not needed. The real texture is created just before + // painting it in qt_s60_fill_background(). + palette->setBrush(QPalette::Window, placeHolderTexture()); // set as transparent so that styled full screen theme background is visible palette->setBrush(QPalette::Base, Qt::transparent); // set button color based on pixel colors @@ -3529,10 +3539,12 @@ extern QPoint qt_s60_fill_background_offset(const QWidget *targetWidget); bool qt_s60_fill_background(QPainter *painter, const QRegion &rgn, const QBrush &brush) { - const QPixmap backgroundTexture(QS60StylePrivate::backgroundTexture()); - if (backgroundTexture.cacheKey() != brush.texture().cacheKey()) + const QPixmap placeHolder(QS60StylePrivate::placeHolderTexture()); + if (placeHolder.cacheKey() != brush.texture().cacheKey()) return false; + const QPixmap backgroundTexture(QS60StylePrivate::backgroundTexture()); + const QPaintDevice *target = painter->device(); if (target->devType() == QInternal::Widget) { const QWidget *widget = static_cast<const QWidget *>(target); diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index c64cbb1..8c023bf 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -555,6 +555,7 @@ public: static QPixmap frame(SkinFrameElements frame, const QSize &size, SkinElementFlags flags = KDefaultSkinElementFlags); static QPixmap backgroundTexture(); + static QPixmap placeHolderTexture(); #ifdef Q_WS_S60 void handleDynamicLayoutVariantSwitch(); @@ -614,6 +615,9 @@ private: // Contains background texture. static QPixmap *m_background; + // Placeholder pixmap for the real background texture. + static QPixmap *m_placeHolderTexture; + const static SkinElementFlags KDefaultSkinElementFlags; // defined theme palette static QPalette *m_themePalette; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 8e442bf..1ff195d 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -66,7 +66,6 @@ #include <aknnavi.h> #include <gulicon.h> #include <AknBitmapAnimation.h> - #include <centralrepository.h> #if !defined(QT_NO_STYLE_S60) || defined(QT_PLUGIN) @@ -1408,12 +1407,23 @@ QPixmap QS60StylePrivate::backgroundTexture() if (createNewBackground) { QPixmap background = part(QS60StyleEnums::SP_QsnBgScreen, - QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); + QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); m_background = new QPixmap(background); } return *m_background; } +// Generates 1*1 red pixmap as a placeholder for real texture. +// The actual theme texture is drawn in qt_s60_fill_background(). +QPixmap QS60StylePrivate::placeHolderTexture() +{ + if (!m_placeHolderTexture) { + m_placeHolderTexture = new QPixmap(1,1); + m_placeHolderTexture->fill(Qt::red); + } + return *m_placeHolderTexture; +} + QSize QS60StylePrivate::screenSize() { return QSize(S60->screenWidthInPixels, S60->screenHeightInPixels); -- cgit v0.12 From f9a297d9b2331adab2116210d3c527fae22e336e Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 15 Mar 2011 13:42:20 +0200 Subject: Avoid panics in QDesktopWidget on Symbian emulator. There is usually only one screen on the emulator and it was incorrectly assumed that ScreenDevice() would return null for a non-existing screen. It panics instead so the entire call must be skipped. Reviewed-by: Sami Merila --- src/gui/kernel/qdesktopwidget_s60.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index c3963f4..62a4d40 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -188,12 +188,14 @@ void QDesktopWidgetPrivate::cleanup() void QDesktopWidgetPrivate::init_sys() { #if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) - CWsScreenDevice *dev = S60->screenDevice(1); - if (dev) { - displayControl = static_cast<MDisplayControl *>( - dev->GetInterface(MDisplayControl::ETypeId)); - if (displayControl) { - displayControl->EnableDisplayChangeEvents(ETrue); + if (S60->screenCount() > 1) { + CWsScreenDevice *dev = S60->screenDevice(1); + if (dev) { + displayControl = static_cast<MDisplayControl *>( + dev->GetInterface(MDisplayControl::ETypeId)); + if (displayControl) { + displayControl->EnableDisplayChangeEvents(ETrue); + } } } #endif -- cgit v0.12 From b3b332a50a6288164ca86d0691e9615f9c19abda Mon Sep 17 00:00:00 2001 From: Liang Qi <liang.qi@nokia.com> Date: Tue, 15 Mar 2011 13:46:46 +0100 Subject: Fix the license info for bin/elf2e32_qtwrapper.pl. Reviewed-by: TrustMe --- bin/elf2e32_qtwrapper.pl | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index 64d485b..a2aff75 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -1,4 +1,44 @@ #!/usr/bin/perl -w +############################################################################# +## +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is part of the S60 port of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# # A script to get around some shortcomings in elf2e32, namely: # - Returning 0 even when there are errors. -- cgit v0.12 From d524e983c60ba59f3c65d811ec92f02c97d1a8ab Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Tue, 15 Mar 2011 14:48:49 +0100 Subject: Change the way the unified toolbar is flushed. The flushing of the unified toolbar is no longer tied to the main window, making it more flexible. Task-number: QTBUG-17754 Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qcocoawindowdelegate_mac.mm | 18 +++++++++++++- src/gui/kernel/qwidget.cpp | 14 +++++++++-- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 31 +++++++++++++------------ src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 4 ++-- src/gui/painting/qwindowsurface_raster.cpp | 20 +++------------- 5 files changed, 50 insertions(+), 37 deletions(-) diff --git a/src/gui/kernel/qcocoawindowdelegate_mac.mm b/src/gui/kernel/qcocoawindowdelegate_mac.mm index 9e7aa58..1faf068 100644 --- a/src/gui/kernel/qcocoawindowdelegate_mac.mm +++ b/src/gui/kernel/qcocoawindowdelegate_mac.mm @@ -48,6 +48,9 @@ #include <qlayout.h> #include <qcoreapplication.h> #include <qmenubar.h> +#include <QMainWindow> +#include <QToolBar> +#include <private/qmainwindowlayout_p.h> QT_BEGIN_NAMESPACE extern QWidgetData *qt_qwidget_data(QWidget *); // qwidget.cpp @@ -218,8 +221,21 @@ static void cleanupCocoaWindowDelegate() // We force the repaint to be synchronized with the resize of the window. // Otherwise, the resize looks sluggish because we paint one event loop later. - if ([[window contentView] inLiveResize]) + if ([[window contentView] inLiveResize]) { qwidget->repaint(); + + // We need to repaint the toolbar as well. + QMainWindow* mWindow = qobject_cast<QMainWindow*>(qwidget->window()); + if (mWindow) { + QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout()); + QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList; + + for (int i = 0; i < toolbarList.size(); ++i) { + QToolBar* toolbar = toolbarList.at(i); + toolbar->repaint(); + } + } + } } - (void)windowDidMove:(NSNotification *)notification diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 5fc9951..198d4e5 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1367,6 +1367,16 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) QApplication::postEvent(q, new QEvent(QEvent::PolishRequest)); extraPaintEngine = 0; + +#ifdef QT_MAC_USE_COCOA + // If we add a child to the unified toolbar, we have to redirect the painting. + if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) { + if (parentWidget->d_func()->unifiedSurface) { + QWidget *toolbar = parentWidget->d_func()->toolbar_ancestor; + parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset); + } + } +#endif // QT_MAC_USE_COCOA } @@ -10478,7 +10488,7 @@ void QWidget::update(const QRect &rect) if (hasBackingStoreSupport()) { #ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { - qt_widget_private(this)->unifiedSurface->renderToolbar(this); + qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); return; } #endif // QT_MAC_USE_COCOA @@ -10508,7 +10518,7 @@ void QWidget::update(const QRegion &rgn) if (hasBackingStoreSupport()) { #ifdef QT_MAC_USE_COCOA if (qt_widget_private(this)->isInUnifiedToolbar) { - qt_widget_private(this)->unifiedSurface->renderToolbar(this); + qt_widget_private(this)->unifiedSurface->renderToolbar(this, true); return; } #endif // QT_MAC_USE_COCOA diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 87206f3..0993b22 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -106,16 +106,18 @@ void QUnifiedToolbarSurface::recursiveRemoval(QObject *object) if (object->isWidgetType()) { QWidget *widget = qobject_cast<QWidget *>(object); - if (!(widget->windowType() & Qt::Window)) { - widget->d_func()->unifiedSurface = 0; - widget->d_func()->isInUnifiedToolbar = false; - widget->d_func()->toolbar_offset = QPoint(); - widget->d_func()->toolbar_ancestor = 0; + // If it's a pop-up or something similar, we don't redirect it. + if (widget->windowType() & Qt::Window) + return; + + widget->d_func()->unifiedSurface = 0; + widget->d_func()->isInUnifiedToolbar = false; + widget->d_func()->toolbar_offset = QPoint(); + widget->d_func()->toolbar_ancestor = 0; + } - for (int i = 0; i < object->children().size(); ++i) { - recursiveRemoval(object->children().at(i)); - } - } + for (int i = 0; i < object->children().size(); ++i) { + recursiveRemoval(object->children().at(i)); } } } @@ -154,12 +156,11 @@ void QUnifiedToolbarSurface::updateToolbarOffset(QWidget *widget) mlayout->updateUnifiedToolbarOffset(); } -void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset) +void QUnifiedToolbarSurface::flush(QWidget *widget) { Q_D(QUnifiedToolbarSurface); - Q_UNUSED(offset); - if (!d->image || rgn.rectCount() == 0) + if (!d->image) return; if (widget->d_func()->flushRequested) { @@ -173,7 +174,7 @@ void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widge Q_D(QUnifiedToolbarSurface); int width = geometry().width(); - int height = geometry().height(); + int height = 100; // FIXME if (d->image) { width = qMax(d->image->width(), width); height = qMax(d->image->height(), height); @@ -244,11 +245,11 @@ void QUnifiedToolbarSurface::renderToolbar(QWidget *widget, bool forceFlush) QRegion beginPaintRegion(beginPaintRect); beginPaint(beginPaintRegion); - toolbar->render(paintDevice(), toolbar->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren); + toolbar->render(paintDevice(), toolbar->d_func()->toolbar_offset, QRegion(toolbar->geometry()), QWidget::DrawChildren); toolbar->d_func()->flushRequested = true; if (forceFlush) - flush(toolbar, beginPaintRegion, toolbar->d_func()->toolbar_offset); + flush(toolbar); } QT_END_NAMESPACE diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index 99839fa..8a552fb 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -79,20 +79,20 @@ public: QUnifiedToolbarSurface(QWidget *widget); ~QUnifiedToolbarSurface(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void flush(QWidget *widget); void setGeometry(const QRect &rect); void beginPaint(const QRegion &rgn); void insertToolbar(QWidget *toolbar, const QPoint &offset); void removeToolbar(QToolBar *toolbar); void updateToolbarOffset(QWidget *widget); void renderToolbar(QWidget *widget, bool forceFlush = false); + void recursiveRedirect(QObject *widget, QWidget *parent_toolbar, const QPoint &offset); QPaintDevice *paintDevice(); CGContextRef imageContext(); private: void prepareBuffer(QImage::Format format, QWidget *widget); - void recursiveRedirect(QObject *widget, QWidget *parent_toolbar, const QPoint &offset); void recursiveRemoval(QObject *object); Q_DECLARE_PRIVATE(QUnifiedToolbarSurface) diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 27d8cb9..8170b7a 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -277,35 +277,21 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi #ifdef Q_WS_MAC + Q_UNUSED(offset); + // This is mainly done for native components like native "open file" dialog. if (widget->testAttribute(Qt::WA_DontShowOnScreen)) { return; } #ifdef QT_MAC_USE_COCOA + this->needsFlush = true; this->regionToFlush += rgn; // The actual flushing will be processed in [view drawRect:rect] qt_mac_setNeedsDisplay(widget); - // Unified toolbar hack. - // We issue a flush call for each QToolBar so they get repainted right after - // the main window. - QMainWindow* mWindow = qobject_cast<QMainWindow*>(widget->window()); - if (mWindow) { - QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout()); - QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList; - - for (int i = 0; i < toolbarList.size(); ++i) { - QToolBar* toolbar = toolbarList.at(i); - if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) { - QWidget* tbWidget = (QWidget*) toolbar; - if (tbWidget->d_func()->unifiedSurface) - tbWidget->d_func()->unifiedSurface->flush(tbWidget, rgn, offset); - } - } - } #else // Get a context for the widget. CGContextRef context; -- cgit v0.12 From 81ce61c9459c85f53486e668b532fe43a4d40ff0 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Tue, 15 Mar 2011 15:36:33 +0100 Subject: Fix some warnings in font code Comma at the end of enumerator list and wrong initializer list on Mac. Reviewed-by: Jiang Jiang --- src/gui/text/qfont.h | 2 +- src/gui/text/qfont_p.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index ea65c17..8dbc746 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -90,7 +90,7 @@ public: NoAntialias = 0x0100, OpenGLCompatible = 0x0200, ForceIntegerMetrics = 0x0400, - NoFontMerging = 0x8000, + NoFontMerging = 0x8000 }; enum HintingPreference { diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h index b23f96e..c1a5048 100644 --- a/src/gui/text/qfont_p.h +++ b/src/gui/text/qfont_p.h @@ -97,8 +97,8 @@ struct QFontDef uint stretch : 12; // 0-400 uint ignorePitch : 1; - uint fixedPitchComputed : 1; // for Mac OS X only uint hintingPreference : 2; + uint fixedPitchComputed : 1; // for Mac OS X only int reserved : 14; // for future extensions bool exactMatch(const QFontDef &other) const; -- cgit v0.12 From fd8183129d0efe99e0d28f524264c59fb9155b80 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Tue, 15 Mar 2011 14:54:42 +0100 Subject: Adjust right bearing when breaking with line separators If we found a forced line break with line separator (e.g. '\n'), take the right bearing of previous glyph into account, otherwise the resulting text width will be slightly smaller than the one without a line separator. Task-number: QTBUG-17020 Reviewed-by: Eskil --- src/gui/text/qtextlayout.cpp | 47 ++++++++++++++++-------------- tests/auto/qtextlayout/tst_qtextlayout.cpp | 17 +++++++++++ 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index a996f59..905f81b 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1682,6 +1682,7 @@ namespace { int glyphCount; int maxGlyphs; int currentPosition; + glyph_t previousGlyph; QFixed minw; QFixed softHyphenWidth; @@ -1709,6 +1710,15 @@ namespace { return glyphs.glyphs[logClusters[currentPosition - 1]]; } + inline void saveCurrentGlyph() + { + previousGlyph = 0; + if (currentPosition > 0 && + logClusters[currentPosition - 1] < glyphs.numGlyphs) { + previousGlyph = currentGlyph(); // needed to calculate right bearing later + } + } + inline void adjustRightBearing(glyph_t glyph) { qreal rb; @@ -1723,6 +1733,12 @@ namespace { adjustRightBearing(currentGlyph()); } + inline void adjustPreviousRightBearing() + { + if (previousGlyph > 0) + adjustRightBearing(previousGlyph); + } + inline void resetRightBearing() { rightBearing = QFixed(1); // Any positive number is defined as invalid since only @@ -1798,22 +1814,7 @@ void QTextLine::layout_helper(int maxGlyphs) lbh.manualWrap = (wrapMode == QTextOption::ManualWrap || wrapMode == QTextOption::NoWrap); int item = -1; - int newItem = -1; - int left = 0; - int right = eng->layoutData->items.size()-1; - while(left <= right) { - int middle = ((right-left)/2)+left; - if (line.from > eng->layoutData->items[middle].position) - left = middle+1; - else if(line.from < eng->layoutData->items[middle].position) - right = middle-1; - else { - newItem = middle; - break; - } - } - if (newItem == -1) - newItem = right; + int newItem = eng->findItem(line.from); LB_DEBUG("from: %d: item=%d, total %d, width available %f", line.from, newItem, eng->layoutData->items.size(), line.width.toReal()); @@ -1825,6 +1826,7 @@ void QTextLine::layout_helper(int maxGlyphs) lbh.currentPosition = line.from; int end = 0; lbh.logClusters = eng->layoutData->logClustersPtr; + lbh.previousGlyph = 0; while (newItem < eng->layoutData->items.size()) { lbh.resetRightBearing(); @@ -1885,6 +1887,7 @@ void QTextLine::layout_helper(int maxGlyphs) current, lbh.logClusters, lbh.glyphs); } else { lbh.tmpData.length++; + lbh.adjustPreviousRightBearing(); } line += lbh.tmpData; goto found; @@ -1915,9 +1918,7 @@ void QTextLine::layout_helper(int maxGlyphs) } else { lbh.whiteSpaceOrObject = false; bool sb_or_ws = false; - glyph_t previousGlyph = 0; - if (lbh.currentPosition > 0 && lbh.logClusters[lbh.currentPosition - 1] <lbh.glyphs.numGlyphs) - previousGlyph = lbh.currentGlyph(); // needed to calculate right bearing later + lbh.saveCurrentGlyph(); do { addNextCluster(lbh.currentPosition, end, lbh.tmpData, lbh.glyphCount, current, lbh.logClusters, lbh.glyphs); @@ -1942,7 +1943,7 @@ void QTextLine::layout_helper(int maxGlyphs) // b) if we are so short of available width that the // soft hyphen is the first breakable position, then // we don't want to show it. However we initially - // have to take the width for it into accoun so that + // have to take the width for it into account so that // the text document layout sees the overflow and // switch to break-anywhere mode, in which we // want the soft-hyphen to slip into the next line @@ -1970,8 +1971,9 @@ void QTextLine::layout_helper(int maxGlyphs) // we are too wide, fix right bearing if (rightBearing <= 0) lbh.rightBearing = rightBearing; // take from cache - else if (previousGlyph > 0) - lbh.adjustRightBearing(previousGlyph); + else + lbh.adjustPreviousRightBearing(); + if (!breakany) { line.textWidth += lbh.softHyphenWidth; } @@ -1979,6 +1981,7 @@ void QTextLine::layout_helper(int maxGlyphs) goto found; } } + lbh.saveCurrentGlyph(); } if (lbh.currentPosition == end) newItem = item + 1; diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 0f1ff66..2d15566 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -124,6 +124,7 @@ private slots: void lineWidthFromBOM(); void textWidthVsWIdth(); void textWidthWithStackedTextEngine(); + void textWidthWithLineSeparator(); private: QFont testFont; @@ -1399,5 +1400,21 @@ void tst_QTextLayout::textWidthWithStackedTextEngine() QCOMPARE(line.naturalTextWidth(), fm.width(text)); } +void tst_QTextLayout::textWidthWithLineSeparator() +{ + QString s1("Save Project"), s2("Save Project\ntest"); + s2.replace('\n', QChar::LineSeparator); + + QTextLayout layout1(s1), layout2(s2); + layout1.beginLayout(); + layout2.beginLayout(); + + QTextLine line1 = layout1.createLine(); + QTextLine line2 = layout2.createLine(); + line1.setLineWidth(0x1000); + line2.setLineWidth(0x1000); + QCOMPARE(line1.naturalTextWidth(), line2.naturalTextWidth()); +} + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc" -- cgit v0.12 From c35f610219b1d09f6d05215a2e2fe4f2f6bd966c Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 15:57:01 +0100 Subject: qmake vcproj generator: support PCHs with other extensions than .h Task-number: QTBUG-16639 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/msvc_objectmodel.cpp | 2 +- qmake/option.h | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 69cfc0d..3253c3b 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -2104,7 +2104,7 @@ void VCFilter::modifyPCHstage(QString str) break; } } - bool isHFile = str.endsWith(".h") && (str == Project->precompH); + bool isHFile = Option::hasFileExtension(str, Option::h_ext) && (str == Project->precompH); bool isCPPFile = pchThroughSourceFile && (str == Project->precompCPP); if(!isCFile && !isHFile && !isCPPFile) diff --git a/qmake/option.h b/qmake/option.h index e3ddc9a..bc87343 100644 --- a/qmake/option.h +++ b/qmake/option.h @@ -139,6 +139,14 @@ struct Option return fixString(in, flags); } + inline static bool hasFileExtension(const QString &str, const QStringList &extensions) + { + foreach (const QString &ext, extensions) + if (str.endsWith(ext)) + return true; + return false; + } + //global qmake mode, can only be in one mode per invocation! enum QMAKE_MODE { QMAKE_GENERATE_NOTHING, QMAKE_GENERATE_PROJECT, QMAKE_GENERATE_MAKEFILE, QMAKE_GENERATE_PRL, QMAKE_SET_PROPERTY, QMAKE_QUERY_PROPERTY }; @@ -195,7 +203,6 @@ private: inline QString fixEnvVariables(const QString &x) { return Option::fixString(x, Option::FixEnvVars); } inline QStringList splitPathList(const QString &paths) { return paths.split(Option::dirlist_sep); } - // this is a stripped down version of the one found in QtCore class QLibraryInfo { -- cgit v0.12 From a60bd37c08300201bb2a259f390b92e35808843e Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 16:20:23 +0100 Subject: qmake vc(x)proj generator: fix reading of /YX, /Yc, /Yu compiler flags Controlling the PCH settings manually via the MSVC compiler flags was broken. Task-number: QTBUG-15594 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/msvc_objectmodel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 3253c3b..020c3d8 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -857,11 +857,11 @@ bool VCCLCompilerTool::parseOption(const char* option) break; case 'X': UsePrecompiledHeader = pchGenerateAuto; - PrecompiledHeaderFile = option+3; + PrecompiledHeaderThrough = option+3; break; case 'c': UsePrecompiledHeader = pchCreateUsingSpecific; - PrecompiledHeaderFile = option+3; + PrecompiledHeaderThrough = option+3; break; case 'd': case 'l': @@ -869,7 +869,7 @@ bool VCCLCompilerTool::parseOption(const char* option) break; case 'u': UsePrecompiledHeader = pchUseUsingSpecific; - PrecompiledHeaderFile = option+3; + PrecompiledHeaderThrough = option+3; break; default: found = false; break; -- cgit v0.12 From fef94ecbfb1c5b576247f2e203d0dd8c2c8f2ae1 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 17:00:02 +0100 Subject: qmake vc(x)proj generator: set the output directory The configuration property OutDir was always set to ".\\". We're now referencing "$(OutDir)" instead of building the path every time from DESTDIR. Also, VCConfiguration::PrimaryOutput was always empty for VS < 2010 and is now unused. The variable MSVCPROJ_LIBOPTIONS was removed. Task-number: QTBUG-16490 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/msvc_vcproj.cpp | 45 ++++++---------------------------- 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 0df33d0..b2e5959 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -878,22 +878,16 @@ void VcprojGenerator::initConfiguration() break; } + conf.OutputDirectory = project->first("DESTDIR"); + if (conf.OutputDirectory.isEmpty()) + conf.OutputDirectory = ".\\"; + if (!conf.OutputDirectory.endsWith("\\")) + conf.OutputDirectory += '\\'; if (conf.CompilerVersion >= NET2010) { - conf.OutputDirectory = project->first("DESTDIR"); - - if(conf.OutputDirectory.isEmpty()) - conf.OutputDirectory = ".\\"; - - if(!conf.OutputDirectory.endsWith("\\")) - conf.OutputDirectory += '\\'; - // The target name could have been changed. conf.PrimaryOutput = project->first("TARGET"); if ( !conf.PrimaryOutput.isEmpty() && !project->first("TARGET_VERSION_EXT").isEmpty() && project->isActiveConfig("shared")) conf.PrimaryOutput.append(project->first("TARGET_VERSION_EXT")); - } else { - conf.PrimaryOutput = project->first("PrimaryOutput"); - conf.OutputDirectory = "."; } conf.Name = project->values("BUILD_NAME").join(" "); @@ -982,13 +976,7 @@ void VcprojGenerator::initCompilerTool() void VcprojGenerator::initLibrarianTool() { VCConfiguration &conf = vcProject.Configuration; - conf.librarian.OutputFile = project->first("DESTDIR"); - if(conf.librarian.OutputFile.isEmpty()) - conf.librarian.OutputFile = ".\\"; - - if(!conf.librarian.OutputFile.endsWith("\\")) - conf.librarian.OutputFile += '\\'; - + conf.librarian.OutputFile = "$(OutDir)\\"; conf.librarian.OutputFile += project->first("MSVCPROJ_TARGET"); conf.librarian.AdditionalOptions += project->values("QMAKE_LIBFLAGS"); } @@ -1018,24 +1006,7 @@ void VcprojGenerator::initLinkerTool() } } - switch (projectTarget) { - case Application: - conf.linker.OutputFile = project->first("DESTDIR"); - break; - case SharedLib: - conf.linker.parseOptions(project->values("MSVCPROJ_LIBOPTIONS")); - conf.linker.OutputFile = project->first("DESTDIR"); - break; - case StaticLib: //unhandled - added to remove warnings.. - break; - } - - if(conf.linker.OutputFile.isEmpty()) - conf.linker.OutputFile = ".\\"; - - if(!conf.linker.OutputFile.endsWith("\\")) - conf.linker.OutputFile += '\\'; - + conf.linker.OutputFile = "$(OutDir)\\"; conf.linker.OutputFile += project->first("MSVCPROJ_TARGET"); if(project->isActiveConfig("dll")){ @@ -1054,7 +1025,7 @@ void VcprojGenerator::initResourceTool() if(project->isActiveConfig("debug")) conf.resource.PreprocessorDefinitions += "_DEBUG"; if(project->isActiveConfig("staticlib")) - conf.resource.ResourceOutputFileName = project->first("DESTDIR") + "/$(InputName).res"; + conf.resource.ResourceOutputFileName = "$(OutDir)\\$(InputName).res"; } void VcprojGenerator::initIDLTool() -- cgit v0.12 From 613d24096e78f8ef161ee0c63f7fda034534f3cd Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 17:17:16 +0100 Subject: qmake vc(x)proj generator: fix handling of DEFINES from .prl files There was some ancient code putting those defines into MSVCPROJ_DEFINES. This variable was used for the VC6 generator. We just let MakefileGenerator handle the variables of a .prl file now. Task-number: QTBUG-16024 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/msvc_vcproj.cpp | 13 ------------- qmake/generators/win32/msvc_vcproj.h | 1 - 2 files changed, 14 deletions(-) diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index b2e5959..f243e86 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1548,19 +1548,6 @@ QString VcprojGenerator::findTemplate(QString file) return ret; } -void VcprojGenerator::processPrlVariable(const QString &var, const QStringList &l) -{ - if(var == "QMAKE_PRL_DEFINES") { - QStringList &out = project->values("MSVCPROJ_DEFINES"); - for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) { - if(out.indexOf((*it)) == -1) - out.append((" /D " + *it)); - } - } else { - MakefileGenerator::processPrlVariable(var, l); - } -} - void VcprojGenerator::outputVariables() { #if 0 diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h index 656afa9..fdcd73f 100644 --- a/qmake/generators/win32/msvc_vcproj.h +++ b/qmake/generators/win32/msvc_vcproj.h @@ -92,7 +92,6 @@ protected: virtual bool mergeBuildProject(MakefileGenerator *other); virtual bool openOutput(QFile &file, const QString &build) const; - virtual void processPrlVariable(const QString &, const QStringList &); virtual bool findLibraries(); virtual void outputVariables(); QString fixFilename(QString ofile) const; -- cgit v0.12 From 5ccd3443fb4604d67a8f65588cc2e3b61c9e1b5c Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 17:23:50 +0100 Subject: qmake: fix the language settings generated Windows resource files On Windows > XP the version information of for example the Qt DLLs are not visible in the Windows explorer. That's due to missing language information in the version resource. Task-number: QT-4054 Task-number: QTBUG-12249 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/winmakefile.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index c85533b..ef234ec 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -456,6 +456,10 @@ void Win32MakefileGenerator::processRcFileVar() ts << "\t\t\t\tVALUE \"ProductName\", \"" << productName << "\\0\"" << endl; ts << "\t\t\tEND" << endl; ts << "\t\tEND" << endl; + ts << "\t\tBLOCK \"VarFileInfo\"" << endl; + ts << "\t\tBEGIN" << endl; + ts << "\t\t\tVALUE \"Translation\", 0x409, 1200" << endl; + ts << "\t\tEND" << endl; ts << "\tEND" << endl; ts << "/* End of Version info */" << endl; ts << endl; -- cgit v0.12 From 400f151126e2208882875987943a3c8d919ec7f4 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 18:04:15 +0100 Subject: qmake nmake / mingw32-make generators: fix DEF_FILE for shadow builds Task-number: QTBUG-11643 Reviewed-by: Marius Storm-Olsen --- qmake/generators/win32/mingw_make.cpp | 6 ++++-- qmake/generators/win32/msvc_nmake.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 2639332..462920e 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -302,8 +302,10 @@ void MingwMakefileGenerator::init() project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB")); } - if(!project->values("DEF_FILE").isEmpty() && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) - project->values("QMAKE_LFLAGS").append(QString("-Wl,") + project->first("DEF_FILE")); + if(!project->values("DEF_FILE").isEmpty() && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) { + QString defFileName = fileFixify(project->values("DEF_FILE")).first(); + project->values("QMAKE_LFLAGS").append(QString("-Wl,") + escapeFilePath(defFileName)); + } MakefileGenerator::init(); diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 1b2cd18..c55806d 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -218,8 +218,10 @@ void NmakeMakefileGenerator::init() project->values("QMAKE_LIBS") += escapeFilePaths(project->values("RES_FILE")); } - if(!project->values("DEF_FILE").isEmpty()) - project->values("QMAKE_LFLAGS").append(QString("/DEF:") + escapeFilePath(project->first("DEF_FILE"))); + if (!project->values("DEF_FILE").isEmpty()) { + QString defFileName = fileFixify(project->values("DEF_FILE")).first(); + project->values("QMAKE_LFLAGS").append(QString("/DEF:") + escapeFilePath(defFileName)); + } if(!project->values("VERSION").isEmpty()) { QString version = project->values("VERSION")[0]; -- cgit v0.12 From fcfd06409768916ef10c7048a87b2328ec5d45f7 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Mon, 14 Feb 2011 18:33:27 +0100 Subject: qmake/Mac: replace @SHORT_VERSION@ in QMAKE_INFO_PLIST file not only for libs Task-number: QTBUG-7993 Reviewed-by: Marius Storm-Olsen --- qmake/generators/mac/pbuilder_pbx.cpp | 2 ++ qmake/generators/unix/unixmake2.cpp | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index 0ec946e..19667cd 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -1272,6 +1272,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) plist_in_text = plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET")); } else { plist_in_text = plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET")); + } + if (!project->values("VERSION").isEmpty()) { plist_in_text = plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + project->first("VER_MIN")); } diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp index 5ea13f4..212f8bd 100644 --- a/qmake/generators/unix/unixmake2.cpp +++ b/qmake/generators/unix/unixmake2.cpp @@ -712,11 +712,18 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) t << info_plist_out << ": " << "\n\t"; if(!destdir.isEmpty()) t << mkdir_p_asstring(destdir) << "\n\t"; + QStringList commonSedArgs; + if (!project->values("VERSION").isEmpty()) + commonSedArgs << "-e \"s,@SHORT_VERSION@," << project->first("VER_MAJ") << "." << project->first("VER_MIN") << ",g\" "; + commonSedArgs << "-e \"s,@TYPEINFO@,"<< (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? + QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" "; if(project->first("TEMPLATE") == "app") { QString icon = fileFixify(var("ICON")); t << "@$(DEL_FILE) " << info_plist_out << "\n\t" - << "@sed " - << "-e \"s,@ICON@," << icon.section(Option::dir_sep, -1) << ",g\" " + << "@sed "; + foreach (const QString &arg, commonSedArgs) + t << arg; + t << "-e \"s,@ICON@," << icon.section(Option::dir_sep, -1) << ",g\" " << "-e \"s,@EXECUTABLE@," << var("QMAKE_ORIG_TARGET") << ",g\" " << "-e \"s,@TYPEINFO@,"<< (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" " @@ -732,9 +739,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t) } } else { t << "@$(DEL_FILE) " << info_plist_out << "\n\t" - << "@sed " - << "-e \"s,@LIBRARY@," << var("QMAKE_ORIG_TARGET") << ",g\" " - << "-e \"s,@SHORT_VERSION@," << project->first("VER_MAJ") << "." << project->first("VER_MIN") << ",g\" " + << "@sed "; + foreach (const QString &arg, commonSedArgs) + t << arg; + t << "-e \"s,@LIBRARY@," << var("QMAKE_ORIG_TARGET") << ",g\" " << "-e \"s,@TYPEINFO@," << (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" " -- cgit v0.12 From e22c6eb32c4c4c189ba5c11ce61adc8a59a0847b Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 15 Mar 2011 15:53:10 +0100 Subject: qmake vcproj generator: do not insert $(INHERIT) This will remove the warnings about undefined environment variables when building with IncrediBuild. Done-with: Marius Storm-Olsen --- qmake/generators/win32/msvc_objectmodel.cpp | 12 ++++++------ qmake/generators/win32/msvc_objectmodel.h | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 020c3d8..5b62b5e 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -355,7 +355,7 @@ VCCLCompilerTool::VCCLCompilerTool() TreatWChar_tAsBuiltInType(unset), TurnOffAssemblyGeneration(unset), UndefineAllPreprocessorDefinitions(unset), - UsePrecompiledHeader(pchNone), + UsePrecompiledHeader(pchUnset), UseUnicodeForAssemblerListing(unset), WarnAsError(unset), WarningLevel(warningLevel_0), @@ -389,7 +389,7 @@ inline XmlOutput::xml_output xformUsePrecompiledHeaderForNET2005(pchOption whatP if (whatPch == pchGenerateAuto) whatPch = (pchOption)0; if (whatPch == pchUseUsingSpecific) whatPch = (pchOption)2; } - return attrE(_UsePrecompiledHeader, whatPch); + return attrE(_UsePrecompiledHeader, whatPch, /*ifNot*/ pchUnset); } inline XmlOutput::xml_output xformExceptionHandlingNET2005(exceptionHandling eh, DotNET compilerVersion) @@ -2145,9 +2145,9 @@ void VCFilter::modifyPCHstage(QString str) useCompilerTool = true; // Setup PCH options - CompilerTool.UsePrecompiledHeader = (isCFile ? pchNone : pchCreateUsingSpecific); - CompilerTool.PrecompiledHeaderThrough = (isCPPFile ? QString("$(INHERIT)") : QString("$(NOINHERIT)")); - CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)"); + CompilerTool.UsePrecompiledHeader = (isCFile ? pchNone : pchCreateUsingSpecific); + if (!isCPPFile) + CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)"); } bool VCFilter::addExtraCompiler(const VCFilterFile &info) @@ -2514,7 +2514,7 @@ void VCProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool) << attrT(_TurnOffAssemblyGeneration, tool.TurnOffAssemblyGeneration) << attrT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions) << attrX(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions) - << (!tool.PrecompiledHeaderFile.isEmpty() || !tool.PrecompiledHeaderThrough.isEmpty() ? xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) : noxml()) + << xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) << attrT(_WarnAsError, tool.WarnAsError) << attrE(_WarningLevel, tool.WarningLevel, /*ifNot*/ warningLevelUnknown) << attrT(_WholeProgramOptimization, tool.WholeProgramOptimization) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 5431ce0..3e62fb4 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -366,6 +366,7 @@ enum optLinkTimeCodeGenType { optLTCGUpdate }; enum pchOption { + pchUnset = -1, pchNone, pchCreateUsingSpecific, pchGenerateAuto, -- cgit v0.12 From b17ee2af5e3453191bb4568a388ea042562e1abc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 15 Mar 2011 16:29:26 +0100 Subject: Designer: Fix a bug clearing the Z-Order when adding a new widget. Wrong list was used when adding widgets. Task-number: QTBUG-18120 Reviewed-by: Jarek Kobus <jaroslaw.kobus@nokia.com> --- tools/designer/src/components/formeditor/qdesigner_resource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp index 430b070..6d718bb 100644 --- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp +++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp @@ -1190,7 +1190,7 @@ QWidget *QDesignerResource::createWidget(const QString &widgetName, QWidget *par parentWidget->setProperty("_q_widgetOrder", qVariantFromValue(list)); QList<QWidget *> zOrder = qVariantValue<QWidgetList>(parentWidget->property("_q_zOrder")); zOrder.append(w); - parentWidget->setProperty("_q_zOrder", qVariantFromValue(list)); + parentWidget->setProperty("_q_zOrder", qVariantFromValue(zOrder)); } } else { core()->metaDataBase()->add(w); -- cgit v0.12 From f4244785cb8875b177274db485a346605f05ed7c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 15 Mar 2011 16:32:53 +0100 Subject: Designer: Fix a bug affecting tab reordering of promoted tab widgets. Event filter was added twice due to widget initialization being done twice caused by recursion of WidgetFactory::createWidget() in the case of a fallback to promotion when a custom widget plugin is missing. Task-number: QTBUG-18121 Reviewed-by: Jarek Kobus <jaroslaw.kobus@nokia.com> --- tools/designer/src/lib/shared/widgetfactory.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/designer/src/lib/shared/widgetfactory.cpp b/tools/designer/src/lib/shared/widgetfactory.cpp index 887bb04..36f795e 100644 --- a/tools/designer/src/lib/shared/widgetfactory.cpp +++ b/tools/designer/src/lib/shared/widgetfactory.cpp @@ -412,8 +412,10 @@ QWidget *WidgetFactory::createWidget(const QString &widgetName, QWidget *parentW // Currently happens in the case of Q3-Support widgets baseClass =fallBackBaseClass; } - w = createWidget(baseClass, parentWidget); - promoteWidget(core(),w,widgetName); + if (QWidget *promotedWidget = createWidget(baseClass, parentWidget)) { + promoteWidget(core(), promotedWidget, widgetName); + return promotedWidget; // Do not initialize twice. + } } while (false); Q_ASSERT(w != 0); -- cgit v0.12 From 2355774b061d9e7213634ddec3c50280c4b10b70 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas <jani.hautakangas@nokia.com> Date: Tue, 8 Mar 2011 00:26:05 +0200 Subject: Initial implementation of GLES2.0 resource pooling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep the implementation in separate qpixmapdata_poolgl.cpp file until the pooling has been verified and confirmed to work ok. Task-number: QTBUG-15253 QTBUG-17850 Reviewed-by: Samuel Rødal --- src/gui/kernel/qwidget.cpp | 4 +- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 28 +- src/opengl/opengl.pro | 9 +- src/opengl/qgl.cpp | 19 +- src/opengl/qgl.h | 1 + src/opengl/qgl_symbian.cpp | 1 + src/opengl/qgltexturepool.cpp | 241 ++++++ src/opengl/qgltexturepool_p.h | 147 ++++ src/opengl/qgraphicssystem_gl.cpp | 11 +- src/opengl/qgraphicssystem_gl_p.h | 4 + src/opengl/qpixmapdata_gl_p.h | 42 +- src/opengl/qpixmapdata_poolgl.cpp | 902 +++++++++++++++++++++ src/opengl/qwindowsurface_gl.cpp | 79 +- src/s60installs/bwins/QtOpenGLu.def | 7 + src/s60installs/eabi/QtOpenGLu.def | 6 + 15 files changed, 1482 insertions(+), 19 deletions(-) create mode 100644 src/opengl/qgltexturepool.cpp create mode 100644 src/opengl/qgltexturepool_p.h create mode 100644 src/opengl/qpixmapdata_poolgl.cpp diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 1786e65..e8d9efd 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1326,8 +1326,8 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) //give potential windows a bigger "pre-initial" size; create_sys() will give them a new size later #ifdef Q_OS_SYMBIAN if (isGLWidget) { - // Don't waste GPU mem for unnecessary large egl surface - data.crect = QRect(0,0,2,2); + // Don't waste GPU mem for unnecessary large egl surface until resized by application + data.crect = QRect(0,0,1,1); } else { data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index cda31e5..c8786fb 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1335,11 +1335,14 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c ensureActive(); d->transferMode(ImageDrawingMode); + QGLContext::BindOptions bindOptions = QGLContext::InternalBindOption|QGLContext::CanFlipNativePixmapBindOption; +#ifdef QGL_USE_TEXTURE_POOL + bindOptions |= QGLContext::TemporarilyCachedBindOption; +#endif + glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); QGLTexture *texture = - ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, - QGLContext::InternalBindOption - | QGLContext::CanFlipNativePixmapBindOption); + ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, bindOptions); GLfloat top = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.top()) : src.top(); GLfloat bottom = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.bottom()) : src.bottom(); @@ -1351,6 +1354,12 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, texture->id); d->drawTexture(dest, srcRect, pixmap.size(), isOpaque, isBitmap); + + if (texture->options&QGLContext::TemporarilyCachedBindOption) { + // pixmap was temporarily cached as a QImage texture by pooling system + // and should be destroyed immediately + QGLTextureCache::instance()->remove(ctx, texture->id); + } } void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QRectF& src, @@ -1375,12 +1384,23 @@ void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption); + QGLContext::BindOptions bindOptions = QGLContext::InternalBindOption; +#ifdef QGL_USE_TEXTURE_POOL + bindOptions |= QGLContext::TemporarilyCachedBindOption; +#endif + + QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, bindOptions); GLuint id = texture->id; d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, id); d->drawTexture(dest, src, image.size(), !image.hasAlphaChannel()); + + if (texture->options&QGLContext::TemporarilyCachedBindOption) { + // image was temporarily cached by texture pooling system + // and should be destroyed immediately + QGLTextureCache::instance()->remove(ctx, texture->id); + } } void QGL2PaintEngineEx::drawStaticTextItem(QStaticTextItem *textItem) diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 0e82467..6bbf99b 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -148,11 +148,16 @@ embedded { } symbian { + DEFINES += QGL_USE_TEXTURE_POOL + SOURCES -= qpixmapdata_gl.cpp SOURCES += qgl_symbian.cpp \ + qpixmapdata_poolgl.cpp \ qglpixelbuffer_egl.cpp \ - qgl_egl.cpp + qgl_egl.cpp \ + qgltexturepool.cpp - HEADERS += qgl_egl_p.h + HEADERS += qgl_egl_p.h \ + qgltexturepool_p.h symbian:TARGET.UID3 = 0x2002131A } diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 062218c..ded7aa8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -93,6 +93,10 @@ #include "qlibrary.h" #include <qmutex.h> +#ifdef QGL_USE_TEXTURE_POOL +#include <private/qgltexturepool_p.h> +#endif + QT_BEGIN_NAMESPACE @@ -2022,6 +2026,10 @@ struct DDSFormat { the pixmap/image that it stems from, e.g. installing destruction hooks in them. + \omitvalue TemporarilyCachedBindOption Used by paint engines on some + platforms to indicate that the pixmap or image texture is possibly + cached only temporarily and must be destroyed immediately after the use. + \omitvalue InternalBindOption */ @@ -2529,8 +2537,18 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G #endif const QImage &constRef = img; // to avoid detach in bits()... +#ifdef QGL_USE_TEXTURE_POOL + QGLTexturePool::instance()->createPermanentTexture(tx_id, + target, + 0, internalFormat, + img.width(), img.height(), + externalFormat, + pixel_type, + constRef.bits()); +#else glTexImage2D(target, 0, internalFormat, img.width(), img.height(), 0, externalFormat, pixel_type, constRef.bits()); +#endif #if defined(QT_OPENGL_ES_2) if (genMipmap) glGenerateMipmap(target); @@ -2569,7 +2587,6 @@ QGLTexture *QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum targe return 0; } - /*! \internal */ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QGLContext::BindOptions options) { diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 9443c74..7d72c8a 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -329,6 +329,7 @@ public: MemoryManagedBindOption = 0x0010, // internal flag CanFlipNativePixmapBindOption = 0x0020, // internal flag + TemporarilyCachedBindOption = 0x0040, // internal flag DefaultBindOption = LinearFilteringBindOption | InvertedYBindOption diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp index a9e2248..2978514 100644 --- a/src/opengl/qgl_symbian.cpp +++ b/src/opengl/qgl_symbian.cpp @@ -52,6 +52,7 @@ #include <private/qwidget_p.h> // to access QWExtra #include "qgl_egl_p.h" #include "qpixmapdata_gl_p.h" +#include "qgltexturepool_p.h" #include "qcolormap.h" #include <QDebug> diff --git a/src/opengl/qgltexturepool.cpp b/src/opengl/qgltexturepool.cpp new file mode 100644 index 0000000..61a88c3 --- /dev/null +++ b/src/opengl/qgltexturepool.cpp @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgltexturepool_p.h" +#include "qpixmapdata_gl_p.h" + +QT_BEGIN_NAMESPACE + +Q_OPENGL_EXPORT extern QGLWidget* qt_gl_share_widget(); + +static QGLTexturePool *qt_gl_texture_pool = 0; + +class QGLTexturePoolPrivate +{ +public: + QGLTexturePoolPrivate() : lruFirst(0), lruLast(0) {} + + QGLPixmapData *lruFirst; + QGLPixmapData *lruLast; +}; + +QGLTexturePool::QGLTexturePool() + : d_ptr(new QGLTexturePoolPrivate()) +{ +} + +QGLTexturePool::~QGLTexturePool() +{ +} + +QGLTexturePool *QGLTexturePool::instance() +{ + if (!qt_gl_texture_pool) + qt_gl_texture_pool = new QGLTexturePool(); + return qt_gl_texture_pool; +} + +GLuint QGLTexturePool::createTextureForPixmap(GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data) +{ + GLuint texture; + glGenTextures(1, &texture); + glBindTexture(target, texture); + do { + glTexImage2D(target, level, internalformat, width, height, 0, format, type, 0); + GLenum error = glGetError(); + if (error == GL_NO_ERROR) { + if (data) + moveToHeadOfLRU(data); + return texture; + } else if (error != GL_OUT_OF_MEMORY) { + qWarning("QGLTexturePool: cannot create temporary texture because of invalid params"); + return 0; + } + } while (reclaimSpace(internalformat, width, height, format, type, data)); + qWarning("QGLTexturePool: cannot reclaim sufficient space for a %dx%d pixmap", + width, height); + return 0; +} + +bool QGLTexturePool::createPermanentTexture(GLuint texture, + GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + const GLvoid *data) +{ + glBindTexture(target, texture); + do { + glTexImage2D(target, level, internalformat, width, height, 0, format, type, data); + + GLenum error = glGetError(); + if (error == GL_NO_ERROR) { + return true; + } else if (error != GL_OUT_OF_MEMORY) { + qWarning("QGLTexturePool: cannot create permanent texture because of invalid params"); + return false; + } + } while (reclaimSpace(internalformat, width, height, format, type, 0)); + qWarning("QGLTexturePool: cannot reclaim sufficient space for a %dx%d pixmap", + width, height); + return 0; +} + +void QGLTexturePool::releaseTexture(QGLPixmapData *data, GLuint texture) +{ + // Very simple strategy at the moment: just destroy the texture. + if (data) + removeFromLRU(data); + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + glDeleteTextures(1, &texture); +} + +void QGLTexturePool::useTexture(QGLPixmapData *data) +{ + moveToHeadOfLRU(data); +} + +void QGLTexturePool::detachTexture(QGLPixmapData *data) +{ + removeFromLRU(data); +} + +bool QGLTexturePool::reclaimSpace(GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data) +{ + Q_UNUSED(internalformat); // For future use in picking the best texture to eject. + Q_UNUSED(width); + Q_UNUSED(height); + Q_UNUSED(format); + Q_UNUSED(type); + + bool succeeded = false; + bool wasInLRU = false; + if (data) { + wasInLRU = data->inLRU; + moveToHeadOfLRU(data); + } + + QGLPixmapData *lrudata = pixmapLRU(); + if (lrudata && lrudata != data) { + lrudata->reclaimTexture(); + succeeded = true; + } + + if (data && !wasInLRU) + removeFromLRU(data); + + return succeeded; +} + +void QGLTexturePool::hibernate() +{ + Q_D(QGLTexturePool); + QGLPixmapData *pd = d->lruLast; + while (pd) { + QGLPixmapData *prevLRU = pd->prevLRU; + pd->inTexturePool = false; + pd->inLRU = false; + pd->nextLRU = 0; + pd->prevLRU = 0; + pd->hibernate(); + pd = prevLRU; + } + d->lruFirst = 0; + d->lruLast = 0; +} + +void QGLTexturePool::moveToHeadOfLRU(QGLPixmapData *data) +{ + Q_D(QGLTexturePool); + if (data->inLRU) { + if (!data->prevLRU) + return; // Already at the head of the list. + removeFromLRU(data); + } + data->inLRU = true; + data->nextLRU = d->lruFirst; + data->prevLRU = 0; + if (d->lruFirst) + d->lruFirst->prevLRU = data; + else + d->lruLast = data; + d->lruFirst = data; +} + +void QGLTexturePool::removeFromLRU(QGLPixmapData *data) +{ + Q_D(QGLTexturePool); + if (!data->inLRU) + return; + if (data->nextLRU) + data->nextLRU->prevLRU = data->prevLRU; + else + d->lruLast = data->prevLRU; + if (data->prevLRU) + data->prevLRU->nextLRU = data->nextLRU; + else + d->lruFirst = data->nextLRU; + data->inLRU = false; +} + +QGLPixmapData *QGLTexturePool::pixmapLRU() +{ + Q_D(QGLTexturePool); + return d->lruLast; +} + +QT_END_NAMESPACE diff --git a/src/opengl/qgltexturepool_p.h b/src/opengl/qgltexturepool_p.h new file mode 100644 index 0000000..8b6f726 --- /dev/null +++ b/src/opengl/qgltexturepool_p.h @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGLTEXTUREPOOL_P_H +#define QGLTEXTUREPOOL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qgl.h" +#include <QtCore/qscopedpointer.h> + +QT_BEGIN_NAMESPACE + +class QGLPixmapData; +class QGLTexturePoolPrivate; + +class QGLTexturePool +{ +public: + QGLTexturePool(); + virtual ~QGLTexturePool(); + + static QGLTexturePool *instance(); + + // Create a new texture with the specified parameters and associate + // it with "data". The QGLPixmapData will be notified when the + // texture needs to be reclaimed by the pool. + // + // This function will call reclaimSpace() when texture creation fails. + GLuint createTextureForPixmap(GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data); + + // Create a permanent texture with the specified parameters. + // If there is insufficient space for the texture, + // then this function will call reclaimSpace() and try again. + // + // The caller is responsible for calling glDeleteTextures() + // when it no longer needs the texture, as the texture is not + // recorded in the texture pool. + bool createPermanentTexture(GLuint texture, + GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + const GLvoid *data); + + // Release a texture that is no longer required. + void releaseTexture(QGLPixmapData *data, GLuint texture); + + // Notify the pool that a QGLPixmapData object is using + // an texture again. This allows the pool to move the texture + // within a least-recently-used list of QGLPixmapData objects. + void useTexture(QGLPixmapData *data); + + // Notify the pool that the texture associated with a + // QGLPixmapData is being detached from the pool. The caller + // will become responsible for calling glDeleteTextures(). + void detachTexture(QGLPixmapData *data); + + // Reclaim space for an image allocation with the specified parameters. + // Returns true if space was reclaimed, or false if there is no + // further space that can be reclaimed. The "data" parameter + // indicates the pixmap that is trying to obtain space which should + // not itself be reclaimed. + bool reclaimSpace(GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data); + + // Hibernate the image pool because the context is about to be + // destroyed. All textures left in the pool should be released. + void hibernate(); + +protected: + // Helper functions for managing the LRU list of QGLPixmapData objects. + void moveToHeadOfLRU(QGLPixmapData *data); + void removeFromLRU(QGLPixmapData *data); + QGLPixmapData *pixmapLRU(); + +private: + QScopedPointer<QGLTexturePoolPrivate> d_ptr; + + Q_DECLARE_PRIVATE(QGLTexturePool) + Q_DISABLE_COPY(QGLTexturePool) +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/opengl/qgraphicssystem_gl.cpp b/src/opengl/qgraphicssystem_gl.cpp index 3574756..0aa3c2e 100644 --- a/src/opengl/qgraphicssystem_gl.cpp +++ b/src/opengl/qgraphicssystem_gl.cpp @@ -57,6 +57,10 @@ #include <QtGui/private/qapplication_p.h> #endif +#ifdef QGL_USE_TEXTURE_POOL +#include "private/qgltexturepool_p.h" +#endif + QT_BEGIN_NAMESPACE extern QGLWidget *qt_gl_getShareWidget(); @@ -100,6 +104,11 @@ QWindowSurface *QGLGraphicsSystem::createWindowSurface(QWidget *widget) const return new QGLWindowSurface(widget); } - +#ifdef QGL_USE_TEXTURE_POOL +void QGLGraphicsSystem::releaseCachedResources() +{ + QGLTexturePool::instance()->hibernate(); +} +#endif QT_END_NAMESPACE diff --git a/src/opengl/qgraphicssystem_gl_p.h b/src/opengl/qgraphicssystem_gl_p.h index 4630da1..5829dcc 100644 --- a/src/opengl/qgraphicssystem_gl_p.h +++ b/src/opengl/qgraphicssystem_gl_p.h @@ -66,6 +66,10 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; + +#ifdef QGL_USE_TEXTURE_POOL + void releaseCachedResources(); +#endif private: bool m_useX11GL; }; diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index a4066fd..55cc29d 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -66,6 +66,12 @@ class QGLFramebufferObject; class QGLFramebufferObjectFormat; class QGLPixmapData; +#ifdef QGL_USE_TEXTURE_POOL +void qt_gl_register_pixmap(QGLPixmapData *pd); +void qt_gl_unregister_pixmap(QGLPixmapData *pd); +void qt_gl_hibernate_pixmaps(); +#endif + class QGLFramebufferObjectPool { public: @@ -129,7 +135,24 @@ public: GLuint bind(bool copyBack = true) const; QGLTexture *texture() const; -#if defined(Q_OS_SYMBIAN) +#ifdef QGL_USE_TEXTURE_POOL + void destroyTexture(); + // Detach this image from the image pool. + void detachTextureFromPool(); + // Release the GL resources associated with this pixmap and copy + // the pixmap's contents out of the GPU back into main memory. + // The GL resource will be automatically recreated the next time + // ensureCreated() is called. Does nothing if the pixmap cannot be + // hibernated for some reason (e.g. texture is shared with another + // process via a SgImage). + void hibernate(); + // Called when the QGLTexturePool wants to reclaim this pixmap's + // texture objects to reuse storage. + void reclaimTexture(); + void forceToImage(); +#endif + +#ifdef Q_OS_SYMBIAN void* toNativeType(NativeType type); void fromNativeType(void* pixmap, NativeType type); #endif @@ -176,6 +199,23 @@ private: mutable QGLPixmapGLPaintDevice m_glDevice; +#ifdef QGL_USE_TEXTURE_POOL + QGLPixmapData *nextLRU; + QGLPixmapData *prevLRU; + mutable bool inLRU; + mutable bool failedToAlloc; + mutable bool inTexturePool; + + QGLPixmapData *next; + QGLPixmapData *prev; + + friend class QGLTexturePool; + + friend void qt_gl_register_pixmap(QGLPixmapData *pd); + friend void qt_gl_unregister_pixmap(QGLPixmapData *pd); + friend void qt_gl_hibernate_pixmaps(); +#endif + friend class QGLPixmapGLPaintDevice; friend class QMeeGoPixmapData; friend class QMeeGoLivePixmapData; diff --git a/src/opengl/qpixmapdata_poolgl.cpp b/src/opengl/qpixmapdata_poolgl.cpp new file mode 100644 index 0000000..f1220b1 --- /dev/null +++ b/src/opengl/qpixmapdata_poolgl.cpp @@ -0,0 +1,902 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpixmap.h" +#include "qglframebufferobject.h" + +#include <private/qpaintengine_raster_p.h> + +#include "qpixmapdata_gl_p.h" + +#include <private/qgl_p.h> +#include <private/qdrawhelper_p.h> +#include <private/qimage_p.h> + +#include <private/qpaintengineex_opengl2_p.h> + +#include <qdesktopwidget.h> +#include <qfile.h> +#include <qimagereader.h> +#include <qbuffer.h> + +#include "qgltexturepool_p.h" + +QT_BEGIN_NAMESPACE + +Q_OPENGL_EXPORT extern QGLWidget* qt_gl_share_widget(); + +/*! + \class QGLFramebufferObjectPool + \since 4.6 + + \brief The QGLFramebufferObject class provides a pool of framebuffer + objects for offscreen rendering purposes. + + When requesting an FBO of a given size and format, an FBO of the same + format and a size at least as big as the requested size will be returned. + + \internal +*/ + +static inline int areaDiff(const QSize &size, const QGLFramebufferObject *fbo) +{ + return qAbs(size.width() * size.height() - fbo->width() * fbo->height()); +} + +extern int qt_next_power_of_two(int v); + +static inline QSize maybeRoundToNextPowerOfTwo(const QSize &sz) +{ +#ifdef QT_OPENGL_ES_2 + QSize rounded(qt_next_power_of_two(sz.width()), qt_next_power_of_two(sz.height())); + if (rounded.width() * rounded.height() < 1.20 * sz.width() * sz.height()) + return rounded; +#endif + return sz; +} + + +QGLFramebufferObject *QGLFramebufferObjectPool::acquire(const QSize &requestSize, const QGLFramebufferObjectFormat &requestFormat, bool strictSize) +{ + QGLFramebufferObject *chosen = 0; + QGLFramebufferObject *candidate = 0; + for (int i = 0; !chosen && i < m_fbos.size(); ++i) { + QGLFramebufferObject *fbo = m_fbos.at(i); + + if (strictSize) { + if (fbo->size() == requestSize && fbo->format() == requestFormat) { + chosen = fbo; + break; + } else { + continue; + } + } + + if (fbo->format() == requestFormat) { + // choose the fbo with a matching format and the closest size + if (!candidate || areaDiff(requestSize, candidate) > areaDiff(requestSize, fbo)) + candidate = fbo; + } + + if (candidate) { + m_fbos.removeOne(candidate); + + const QSize fboSize = candidate->size(); + QSize sz = fboSize; + + if (sz.width() < requestSize.width()) + sz.setWidth(qMax(requestSize.width(), qRound(sz.width() * 1.5))); + if (sz.height() < requestSize.height()) + sz.setHeight(qMax(requestSize.height(), qRound(sz.height() * 1.5))); + + // wasting too much space? + if (sz.width() * sz.height() > requestSize.width() * requestSize.height() * 4) + sz = requestSize; + + if (sz != fboSize) { + delete candidate; + candidate = new QGLFramebufferObject(maybeRoundToNextPowerOfTwo(sz), requestFormat); + } + + chosen = candidate; + } + } + + if (!chosen) { + if (strictSize) + chosen = new QGLFramebufferObject(requestSize, requestFormat); + else + chosen = new QGLFramebufferObject(maybeRoundToNextPowerOfTwo(requestSize), requestFormat); + } + + if (!chosen->isValid()) { + delete chosen; + chosen = 0; + } + + return chosen; +} + +void QGLFramebufferObjectPool::release(QGLFramebufferObject *fbo) +{ + if (fbo) + m_fbos << fbo; +} + + +QPaintEngine* QGLPixmapGLPaintDevice::paintEngine() const +{ + return data->paintEngine(); +} + +void QGLPixmapGLPaintDevice::beginPaint() +{ + if (!data->isValid()) + return; + + // QGLPaintDevice::beginPaint will store the current binding and replace + // it with m_thisFBO: + m_thisFBO = data->m_renderFbo->handle(); + QGLPaintDevice::beginPaint(); + + Q_ASSERT(data->paintEngine()->type() == QPaintEngine::OpenGL2); + + // QPixmap::fill() is deferred until now, where we actually need to do the fill: + if (data->needsFill()) { + const QColor &c = data->fillColor(); + float alpha = c.alphaF(); + glDisable(GL_SCISSOR_TEST); + glClearColor(c.redF() * alpha, c.greenF() * alpha, c.blueF() * alpha, alpha); + glClear(GL_COLOR_BUFFER_BIT); + } + else if (!data->isUninitialized()) { + // If the pixmap (GL Texture) has valid content (it has been + // uploaded from an image or rendered into before), we need to + // copy it from the texture to the render FBO. + + glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); + glDisable(GL_BLEND); + +#if !defined(QT_OPENGL_ES_2) + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, data->width(), data->height(), 0, -999999, 999999); +#endif + + glViewport(0, 0, data->width(), data->height()); + + // Pass false to bind so it doesn't copy the FBO into the texture! + context()->drawTexture(QRect(0, 0, data->width(), data->height()), data->bind(false)); + } +} + +void QGLPixmapGLPaintDevice::endPaint() +{ + if (!data->isValid()) + return; + + data->copyBackFromRenderFbo(false); + + // Base's endPaint will restore the previous FBO binding + QGLPaintDevice::endPaint(); + + qgl_fbo_pool()->release(data->m_renderFbo); + data->m_renderFbo = 0; +} + +QGLContext* QGLPixmapGLPaintDevice::context() const +{ + data->ensureCreated(); + return data->m_ctx; +} + +QSize QGLPixmapGLPaintDevice::size() const +{ + return data->size(); +} + +bool QGLPixmapGLPaintDevice::alphaRequested() const +{ + return data->m_hasAlpha; +} + +void QGLPixmapGLPaintDevice::setPixmapData(QGLPixmapData* d) +{ + data = d; +} + +static int qt_gl_pixmap_serial = 0; + +QGLPixmapData::QGLPixmapData(PixelType type) + : QPixmapData(type, OpenGLClass) + , m_renderFbo(0) + , m_engine(0) + , m_ctx(0) + , m_dirty(false) + , m_hasFillColor(false) + , m_hasAlpha(false) + , inLRU(false) + , failedToAlloc(false) + , inTexturePool(false) +{ + setSerialNumber(++qt_gl_pixmap_serial); + m_glDevice.setPixmapData(this); + + qt_gl_register_pixmap(this); +} + +QGLPixmapData::~QGLPixmapData() +{ + delete m_engine; + + destroyTexture(); + qt_gl_unregister_pixmap(this); +} + +void QGLPixmapData::destroyTexture() +{ + if (inTexturePool) { + QGLTexturePool *pool = QGLTexturePool::instance(); + if (m_texture.id) + pool->releaseTexture(this, m_texture.id); + } else { + if (m_texture.id) { + QGLWidget *shareWidget = qt_gl_share_widget(); + if (shareWidget) { + QGLShareContextScope ctx(shareWidget->context()); + glDeleteTextures(1, &m_texture.id); + } + } + } + m_texture.id = 0; + inTexturePool = false; +} + +QPixmapData *QGLPixmapData::createCompatiblePixmapData() const +{ + return new QGLPixmapData(pixelType()); +} + +bool QGLPixmapData::isValid() const +{ + return w > 0 && h > 0; +} + +bool QGLPixmapData::isValidContext(const QGLContext *ctx) const +{ + if (ctx == m_ctx) + return true; + + const QGLContext *share_ctx = qt_gl_share_widget()->context(); + return ctx == share_ctx || QGLContext::areSharing(ctx, share_ctx); +} + +void QGLPixmapData::resize(int width, int height) +{ + if (width == w && height == h) + return; + + if (width <= 0 || height <= 0) { + width = 0; + height = 0; + } + + w = width; + h = height; + is_null = (w <= 0 || h <= 0); + d = pixelType() == QPixmapData::PixmapType ? 32 : 1; + + destroyTexture(); + + m_source = QImage(); + m_dirty = isValid(); + setSerialNumber(++qt_gl_pixmap_serial); +} + +void QGLPixmapData::ensureCreated() const +{ + if (!m_dirty) + return; + + m_dirty = false; + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + m_ctx = ctx; + + const GLenum internal_format = m_hasAlpha ? GL_RGBA : GL_RGB; +#ifdef QT_OPENGL_ES_2 + const GLenum external_format = internal_format; +#else + const GLenum external_format = qt_gl_preferredTextureFormat(); +#endif + const GLenum target = GL_TEXTURE_2D; + + m_texture.options &= ~QGLContext::MemoryManagedBindOption; + + if (!m_texture.id) { + m_texture.id = QGLTexturePool::instance()->createTextureForPixmap( + target, + 0, internal_format, + w, h, + external_format, + GL_UNSIGNED_BYTE, + const_cast<QGLPixmapData*>(this)); + if (!m_texture.id) { + failedToAlloc = true; + return; + } + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + inTexturePool = true; + } else if (inTexturePool) { + glBindTexture(target, m_texture.id); + QGLTexturePool::instance()->useTexture(const_cast<QGLPixmapData*>(this)); + } + + if (!m_source.isNull() && m_texture.id) { + if (external_format == GL_RGB) { + const QImage tx = m_source.convertToFormat(QImage::Format_RGB888).mirrored(false, true); + + glBindTexture(target, m_texture.id); + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + GL_UNSIGNED_BYTE, tx.bits()); + } else { + // do byte swizzling ARGB -> RGBA + const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, external_format); + glBindTexture(target, m_texture.id); + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + GL_UNSIGNED_BYTE, tx.bits()); + } + + if (useFramebufferObjects()) + m_source = QImage(); + } +} + + +void QGLPixmapData::fromImage(const QImage &image, + Qt::ImageConversionFlags flags) +{ + QImage img = image; + createPixmapForImage(img, flags, false); +} + +void QGLPixmapData::fromImageReader(QImageReader *imageReader, + Qt::ImageConversionFlags flags) +{ + QImage image = imageReader->read(); + if (image.isNull()) + return; + + createPixmapForImage(image, flags, true); +} + +bool QGLPixmapData::fromFile(const QString &filename, const char *format, + Qt::ImageConversionFlags flags) +{ + if (pixelType() == QPixmapData::BitmapType) + return QPixmapData::fromFile(filename, format, flags); + QFile file(filename); + if (file.open(QIODevice::ReadOnly)) { + QByteArray data = file.peek(64); + bool alpha; + if (m_texture.canBindCompressedTexture + (data.constData(), data.size(), format, &alpha)) { + resize(0, 0); + data = file.readAll(); + file.close(); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QSize size = m_texture.bindCompressedTexture + (data.constData(), data.size(), format); + if (!size.isEmpty()) { + w = size.width(); + h = size.height(); + is_null = false; + d = 32; + m_hasAlpha = alpha; + m_source = QImage(); + m_dirty = isValid(); + return true; + } + return false; + } + } + + QImage image = QImageReader(filename, format).read(); + if (image.isNull()) + return false; + + createPixmapForImage(image, flags, true); + + return !isNull(); +} + +bool QGLPixmapData::fromData(const uchar *buffer, uint len, const char *format, + Qt::ImageConversionFlags flags) +{ + bool alpha; + const char *buf = reinterpret_cast<const char *>(buffer); + if (m_texture.canBindCompressedTexture(buf, int(len), format, &alpha)) { + resize(0, 0); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QSize size = m_texture.bindCompressedTexture(buf, int(len), format); + if (!size.isEmpty()) { + w = size.width(); + h = size.height(); + is_null = false; + d = 32; + m_hasAlpha = alpha; + m_source = QImage(); + m_dirty = isValid(); + return true; + } + } + + QByteArray a = QByteArray::fromRawData(reinterpret_cast<const char *>(buffer), len); + QBuffer b(&a); + b.open(QIODevice::ReadOnly); + QImage image = QImageReader(&b, format).read(); + if (image.isNull()) + return false; + + createPixmapForImage(image, flags, true); + + return !isNull(); +} + +/*! + out-of-place conversion (inPlace == false) will always detach() + */ +void QGLPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags flags, bool inPlace) +{ + if (image.size() == QSize(w, h)) + setSerialNumber(++qt_gl_pixmap_serial); + + resize(image.width(), image.height()); + + if (pixelType() == BitmapType) { + m_source = image.convertToFormat(QImage::Format_MonoLSB); + + } else { + QImage::Format format = QImage::Format_RGB32; + if (qApp->desktop()->depth() == 16) + format = QImage::Format_RGB16; + + if (image.hasAlphaChannel() + && ((flags & Qt::NoOpaqueDetection) + || const_cast<QImage &>(image).data_ptr()->checkForAlphaPixels())) + format = QImage::Format_ARGB32_Premultiplied; + + if (inPlace && image.data_ptr()->convertInPlace(format, flags)) { + m_source = image; + } else { + m_source = image.convertToFormat(format); + + // convertToFormat won't detach the image if format stays the same. + if (image.format() == format) + m_source.detach(); + } + } + + m_dirty = true; + m_hasFillColor = false; + + m_hasAlpha = m_source.hasAlphaChannel(); + w = image.width(); + h = image.height(); + is_null = (w <= 0 || h <= 0); + d = m_source.depth(); + + destroyTexture(); +} + +bool QGLPixmapData::scroll(int dx, int dy, const QRect &rect) +{ + Q_UNUSED(dx); + Q_UNUSED(dy); + Q_UNUSED(rect); + return false; +} + +void QGLPixmapData::copy(const QPixmapData *data, const QRect &rect) +{ + if (data->classId() != QPixmapData::OpenGLClass || !static_cast<const QGLPixmapData *>(data)->useFramebufferObjects()) { + QPixmapData::copy(data, rect); + return; + } + + const QGLPixmapData *other = static_cast<const QGLPixmapData *>(data); + if (other->m_renderFbo) { + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + + resize(rect.width(), rect.height()); + m_hasAlpha = other->m_hasAlpha; + ensureCreated(); + + if (!ctx->d_ptr->fbo) + glGenFramebuffers(1, &ctx->d_ptr->fbo); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, ctx->d_ptr->fbo); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_TEXTURE_2D, m_texture.id, 0); + + if (!other->m_renderFbo->isBound()) + glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, other->m_renderFbo->handle()); + + glDisable(GL_SCISSOR_TEST); + if (ctx->d_ptr->active_engine && ctx->d_ptr->active_engine->type() == QPaintEngine::OpenGL2) + static_cast<QGL2PaintEngineEx *>(ctx->d_ptr->active_engine)->invalidateState(); + + glBlitFramebufferEXT(rect.x(), rect.y(), rect.x() + rect.width(), rect.y() + rect.height(), + 0, 0, w, h, + GL_COLOR_BUFFER_BIT, + GL_NEAREST); + + glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + } else { + QPixmapData::copy(data, rect); + } +} + +void QGLPixmapData::fill(const QColor &color) +{ + if (!isValid()) + return; + + bool hasAlpha = color.alpha() != 255; + if (hasAlpha && !m_hasAlpha) { + if (m_texture.id) { + destroyTexture(); + m_dirty = true; + } + m_hasAlpha = color.alpha() != 255; + } + + if (useFramebufferObjects()) { + m_source = QImage(); + m_hasFillColor = true; + m_fillColor = color; + } else { + + if (m_source.isNull()) { + m_fillColor = color; + m_hasFillColor = true; + + } else if (m_source.depth() == 32) { + m_source.fill(PREMUL(color.rgba())); + + } else if (m_source.depth() == 1) { + if (color == Qt::color1) + m_source.fill(1); + else + m_source.fill(0); + } + } +} + +bool QGLPixmapData::hasAlphaChannel() const +{ + return m_hasAlpha; +} + +QImage QGLPixmapData::fillImage(const QColor &color) const +{ + QImage img; + if (pixelType() == BitmapType) { + img = QImage(w, h, QImage::Format_MonoLSB); + + img.setColorCount(2); + img.setColor(0, QColor(Qt::color0).rgba()); + img.setColor(1, QColor(Qt::color1).rgba()); + + if (color == Qt::color1) + img.fill(1); + else + img.fill(0); + } else { + img = QImage(w, h, + m_hasAlpha + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_RGB32); + img.fill(PREMUL(color.rgba())); + } + return img; +} + +extern QImage qt_gl_read_texture(const QSize &size, bool alpha_format, bool include_alpha); + +QImage QGLPixmapData::toImage() const +{ + if (!isValid()) + return QImage(); + + if (m_renderFbo) { + copyBackFromRenderFbo(true); + } else if (!m_source.isNull()) { + QImageData *data = const_cast<QImage &>(m_source).data_ptr(); + if (data->paintEngine && data->paintEngine->isActive() + && data->paintEngine->paintDevice() == &m_source) + { + return m_source.copy(); + } + return m_source; + } else if (m_dirty || m_hasFillColor) { + return fillImage(m_fillColor); + } else { + ensureCreated(); + } + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + glBindTexture(GL_TEXTURE_2D, m_texture.id); + return qt_gl_read_texture(QSize(w, h), true, true); +} + +struct TextureBuffer +{ + QGLFramebufferObject *fbo; + QGL2PaintEngineEx *engine; +}; + +Q_GLOBAL_STATIC(QGLFramebufferObjectPool, _qgl_fbo_pool) +QGLFramebufferObjectPool* qgl_fbo_pool() +{ + return _qgl_fbo_pool(); +} + +void QGLPixmapData::copyBackFromRenderFbo(bool keepCurrentFboBound) const +{ + if (!isValid()) + return; + + m_hasFillColor = false; + + const QGLContext *share_ctx = qt_gl_share_widget()->context(); + QGLShareContextScope ctx(share_ctx); + + ensureCreated(); + + if (!ctx->d_ptr->fbo) + glGenFramebuffers(1, &ctx->d_ptr->fbo); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, ctx->d_ptr->fbo); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_TEXTURE_2D, m_texture.id, 0); + + const int x0 = 0; + const int x1 = w; + const int y0 = 0; + const int y1 = h; + + if (!m_renderFbo->isBound()) + glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, m_renderFbo->handle()); + + glDisable(GL_SCISSOR_TEST); + + glBlitFramebufferEXT(x0, y0, x1, y1, + x0, y0, x1, y1, + GL_COLOR_BUFFER_BIT, + GL_NEAREST); + + if (keepCurrentFboBound) { + glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + } else { + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, m_renderFbo->handle()); + ctx->d_ptr->current_fbo = m_renderFbo->handle(); + } +} + +bool QGLPixmapData::useFramebufferObjects() const +{ +#ifdef Q_OS_SYMBIAN + // We don't want to use FBOs on Symbian + return false; +#else + return QGLFramebufferObject::hasOpenGLFramebufferObjects() + && QGLFramebufferObject::hasOpenGLFramebufferBlit() + && qt_gl_preferGL2Engine() + && (w * h > 32*32); // avoid overhead of FBOs for small pixmaps +#endif +} + +QPaintEngine* QGLPixmapData::paintEngine() const +{ + if (!isValid()) + return 0; + + if (m_renderFbo) + return m_engine; + + if (useFramebufferObjects()) { + extern QGLWidget* qt_gl_share_widget(); + + if (!QGLContext::currentContext()) + qt_gl_share_widget()->makeCurrent(); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + + QGLFramebufferObjectFormat format; + format.setAttachment(QGLFramebufferObject::CombinedDepthStencil); + format.setSamples(4); + format.setInternalTextureFormat(GLenum(m_hasAlpha ? GL_RGBA : GL_RGB)); + + m_renderFbo = qgl_fbo_pool()->acquire(size(), format); + + if (m_renderFbo) { + if (!m_engine) + m_engine = new QGL2PaintEngineEx; + return m_engine; + } + + qWarning() << "Failed to create pixmap texture buffer of size " << size() << ", falling back to raster paint engine"; + } + + // If the application wants to paint into the QPixmap, we first + // force it to QImage format and then paint into that. + // This is simpler than juggling multiple GL contexts. + const_cast<QGLPixmapData *>(this)->forceToImage(); + + if (m_hasFillColor) { + m_source.fill(PREMUL(m_fillColor.rgba())); + m_hasFillColor = false; + } + return m_source.paintEngine(); +} + +extern QRgb qt_gl_convertToGLFormat(QRgb src_pixel, GLenum texture_format); + +// If copyBack is true, bind will copy the contents of the render +// FBO to the texture (which is not bound to the texture, as it's +// a multisample FBO). +GLuint QGLPixmapData::bind(bool copyBack) const +{ + if (m_renderFbo && copyBack) { + copyBackFromRenderFbo(true); + } else { + ensureCreated(); + } + + GLuint id = m_texture.id; + glBindTexture(GL_TEXTURE_2D, id); + + if (m_hasFillColor) { + if (!useFramebufferObjects()) { + m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + m_source.fill(PREMUL(m_fillColor.rgba())); + } + + m_hasFillColor = false; + + GLenum format = qt_gl_preferredTextureFormat(); + QImage tx(w, h, QImage::Format_ARGB32_Premultiplied); + tx.fill(qt_gl_convertToGLFormat(m_fillColor.rgba(), format)); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, format, GL_UNSIGNED_BYTE, tx.bits()); + } + + return id; +} + +QGLTexture* QGLPixmapData::texture() const +{ + return &m_texture; +} + +void QGLPixmapData::detachTextureFromPool() +{ + if (inTexturePool) { + QGLTexturePool::instance()->detachTexture(this); + inTexturePool = false; + } +} + +void QGLPixmapData::hibernate() +{ + // If the texture was imported (e.g, from an SgImage under Symbian), + // then we cannot copy it back to main memory for storage. + if (m_texture.id && m_source.isNull()) + return; + + forceToImage(); + destroyTexture(); +} + +void QGLPixmapData::reclaimTexture() +{ + if (!inTexturePool) + return; + forceToImage(); + destroyTexture(); +} + +Q_GUI_EXPORT int qt_defaultDpiX(); +Q_GUI_EXPORT int qt_defaultDpiY(); + +int QGLPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const +{ + if (w == 0) + return 0; + + switch (metric) { + case QPaintDevice::PdmWidth: + return w; + case QPaintDevice::PdmHeight: + return h; + case QPaintDevice::PdmNumColors: + return 0; + case QPaintDevice::PdmDepth: + return d; + case QPaintDevice::PdmWidthMM: + return qRound(w * 25.4 / qt_defaultDpiX()); + case QPaintDevice::PdmHeightMM: + return qRound(h * 25.4 / qt_defaultDpiY()); + case QPaintDevice::PdmDpiX: + case QPaintDevice::PdmPhysicalDpiX: + return qt_defaultDpiX(); + case QPaintDevice::PdmDpiY: + case QPaintDevice::PdmPhysicalDpiY: + return qt_defaultDpiY(); + default: + qWarning("QGLPixmapData::metric(): Invalid metric"); + return 0; + } +} + +// Force the pixmap data to be backed by some valid data. +void QGLPixmapData::forceToImage() +{ + if (!isValid()) + return; + + if (m_source.isNull()) + m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + + m_dirty = true; +} + +QGLPaintDevice *QGLPixmapData::glDevice() const +{ + return &m_glDevice; +} + +QT_END_NAMESPACE diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 0bffbda..340f75a 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -181,16 +181,14 @@ QGLGraphicsSystem::QGLGraphicsSystem(bool useX11GL) // // QGLWindowSurface // - class QGLGlobalShareWidget { public: - QGLGlobalShareWidget() : widget(0), initializing(false) {} + QGLGlobalShareWidget() : firstPixmap(0), widgetRefCount(0), widget(0), initializing(false) {} QGLWidget *shareWidget() { if (!initializing && !widget && !cleanedUp) { initializing = true; - widget = new QGLWidget(QGLFormat(QGL::SingleBuffer | QGL::NoDepthBuffer | QGL::NoStencilBuffer)); widget->resize(1, 1); @@ -226,6 +224,9 @@ public: static bool cleanedUp; + QGLPixmapData *firstPixmap; + int widgetRefCount; + private: QGLWidget *widget; bool initializing; @@ -256,6 +257,41 @@ void qt_destroy_gl_share_widget() _qt_gl_share_widget()->destroy(); } +void qt_gl_register_pixmap(QGLPixmapData *pd) +{ + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + pd->next = shared->firstPixmap; + pd->prev = 0; + if (shared->firstPixmap) + shared->firstPixmap->prev = pd; + shared->firstPixmap = pd; +} + +void qt_gl_unregister_pixmap(QGLPixmapData *pd) +{ + if (pd->next) + pd->next->prev = pd->prev; + if (pd->prev) { + pd->prev->next = pd->next; + } else { + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + if (shared) + shared->firstPixmap = pd->next; + } +} + +void qt_gl_hibernate_pixmaps() +{ + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + + // Scan all QGLPixmapData objects in the system and hibernate them. + QGLPixmapData *pd = shared->firstPixmap; + while (pd != 0) { + pd->hibernate(); + pd = pd->next; + } +} + struct QGLWindowSurfacePrivate { QGLFramebufferObject *fbo; @@ -347,6 +383,27 @@ QGLWindowSurface::~QGLWindowSurface() delete d_ptr->pb; delete d_ptr->fbo; delete d_ptr; + + if (QGLGlobalShareWidget::cleanedUp) + return; + + --(_qt_gl_share_widget()->widgetRefCount); + +#ifdef QGL_USE_TEXTURE_POOL + if (_qt_gl_share_widget()->widgetRefCount <= 0) { + // All of the widget window surfaces have been destroyed + // but we still have GL pixmaps active. Ask them to hibernate + // to free up GPU resources until a widget is shown again. + // This may eventually cause the EGLContext to be destroyed + // because nothing in the system needs a context, which will + // free up even more GPU resources. + qt_gl_hibernate_pixmaps(); + + // Destroy the context if necessary. + if (!qt_gl_share_widget()->context()->isSharing()) + qt_destroy_gl_share_widget(); + } +#endif } void QGLWindowSurface::deleted(QObject *object) @@ -394,6 +451,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) ctx->create(qt_gl_share_widget()->context()); + if (widget != qt_gl_share_widget()) + ++(_qt_gl_share_widget()->widgetRefCount); + #ifndef QT_NO_EGL static bool checkedForNOKSwapRegion = false; static bool haveNOKSwapRegion = false; @@ -405,9 +465,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) if (haveNOKSwapRegion) qDebug() << "Found EGL_NOK_swap_region2 extension. Using partial updates."; } - - if (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED && - ! haveNOKSwapRegion) + bool swapBehaviourPreserved = (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) + || (ctx->d_func()->eglContext->configAttrib(EGL_SURFACE_TYPE)&EGL_SWAP_BEHAVIOR_PRESERVED_BIT)); + if (!swapBehaviourPreserved && !haveNOKSwapRegion) setPartialUpdateSupport(false); // Force full-screen updates else setPartialUpdateSupport(true); @@ -421,7 +481,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) voidPtr = &widgetPrivate->extraData()->glContext; d_ptr->contexts << ctxPtr; +#ifndef Q_OS_SYMBIAN qDebug() << "hijackWindow() context created for" << widget << d_ptr->contexts.size(); +#endif } QGLContext *QGLWindowSurface::context() const @@ -908,8 +970,9 @@ void QGLWindowSurface::updateGeometry() { if (d_ptr->destructive_swap_buffers) initializeOffscreenTexture(surfSize); #endif - - qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this;; +#ifndef Q_OS_SYMBIAN + qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this; +#endif d_ptr->ctx = ctx; d_ptr->ctx->d_ptr->internal_context = true; } diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 3eb1512..87d1b56 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -711,4 +711,11 @@ EXPORTS ?createPixmapForImage@QGLPixmapData@@AAEXAAVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@_N@Z @ 710 NONAME ; void QGLPixmapData::createPixmapForImage(class QImage &, class QFlags<enum Qt::ImageConversionFlag>, bool) ?fromImageReader@QGLPixmapData@@UAEXPAVQImageReader@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 711 NONAME ; void QGLPixmapData::fromImageReader(class QImageReader *, class QFlags<enum Qt::ImageConversionFlag>) ?setContext@QGLTextureGlyphCache@@QAEXPAVQGLContext@@@Z @ 712 NONAME ; void QGLTextureGlyphCache::setContext(class QGLContext *) + ?hibernate@QGLPixmapData@@QAEXXZ @ 713 NONAME ; void QGLPixmapData::hibernate(void) + ?detachTextureFromPool@QGLPixmapData@@QAEXXZ @ 714 NONAME ; void QGLPixmapData::detachTextureFromPool(void) + ?reclaimTexture@QGLPixmapData@@QAEXXZ @ 715 NONAME ; void QGLPixmapData::reclaimTexture(void) + ?destroyTexture@QGLPixmapData@@QAEXXZ @ 716 NONAME ; void QGLPixmapData::destroyTexture(void) + ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ; void QGLGraphicsSystem::releaseCachedResources(void) + ?serialNumber@QGLTextureGlyphCache@@QBEHXZ @ 718 NONAME ; int QGLTextureGlyphCache::serialNumber(void) const + ?forceToImage@QGLPixmapData@@QAEXXZ @ 719 NONAME ; void QGLPixmapData::forceToImage(void) diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 33d40fd..4c5dca9 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -714,4 +714,10 @@ EXPORTS _ZN16QGLWindowSurface12swapBehaviorE @ 713 NONAME DATA 4 _ZN20QGLTextureGlyphCache10setContextEP10QGLContext @ 714 NONAME _ZN20QGLTextureGlyphCache5clearEv @ 715 NONAME + _ZN13QGLPixmapData12forceToImageEv @ 716 NONAME + _ZN13QGLPixmapData14destroyTextureEv @ 717 NONAME + _ZN13QGLPixmapData14reclaimTextureEv @ 718 NONAME + _ZN13QGLPixmapData21detachTextureFromPoolEv @ 719 NONAME + _ZN13QGLPixmapData9hibernateEv @ 720 NONAME + _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME -- cgit v0.12 From 2bd6dec008693b48430b8f29c564fa8a24158370 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas <jani.hautakangas@nokia.com> Date: Tue, 15 Mar 2011 19:31:38 +0200 Subject: Hot fix for compilation without QGL_USE_TEXTURE_POOL Reviewed-by: TRUSTME --- src/opengl/qwindowsurface_gl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 340f75a..11a9eb0 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -257,6 +257,7 @@ void qt_destroy_gl_share_widget() _qt_gl_share_widget()->destroy(); } +#ifdef QGL_USE_TEXTURE_POOL void qt_gl_register_pixmap(QGLPixmapData *pd) { QGLGlobalShareWidget *shared = _qt_gl_share_widget(); @@ -291,6 +292,7 @@ void qt_gl_hibernate_pixmaps() pd = pd->next; } } +#endif struct QGLWindowSurfacePrivate { -- cgit v0.12 From 29b596c647d2339496458231e8eec6c63ccf4641 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Tue, 15 Mar 2011 19:00:00 +0100 Subject: Revert "qmake vcproj generator: do not insert $(INHERIT)" This reverts commit e22c6eb32c4c4c189ba5c11ce61adc8a59a0847b. --- qmake/generators/win32/msvc_objectmodel.cpp | 12 ++++++------ qmake/generators/win32/msvc_objectmodel.h | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 5b62b5e..020c3d8 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -355,7 +355,7 @@ VCCLCompilerTool::VCCLCompilerTool() TreatWChar_tAsBuiltInType(unset), TurnOffAssemblyGeneration(unset), UndefineAllPreprocessorDefinitions(unset), - UsePrecompiledHeader(pchUnset), + UsePrecompiledHeader(pchNone), UseUnicodeForAssemblerListing(unset), WarnAsError(unset), WarningLevel(warningLevel_0), @@ -389,7 +389,7 @@ inline XmlOutput::xml_output xformUsePrecompiledHeaderForNET2005(pchOption whatP if (whatPch == pchGenerateAuto) whatPch = (pchOption)0; if (whatPch == pchUseUsingSpecific) whatPch = (pchOption)2; } - return attrE(_UsePrecompiledHeader, whatPch, /*ifNot*/ pchUnset); + return attrE(_UsePrecompiledHeader, whatPch); } inline XmlOutput::xml_output xformExceptionHandlingNET2005(exceptionHandling eh, DotNET compilerVersion) @@ -2145,9 +2145,9 @@ void VCFilter::modifyPCHstage(QString str) useCompilerTool = true; // Setup PCH options - CompilerTool.UsePrecompiledHeader = (isCFile ? pchNone : pchCreateUsingSpecific); - if (!isCPPFile) - CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)"); + CompilerTool.UsePrecompiledHeader = (isCFile ? pchNone : pchCreateUsingSpecific); + CompilerTool.PrecompiledHeaderThrough = (isCPPFile ? QString("$(INHERIT)") : QString("$(NOINHERIT)")); + CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)"); } bool VCFilter::addExtraCompiler(const VCFilterFile &info) @@ -2514,7 +2514,7 @@ void VCProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool) << attrT(_TurnOffAssemblyGeneration, tool.TurnOffAssemblyGeneration) << attrT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions) << attrX(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions) - << xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) + << (!tool.PrecompiledHeaderFile.isEmpty() || !tool.PrecompiledHeaderThrough.isEmpty() ? xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) : noxml()) << attrT(_WarnAsError, tool.WarnAsError) << attrE(_WarningLevel, tool.WarningLevel, /*ifNot*/ warningLevelUnknown) << attrT(_WholeProgramOptimization, tool.WholeProgramOptimization) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 3e62fb4..5431ce0 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -366,7 +366,6 @@ enum optLinkTimeCodeGenType { optLTCGUpdate }; enum pchOption { - pchUnset = -1, pchNone, pchCreateUsingSpecific, pchGenerateAuto, -- cgit v0.12 From 733578aec105c2d2bdb3f6ef57ee3195ebb79696 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 16 Mar 2011 12:08:42 +1000 Subject: Disabled non-QDeclarativeItems in Flickable break flicking Allow Flickable to steal grab from items that are disabled. Change-Id: I71e401cd78695ecb2c3d47abde1c3d13e722d848 Task-number: QT-4677 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativeflickable.cpp | 8 +++-- .../qdeclarativeflickable/data/disabledcontent.qml | 8 +++++ .../tst_qdeclarativeflickable.cpp | 39 ++++++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index d64c347..f854262 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1430,8 +1430,10 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) QGraphicsScene *s = scene(); QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0; + QGraphicsItem *grabberItem = s ? s->mouseGrabberItem() : 0; + bool disabledItem = grabberItem && !grabberItem->isEnabled(); bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) { + if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { mouseEvent.setAccepted(false); for (int i = 0x1; i <= 0x10; i <<= 1) { if (event->buttons() & i) { @@ -1478,12 +1480,12 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) break; } grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()); - if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) { + if ((grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) || disabledItem) { d->clearDelayedPress(); grabMouse(); } - return stealThisEvent || d->delayedPressEvent; + return stealThisEvent || d->delayedPressEvent || disabledItem; } else if (d->lastPosTime.isValid()) { d->lastPosTime.invalidate(); } diff --git a/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml b/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml new file mode 100644 index 0000000..dcbb20b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 + +Flickable { + width: 100; height: 100 + contentWidth: 200; contentHeight: 300 + + QGraphicsWidget { width: 200; height: 300; enabled: false } +} diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp index 65ba316..d499edf 100644 --- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp +++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp @@ -69,6 +69,7 @@ private slots: void maximumFlickVelocity(); void flickDeceleration(); void pressDelay(); + void disabledContent(); void nestedPressDelay(); void flickableDirection(); void qgraphicswidget(); @@ -247,6 +248,44 @@ void tst_qdeclarativeflickable::pressDelay() QCOMPARE(spy.count(),1); } +// QT-4677 +void tst_qdeclarativeflickable::disabledContent() +{ + QDeclarativeView *canvas = new QDeclarativeView; + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/disabledcontent.qml")); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->rootObject() != 0); + + QDeclarativeFlickable *flickable = qobject_cast<QDeclarativeFlickable*>(canvas->rootObject()); + QVERIFY(flickable != 0); + + QVERIFY(flickable->contentX() == 0); + QVERIFY(flickable->contentY() == 0); + + QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50))); + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(70,70)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(90,90)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(100,100)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + + QVERIFY(flickable->contentX() < 0); + QVERIFY(flickable->contentY() < 0); + + QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(90, 90))); + + delete canvas; +} + + // QTBUG-17361 void tst_qdeclarativeflickable::nestedPressDelay() { -- cgit v0.12 From 234a4b614e30ec2ad3e161c0dcd4d339182ff9ec Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Wed, 16 Mar 2011 13:09:21 +1000 Subject: Qt.include() used in WorkerScript is broken on Windows. The script local filename was used to resolve the source URL rather than the script URL. Change-Id: I78aa23eadbd76e100bb872b6ac9459aa9a5ee5ce Task-number: QTBUG-17977 Reviewed-by: Aaron Kennedy --- src/declarative/qml/qdeclarativescriptparser.cpp | 2 +- src/declarative/qml/qdeclarativeworkerscript.cpp | 2 +- .../qdeclarativeworkerscript/data/Global.js | 1 + .../qdeclarativeworkerscript/data/script_include.js | 5 +++++ .../qdeclarativeworkerscript/data/worker_include.qml | 5 +++++ .../tst_qdeclarativeworkerscript.cpp | 19 +++++++++++++++++++ 6 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeworkerscript/data/Global.js create mode 100644 tests/auto/declarative/qdeclarativeworkerscript/data/script_include.js create mode 100644 tests/auto/declarative/qdeclarativeworkerscript/data/worker_include.qml diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp index b604706..d9e3ebf 100644 --- a/src/declarative/qml/qdeclarativescriptparser.cpp +++ b/src/declarative/qml/qdeclarativescriptparser.cpp @@ -940,7 +940,7 @@ QDeclarativeParser::Object::ScriptBlock::Pragmas QDeclarativeScriptParser::extra if (l.currentLineNo() == startLine) return rv; - if (pragmaValue == QLatin1String("library")) { + if (pragmaValue == library) { rv |= QDeclarativeParser::Object::ScriptBlock::Shared; replaceWithSpace(script, startOffset, endOffset - startOffset); } else { diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index f8d52b5..1ff0caa 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -313,7 +313,7 @@ void QDeclarativeWorkerScriptEnginePrivate::processLoad(int id, const QUrl &url) QScriptContext *ctxt = QScriptDeclarativeClass::pushCleanContext(workerEngine); QScriptValue urlContext = workerEngine->newObject(); - urlContext.setData(QScriptValue(workerEngine, fileName)); + urlContext.setData(QScriptValue(workerEngine, url.toString())); ctxt->pushScope(urlContext); ctxt->pushScope(activation); ctxt->setActivationObject(activation); diff --git a/tests/auto/declarative/qdeclarativeworkerscript/data/Global.js b/tests/auto/declarative/qdeclarativeworkerscript/data/Global.js new file mode 100644 index 0000000..6bdb4a5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeworkerscript/data/Global.js @@ -0,0 +1 @@ +var data = "World" diff --git a/tests/auto/declarative/qdeclarativeworkerscript/data/script_include.js b/tests/auto/declarative/qdeclarativeworkerscript/data/script_include.js new file mode 100644 index 0000000..0385d91 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeworkerscript/data/script_include.js @@ -0,0 +1,5 @@ +WorkerScript.onMessage = function(msg) { + var res = Qt.include("Global.js"); + WorkerScript.sendMessage(msg + " " + data) +} + diff --git a/tests/auto/declarative/qdeclarativeworkerscript/data/worker_include.qml b/tests/auto/declarative/qdeclarativeworkerscript/data/worker_include.qml new file mode 100644 index 0000000..595cb2b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeworkerscript/data/worker_include.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +BaseWorker { + source: "script_include.js" +} diff --git a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp index 4b922fb..b64e10c 100644 --- a/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp +++ b/tests/auto/declarative/qdeclarativeworkerscript/tst_qdeclarativeworkerscript.cpp @@ -79,6 +79,7 @@ private slots: void messaging_sendQObjectList(); void messaging_sendJsObject(); void script_with_pragma(); + void script_included(); void scriptError_onLoad(); void scriptError_onCall(); @@ -226,6 +227,24 @@ void tst_QDeclarativeWorkerScript::script_with_pragma() delete worker; } +void tst_QDeclarativeWorkerScript::script_included() +{ + QDeclarativeComponent component(&m_engine, SRCDIR "/data/worker_include.qml"); + QDeclarativeWorkerScript *worker = qobject_cast<QDeclarativeWorkerScript*>(component.create()); + QVERIFY(worker != 0); + + QString value("Hello"); + + QVERIFY(QMetaObject::invokeMethod(worker, "testSend", Q_ARG(QVariant, value))); + waitForEchoMessage(worker); + + const QMetaObject *mo = worker->metaObject(); + QCOMPARE(mo->property(mo->indexOfProperty("response")).read(worker).toString(), value + " World"); + + qApp->processEvents(); + delete worker; +} + static QString qdeclarativeworkerscript_lastWarning; static void qdeclarativeworkerscript_warningsHandler(QtMsgType type, const char *msg) { -- cgit v0.12 From 7c99a5273bea6f071efcd8441bedc1b768cc1d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Thu, 10 Mar 2011 12:03:45 +0100 Subject: Added automatic graphicssystem switching on meego when app is minimized. When all top-level widgets are minimized we switch to raster to reduce GPU memory consumption. We switch back to graphicssystem meego when at least one top-level widget is shown normally again. The switching only applies when the runtime graphicssystem is being used. The switching only applies when the runtime graphicssystem is being used. Task-number: QTBUG-18013 Reviewed-by: Armin Berres --- src/gui/painting/qgraphicssystem_runtime.cpp | 5 +- .../graphicssystems/meego/qmeegographicssystem.cpp | 170 +++++++++++++++++++-- .../graphicssystems/meego/qmeegographicssystem.h | 18 ++- .../qmeegographicssystemhelper.cpp | 44 +----- .../qmeegographicssystemhelper.h | 17 ++- tools/qmeegographicssystemhelper/qmeegoruntime.cpp | 49 +++++- tools/qmeegographicssystemhelper/qmeegoruntime.h | 4 + 7 files changed, 249 insertions(+), 58 deletions(-) diff --git a/src/gui/painting/qgraphicssystem_runtime.cpp b/src/gui/painting/qgraphicssystem_runtime.cpp index 5841d40..33652ee 100644 --- a/src/gui/painting/qgraphicssystem_runtime.cpp +++ b/src/gui/painting/qgraphicssystem_runtime.cpp @@ -394,7 +394,10 @@ void QRuntimeGraphicsSystem::setGraphicsSystem(const QString &name) if(m_windowSurfaceDestroyPolicy == DestroyAfterFirstFlush) proxy->m_pendingWindowSurface.reset(proxy->m_windowSurface.take()); - proxy->m_windowSurface.reset(m_graphicsSystem->createWindowSurface(widget)); + QWindowSurface *newWindowSurface = m_graphicsSystem->createWindowSurface(widget); + newWindowSurface->setGeometry(proxy->geometry()); + + proxy->m_windowSurface.reset(newWindowSurface); qt_widget_private(widget)->invalidateBuffer(widget->rect()); } diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 13eab7f..18a0944 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -63,6 +63,8 @@ bool QMeeGoGraphicsSystem::surfaceWasCreated = false; QHash <Qt::HANDLE, QPixmap*> QMeeGoGraphicsSystem::liveTexturePixmaps; +QList<QMeeGoSwitchCallback> QMeeGoGraphicsSystem::switchCallbacks; + QMeeGoGraphicsSystem::QMeeGoGraphicsSystem() { qDebug("Using the meego graphics system"); @@ -74,6 +76,78 @@ QMeeGoGraphicsSystem::~QMeeGoGraphicsSystem() qt_destroy_gl_share_widget(); } +class QMeeGoGraphicsSystemSwitchHandler : public QObject +{ + Q_OBJECT +public: + QMeeGoGraphicsSystemSwitchHandler(); + + void addWidget(QWidget *widget); + bool eventFilter(QObject *, QEvent *); + +private slots: + void removeWidget(QObject *object); + +private: + int visibleWidgets() const; + +private: + QList<QWidget *> m_widgets; +}; + +QMeeGoGraphicsSystemSwitchHandler::QMeeGoGraphicsSystemSwitchHandler() +{ +} + +void QMeeGoGraphicsSystemSwitchHandler::addWidget(QWidget *widget) +{ + if (!m_widgets.contains(widget)) { + widget->installEventFilter(this); + connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(removeWidget(QObject *))); + m_widgets << widget; + } +} + +void QMeeGoGraphicsSystemSwitchHandler::removeWidget(QObject *object) +{ + m_widgets.removeOne(static_cast<QWidget *>(object)); +} + +int QMeeGoGraphicsSystemSwitchHandler::visibleWidgets() const +{ + int count = 0; + for (int i = 0; i < m_widgets.size(); ++i) + count += m_widgets.at(i)->isVisible() && !(m_widgets.at(i)->windowState() & Qt::WindowMinimized); + return count; +} + +bool QMeeGoGraphicsSystemSwitchHandler::eventFilter(QObject *object, QEvent *event) +{ + if (event->type() == QEvent::WindowStateChange) { + QWindowStateChangeEvent *change = static_cast<QWindowStateChangeEvent *>(event); + QWidget *widget = static_cast<QWidget *>(object); + + Qt::WindowStates current = widget->windowState(); + Qt::WindowStates old = change->oldState(); + + // did minimized flag change? + if ((current ^ old) & Qt::WindowMinimized) { + if (current & Qt::WindowMinimized) { + if (visibleWidgets() == 0) + QMeeGoGraphicsSystem::switchToRaster(); + } else { + if (visibleWidgets() == 1) + QMeeGoGraphicsSystem::switchToMeeGo(); + } + } + } + + // resume processing of event + return false; +} + +Q_GLOBAL_STATIC(QMeeGoGraphicsSystemSwitchHandler, switch_handler) + QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const { QGLWidget *shareWidget = qt_gl_share_widget(); @@ -83,6 +157,9 @@ QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const QGLShareContextScope ctx(shareWidget->context()); + if (QApplicationPrivate::instance()->graphics_system_name == QLatin1String("runtime")) + switch_handler()->addWidget(widget); + QMeeGoGraphicsSystem::surfaceWasCreated = true; QWindowSurface *surface = new QGLWindowSurface(widget); return surface; @@ -203,18 +280,7 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataWithGLTexture(int w, int h) bool QMeeGoGraphicsSystem::meeGoRunning() { - if (! QApplicationPrivate::instance()) { - qWarning("Application not running just yet... hard to know what system running!"); - return false; - } - - QString name = QApplicationPrivate::instance()->graphics_system_name; - if (name == "runtime") { - QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system; - name = rsystem->graphicsSystemName(); - } - - return (name == "meego"); + return runningGraphicsSystemName() == "meego"; } QPixmapData* QMeeGoGraphicsSystem::pixmapDataWithNewLiveTexture(int w, int h, QImage::Format format) @@ -259,6 +325,69 @@ void QMeeGoGraphicsSystem::destroyFenceSync(void *fenceSync) QMeeGoExtensions::eglDestroySyncKHR(QEgl::display(), fenceSync); } +QString QMeeGoGraphicsSystem::runningGraphicsSystemName() +{ + if (!QApplicationPrivate::instance()) { + qWarning("Querying graphics system but application not running yet!"); + return QString(); + } + + QString name = QApplicationPrivate::instance()->graphics_system_name; + if (name == QLatin1String("runtime")) { + QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system; + name = rsystem->graphicsSystemName(); + } + + return name; +} + +void QMeeGoGraphicsSystem::switchToMeeGo() +{ + if (meeGoRunning()) + return; + + if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) + qWarning("Can't switch to meego - switching only supported with 'runtime' graphics system."); + else { + triggerSwitchCallbacks(0, "meego"); + + QApplication *app = static_cast<QApplication *>(QCoreApplication::instance()); + app->setGraphicsSystem(QLatin1String("meego")); + + triggerSwitchCallbacks(1, "meego"); + } +} + +void QMeeGoGraphicsSystem::switchToRaster() +{ + if (runningGraphicsSystemName() == QLatin1String("raster")) + return; + + if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) + qWarning("Can't switch to raster - switching only supported with 'runtime' graphics system."); + else { + triggerSwitchCallbacks(0, "raster"); + + QApplication *app = static_cast<QApplication *>(QCoreApplication::instance()); + app->setGraphicsSystem(QLatin1String("raster")); + + QMeeGoLivePixmapData::invalidateSurfaces(); + + triggerSwitchCallbacks(1, "raster"); + } +} + +void QMeeGoGraphicsSystem::registerSwitchCallback(QMeeGoSwitchCallback callback) +{ + switchCallbacks << callback; +} + +void QMeeGoGraphicsSystem::triggerSwitchCallbacks(int type, const char *name) +{ + for (int i = 0; i < switchCallbacks.size(); ++i) + switchCallbacks.at(i)(type, name); +} + /* C API */ int qt_meego_image_to_egl_shared_image(const QImage &image) @@ -340,3 +469,20 @@ void qt_meego_invalidate_live_surfaces(void) { return QMeeGoLivePixmapData::invalidateSurfaces(); } + +void qt_meego_switch_to_raster(void) +{ + QMeeGoGraphicsSystem::switchToRaster(); +} + +void qt_meego_switch_to_meego(void) +{ + QMeeGoGraphicsSystem::switchToMeeGo(); +} + +void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback) +{ + QMeeGoGraphicsSystem::registerSwitchCallback(callback); +} + +#include "qmeegographicssystem.moc" diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h index 27a4e7a..ecc85b2 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.h +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h @@ -47,6 +47,8 @@ #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> +extern "C" typedef void (*QMeeGoSwitchCallback)(int type, const char *name); + class QMeeGoGraphicsSystem : public QGraphicsSystem { public: @@ -76,13 +78,22 @@ public: static void* createFenceSync(); static void destroyFenceSync(void* fenceSync); + static void switchToRaster(); + static void switchToMeeGo(); + static QString runningGraphicsSystemName(); + + static void registerSwitchCallback(QMeeGoSwitchCallback callback); + private: static bool meeGoRunning(); static EGLSurface getSurfaceForLiveTexturePixmap(QPixmap *pixmap); static void destroySurfaceForLiveTexturePixmap(QPixmapData* pmd); + static void triggerSwitchCallbacks(int type, const char *name); static bool surfaceWasCreated; - static QHash <Qt::HANDLE, QPixmap*> liveTexturePixmaps; + static QHash<Qt::HANDLE, QPixmap*> liveTexturePixmaps; + static QList<QMeeGoSwitchCallback> switchCallbacks; + }; /* C api */ @@ -95,7 +106,7 @@ extern "C" { Q_DECL_EXPORT bool qt_meego_destroy_egl_shared_image(Qt::HANDLE handle); Q_DECL_EXPORT void qt_meego_set_surface_fixed_size(int width, int height); Q_DECL_EXPORT void qt_meego_set_surface_scaling(int x, int y, int width, int height); - Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent); + Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent); Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_with_new_live_texture(int w, int h, QImage::Format format); Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_live_texture_handle(Qt::HANDLE handle); Q_DECL_EXPORT QImage* qt_meego_live_texture_lock(QPixmap *pixmap, void *fenceSync); @@ -104,6 +115,9 @@ extern "C" { Q_DECL_EXPORT void* qt_meego_create_fence_sync(void); Q_DECL_EXPORT void qt_meego_destroy_fence_sync(void* fs); Q_DECL_EXPORT void qt_meego_invalidate_live_surfaces(void); + Q_DECL_EXPORT void qt_meego_switch_to_raster(void); + Q_DECL_EXPORT void qt_meego_switch_to_meego(void); + Q_DECL_EXPORT void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback); } #endif diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp index ac32995..3f39bda 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp @@ -47,7 +47,6 @@ #include <private/qpixmap_raster_p.h> #include <private/qwindowsurface_gl_p.h> #include "qmeegoruntime.h" -#include "qmeegoswitchevent.h" QString QMeeGoGraphicsSystemHelper::runningGraphicsSystemName() { @@ -77,46 +76,12 @@ bool QMeeGoGraphicsSystemHelper::isRunningRuntime() void QMeeGoGraphicsSystemHelper::switchToMeeGo() { - if (isRunningMeeGo()) - return; - - if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) - qWarning("Can't switch to meego - switching only supported with 'runtime' graphics system."); - else { - QMeeGoSwitchEvent willSwitchEvent(QLatin1String("meego"), QMeeGoSwitchEvent::WillSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &willSwitchEvent); - - QApplication *app = static_cast<QApplication *>(QCoreApplication::instance()); - app->setGraphicsSystem(QLatin1String("meego")); - - QMeeGoSwitchEvent didSwitchEvent(QLatin1String("meego"), QMeeGoSwitchEvent::DidSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &didSwitchEvent); - } + QMeeGoRuntime::switchToMeeGo(); } void QMeeGoGraphicsSystemHelper::switchToRaster() { - if (runningGraphicsSystemName() == QLatin1String("raster")) - return; - - if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) - qWarning("Can't switch to raster - switching only supported with 'runtime' graphics system."); - else { - QMeeGoSwitchEvent willSwitchEvent(QLatin1String("raster"), QMeeGoSwitchEvent::WillSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &willSwitchEvent); - - QApplication *app = static_cast<QApplication *>(QCoreApplication::instance()); - app->setGraphicsSystem(QLatin1String("raster")); - - QMeeGoRuntime::invalidateLiveSurfaces(); - - QMeeGoSwitchEvent didSwitchEvent(QLatin1String("raster"), QMeeGoSwitchEvent::DidSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &didSwitchEvent); - } + QMeeGoRuntime::switchToRaster(); } Qt::HANDLE QMeeGoGraphicsSystemHelper::imageToEGLSharedImage(const QImage &image) @@ -170,3 +135,8 @@ void QMeeGoGraphicsSystemHelper::setSwapBehavior(SwapMode mode) else if (mode == KillSwap) QGLWindowSurface::swapBehavior = QGLWindowSurface::KillSwap; } + +void QMeeGoGraphicsSystemHelper::enableSwitchEvents() +{ + QMeeGoRuntime::enableSwitchEvents(); +} diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index 5a3b57e..9e50652 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -97,14 +97,21 @@ public: */ static bool isRunningRuntime(); + //! Enables the sending of QMeeGoSwitchEvent's when the graphicssystem switches. + /*! + An application that wishes to start receive QMeegoSwitchEvents must call this function. + */ + static void enableSwitchEvents(); + //! Switches to meego graphics system. /*! When running with the 'runtime' graphics system, sets the currently active system to 'meego'. The window surface and all the resources are automatically migrated to OpenGL. Will fail if the active graphics system is not 'runtime'. Calling this function will emit QMeeGoSwitchEvent to the top level widgets. - Two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) - and one after the switch (QMeeGoSwitchEvent::DidSwitch). + If switch events are enabled, two events will be emitted for each switch -- + one before the switch (QMeeGoSwitchEvent::WillSwitch) and one after the + switch (QMeeGoSwitchEvent::DidSwitch). */ static void switchToMeeGo(); @@ -114,9 +121,9 @@ public: system to 'raster'. The window surface and the graphics resources (including the EGL shared image resources) are automatically migrated back to the CPU. All OpenGL resources (surface, context, cache, font cache) are automaticall anihilated. - Calling this function will emit QMeeGoSwitchEvent to the top level widgets. - Two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) - and one after the switch (QMeeGoSwitchEvent::DidSwitch). + Calling this function will emit QMeeGoSwitchEvent to the top level widgets. If switch + events are enabled, two events will be emitted for each switch -- one before the + switch (QMeeGoSwitchEvent::WillSwitch) and one after the switch (QMeeGoSwitchEvent::DidSwitch). */ static void switchToRaster(); diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp index 7c81d51..15f9cdf 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp @@ -41,6 +41,11 @@ #include "qmeegoruntime.h" +#include "qmeegoswitchevent.h" + +#include <QtGui/QApplication> +#include <QtGui/QWidget> + #include <private/qlibrary_p.h> #include <private/qfactoryloader_p.h> #include <private/qgraphicssystemplugin_p.h> @@ -49,6 +54,7 @@ #define ENSURE_INITIALIZED {if (!initialized) initialize();} bool QMeeGoRuntime::initialized = false; +bool QMeeGoRuntime::switchEventsEnabled = false; typedef int (*QMeeGoImageToEglSharedImageFunc) (const QImage&); typedef QPixmapData* (*QMeeGoPixmapDataFromEglSharedImageFunc) (Qt::HANDLE handle, const QImage&); @@ -66,6 +72,9 @@ typedef Qt::HANDLE (*QMeeGoLiveTextureGetHandleFunc) (QPixmap*); typedef void* (*QMeeGoCreateFenceSyncFunc) (void); typedef void (*QMeeGoDestroyFenceSyncFunc) (void *fs); typedef void (*QMeeGoInvalidateLiveSurfacesFunc) (void); +typedef void (*QMeeGoSwitchToRasterFunc) (void); +typedef void (*QMeeGoSwitchToMeeGoFunc) (void); +typedef void (*QMeeGoRegisterSwitchCallbackFunc) (void (*callback)(int type, const char *name)); static QMeeGoImageToEglSharedImageFunc qt_meego_image_to_egl_shared_image = NULL; static QMeeGoPixmapDataFromEglSharedImageFunc qt_meego_pixmapdata_from_egl_shared_image = NULL; @@ -83,6 +92,16 @@ static QMeeGoLiveTextureGetHandleFunc qt_meego_live_texture_get_handle = NULL; static QMeeGoCreateFenceSyncFunc qt_meego_create_fence_sync = NULL; static QMeeGoDestroyFenceSyncFunc qt_meego_destroy_fence_sync = NULL; static QMeeGoInvalidateLiveSurfacesFunc qt_meego_invalidate_live_surfaces = NULL; +static QMeeGoSwitchToRasterFunc qt_meego_switch_to_raster = NULL; +static QMeeGoSwitchToMeeGoFunc qt_meego_switch_to_meego = NULL; +static QMeeGoRegisterSwitchCallbackFunc qt_meego_register_switch_callback = NULL; + +extern "C" void handleSwitch(int type, const char *name) +{ + QMeeGoSwitchEvent switchEvent((QLatin1String(name)), QMeeGoSwitchEvent::State(type)); + foreach (QWidget *widget, QApplication::topLevelWidgets()) + QCoreApplication::sendEvent(widget, &switchEvent); +} void QMeeGoRuntime::initialize() { @@ -112,13 +131,17 @@ void QMeeGoRuntime::initialize() qt_meego_create_fence_sync = (QMeeGoCreateFenceSyncFunc) library.resolve("qt_meego_create_fence_sync"); qt_meego_destroy_fence_sync = (QMeeGoDestroyFenceSyncFunc) library.resolve("qt_meego_destroy_fence_sync"); qt_meego_invalidate_live_surfaces = (QMeeGoInvalidateLiveSurfacesFunc) library.resolve("qt_meego_invalidate_live_surfaces"); + qt_meego_switch_to_raster = (QMeeGoSwitchToRasterFunc) library.resolve("qt_meego_switch_to_raster"); + qt_meego_switch_to_meego = (QMeeGoSwitchToMeeGoFunc) library.resolve("qt_meego_switch_to_meego"); + qt_meego_register_switch_callback = (QMeeGoRegisterSwitchCallbackFunc) library.resolve("qt_meego_register_switch_callback"); if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_with_gl_texture && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap && qt_meego_set_surface_fixed_size && qt_meego_set_surface_scaling && qt_meego_set_translucent && qt_meego_pixmapdata_with_new_live_texture && qt_meego_pixmapdata_from_live_texture_handle && qt_meego_live_texture_lock && qt_meego_live_texture_release && qt_meego_live_texture_get_handle && - qt_meego_create_fence_sync && qt_meego_destroy_fence_sync && qt_meego_invalidate_live_surfaces) + qt_meego_create_fence_sync && qt_meego_destroy_fence_sync && qt_meego_invalidate_live_surfaces && + qt_meego_switch_to_raster && qt_meego_switch_to_meego && qt_meego_register_switch_callback) { qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion)); } else { @@ -242,3 +265,27 @@ void QMeeGoRuntime::invalidateLiveSurfaces() Q_ASSERT(qt_meego_invalidate_live_surfaces); qt_meego_invalidate_live_surfaces(); } + +void QMeeGoRuntime::switchToRaster() +{ + ENSURE_INITIALIZED; + Q_ASSERT(qt_meego_switch_to_raster); + qt_meego_switch_to_raster(); +} + +void QMeeGoRuntime::switchToMeeGo() +{ + ENSURE_INITIALIZED; + Q_ASSERT(qt_meego_switch_to_meego); + qt_meego_switch_to_meego(); +} + +void QMeeGoRuntime::enableSwitchEvents() +{ + ENSURE_INITIALIZED; + if (!switchEventsEnabled) { + Q_ASSERT(qt_meego_register_switch_callback); + qt_meego_register_switch_callback(handleSwitch); + switchEventsEnabled = true; + } +} diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h index b91efae..6279b4c 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.h +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h @@ -63,7 +63,11 @@ public: static void* createFenceSync(); static void destroyFenceSync(void *fs); static void invalidateLiveSurfaces(); + static void switchToRaster(); + static void switchToMeeGo(); + static void enableSwitchEvents(); private: static bool initialized; + static bool switchEventsEnabled; }; -- cgit v0.12 From f673f4c8273bcdde76b36cb58cb7b5e46a87f1ac Mon Sep 17 00:00:00 2001 From: Armin Berres <armin.berres@basyskom.de> Date: Wed, 16 Mar 2011 08:23:57 +0100 Subject: Make getters for staticContentsSupport and partialUpdateSupport virtual MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When QRuntimeGraphicsSystem is asked for its support for static contents of partial updates it should return the value for the currently running wrapped graphicssystem. As the getters have not been virtual so far this could not be implemented. Additionally the setters have been removed as these values are not supposed to be set from the outside. Only the graphicssystems itself knows what it supports. If the default values should be changed the methods should be overwritten. Merge-request: 1136 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> --- src/gui/painting/qbackingstore_p.h | 3 +- src/gui/painting/qgraphicssystem_runtime.cpp | 10 +++++ src/gui/painting/qgraphicssystem_runtime_p.h | 3 ++ src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 1 - src/gui/painting/qwindowsurface.cpp | 28 ++------------ src/gui/painting/qwindowsurface_p.h | 6 +-- src/gui/painting/qwindowsurface_raster.cpp | 6 ++- src/gui/painting/qwindowsurface_raster_p.h | 1 + src/gui/painting/qwindowsurface_s60.cpp | 7 +++- src/gui/painting/qwindowsurface_s60_p.h | 2 + src/gui/painting/qwindowsurface_x11.cpp | 12 ++++-- src/gui/painting/qwindowsurface_x11_p.h | 1 + src/opengl/qwindowsurface_gl.cpp | 14 +++++-- src/opengl/qwindowsurface_gl_p.h | 2 + src/openvg/qwindowsurface_vg.cpp | 6 ++- src/openvg/qwindowsurface_vg_p.h | 2 + src/s60installs/bwins/QtGuiu.def | 2 - src/s60installs/eabi/QtGuiu.def | 2 - tests/auto/qwindowsurface/tst_qwindowsurface.cpp | 47 ------------------------ 19 files changed, 63 insertions(+), 92 deletions(-) diff --git a/src/gui/painting/qbackingstore_p.h b/src/gui/painting/qbackingstore_p.h index 47387ab..39bf66c 100644 --- a/src/gui/painting/qbackingstore_p.h +++ b/src/gui/painting/qbackingstore_p.h @@ -262,7 +262,8 @@ private: } inline bool hasStaticContents() const - { return !staticWidgets.isEmpty() && windowSurface->hasStaticContentsSupport(); } + { return !staticWidgets.isEmpty() && windowSurface->hasStaticContentsSupport() + && windowSurface->hasPartialUpdateSupport(); } friend QRegion qt_dirtyRegion(QWidget *); friend class QWidgetPrivate; diff --git a/src/gui/painting/qgraphicssystem_runtime.cpp b/src/gui/painting/qgraphicssystem_runtime.cpp index 5841d40..93245ef 100644 --- a/src/gui/painting/qgraphicssystem_runtime.cpp +++ b/src/gui/painting/qgraphicssystem_runtime.cpp @@ -319,6 +319,16 @@ QPoint QRuntimeWindowSurface::offset(const QWidget *widget) const return m_windowSurface->offset(widget); } +bool QRuntimeWindowSurface::hasStaticContentsSupport() const +{ + return m_windowSurface->hasStaticContentsSupport(); +} + +bool QRuntimeWindowSurface::hasPartialUpdateSupport() const +{ + return m_windowSurface->hasPartialUpdateSupport(); +} + QRuntimeGraphicsSystem::QRuntimeGraphicsSystem() : m_windowSurfaceDestroyPolicy(DestroyImmediately), m_graphicsSystem(0) diff --git a/src/gui/painting/qgraphicssystem_runtime_p.h b/src/gui/painting/qgraphicssystem_runtime_p.h index 30b4e3e..998fa98 100644 --- a/src/gui/painting/qgraphicssystem_runtime_p.h +++ b/src/gui/painting/qgraphicssystem_runtime_p.h @@ -129,6 +129,9 @@ public: virtual QPoint offset(const QWidget *widget) const; + virtual bool hasStaticContentsSupport() const; + virtual bool hasPartialUpdateSupport() const; + QScopedPointer<QWindowSurface> m_windowSurface; QScopedPointer<QWindowSurface> m_pendingWindowSurface; diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index e7434c7..c64f572 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -55,7 +55,6 @@ QUnifiedToolbarSurface::QUnifiedToolbarSurface(QWidget *widget) { d_ptr->image = 0; d_ptr->inSetGeometry = false; - setStaticContentsSupport(true); setGeometry(QRect(QPoint(0, 0), QSize(widget->width(), 100))); // FIXME: Fix height. } diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index 029b9dc..9b71818 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -52,8 +52,6 @@ class QWindowSurfacePrivate public: QWindowSurfacePrivate(QWidget *w) : window(w) - , staticContentsSupport(0) - , partialUpdateSupport(1) { } @@ -65,8 +63,6 @@ public: #endif //Q_WS_QPA QRegion staticContents; QList<QImage*> bufferImages; - uint staticContentsSupport : 1; - uint partialUpdateSupport : 1; }; /*! @@ -313,16 +309,7 @@ QPoint QWindowSurface::offset(const QWidget *widget) const bool QWindowSurface::hasStaticContentsSupport() const { - return d_ptr->staticContentsSupport; -} - -void QWindowSurface::setStaticContentsSupport(bool enable) -{ - if (enable && !d_ptr->partialUpdateSupport) { - qWarning("QWindowSurface::setStaticContentsSupport: static contents support requires partial update support"); - return; - } - d_ptr->staticContentsSupport = enable; + return false; } void QWindowSurface::setStaticContents(const QRegion ®ion) @@ -337,21 +324,12 @@ QRegion QWindowSurface::staticContents() const bool QWindowSurface::hasStaticContents() const { - return d_ptr->staticContentsSupport && !d_ptr->staticContents.isEmpty(); + return hasStaticContentsSupport() && !d_ptr->staticContents.isEmpty(); } bool QWindowSurface::hasPartialUpdateSupport() const { - return d_ptr->partialUpdateSupport; -} - -void QWindowSurface::setPartialUpdateSupport(bool enable) -{ - if (!enable && d_ptr->staticContentsSupport) { - qWarning("QWindowSurface::setPartialUpdateSupport: static contents support requires partial update support"); - return; - } - d_ptr->partialUpdateSupport = enable; + return true; } #ifdef Q_WS_QPA diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 62137ef..4a2775f 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -100,16 +100,14 @@ public: virtual QPoint offset(const QWidget *widget) const; inline QRect rect(const QWidget *widget) const; - bool hasStaticContentsSupport() const; - bool hasPartialUpdateSupport() const; + virtual bool hasStaticContentsSupport() const; + virtual bool hasPartialUpdateSupport() const; void setStaticContents(const QRegion ®ion); QRegion staticContents() const; protected: bool hasStaticContents() const; - void setStaticContentsSupport(bool enable); - void setPartialUpdateSupport(bool enable); private: QWindowSurfacePrivate *d_ptr; diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp index 419518ac..3a5dcc3 100644 --- a/src/gui/painting/qwindowsurface_raster.cpp +++ b/src/gui/painting/qwindowsurface_raster.cpp @@ -103,7 +103,6 @@ QRasterWindowSurface::QRasterWindowSurface(QWidget *window, bool setDefaultSurfa #endif d_ptr->image = 0; d_ptr->inSetGeometry = false; - setStaticContentsSupport(true); } @@ -425,6 +424,11 @@ bool QRasterWindowSurface::scroll(const QRegion &area, int dx, int dy) #endif } +bool QRasterWindowSurface::hasStaticContentsSupport() const +{ + return true; +} + void QRasterWindowSurface::prepareBuffer(QImage::Format format, QWidget *widget) { diff --git a/src/gui/painting/qwindowsurface_raster_p.h b/src/gui/painting/qwindowsurface_raster_p.h index 903810b..ad57d48 100644 --- a/src/gui/painting/qwindowsurface_raster_p.h +++ b/src/gui/painting/qwindowsurface_raster_p.h @@ -105,6 +105,7 @@ public: void beginPaint(const QRegion &rgn); void setGeometry(const QRect &rect); bool scroll(const QRegion &area, int dx, int dy); + bool hasStaticContentsSupport() const; private: #if defined(Q_WS_X11) && !defined(QT_NO_MITSHM) diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp index 71556d7..3f2247b 100644 --- a/src/gui/painting/qwindowsurface_s60.cpp +++ b/src/gui/painting/qwindowsurface_s60.cpp @@ -90,8 +90,6 @@ QS60WindowSurface::QS60WindowSurface(QWidget* widget) data->fromSymbianBitmap(bitmap, true); d_ptr->device = QPixmap(data); } - - setStaticContentsSupport(true); } QS60WindowSurface::~QS60WindowSurface() @@ -231,6 +229,11 @@ void QS60WindowSurface::setGeometry(const QRect& rect) QWindowSurface::setGeometry(rect); } +bool QS60WindowSurface::hasStaticContentsSupport() const +{ + return true; +} + CFbsBitmap* QS60WindowSurface::symbianBitmap() const { QS60PixmapData *data = static_cast<QS60PixmapData*>(d_ptr->device.data_ptr().data()); diff --git a/src/gui/painting/qwindowsurface_s60_p.h b/src/gui/painting/qwindowsurface_s60_p.h index d0d4925..f730c87 100644 --- a/src/gui/painting/qwindowsurface_s60_p.h +++ b/src/gui/painting/qwindowsurface_s60_p.h @@ -79,6 +79,8 @@ public: void setGeometry(const QRect &rect); + bool hasStaticContentsSupport() const; + CFbsBitmap *symbianBitmap() const; private: diff --git a/src/gui/painting/qwindowsurface_x11.cpp b/src/gui/painting/qwindowsurface_x11.cpp index 2324bc2..ab4f53e 100644 --- a/src/gui/painting/qwindowsurface_x11.cpp +++ b/src/gui/painting/qwindowsurface_x11.cpp @@ -70,9 +70,6 @@ QX11WindowSurface::QX11WindowSurface(QWidget *widget) #ifndef QT_NO_XRENDER d_ptr->translucentBackground = X11->use_xrender && widget->x11Info().depth() == 32; - setStaticContentsSupport(!d_ptr->translucentBackground); -#else - setStaticContentsSupport(true); #endif } @@ -253,4 +250,13 @@ QPixmap QX11WindowSurface::grabWidget(const QWidget *widget, return px; } +bool QX11WindowSurface::hasStaticContentsSupport() const +{ +#ifndef QT_NO_XRENDER + return !d_ptr->translucentBackground; +#else + return true; +#endif +} + QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_x11_p.h b/src/gui/painting/qwindowsurface_x11_p.h index 88753ea..d5179dd 100644 --- a/src/gui/painting/qwindowsurface_x11_p.h +++ b/src/gui/painting/qwindowsurface_x11_p.h @@ -80,6 +80,7 @@ public: bool scroll(const QRegion &area, int dx, int dy); QPixmap grabWidget(const QWidget *widget, const QRect& rectangle = QRect()) const; + bool hasStaticContentsSupport() const; private: QX11WindowSurfacePrivate *d_ptr; GC gc; diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 21b2f09..ea1f765 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -299,6 +299,8 @@ struct QGLWindowSurfacePrivate QList<QImage> buffers; QGLWindowSurfaceGLPaintDevice glDevice; QGLWindowSurface* q_ptr; + + bool partialUpdateSupport; }; QGLFormat QGLWindowSurface::surfaceFormat; @@ -351,6 +353,7 @@ QGLWindowSurface::QGLWindowSurface(QWidget *window) d_ptr->q_ptr = this; d_ptr->geometry_updated = false; d_ptr->did_paint = false; + d_ptr->partialUpdateSupport = false; } QGLWindowSurface::~QGLWindowSurface() @@ -429,11 +432,11 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) if (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED && ! haveNOKSwapRegion) - setPartialUpdateSupport(false); // Force full-screen updates + d_ptr->partialUpdateSupport = false; // Force full-screen updates else - setPartialUpdateSupport(true); + d_ptr->partialUpdateSupport = true; #else - setPartialUpdateSupport(false); + d_ptr->partialUpdateSupport = false; #endif widgetPrivate->extraData()->glContext = ctx; @@ -1081,6 +1084,11 @@ QImage *QGLWindowSurface::buffer(const QWidget *widget) return &d_ptr->buffers.last(); } +bool QGLWindowSurface::hasPartialUpdateSupport() const +{ + return d_ptr->partialUpdateSupport; +} + QT_END_NAMESPACE diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 67f9f41..e1689bf 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -108,6 +108,8 @@ public: QImage *buffer(const QWidget *widget); + bool hasPartialUpdateSupport() const; + QGLContext *context() const; static QGLFormat surfaceFormat; diff --git a/src/openvg/qwindowsurface_vg.cpp b/src/openvg/qwindowsurface_vg.cpp index 9ce7f9a..6f99de4 100644 --- a/src/openvg/qwindowsurface_vg.cpp +++ b/src/openvg/qwindowsurface_vg.cpp @@ -57,7 +57,6 @@ QVGWindowSurface::QVGWindowSurface(QWidget *window) { // Create the default type of EGL window surface for windows. d_ptr = new QVGEGLWindowSurfaceDirect(this); - setStaticContentsSupport(d_ptr->supportsStaticContents()); } QVGWindowSurface::QVGWindowSurface @@ -120,6 +119,11 @@ QPaintEngine *QVGWindowSurface::paintEngine() const return d_ptr->paintEngine(); } +bool QVGWindowSurface::hasStaticContentsSupport() const +{ + d_ptr->supportsStaticContents(); +} + int QVGWindowSurface::metric(PaintDeviceMetric met) const { return qt_paint_device_metric(window(), met); diff --git a/src/openvg/qwindowsurface_vg_p.h b/src/openvg/qwindowsurface_vg_p.h index 06b16d0..2d6b4f9 100644 --- a/src/openvg/qwindowsurface_vg_p.h +++ b/src/openvg/qwindowsurface_vg_p.h @@ -78,6 +78,8 @@ public: QPaintEngine *paintEngine() const; + bool hasStaticContentsSupport() const; + protected: int metric(PaintDeviceMetric metric) const; diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index a1f1b50..68cdc9e 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -9875,7 +9875,6 @@ EXPORTS ?setState@QPaintEngineEx@@UAEXPAVQPainterState@@@Z @ 9874 NONAME ; void QPaintEngineEx::setState(class QPainterState *) ?setState@TouchPoint@QTouchEvent@@QAEXV?$QFlags@W4TouchPointState@Qt@@@@@Z @ 9875 NONAME ; void QTouchEvent::TouchPoint::setState(class QFlags<enum Qt::TouchPointState>) ?setStaticContents@QWindowSurface@@QAEXABVQRegion@@@Z @ 9876 NONAME ; void QWindowSurface::setStaticContents(class QRegion const &) - ?setStaticContentsSupport@QWindowSurface@@IAEX_N@Z @ 9877 NONAME ; void QWindowSurface::setStaticContentsSupport(bool) ?setStatus@QPictureIO@@QAEXH@Z @ 9878 NONAME ; void QPictureIO::setStatus(int) ?setStatusBar@QMainWindow@@QAEXPAVQStatusBar@@@Z @ 9879 NONAME ; void QMainWindow::setStatusBar(class QStatusBar *) ?setStatusTip@QAction@@QAEXABVQString@@@Z @ 9880 NONAME ; void QAction::setStatusTip(class QString const &) @@ -12651,7 +12650,6 @@ EXPORTS ?toImage@QRuntimePixmapData@@UBE?AVQImage@@XZ @ 12650 NONAME ; class QImage QRuntimePixmapData::toImage(void) const ??0QAbstractScrollAreaPrivate@@QAE@XZ @ 12651 NONAME ; QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate(void) ?resizeEvent@QSplitterHandle@@MAEXPAVQResizeEvent@@@Z @ 12652 NONAME ; void QSplitterHandle::resizeEvent(class QResizeEvent *) - ?setPartialUpdateSupport@QWindowSurface@@IAEX_N@Z @ 12653 NONAME ; void QWindowSurface::setPartialUpdateSupport(bool) ?HandleForegroundEventL@QS60MainAppUi@@MAEXH@Z @ 12654 NONAME ; void QS60MainAppUi::HandleForegroundEventL(int) ?curveThreshold@QStrokerOps@@QBEMXZ @ 12655 NONAME ; float QStrokerOps::curveThreshold(void) const ?createTextureData@QImageTextureGlyphCache@@UAEXHH@Z @ 12656 NONAME ; void QImageTextureGlyphCache::createTextureData(int, int) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index ef1d67c..8f4b7cc 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -3164,7 +3164,6 @@ EXPORTS _ZN14QWindowSurface10beginPaintERK7QRegion @ 3163 NONAME _ZN14QWindowSurface11setGeometryERK5QRect @ 3164 NONAME _ZN14QWindowSurface17setStaticContentsERK7QRegion @ 3165 NONAME - _ZN14QWindowSurface24setStaticContentsSupportEb @ 3166 NONAME _ZN14QWindowSurface6bufferEPK7QWidget @ 3167 NONAME _ZN14QWindowSurface6scrollERK7QRegionii @ 3168 NONAME _ZN14QWindowSurface8endPaintERK7QRegion @ 3169 NONAME @@ -11887,7 +11886,6 @@ EXPORTS _ZN14QGraphicsScale13zScaleChangedEv @ 11886 NONAME _ZN14QPaintEngineEx19drawPixmapFragmentsEPKN8QPainter14PixmapFragmentEiRK7QPixmap6QFlagsINS0_18PixmapFragmentHintEE @ 11887 NONAME _ZN14QWidgetPrivate6renderEP12QPaintDeviceRK6QPointRK7QRegion6QFlagsIN7QWidget10RenderFlagEEb @ 11888 NONAME - _ZN14QWindowSurface23setPartialUpdateSupportEb @ 11889 NONAME _ZN15QGraphicsObject12widthChangedEv @ 11890 NONAME _ZN15QGraphicsObject13heightChangedEv @ 11891 NONAME _ZN15QGraphicsObject15childrenChangedEv @ 11892 NONAME diff --git a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp index b309917..4e3435e 100644 --- a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp +++ b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp @@ -82,8 +82,6 @@ public: /* nothing */ } - using QWindowSurface::setStaticContentsSupport; - using QWindowSurface::setPartialUpdateSupport; private: QImage image; }; @@ -283,51 +281,6 @@ void tst_QWindowSurface::grabWidget() QVERIFY(QColor(childInvalidSubImage.pixel(0, 0)) == QColor(Qt::white)); } -void tst_QWindowSurface::staticContentsAndPartialUpdateSupport() -{ - QWidget widget; - MyWindowSurface surface(&widget); - - // Default values. - QVERIFY(surface.hasPartialUpdateSupport()); - QVERIFY(!surface.hasStaticContentsSupport()); - - // Partial: YES, Static: YES - surface.setStaticContentsSupport(true); - QVERIFY(surface.hasPartialUpdateSupport()); - QVERIFY(surface.hasStaticContentsSupport()); - - // Static contents requires support for partial updates. - // We simply ingore bad combinations and spit out a warning. - - // CONFLICT: Partial: NO, Static: YES - QTest::ignoreMessage(QtWarningMsg, "QWindowSurface::setPartialUpdateSupport: static contents support requires partial update support"); - surface.setPartialUpdateSupport(false); - QVERIFY(surface.hasPartialUpdateSupport()); - QVERIFY(surface.hasStaticContentsSupport()); - - // Partial: YES, Static: NO - surface.setStaticContentsSupport(false); - QVERIFY(surface.hasPartialUpdateSupport()); - QVERIFY(!surface.hasStaticContentsSupport()); - - // Partial: NO, Static: NO - surface.setPartialUpdateSupport(false); - QVERIFY(!surface.hasPartialUpdateSupport()); - QVERIFY(!surface.hasStaticContentsSupport()); - - // CONFLICT: Partial: NO, Static: YES - QTest::ignoreMessage(QtWarningMsg, "QWindowSurface::setStaticContentsSupport: static contents support requires partial update support"); - surface.setStaticContentsSupport(true); - QVERIFY(!surface.hasPartialUpdateSupport()); - QVERIFY(!surface.hasStaticContentsSupport()); - - // Partial: YES, Static: NO - surface.setPartialUpdateSupport(true); - QVERIFY(surface.hasPartialUpdateSupport()); - QVERIFY(!surface.hasStaticContentsSupport()); -} - QTEST_MAIN(tst_QWindowSurface) #else // Q_WS_MAC -- cgit v0.12 From 60bec281fe0a82556c07db3f8e13587d47b8449e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tapani=20P=C3=A4lli?= <tapani.palli@nokia.com> Date: Wed, 16 Mar 2011 08:25:45 +0100 Subject: QMeeGoLivePixmapData : when creating QImage, use constructor with pitch. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As the data may be aligned/padded by the X driver. Fixes: NB#231246 : Incorrect stride used when QMeeGoLivePixmap width not multiple of eight Merge-request: 1115 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> --- src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp index 2a2a098..0970b89 100644 --- a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp +++ b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp @@ -219,7 +219,7 @@ QImage* QMeeGoLivePixmapData::lock(EGLSyncKHR fenceSync) return &lockedImage; } - lockedImage = QImage((uchar *) data, width(), height(), format); + lockedImage = QImage((uchar *) data, width(), height(), pitch, format); return &lockedImage; } -- cgit v0.12 From f58fea162bf20ba42c57a7bf81d0b4de9cbae725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:07:10 +0100 Subject: Update NaCl mkspecs. Less duplication, use the common unix and gcc conf files. --- mkspecs/qws/linux-nacl-g++/qmake.conf | 69 ++-------- mkspecs/qws/linux-nacl-g++/qplatformdefs.h | 122 +---------------- mkspecs/qws/macx-nacl-g++/qmake.conf | 94 ++------------ mkspecs/qws/macx-nacl-g++/qplatformdefs.h | 201 +++++++---------------------- 4 files changed, 79 insertions(+), 407 deletions(-) diff --git a/mkspecs/qws/linux-nacl-g++/qmake.conf b/mkspecs/qws/linux-nacl-g++/qmake.conf index 83ce65b..7293a1a 100644 --- a/mkspecs/qws/linux-nacl-g++/qmake.conf +++ b/mkspecs/qws/linux-nacl-g++/qmake.conf @@ -2,73 +2,28 @@ # qmake configuration for building with nacl-g++ # -include(../../common/unix.conf) +include(../../common/linux.conf) include(../../common/qws.conf) +include(../../common/gcc-base-unix.conf) +include(../../common/g++-unix.conf) QT = core gui -# copy of ../../common/g++.conf, with modifications: - QMAKE_CC = nacl-gcc QMAKE_CXX = nacl-g++ QMAKE_LINK = nacl-g++ QMAKE_LINK_SHLIB = nacl-g++ - -#QMAKE_CC = gcc -QMAKE_CFLAGS += -pipe -DXP_UNIX -DNACL_STANDALONE=1 -QMAKE_CFLAGS_DEPS += -M -QMAKE_CFLAGS_WARN_ON += -Wall -W -QMAKE_CFLAGS_WARN_OFF += -w -QMAKE_CFLAGS_RELEASE += -O2 -QMAKE_CFLAGS_DEBUG += -g -QMAKE_CFLAGS_SHLIB += -fPIC -#QMAKE_CFLAGS_STATIC_LIB += -fPIC -QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses -QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden -QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} -QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE} - -#QMAKE_CXX = g++ -QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS -QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON -QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF -QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE -QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG -QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB -QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB -QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC -QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden -QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} -QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE - -#QMAKE_LINK = g++ -#QMAKE_LINK_SHLIB = g++ -QMAKE_LINK_C = gcc -QMAKE_LINK_C_SHLIB = gcc -QMAKE_LFLAGS += -QMAKE_LFLAGS_RELEASE += -Wl,-O1 -QMAKE_LFLAGS_DEBUG += -QMAKE_LFLAGS_APP += -QMAKE_LFLAGS_SHLIB += -shared -QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB -QMAKE_LFLAGS_SONAME += -Wl,-soname, -QMAKE_LFLAGS_THREAD += -QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined -QMAKE_LFLAGS_RPATH = -Wl,-rpath, - -QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc - -QMAKE_PCH_OUTPUT_EXT = .gch - -# -Bsymbolic-functions (ld) support -QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions -QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, - -# modifications to linux.conf QMAKE_AR = nacl-ar q QMAKE_OBJCOPY = nacl-objcopy QMAKE_STRIP = nacl-strip -QMAKE_LIBS_DYNLOAD = + +# work around linker crash when using PIC +QMAKE_CFLAGS_STATIC_LIB -= -fPIC +QMAKE_CFLAGS_SHLIB -= -fPIC +QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC +QMAKE_CXXFLAGS_SHLIB -= -fPIC + +#QMAKE_CFLAGS += -pipe -DXP_UNIX -DNACL_STANDALONE=1 +QMAKE_LIBS_DYNLOAD -= -ldl load(qt_config) diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h index 01b26d9..70572bf 100644 --- a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h @@ -48,128 +48,20 @@ #include "qglobal.h" - -#define _POSIX_TIMERS -// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs - -// 1) need to reset default environment if _BSD_SOURCE is defined -// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 -// 3) it seems older glibc need this to include the X/Open stuff -#ifndef _GNU_SOURCE -# define _GNU_SOURCE -#endif - -#include <unistd.h> - - -// We are hot - unistd.h should have turned on the specific APIs we requested - -#include <sys/features.h> -#include <pthread.h> -#include <dirent.h> -#include <fcntl.h> -#include <grp.h> -#include <pwd.h> -#include <signal.h> -//#include <dlfcn.h> - -#include <sys/types.h> -//#include <sys/ioctl.h> -//#include <sys/ipc.h> - -#include <sys/time.h> -//#include <sys/shm.h> -//#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/wait.h> -//#include <netinet/in.h> -#ifndef QT_NO_IPV6IFNAME -#include <net/if.h> -#endif - // extra disabling. -#ifdef __native_client__ +#ifdef __native_client__ #define QT_NO_FSFILEENGINE -#define QT_NO_TRANSLATION #endif -#ifdef QT_LARGEFILE_SUPPORT -#define QT_STATBUF struct stat64 -#define QT_STATBUF4TSTAT struct stat64 -#define QT_STAT ::stat64 -#define QT_FSTAT ::fstat64 -#define QT_LSTAT ::lstat64 -#define QT_OPEN ::open64 -#define QT_TRUNCATE ::truncate64 -#define QT_FTRUNCATE ::ftruncate64 -#define QT_LSEEK ::lseek64 -#else -#define QT_STATBUF struct stat -#define QT_STATBUF4TSTAT struct stat -#define QT_STAT ::stat -#define QT_FSTAT ::fstat -#define QT_LSTAT ::lstat -#define QT_OPEN ::open -#define QT_TRUNCATE ::truncate -#define QT_FTRUNCATE ::ftruncate -#define QT_LSEEK ::lseek -#endif +#define QT_NO_SOCKET_H -#ifdef QT_LARGEFILE_SUPPORT -#define QT_FOPEN ::fopen64 -#define QT_FSEEK ::fseeko64 -#define QT_FTELL ::ftello64 -#define QT_FGETPOS ::fgetpos64 -#define QT_FSETPOS ::fsetpos64 -#define QT_FPOS_T fpos64_t -#define QT_OFF_T off64_t -#else -#define QT_FOPEN ::fopen -#define QT_FSEEK ::fseek -#define QT_FTELL ::ftell -#define QT_FGETPOS ::fgetpos -#define QT_FSETPOS ::fsetpos -#define QT_FPOS_T fpos_t -#define QT_OFF_T long -#endif +#define DIR void * +#define PATH_MAX 256 -#define QT_STAT_REG S_IFREG -#define QT_STAT_DIR S_IFDIR -#define QT_STAT_MASK S_IFMT -#define QT_STAT_LNK S_IFLNK -#define QT_SOCKET_CONNECT ::connect -#define QT_SOCKET_BIND ::bind -#define QT_FILENO fileno -#define QT_CLOSE ::close -#define QT_READ ::read -#define QT_WRITE ::write -#define QT_ACCESS ::access -#define QT_GETCWD ::getcwd -#define QT_CHDIR ::chdir -#define QT_MKDIR ::mkdir -#define QT_RMDIR ::rmdir -#define QT_OPEN_LARGEFILE O_LARGEFILE -#define QT_OPEN_RDONLY O_RDONLY -#define QT_OPEN_WRONLY O_WRONLY -#define QT_OPEN_RDWR O_RDWR -#define QT_OPEN_CREAT O_CREAT -#define QT_OPEN_TRUNC O_TRUNC -#define QT_OPEN_APPEND O_APPEND +#include "../../common/posix/qplatformdefs.h" -#define QT_SIGNAL_RETTYPE void -#define QT_SIGNAL_ARGS int -#define QT_SIGNAL_IGNORE SIG_IGN - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - -#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) -#define QT_SNPRINTF ::snprintf -#define QT_VSNPRINTF ::vsnprintf -#endif +#undef QT_LSTAT +#define QT_LSTAT QT_STAT #endif // QPLATFORMDEFS_H diff --git a/mkspecs/qws/macx-nacl-g++/qmake.conf b/mkspecs/qws/macx-nacl-g++/qmake.conf index 0a54b4b..7293a1a 100644 --- a/mkspecs/qws/macx-nacl-g++/qmake.conf +++ b/mkspecs/qws/macx-nacl-g++/qmake.conf @@ -1,95 +1,29 @@ # -# qmake configuration for macx-nacl-g++ with embedded-lite +# qmake configuration for building with nacl-g++ # -include(../../common/unix.conf) - -MAKEFILE_GENERATOR = UNIX -TEMPLATE = app -CONFIG += qt warn_on release link_prl -QT += core gui -QMAKE_INCREMENTAL_STYLE = sublib -QMAKE_EXTENSION_SHLIB = dylib +include(../../common/linux.conf) +include(../../common/qws.conf) +include(../../common/gcc-base-unix.conf) +include(../../common/g++-unix.conf) +QT = core gui QMAKE_CC = nacl-gcc QMAKE_CXX = nacl-g++ QMAKE_LINK = nacl-g++ QMAKE_LINK_SHLIB = nacl-g++ - -#QMAKE_CC = $(TB)cc -QMAKE_LEX = flex -QMAKE_LEXFLAGS = -QMAKE_YACC = yacc -QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -pipe -DXP_UNIX -DNACL_STANDALONE=1 -QMAKE_CFLAGS_WARN_ON = -Wall -W -QMAKE_CFLAGS_WARN_OFF = -QMAKE_CFLAGS_RELEASE = -O2 -QMAKE_CFLAGS_DEBUG = -g -QMAKE_CFLAGS_SHLIB = -fPIC -QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses -QMAKE_CFLAGS_THREAD = -D_REENTRANT -QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden - -#QMAKE_CXX = $(TB)c++ -QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED -QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -fno-default-inline -QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG -QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB -QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC -QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD -QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden - -QMAKE_INCDIR = -QMAKE_LIBDIR = -QMAKE_INCDIR_X11 = -QMAKE_LIBDIR_X11 = -QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] -QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] -QMAKE_INCDIR_OPENGL = -QMAKE_LIBDIR_OPENGL = -QMAKE_INCDIR_QTOPIA = $(QPEDIR)/include -QMAKE_LIBDIR_QTOPIA = $(QPEDIR)/lib - -#QMAKE_LINK = $$QMAKE_CXX -#QMAKE_LINK_SHLIB = $$QMAKE_CXX -QMAKE_LFLAGS = -QMAKE_LFLAGS_RELEASE = -QMAKE_LFLAGS_DEBUG = -QMAKE_LFLAGS_SHLIB = -dynamiclib -QMAKE_LFLAGS_INCREMENTAL = -undefined suppress -flat_namespace -QMAKE_LFLAGS_PLUGIN = -bundle -QMAKE_LFLAGS_SONAME = -QMAKE_LFLAGS_THREAD = - -QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc -QMAKE_LIBS_X11 = -QMAKE_LIBS_X11SM = -QMAKE_LIBS_QT = -lqte -QMAKE_LIBS_QT_THREAD = -lqte-mt -QMAKE_LIBS_QT_OPENGL = -lqgl -QMAKE_LIBS_QTOPIA = -lqpe -lqtopia -QMAKE_LIBS_THREAD = -QMAKE_LIBS_OPENGL = - -QMAKE_MOC = $$[QT_INSTALL_BINS]/moc -QMAKE_UIC = $$[QT_INSTALL_BINS]/uic - QMAKE_AR = nacl-ar q QMAKE_OBJCOPY = nacl-objcopy QMAKE_STRIP = nacl-strip -QMAKE_RANLIB = -QMAKE_TAR = tar -cf -QMAKE_GZIP = gzip -9f +# work around linker crash when using PIC +QMAKE_CFLAGS_STATIC_LIB -= -fPIC +QMAKE_CFLAGS_SHLIB -= -fPIC +QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC +QMAKE_CXXFLAGS_SHLIB -= -fPIC + +#QMAKE_CFLAGS += -pipe -DXP_UNIX -DNACL_STANDALONE=1 +QMAKE_LIBS_DYNLOAD -= -ldl -QMAKE_COPY = cp -f -QMAKE_MOVE = mv -f -QMAKE_DEL_FILE = rm -f -QMAKE_DEL_DIR = rmdir -QMAKE_CHK_DIR_EXISTS = test -d -QMAKE_MKDIR = mkdir -p load(qt_config) diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h index 01b26d9..f893238 100644 --- a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h @@ -1,175 +1,66 @@ /**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the qmake spec of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the qmake spec of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ #ifndef QPLATFORMDEFS_H #define QPLATFORMDEFS_H -// Get Qt defines/settings #define _POSIX_TIMERS #include "qglobal.h" - -#define _POSIX_TIMERS -// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs - -// 1) need to reset default environment if _BSD_SOURCE is defined -// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 -// 3) it seems older glibc need this to include the X/Open stuff -#ifndef _GNU_SOURCE -# define _GNU_SOURCE -#endif - -#include <unistd.h> - - -// We are hot - unistd.h should have turned on the specific APIs we requested - -#include <sys/features.h> -#include <pthread.h> -#include <dirent.h> -#include <fcntl.h> -#include <grp.h> -#include <pwd.h> -#include <signal.h> -//#include <dlfcn.h> - -#include <sys/types.h> -//#include <sys/ioctl.h> -//#include <sys/ipc.h> - -#include <sys/time.h> -//#include <sys/shm.h> -//#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/wait.h> -//#include <netinet/in.h> -#ifndef QT_NO_IPV6IFNAME -#include <net/if.h> -#endif - // extra disabling. -#ifdef __native_client__ +#ifdef __native_client__ #define QT_NO_FSFILEENGINE -#define QT_NO_TRANSLATION #endif -#ifdef QT_LARGEFILE_SUPPORT -#define QT_STATBUF struct stat64 -#define QT_STATBUF4TSTAT struct stat64 -#define QT_STAT ::stat64 -#define QT_FSTAT ::fstat64 -#define QT_LSTAT ::lstat64 -#define QT_OPEN ::open64 -#define QT_TRUNCATE ::truncate64 -#define QT_FTRUNCATE ::ftruncate64 -#define QT_LSEEK ::lseek64 -#else -#define QT_STATBUF struct stat -#define QT_STATBUF4TSTAT struct stat -#define QT_STAT ::stat -#define QT_FSTAT ::fstat -#define QT_LSTAT ::lstat -#define QT_OPEN ::open -#define QT_TRUNCATE ::truncate -#define QT_FTRUNCATE ::ftruncate -#define QT_LSEEK ::lseek -#endif +#define QT_NO_SOCKET_H -#ifdef QT_LARGEFILE_SUPPORT -#define QT_FOPEN ::fopen64 -#define QT_FSEEK ::fseeko64 -#define QT_FTELL ::ftello64 -#define QT_FGETPOS ::fgetpos64 -#define QT_FSETPOS ::fsetpos64 -#define QT_FPOS_T fpos64_t -#define QT_OFF_T off64_t -#else -#define QT_FOPEN ::fopen -#define QT_FSEEK ::fseek -#define QT_FTELL ::ftell -#define QT_FGETPOS ::fgetpos -#define QT_FSETPOS ::fsetpos -#define QT_FPOS_T fpos_t -#define QT_OFF_T long -#endif +#define DIR void * +#define PATH_MAX 256 -#define QT_STAT_REG S_IFREG -#define QT_STAT_DIR S_IFDIR -#define QT_STAT_MASK S_IFMT -#define QT_STAT_LNK S_IFLNK -#define QT_SOCKET_CONNECT ::connect -#define QT_SOCKET_BIND ::bind -#define QT_FILENO fileno -#define QT_CLOSE ::close -#define QT_READ ::read -#define QT_WRITE ::write -#define QT_ACCESS ::access -#define QT_GETCWD ::getcwd -#define QT_CHDIR ::chdir -#define QT_MKDIR ::mkdir -#define QT_RMDIR ::rmdir -#define QT_OPEN_LARGEFILE O_LARGEFILE -#define QT_OPEN_RDONLY O_RDONLY -#define QT_OPEN_WRONLY O_WRONLY -#define QT_OPEN_RDWR O_RDWR -#define QT_OPEN_CREAT O_CREAT -#define QT_OPEN_TRUNC O_TRUNC -#define QT_OPEN_APPEND O_APPEND +#include "../../common/posix/qplatformdefs.h" -#define QT_SIGNAL_RETTYPE void -#define QT_SIGNAL_ARGS int -#define QT_SIGNAL_IGNORE SIG_IGN - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) -#define QT_SOCKLEN_T socklen_t -#else -#define QT_SOCKLEN_T int -#endif - -#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) -#define QT_SNPRINTF ::snprintf -#define QT_VSNPRINTF ::vsnprintf -#endif +#undef QT_LSTAT +#define QT_LSTAT QT_STAT #endif // QPLATFORMDEFS_H -- cgit v0.12 From 66f30105ef15579c13b5574cc11bbe49f1615f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:16:20 +0100 Subject: Fix CoreServices framework addition for qpa. Test against the coreservices QT_CONFIG on qpa, unconditionally add CoreFoundation for mac and darwin --- src/corelib/corelib.pro | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index f03550d..58d2c7b 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -20,14 +20,13 @@ include(statemachine/statemachine.pri) include(xml/xml.pri) !qpa:mac|darwin:LIBS_PRIVATE += -framework ApplicationServices -qpa:mac|darwin { - contains(QT_CONFIG, coreservices) { - LIBS_PRIVATE += -framework CoreServices - } else { - LIBS_PRIVATE += -framework CoreFoundation - } +qpa { + contains(QT_CONFIG, coreservices) { + LIBS_PRIVATE += -framework CoreServices + } +} else:mac|darwin { + LIBS_PRIVATE += -framework CoreFoundation } - mac:lib_bundle:DEFINES += QT_NO_DEBUG_PLUGIN_CHECK win32:DEFINES-=QT_NO_CAST_TO_ASCII -- cgit v0.12 From 2eddefa0d26e32e1f8e2dd93998ff14ff9c912d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:18:20 +0100 Subject: Compile. --- src/corelib/global/qnaclunimplemented.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h index 2d3d426..921667e 100644 --- a/src/corelib/global/qnaclunimplemented.h +++ b/src/corelib/global/qnaclunimplemented.h @@ -44,6 +44,8 @@ #ifdef Q_OS_NACL +#include <sys/types.h> + // pthread #include <pthread.h> #define PTHREAD_CANCEL_DISABLE 1 -- cgit v0.12 From 517290f73be74d1cf08fbd603870d3dacc379ff3 Mon Sep 17 00:00:00 2001 From: Michael Hasselmann <michaelh@openismus.com> Date: Thu, 10 Feb 2011 19:14:45 +0100 Subject: Introduce QGraphicsItem::ItemStopsFocusHandling flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When set for an item, QGraphicsScene will skip focus handling for this item and everything underneath it (including focus-out). Allows users to reimplement custom focus handling. Use case: touch devices that implement panning. Here, focus-in has to happen only if no panning was triggered. Analogous, no focus-out should happen when panning was detected. Fixes the alternative proposal ("black holes for focus changes") of QTBUG-16343: QGraphicsView doesn't support focus change on mouse release. The previous test was only testing one scenario, which didn't give a good idea whether the flag was actually working as intended. Task-number: QTBUG-17505 Reviewed-by: Yoann Lopes Reviewed-by: Jan-Arve Sther --- src/gui/graphicsview/qgraphicsitem.cpp | 8 +++ src/gui/graphicsview/qgraphicsitem.h | 3 +- src/gui/graphicsview/qgraphicsitem_p.h | 6 +-- src/gui/graphicsview/qgraphicsscene.cpp | 17 +++++-- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 69 ++++++++++++++++++++++---- 5 files changed, 84 insertions(+), 19 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index f463887..4e2d4e2 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -417,6 +417,11 @@ click focus to items underneath when being clicked on. This flag allows you create a non-focusable item that can be clicked on without changing the focus. \endomit + + \omitvalue ItemStopsFocusHandling \omit Same as + ItemStopsClickFocusPropagation, but also suppresses focus-out. This flag + allows you to completely take over focus handling. + This flag was introduced in Qt 4.7. */ /*! @@ -11549,6 +11554,9 @@ QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlag flag) case QGraphicsItem::ItemStopsClickFocusPropagation: str = "ItemStopsClickFocusPropagation"; break; + case QGraphicsItem::ItemStopsFocusHandling: + str = "ItemStopsFocusHandling"; + break; } debug << str; return debug; diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h index e59a7c9..67c9cd3 100644 --- a/src/gui/graphicsview/qgraphicsitem.h +++ b/src/gui/graphicsview/qgraphicsitem.h @@ -107,7 +107,8 @@ public: ItemIsPanel = 0x4000, ItemIsFocusScope = 0x8000, // internal ItemSendsScenePositionChanges = 0x10000, - ItemStopsClickFocusPropagation = 0x20000 + ItemStopsClickFocusPropagation = 0x20000, + ItemStopsFocusHandling = 0x40000 // NB! Don't forget to increase the d_ptr->flags bit field by 1 when adding a new flag. }; Q_DECLARE_FLAGS(GraphicsItemFlags, GraphicsItemFlag) diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index 5c82116..90ff43f 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -559,7 +559,7 @@ public: quint32 dirtyChildrenBoundingRect : 1; // Packed 32 bits - quint32 flags : 18; + quint32 flags : 19; quint32 paintedViewBoundingRectsNeedRepaint : 1; quint32 dirtySceneTransform : 1; quint32 geometryChanged : 1; @@ -573,9 +573,9 @@ public: quint32 sceneTransformTranslateOnly : 1; quint32 notifyBoundingRectChanged : 1; quint32 notifyInvalidated : 1; - quint32 mouseSetsFocus : 1; // New 32 bits + quint32 mouseSetsFocus : 1; quint32 explicitActivate : 1; quint32 wantsActive : 1; quint32 holesInSiblingIndex : 1; @@ -586,7 +586,7 @@ public: quint32 mayHaveChildWithGraphicsEffect : 1; quint32 isDeclarativeItem : 1; quint32 sendParentChangeNotification : 1; - quint32 padding : 22; + quint32 padding : 21; // Optional stacking order int globalStackingOrder; diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index f997fc2..2d85de6 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -1317,8 +1317,10 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou // Set focus on the topmost enabled item that can take focus. bool setFocus = false; + foreach (QGraphicsItem *item, cachedItemsUnderMouse) { - if (item->isBlockedByModalPanel()) { + if (item->isBlockedByModalPanel() + || (item->d_ptr->flags & QGraphicsItem::ItemStopsFocusHandling)) { // Make sure we don't clear focus. setFocus = true; break; @@ -1331,10 +1333,10 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou break; } } - if (item->d_ptr->flags & QGraphicsItem::ItemStopsClickFocusPropagation) - break; if (item->isPanel()) break; + if (item->d_ptr->flags & QGraphicsItem::ItemStopsClickFocusPropagation) + break; } // Check for scene modality. @@ -5925,6 +5927,7 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve // Set focus on the topmost enabled item that can take focus. bool setFocus = false; + foreach (QGraphicsItem *item, cachedItemsUnderMouse) { if (item->isEnabled() && ((item->flags() & QGraphicsItem::ItemIsFocusable) && item->d_ptr->mouseSetsFocus)) { if (!item->isWidget() || ((QGraphicsWidget *)item)->focusPolicy() & Qt::ClickFocus) { @@ -5938,6 +5941,11 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve break; if (item->d_ptr->flags & QGraphicsItem::ItemStopsClickFocusPropagation) break; + if (item->d_ptr->flags & QGraphicsItem::ItemStopsFocusHandling) { + // Make sure we don't clear focus. + setFocus = true; + break; + } } // If nobody could take focus, clear it. @@ -5970,7 +5978,8 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve } if (item && item->isPanel()) break; - if (item && (item->d_ptr->flags & QGraphicsItem::ItemStopsClickFocusPropagation)) + if (item && (item->d_ptr->flags + & (QGraphicsItem::ItemStopsClickFocusPropagation | QGraphicsItem::ItemStopsFocusHandling))) break; } diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index dacb61e..168f75e 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -447,7 +447,8 @@ private slots: void updateMicroFocus(); void textItem_shortcuts(); void scroll(); - void stopClickFocusPropagation(); + void focusHandling_data(); + void focusHandling(); void deviceCoordinateCache_simpleRotations(); // task specific tests below me @@ -10537,8 +10538,39 @@ void tst_QGraphicsItem::scroll() QCOMPARE(item2->lastExposedRect, expectedItem2Expose); } -void tst_QGraphicsItem::stopClickFocusPropagation() +Q_DECLARE_METATYPE(QGraphicsItem::GraphicsItemFlag); + +void tst_QGraphicsItem::focusHandling_data() { + QTest::addColumn<QGraphicsItem::GraphicsItemFlag>("focusFlag"); + QTest::addColumn<bool>("useStickyFocus"); + QTest::addColumn<int>("expectedFocusItem"); // 0: none, 1: focusableUnder, 2: itemWithFocus + + QTest::newRow("Focus goes through.") + << static_cast<QGraphicsItem::GraphicsItemFlag>(0x0) << false << 1; + + QTest::newRow("Focus goes through, even with sticky scene.") + << static_cast<QGraphicsItem::GraphicsItemFlag>(0x0) << true << 1; + + QTest::newRow("With ItemStopsClickFocusPropagation, we cannot focus the item beneath the flagged one (but can still focus-out).") + << QGraphicsItem::ItemStopsClickFocusPropagation << false << 0; + + QTest::newRow("With ItemStopsClickFocusPropagation, we cannot focus the item beneath the flagged one (and cannot focus-out if scene is sticky).") + << QGraphicsItem::ItemStopsClickFocusPropagation << true << 2; + + QTest::newRow("With ItemStopsFocusHandling, focus cannot be changed by presses.") + << QGraphicsItem::ItemStopsFocusHandling << false << 2; + + QTest::newRow("With ItemStopsFocusHandling, focus cannot be changed by presses (even if scene is sticky).") + << QGraphicsItem::ItemStopsFocusHandling << true << 2; +} + +void tst_QGraphicsItem::focusHandling() +{ + QFETCH(QGraphicsItem::GraphicsItemFlag, focusFlag); + QFETCH(bool, useStickyFocus); + QFETCH(int, expectedFocusItem); + class MyItem : public QGraphicsRectItem { public: @@ -10549,12 +10581,9 @@ void tst_QGraphicsItem::stopClickFocusPropagation() } }; - QGraphicsScene scene(-50, -50, 400, 400); - scene.setStickyFocus(true); - QGraphicsRectItem *noFocusOnTop = new MyItem; + noFocusOnTop->setFlag(QGraphicsItem::ItemIsFocusable, false); noFocusOnTop->setBrush(Qt::yellow); - noFocusOnTop->setFlag(QGraphicsItem::ItemStopsClickFocusPropagation); QGraphicsRectItem *focusableUnder = new MyItem; focusableUnder->setBrush(Qt::blue); @@ -10566,9 +10595,13 @@ void tst_QGraphicsItem::stopClickFocusPropagation() itemWithFocus->setFlag(QGraphicsItem::ItemIsFocusable); itemWithFocus->setPos(250, 10); + QGraphicsScene scene(-50, -50, 400, 400); scene.addItem(noFocusOnTop); scene.addItem(focusableUnder); scene.addItem(itemWithFocus); + scene.setStickyFocus(useStickyFocus); + + noFocusOnTop->setFlag(focusFlag); focusableUnder->stackBefore(noFocusOnTop); itemWithFocus->setFocus(); @@ -10580,14 +10613,28 @@ void tst_QGraphicsItem::stopClickFocusPropagation() QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); QVERIFY(itemWithFocus->hasFocus()); - QPointF mousePressPoint = noFocusOnTop->mapToScene(QPointF()); - mousePressPoint.rx() += 60; - mousePressPoint.ry() += 60; + const QPointF mousePressPoint = noFocusOnTop->mapToScene(noFocusOnTop->boundingRect().center()); const QList<QGraphicsItem *> itemsAtMousePressPosition = scene.items(mousePressPoint); - QVERIFY(itemsAtMousePressPosition.contains(focusableUnder)); + QVERIFY(itemsAtMousePressPosition.contains(noFocusOnTop)); sendMousePress(&scene, mousePressPoint); - QVERIFY(itemWithFocus->hasFocus()); + + switch (expectedFocusItem) { + case 0: + QCOMPARE(scene.focusItem(), static_cast<QGraphicsRectItem *>(0)); + break; + case 1: + QCOMPARE(scene.focusItem(), focusableUnder); + break; + case 2: + QCOMPARE(scene.focusItem(), itemWithFocus); + break; + } + + // Sanity check - manually setting the focus must work regardless of our + // focus handling flags: + focusableUnder->setFocus(); + QCOMPARE(scene.focusItem(), focusableUnder); } void tst_QGraphicsItem::deviceCoordinateCache_simpleRotations() -- cgit v0.12 From 451d1c58913404e27b63395996a2e4b9aab65b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:28:36 +0100 Subject: Lighthouse: Support Q_NO_CLIPBOARD. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/gui/kernel/qplatformclipboard_qpa.cpp | 4 ++++ src/gui/kernel/qplatformclipboard_qpa.h | 3 +++ src/gui/kernel/qplatformintegration_qpa.cpp | 5 +++++ src/gui/kernel/qplatformintegration_qpa.h | 2 ++ 4 files changed, 14 insertions(+) diff --git a/src/gui/kernel/qplatformclipboard_qpa.cpp b/src/gui/kernel/qplatformclipboard_qpa.cpp index fff4e19..8321e94 100644 --- a/src/gui/kernel/qplatformclipboard_qpa.cpp +++ b/src/gui/kernel/qplatformclipboard_qpa.cpp @@ -40,6 +40,8 @@ ****************************************************************************/ #include "qplatformclipboard_qpa.h" +#ifndef QT_NO_CLIPBOARD + QT_BEGIN_NAMESPACE class QClipboardData @@ -99,3 +101,5 @@ bool QPlatformClipboard::supportsMode(QClipboard::Mode mode) const } QT_END_NAMESPACE + +#endif //QT_NO_CLIPBOARD diff --git a/src/gui/kernel/qplatformclipboard_qpa.h b/src/gui/kernel/qplatformclipboard_qpa.h index 3f7bfbb..51371cb 100644 --- a/src/gui/kernel/qplatformclipboard_qpa.h +++ b/src/gui/kernel/qplatformclipboard_qpa.h @@ -44,6 +44,8 @@ #include <qplatformdefs.h> +#ifndef QT_NO_CLIPBOARD + #include <QtGui/QClipboard> QT_BEGIN_HEADER @@ -66,5 +68,6 @@ QT_END_NAMESPACE QT_END_HEADER +#endif // QT_NO_CLIPBOARD #endif //QPLATFORMCLIPBOARD_QPA_H diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index f43e141..06ac40f 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -102,6 +102,9 @@ QPlatformFontDatabase *QPlatformIntegration::fontDatabase() const \sa QPlatformClipboard */ + +#ifndef QT_NO_CLIPBOARD + QPlatformClipboard *QPlatformIntegration::clipboard() const { static QPlatformClipboard *clipboard = 0; @@ -111,6 +114,8 @@ QPlatformClipboard *QPlatformIntegration::clipboard() const return clipboard; } +#endif + QPlatformNativeInterface * QPlatformIntegration::nativeInterface() const { return 0; diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 1d69af4..357e4de 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -86,7 +86,9 @@ public: //Deeper window system integrations virtual QPlatformFontDatabase *fontDatabase() const; +#ifndef QT_NO_CLIPBOARD virtual QPlatformClipboard *clipboard() const; +#endif // Experimental in mainthread eventloop integration // This should only be used if it is only possible to do window system event processing in -- cgit v0.12 From a2ba87d1edfe1008f96a99f24c2c52c521e404e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:29:22 +0100 Subject: qpnghandler: Compile with QT_NO_IMAGE_TEXT. --- src/gui/image/qpnghandler.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index a9aad51..7e0355a 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -492,8 +492,10 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) outImage->setDotsPerMeterX(png_get_x_pixels_per_meter(png_ptr,info_ptr)); outImage->setDotsPerMeterY(png_get_y_pixels_per_meter(png_ptr,info_ptr)); +#ifndef QT_NO_IMAGE_TEXT for (int i = 0; i < readTexts.size()-1; i+=2) outImage->setText(readTexts.at(i), readTexts.at(i+1)); +#endif state = ReadingEnd; png_read_end(png_ptr, end_info); -- cgit v0.12 From 294ce2967d3e205c920965464642847ce014ab67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:43:04 +0100 Subject: posix platformdefs: Add QT_NO_SOCKET_H. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents including <sys/socket.h> Reviewed-by: Jørgen Lind --- mkspecs/common/posix/qplatformdefs.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mkspecs/common/posix/qplatformdefs.h b/mkspecs/common/posix/qplatformdefs.h index 103ce89..60bc041 100644 --- a/mkspecs/common/posix/qplatformdefs.h +++ b/mkspecs/common/posix/qplatformdefs.h @@ -45,7 +45,9 @@ #include <signal.h> #include <sys/types.h> -#include <sys/socket.h> +#ifndef QT_NO_SOCKET_H +# include <sys/socket.h> +#endif #include <sys/stat.h> #if defined(QT_USE_XOPEN_LFS_EXTENSIONS) && defined(QT_LARGEFILE_SUPPORT) -- cgit v0.12 From fa5731a3591034723df192d869cd9ff7c1b52428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:44:25 +0100 Subject: NaCl: disable libtiff. (libtiff doesn't compile) --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index 1922728..070447b 100755 --- a/configure +++ b/configure @@ -983,6 +983,7 @@ if [ "$CFG_EMBEDDED" = "nacl" ]; then CFG_SCRIPT=no CFG_SQLITE=no CFG_SQL_sqlite=no + CFG_LIBTIFF=no CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS tests" QT_CONFIG="$QT_CONFIG nacl" fi -- cgit v0.12 From 3ed39aceda261d7c6b247d39cafff5931b168e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:45:35 +0100 Subject: NaCl: Dont force release builds. --- configure | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure b/configure index 070447b..ffc93d8 100755 --- a/configure +++ b/configure @@ -960,8 +960,6 @@ if [ "$CFG_EMBEDDED" = "nacl" ]; then PLATFORM_QPA=yes echo "-fast" OPT_FAST=yes - echo "-release" - CFG_DEBUG=no echo "-qconfig minimal-system-dependencies" CFG_QCONFIG=minimal-system-dependencies -- cgit v0.12 From 5ba2675a33922cdd4ccef7de968e77b05bc1d556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 09:53:43 +0100 Subject: Compile. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Respect the system-zlib QT_CONFIG setting. Reviewed-by: Jørgen Lind --- src/plugins/platforms/fontdatabases/basicunix/basicunix.pri | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri index 21aedba..da4698d 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri +++ b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri @@ -73,7 +73,11 @@ contains(QT_CONFIG, freetype) { $$QT_SOURCE_TREE/src/3rdparty/freetype/src \ $$QT_SOURCE_TREE/src/3rdparty/freetype/include - DEFINES += FT2_BUILD_LIBRARY FT_CONFIG_OPTION_SYSTEM_ZLIB + DEFINES += FT2_BUILD_LIBRARY + contains(QT_CONFIG, system-zlib) { + DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB + } + } else:contains(QT_CONFIG, system-freetype) { # pull in the proper freetype2 include directory include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri) -- cgit v0.12 From 468142db15fe99c70505f507f6c2941706172853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 11:03:19 +0100 Subject: Add QT_NO_DYNAMIC_LIBRARY. Set it for nacl, replace the Q_OS defines vxworks already has in place. Motivation: Support static plugins on platforms that does not support dynamic plugins. Static plugin support is implemented in QPluginLoader, which has a QLibraryPrivate d pointer. The easiest way to untangle this seems to be to compile in QLibrary and then disable the ports of it that uses dlopen. Reviewed-By: Harald Fernengel --- src/corelib/plugin/qlibrary_unix.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp index 466350e..e32729a 100644 --- a/src/corelib/plugin/qlibrary_unix.cpp +++ b/src/corelib/plugin/qlibrary_unix.cpp @@ -56,9 +56,13 @@ #include <string.h> #endif +#if defined(Q_OS_VXWORKS) || defined (Q_OS_NACL) +#define QT_NO_DYNAMIC_LIBRARY +#endif + QT_BEGIN_NAMESPACE -#if !defined(QT_HPUX_LD) && !defined(Q_OS_VXWORKS) +#if !defined(QT_HPUX_LD) && !defined(QT_NO_DYNAMIC_LIBRARY) QT_BEGIN_INCLUDE_NAMESPACE #include <dlfcn.h> QT_END_INCLUDE_NAMESPACE @@ -66,8 +70,8 @@ QT_END_INCLUDE_NAMESPACE static QString qdlerror() { -#if defined(Q_OS_VXWORKS) - const char *err = "VxWorks does not support dynamic libraries."; +#if defined(QT_NO_DYNAMIC_LIBRARY) + const char *err = "This platform does not support dynamic libraries."; #elif !defined(QT_HPUX_LD) const char *err = dlerror(); #else @@ -79,7 +83,7 @@ static QString qdlerror() bool QLibraryPrivate::load_sys() { QString attempt; -#if !defined(Q_OS_VXWORKS) +#if !defined(QT_NO_DYNAMIC_LIBRARY) QFileInfo fi(fileName); #if defined(Q_OS_SYMBIAN) @@ -235,7 +239,7 @@ bool QLibraryPrivate::load_sys() } } #endif -#endif // Q_OS_VXWORKS +#endif // QT_NO_DYNAMIC_LIBRARY if (!pHnd) { errorString = QLibrary::tr("Cannot load library %1: %2").arg(fileName).arg(qdlerror()); } @@ -248,7 +252,7 @@ bool QLibraryPrivate::load_sys() bool QLibraryPrivate::unload_sys() { -#if !defined(Q_OS_VXWORKS) +#if !defined(QT_NO_DYNAMIC_LIBRARY) # if defined(QT_HPUX_LD) if (shl_unload((shl_t)pHnd)) { # else @@ -282,7 +286,7 @@ void* QLibraryPrivate::resolve_sys(const char* symbol) void* address = 0; if (shl_findsym((shl_t*)&pHnd, symbol, TYPE_UNDEFINED, &address) < 0) address = 0; -#elif defined(Q_OS_VXWORKS) +#elif defined (QT_NO_DYNAMIC_LIBRARY) void *address = 0; #else void* address = dlsym(pHnd, symbol); -- cgit v0.12 From f0fc5b8a9ab3f4bca0022771e576722d63a78ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@nokia.com> Date: Fri, 25 Feb 2011 11:22:00 +0100 Subject: Add QT_NO_FILESYSTEMITERATOR. This makes it possible to use the file-related classes on platforms that does not have a native QFileSystemIterator implementation. One use case is that we want to use the Qt resource system even if the platform file system support is limited. Reviewed-by: joao --- src/corelib/global/qfeatures.h | 3 +++ src/corelib/global/qfeatures.txt | 8 ++++++++ src/corelib/io/qdiriterator.cpp | 10 ++++++++++ src/corelib/io/qfilesystemiterator_p.h | 5 +++++ src/corelib/io/qfilesystemiterator_unix.cpp | 4 ++++ 5 files changed, 30 insertions(+) diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index d1a73a6..604d08a 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -79,6 +79,9 @@ // Effects //#define QT_NO_EFFECTS +// QFileSystemIterator +//#define QT_NO_FILESYSTEMITERATOR + // QFileSystemWatcher //#define QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index 4d938a9..6b861d4 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -242,6 +242,14 @@ Requires: Name: QFileSystemWatcher SeeAlso: ??? +Feature: FILESYSTEMITERATOR +Description: Provides fast file-system iteration. +for modications. +Section: File I/O +Requires: +Name: QFileSystemIterator +SeeAlso: ??? + # Widgets Feature: TREEWIDGET diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index d293791..c7e56bd 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -142,7 +142,9 @@ public: #endif QDirIteratorPrivateIteratorStack<QAbstractFileEngineIterator> fileEngineIterators; +#ifndef QT_NO_FILESYSTEMITERATOR QDirIteratorPrivateIteratorStack<QFileSystemIterator> nativeIterators; +#endif QFileInfo currentFileInfo; QFileInfo nextFileInfo; @@ -204,9 +206,11 @@ void QDirIteratorPrivate::pushDirectory(const QFileInfo &fileInfo) // No iterator; no entry list. } } else { +#ifndef QT_NO_FILESYSTEMITERATOR QFileSystemIterator *it = new QFileSystemIterator(fileInfo.d_ptr->fileEntry, filters, nameFilters, iteratorFlags); nativeIterators << it; +#endif } } @@ -244,6 +248,7 @@ void QDirIteratorPrivate::advance() delete it; } } else { +#ifndef QT_NO_FILESYSTEMITERATOR QFileSystemEntry nextEntry; QFileSystemMetaData nextMetaData; @@ -260,6 +265,7 @@ void QDirIteratorPrivate::advance() nativeIterators.pop(); delete it; } +#endif } currentFileInfo = nextFileInfo; @@ -500,7 +506,11 @@ bool QDirIterator::hasNext() const if (d->engine) return !d->fileEngineIterators.isEmpty(); else +#ifndef QT_NO_FILESYSTEMITERATOR return !d->nativeIterators.isEmpty(); +#else + return false; +#endif } /*! diff --git a/src/corelib/io/qfilesystemiterator_p.h b/src/corelib/io/qfilesystemiterator_p.h index 66f4b1e..3477242 100644 --- a/src/corelib/io/qfilesystemiterator_p.h +++ b/src/corelib/io/qfilesystemiterator_p.h @@ -54,6 +54,9 @@ // #include <QtCore/qglobal.h> + +#ifndef QT_NO_FILESYSTEMITERATOR + #include <QtCore/qdir.h> #include <QtCore/qdiriterator.h> #include <QtCore/qstringlist.h> @@ -112,4 +115,6 @@ private: QT_END_NAMESPACE +#endif // QT_NO_FILESYSTEMITERATOR + #endif // include guard diff --git a/src/corelib/io/qfilesystemiterator_unix.cpp b/src/corelib/io/qfilesystemiterator_unix.cpp index 00ccd41..7c5fc29 100644 --- a/src/corelib/io/qfilesystemiterator_unix.cpp +++ b/src/corelib/io/qfilesystemiterator_unix.cpp @@ -42,6 +42,8 @@ #include "qplatformdefs.h" #include "qfilesystemiterator_p.h" +#ifndef QT_NO_FILESYSTEMITERATOR + #include <stdlib.h> #include <errno.h> @@ -111,3 +113,5 @@ bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaDa } QT_END_NAMESPACE + +#endif // QT_NO_FILESYSTEMITERATOR -- cgit v0.12 From ed218edcf3d40e05b7cc9e1b895b7dad662e0511 Mon Sep 17 00:00:00 2001 From: Jiang Jiang <jiang.jiang@nokia.com> Date: Wed, 16 Mar 2011 09:34:01 +0100 Subject: Only enable RightToLeft forcing in OS X 10.6 and skip the test Reviewed-by: Eskil --- src/gui/text/qfontengine_coretext.mm | 2 ++ tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 52d2455..4d9192e 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -128,6 +128,7 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay QCFType<CFAttributedStringRef> attributedString = CFAttributedStringCreate(0, cfstring, attributeDict); QCFType<CTTypesetterRef> typeSetter; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 if (flags & QTextEngine::RightToLeft) { const void *optionKeys[] = { kCTTypesetterOptionForcedEmbeddingLevel }; const short rtlForcedEmbeddingLevelValue = 1; @@ -136,6 +137,7 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); typeSetter = CTTypesetterCreateWithAttributedStringAndOptions(attributedString, options); } else +#endif typeSetter = CTTypesetterCreateWithAttributedString(attributedString); CFRange range = {0, 0}; diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 54c07a2..1952796 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -1194,6 +1194,9 @@ void tst_QTextScriptEngine::mirroredChars_data() void tst_QTextScriptEngine::mirroredChars() { +#if defined(Q_WS_MAC) + QSKIP("Not supported on Mac", SkipAll); +#endif QFETCH(int, hintingPreference); QFont font; -- cgit v0.12 From 8ec40d6de585315e0a4bd4f533a9113e836c8436 Mon Sep 17 00:00:00 2001 From: Morten Sorvig <msorvig@trolltech.com> Date: Wed, 16 Mar 2011 12:13:20 +0100 Subject: Rename qconfig-minimal-system-depenencies.h Rename to qconfig.nacl.h. This reflects that the config now enables all dependencies NaCl can support, not necessarily the minimal set. --- configure | 4 +- .../global/qconfig-minimal-system-dependencies.h | 371 --------------------- src/corelib/global/qconfig-nacl.h | 371 +++++++++++++++++++++ 3 files changed, 373 insertions(+), 373 deletions(-) delete mode 100644 src/corelib/global/qconfig-minimal-system-dependencies.h create mode 100644 src/corelib/global/qconfig-nacl.h diff --git a/configure b/configure index ffc93d8..2ea3689 100755 --- a/configure +++ b/configure @@ -960,8 +960,8 @@ if [ "$CFG_EMBEDDED" = "nacl" ]; then PLATFORM_QPA=yes echo "-fast" OPT_FAST=yes - echo "-qconfig minimal-system-dependencies" - CFG_QCONFIG=minimal-system-dependencies + echo "-qconfig nacl" + CFG_QCONFIG=nacl if [ `uname` = "Linux" ]; then I_FLAGS="$I_FLAGS -I${CFG_NACL_PATH}/toolchain/linux_x86/sdk/nacl-sdk/include" diff --git a/src/corelib/global/qconfig-minimal-system-dependencies.h b/src/corelib/global/qconfig-minimal-system-dependencies.h deleted file mode 100644 index 63319b9..0000000 --- a/src/corelib/global/qconfig-minimal-system-dependencies.h +++ /dev/null @@ -1,371 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#define QT_FONTS_ARE_RESOURCES - -/* Data structures */ -#ifndef QT_NO_QUUID_STRING -# define QT_NO_QUUID_STRING -#endif -#ifndef QT_NO_STL -# define QT_NO_STL -#endif -#ifndef QT_NO_TEXTDATE -# define QT_NO_TEXTDATE -#endif -#ifndef QT_NO_DATESTRING -# define QT_NO_DATESTRING -#endif - -/* Dialogs */ -#ifndef QT_NO_FILEDIALOG -# define QT_NO_FILEDIALOG -#endif -#ifndef QT_NO_PRINTDIALOG -# define QT_NO_PRINTDIALOG -#endif -#ifndef QT_NO_PRINTPREVIEWDIALOG -# define QT_NO_PRINTPREVIEWDIALOG -#endif - - -/* File I/O */ -#ifndef QT_NO_DOM -# define QT_NO_DOM -#endif -#ifndef QT_NO_FILESYSTEMWATCHER -# define QT_NO_FILESYSTEMWATCHER -#endif -#ifndef QT_NO_FSFILEENGINE -# define QT_NO_FSFILEENGINE -#endif -#ifndef QT_NO_FILESYSTEMMODEL -# define QT_NO_FILESYSTEMMODEL -#endif -#ifndef QT_NO_FILESYSTEMMODEL -# define QT_NO_FILESYSTEMMODEL -#endif -#ifndef QT_NO_PROCESS -# define QT_NO_PROCESS -#endif -#ifndef QT_NO_TEMPORARYFILE -# define QT_NO_TEMPORARYFILE -#endif -#ifndef QT_NO_SETTINGS -# define QT_NO_SETTINGS -#endif -#ifndef QT_NO_LIBRARY -# define QT_NO_LIBRARY -#endif - -/* Fonts */ -#ifndef QT_NO_QWS_QPF2 -# define QT_NO_QWS_QPF2 -#endif - -/* Images */ -#ifndef QT_NO_IMAGEFORMATPLUGIN -# define QT_NO_IMAGEFORMATPLUGIN -#endif -#ifndef QT_NO_IMAGE_HEURISTIC_MASK -# define QT_NO_IMAGE_HEURISTIC_MASK -#endif -#ifndef QT_NO_IMAGE_TEXT -# define QT_NO_IMAGE_TEXT -#endif -#ifndef QT_NO_MOVIE -# define QT_NO_MOVIE -#endif - -/* Internationalization */ -#ifndef QT_NO_BIG_CODECS -# define QT_NO_BIG_CODECS -#endif -#ifndef QT_NO_QWS_INPUTMETHODS -# define QT_NO_QWS_INPUTMETHODS -#endif -#ifndef QT_NO_TEXTCODEC -# define QT_NO_TEXTCODEC -#endif -#ifndef QT_NO_CODECS -# define QT_NO_CODECS -#endif -#ifndef QT_NO_TEXTCODECPLUGIN -# define QT_NO_TEXTCODECPLUGIN -#endif -#ifndef QT_NO_TRANSLATION -# define QT_NO_TRANSLATION -#endif -#ifndef QT_NO_TRANSLATION_UTF8 -# define QT_NO_TRANSLATION_UTF8 -#endif - -/* ItemViews */ - -#ifndef QT_NO_DIRMODEL -# define QT_NO_DIRMODEL -#endif - -/* Kernel */ -#ifndef QT_NO_CLIPBOARD -# define QT_NO_CLIPBOARD -#endif -#ifndef QT_NO_CSSPARSER -# define QT_NO_CSSPARSER -#endif -#ifndef QT_NO_CURSOR -# define QT_NO_CURSOR -#endif -#ifndef QT_NO_DRAGANDDROP -# define QT_NO_DRAGANDDROP -#endif -#ifndef QT_NO_EFFECTS -# define QT_NO_EFFECTS -#endif -#ifndef QT_NO_SESSIONMANAGER -# define QT_NO_SESSIONMANAGER -#endif -#ifndef QT_NO_SHAREDMEMORY -# define QT_NO_SHAREDMEMORY -#endif -#ifndef QT_NO_SOUND -# define QT_NO_SOUND -#endif -#ifndef QT_NO_SYSTEMLOCALE -# define QT_NO_SYSTEMSEMAPHORE -#endif -#ifndef QT_NO_SYSTEMSEMAPHORE -# define QT_NO_SYSTEMSEMAPHORE -#endif -#ifndef QT_NO_TABLETEVENT -# define QT_NO_TABLETEVENT -#endif -#ifndef QT_NO_CRASHHANDLER -# define QT_NO_CRASHHANDLER -#endif -#ifndef QT_NO_CONCURRENT -# define QT_NO_CONCURRENT -#endif -#ifndef QT_NO_XMLSTREAM -# define QT_NO_XMLSTREAM -#endif -#ifndef QT_NO_XMLSTREAMREADER -# define QT_NO_XMLSTREAMREADER -#endif -#ifndef QT_NO_XMLSTREAMWRITER -# define QT_NO_XMLSTREAMWRITER -#endif - -/* Networking */ -#ifndef QT_NO_COP -# define QT_NO_COP -#endif -#ifndef QT_NO_HOSTINFO -# define QT_NO_HOSTINFO -#endif -#ifndef QT_NO_HTTP -# define QT_NO_HTTP -#endif -#ifndef QT_NO_NETWORKPROXY -# define QT_NO_NETWORKPROXY -#endif -#ifndef QT_NO_SOCKS5 -# define QT_NO_SOCKS5 -#endif -#ifndef QT_NO_UDPSOCKET -# define QT_NO_UDPSOCKET -#endif -#ifndef QT_NO_URLINFO -# define QT_NO_URLINFO -#endif -#ifndef QT_NO_FTP -# define QT_NO_FTP -#endif - -/* Painting */ -#ifndef QT_NO_COLORNAMES -# define QT_NO_COLORNAMES -#endif -#ifndef QT_NO_DIRECTPAINTER -# define QT_NO_DIRECTPAINTER -#endif -#ifndef QT_NO_PAINTONSCREEN -# define QT_NO_PAINTONSCREEN -#endif -#ifndef QT_NO_PAINT_DEBUG -# define QT_NO_PAINT_DEBUG -#endif -#ifndef QT_NO_PICTURE -# define QT_NO_PICTURE -#endif -#ifndef QT_NO_PRINTER -# define QT_NO_PRINTER -#endif -#ifndef QT_NO_CUPS -# define QT_NO_CUPS -#endif - -/* Qt for Embedded Linux */ -#ifndef QT_NO_QWSEMBEDWIDGET -# define QT_NO_QWSEMBEDWIDGET -#endif -#ifndef QT_NO_QWS_ALPHA_CURSOR -# define QT_NO_QWS_ALPHA_CURSOR -#endif -#ifndef QT_NO_QWS_CURSOR -# define QT_NO_QWS_CURSOR -#endif -#ifndef QT_NO_QWS_DECORATION_DEFAULT -# define QT_NO_QWS_DECORATION_DEFAULT -#endif -#ifndef QT_NO_QWS_DECORATION_STYLED -# define QT_NO_QWS_DECORATION_STYLED -#endif -#ifndef QT_NO_QWS_DECORATION_WINDOWS -# define QT_NO_QWS_DECORATION_WINDOWS -#endif -#ifndef QT_NO_QWS_MANAGER -# define QT_NO_QWS_MANAGER -#endif -#ifndef QT_NO_QWS_KEYBOARD -# define QT_NO_QWS_KEYBOARD -#endif -#ifndef QT_NO_QWS_MOUSE -# define QT_NO_QWS_MOUSE -#endif -#ifndef QT_NO_QWS_MOUSE_AUTO -# define QT_NO_QWS_MOUSE_AUTO -#endif -#ifndef QT_NO_QWS_MOUSE_MANUAL -# define QT_NO_QWS_MOUSE_MANUAL -#endif -#ifndef QT_NO_QWS_MULTIPROCESS -# define QT_NO_QWS_MULTIPROCESS -#endif -#ifndef QT_NO_QWS_SOUNDSERVER -# define QT_NO_QWS_SOUNDSERVER -#endif -#ifndef QT_NO_SXE -# define QT_NO_SXE -#endif -#ifndef QT_NO_QWS_PROPERTIES -# define QT_NO_QWS_PROPERTIES -#endif -#ifndef QT_NO_QWS_PROXYSCREEN -# define QT_NO_QWS_PROXYSCREEN -#endif -#ifndef QT_NO_QWS_DYNAMICSCREENTRANSFORMATION -# define QT_NO_QWS_DYNAMICSCREENTRANSFORMATION -#endif -#ifndef QT_NO_QWS_LINUXFB -# define QT_NO_QWS_LINUXFB -#endif -#ifndef QT_NO_QWS_MOUSE_PC -# define QT_NO_QWS_MOUSE_PC -#endif -#ifndef QT_NO_QWS_MOUSE_LINUXTP -# define QT_NO_QWS_MOUSE_LINUXTP -#endif -#ifndef QT_NO_QWS_QPF -# define QT_NO_QWS_QPF -#endif - -/* SVG */ -#ifndef QT_NO_SVG -# define QT_NO_SVG -#endif -#ifndef QT_NO_GRAPHICSSVGITEM -# define QT_NO_GRAPHICSSVGITEM -#endif -#ifndef QT_NO_SVGGENERATOR -# define QT_NO_SVGGENERATOR -#endif -#ifndef QT_NO_SVGRENDERER -# define QT_NO_SVGRENDERER -#endif -#ifndef QT_NO_SVGWIDGET -# define QT_NO_SVGWIDGET -#endif - -/* Styles */ -#ifndef QT_NO_STYLE_MOTIF -# define QT_NO_STYLE_MOTIF -#endif -#ifndef QT_NO_STYLE_CDE -# define QT_NO_STYLE_CDE -#endif -#ifndef QT_NO_STYLE_STYLESHEET -# define QT_NO_STYLE_STYLESHEET -#endif -#ifndef QT_NO_STYLE_WINDOWSCE -# define QT_NO_STYLE_WINDOWSCE -#endif -#ifndef QT_NO_STYLE_WINDOWSMOBILE -# define QT_NO_STYLE_WINDOWSMOBILE -#endif -#ifndef QT_NO_STYLE_WINDOWSVISTA -# define QT_NO_STYLE_WINDOWSVISTA -#endif -#ifndef QT_NO_STYLE_WINDOWSXP -# define QT_NO_STYLE_WINDOWSXP -#endif - -/* Utilities */ -#ifndef QT_NO_ACCESSIBILITY -# define QT_NO_ACCESSIBILITY -#endif -#ifndef QT_NO_COMPLETER -# define QT_NO_COMPLETER -#endif -#ifndef QT_NO_DESKTOPSERVICES -# define QT_NO_DESKTOPSERVICES -#endif -#ifndef QT_NO_SCRIPT -# define QT_NO_SCRIPT -#endif -#ifndef QT_NO_SYSTEMTRAYICON -# define QT_NO_SYSTEMTRAYICON -#endif - -/* Windows */ -#ifndef QT_NO_WIN_ACTIVEQT -# define QT_NO_WIN_ACTIVEQT -#endif diff --git a/src/corelib/global/qconfig-nacl.h b/src/corelib/global/qconfig-nacl.h new file mode 100644 index 0000000..63319b9 --- /dev/null +++ b/src/corelib/global/qconfig-nacl.h @@ -0,0 +1,371 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#define QT_FONTS_ARE_RESOURCES + +/* Data structures */ +#ifndef QT_NO_QUUID_STRING +# define QT_NO_QUUID_STRING +#endif +#ifndef QT_NO_STL +# define QT_NO_STL +#endif +#ifndef QT_NO_TEXTDATE +# define QT_NO_TEXTDATE +#endif +#ifndef QT_NO_DATESTRING +# define QT_NO_DATESTRING +#endif + +/* Dialogs */ +#ifndef QT_NO_FILEDIALOG +# define QT_NO_FILEDIALOG +#endif +#ifndef QT_NO_PRINTDIALOG +# define QT_NO_PRINTDIALOG +#endif +#ifndef QT_NO_PRINTPREVIEWDIALOG +# define QT_NO_PRINTPREVIEWDIALOG +#endif + + +/* File I/O */ +#ifndef QT_NO_DOM +# define QT_NO_DOM +#endif +#ifndef QT_NO_FILESYSTEMWATCHER +# define QT_NO_FILESYSTEMWATCHER +#endif +#ifndef QT_NO_FSFILEENGINE +# define QT_NO_FSFILEENGINE +#endif +#ifndef QT_NO_FILESYSTEMMODEL +# define QT_NO_FILESYSTEMMODEL +#endif +#ifndef QT_NO_FILESYSTEMMODEL +# define QT_NO_FILESYSTEMMODEL +#endif +#ifndef QT_NO_PROCESS +# define QT_NO_PROCESS +#endif +#ifndef QT_NO_TEMPORARYFILE +# define QT_NO_TEMPORARYFILE +#endif +#ifndef QT_NO_SETTINGS +# define QT_NO_SETTINGS +#endif +#ifndef QT_NO_LIBRARY +# define QT_NO_LIBRARY +#endif + +/* Fonts */ +#ifndef QT_NO_QWS_QPF2 +# define QT_NO_QWS_QPF2 +#endif + +/* Images */ +#ifndef QT_NO_IMAGEFORMATPLUGIN +# define QT_NO_IMAGEFORMATPLUGIN +#endif +#ifndef QT_NO_IMAGE_HEURISTIC_MASK +# define QT_NO_IMAGE_HEURISTIC_MASK +#endif +#ifndef QT_NO_IMAGE_TEXT +# define QT_NO_IMAGE_TEXT +#endif +#ifndef QT_NO_MOVIE +# define QT_NO_MOVIE +#endif + +/* Internationalization */ +#ifndef QT_NO_BIG_CODECS +# define QT_NO_BIG_CODECS +#endif +#ifndef QT_NO_QWS_INPUTMETHODS +# define QT_NO_QWS_INPUTMETHODS +#endif +#ifndef QT_NO_TEXTCODEC +# define QT_NO_TEXTCODEC +#endif +#ifndef QT_NO_CODECS +# define QT_NO_CODECS +#endif +#ifndef QT_NO_TEXTCODECPLUGIN +# define QT_NO_TEXTCODECPLUGIN +#endif +#ifndef QT_NO_TRANSLATION +# define QT_NO_TRANSLATION +#endif +#ifndef QT_NO_TRANSLATION_UTF8 +# define QT_NO_TRANSLATION_UTF8 +#endif + +/* ItemViews */ + +#ifndef QT_NO_DIRMODEL +# define QT_NO_DIRMODEL +#endif + +/* Kernel */ +#ifndef QT_NO_CLIPBOARD +# define QT_NO_CLIPBOARD +#endif +#ifndef QT_NO_CSSPARSER +# define QT_NO_CSSPARSER +#endif +#ifndef QT_NO_CURSOR +# define QT_NO_CURSOR +#endif +#ifndef QT_NO_DRAGANDDROP +# define QT_NO_DRAGANDDROP +#endif +#ifndef QT_NO_EFFECTS +# define QT_NO_EFFECTS +#endif +#ifndef QT_NO_SESSIONMANAGER +# define QT_NO_SESSIONMANAGER +#endif +#ifndef QT_NO_SHAREDMEMORY +# define QT_NO_SHAREDMEMORY +#endif +#ifndef QT_NO_SOUND +# define QT_NO_SOUND +#endif +#ifndef QT_NO_SYSTEMLOCALE +# define QT_NO_SYSTEMSEMAPHORE +#endif +#ifndef QT_NO_SYSTEMSEMAPHORE +# define QT_NO_SYSTEMSEMAPHORE +#endif +#ifndef QT_NO_TABLETEVENT +# define QT_NO_TABLETEVENT +#endif +#ifndef QT_NO_CRASHHANDLER +# define QT_NO_CRASHHANDLER +#endif +#ifndef QT_NO_CONCURRENT +# define QT_NO_CONCURRENT +#endif +#ifndef QT_NO_XMLSTREAM +# define QT_NO_XMLSTREAM +#endif +#ifndef QT_NO_XMLSTREAMREADER +# define QT_NO_XMLSTREAMREADER +#endif +#ifndef QT_NO_XMLSTREAMWRITER +# define QT_NO_XMLSTREAMWRITER +#endif + +/* Networking */ +#ifndef QT_NO_COP +# define QT_NO_COP +#endif +#ifndef QT_NO_HOSTINFO +# define QT_NO_HOSTINFO +#endif +#ifndef QT_NO_HTTP +# define QT_NO_HTTP +#endif +#ifndef QT_NO_NETWORKPROXY +# define QT_NO_NETWORKPROXY +#endif +#ifndef QT_NO_SOCKS5 +# define QT_NO_SOCKS5 +#endif +#ifndef QT_NO_UDPSOCKET +# define QT_NO_UDPSOCKET +#endif +#ifndef QT_NO_URLINFO +# define QT_NO_URLINFO +#endif +#ifndef QT_NO_FTP +# define QT_NO_FTP +#endif + +/* Painting */ +#ifndef QT_NO_COLORNAMES +# define QT_NO_COLORNAMES +#endif +#ifndef QT_NO_DIRECTPAINTER +# define QT_NO_DIRECTPAINTER +#endif +#ifndef QT_NO_PAINTONSCREEN +# define QT_NO_PAINTONSCREEN +#endif +#ifndef QT_NO_PAINT_DEBUG +# define QT_NO_PAINT_DEBUG +#endif +#ifndef QT_NO_PICTURE +# define QT_NO_PICTURE +#endif +#ifndef QT_NO_PRINTER +# define QT_NO_PRINTER +#endif +#ifndef QT_NO_CUPS +# define QT_NO_CUPS +#endif + +/* Qt for Embedded Linux */ +#ifndef QT_NO_QWSEMBEDWIDGET +# define QT_NO_QWSEMBEDWIDGET +#endif +#ifndef QT_NO_QWS_ALPHA_CURSOR +# define QT_NO_QWS_ALPHA_CURSOR +#endif +#ifndef QT_NO_QWS_CURSOR +# define QT_NO_QWS_CURSOR +#endif +#ifndef QT_NO_QWS_DECORATION_DEFAULT +# define QT_NO_QWS_DECORATION_DEFAULT +#endif +#ifndef QT_NO_QWS_DECORATION_STYLED +# define QT_NO_QWS_DECORATION_STYLED +#endif +#ifndef QT_NO_QWS_DECORATION_WINDOWS +# define QT_NO_QWS_DECORATION_WINDOWS +#endif +#ifndef QT_NO_QWS_MANAGER +# define QT_NO_QWS_MANAGER +#endif +#ifndef QT_NO_QWS_KEYBOARD +# define QT_NO_QWS_KEYBOARD +#endif +#ifndef QT_NO_QWS_MOUSE +# define QT_NO_QWS_MOUSE +#endif +#ifndef QT_NO_QWS_MOUSE_AUTO +# define QT_NO_QWS_MOUSE_AUTO +#endif +#ifndef QT_NO_QWS_MOUSE_MANUAL +# define QT_NO_QWS_MOUSE_MANUAL +#endif +#ifndef QT_NO_QWS_MULTIPROCESS +# define QT_NO_QWS_MULTIPROCESS +#endif +#ifndef QT_NO_QWS_SOUNDSERVER +# define QT_NO_QWS_SOUNDSERVER +#endif +#ifndef QT_NO_SXE +# define QT_NO_SXE +#endif +#ifndef QT_NO_QWS_PROPERTIES +# define QT_NO_QWS_PROPERTIES +#endif +#ifndef QT_NO_QWS_PROXYSCREEN +# define QT_NO_QWS_PROXYSCREEN +#endif +#ifndef QT_NO_QWS_DYNAMICSCREENTRANSFORMATION +# define QT_NO_QWS_DYNAMICSCREENTRANSFORMATION +#endif +#ifndef QT_NO_QWS_LINUXFB +# define QT_NO_QWS_LINUXFB +#endif +#ifndef QT_NO_QWS_MOUSE_PC +# define QT_NO_QWS_MOUSE_PC +#endif +#ifndef QT_NO_QWS_MOUSE_LINUXTP +# define QT_NO_QWS_MOUSE_LINUXTP +#endif +#ifndef QT_NO_QWS_QPF +# define QT_NO_QWS_QPF +#endif + +/* SVG */ +#ifndef QT_NO_SVG +# define QT_NO_SVG +#endif +#ifndef QT_NO_GRAPHICSSVGITEM +# define QT_NO_GRAPHICSSVGITEM +#endif +#ifndef QT_NO_SVGGENERATOR +# define QT_NO_SVGGENERATOR +#endif +#ifndef QT_NO_SVGRENDERER +# define QT_NO_SVGRENDERER +#endif +#ifndef QT_NO_SVGWIDGET +# define QT_NO_SVGWIDGET +#endif + +/* Styles */ +#ifndef QT_NO_STYLE_MOTIF +# define QT_NO_STYLE_MOTIF +#endif +#ifndef QT_NO_STYLE_CDE +# define QT_NO_STYLE_CDE +#endif +#ifndef QT_NO_STYLE_STYLESHEET +# define QT_NO_STYLE_STYLESHEET +#endif +#ifndef QT_NO_STYLE_WINDOWSCE +# define QT_NO_STYLE_WINDOWSCE +#endif +#ifndef QT_NO_STYLE_WINDOWSMOBILE +# define QT_NO_STYLE_WINDOWSMOBILE +#endif +#ifndef QT_NO_STYLE_WINDOWSVISTA +# define QT_NO_STYLE_WINDOWSVISTA +#endif +#ifndef QT_NO_STYLE_WINDOWSXP +# define QT_NO_STYLE_WINDOWSXP +#endif + +/* Utilities */ +#ifndef QT_NO_ACCESSIBILITY +# define QT_NO_ACCESSIBILITY +#endif +#ifndef QT_NO_COMPLETER +# define QT_NO_COMPLETER +#endif +#ifndef QT_NO_DESKTOPSERVICES +# define QT_NO_DESKTOPSERVICES +#endif +#ifndef QT_NO_SCRIPT +# define QT_NO_SCRIPT +#endif +#ifndef QT_NO_SYSTEMTRAYICON +# define QT_NO_SYSTEMTRAYICON +#endif + +/* Windows */ +#ifndef QT_NO_WIN_ACTIVEQT +# define QT_NO_WIN_ACTIVEQT +#endif -- cgit v0.12 From 48629ab39aa4e20b21a359dc251569a98606983d Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Wed, 16 Mar 2011 13:52:28 +0200 Subject: Fix for wrong dpi metrics for raster pixmaps on Symbian. The original implementation relied on SizeInTwips() for the underlying bitmap which unfortunately returns 0, leading to incorrect results from QPixmap::logicalDpiX/Y(). This caused issues in text rendering onto pixmaps (QTBUG-17628). This fix changes QS60PixmapData to use a slightly different metrics() implementation (the one VG and GL PixmapData are using). Task-number: QTBUG-18154 Reviewed-by: Jani Hautakangas --- src/gui/image/qpixmap_s60.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index fbdebf3..32d8dd7 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -601,6 +601,9 @@ bool QS60PixmapData::scroll(int dx, int dy, const QRect &rect) return res; } +Q_GUI_EXPORT int qt_defaultDpiX(); +Q_GUI_EXPORT int qt_defaultDpiY(); + int QS60PixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const { if (!cfbsBitmap) @@ -611,28 +614,18 @@ int QS60PixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const return cfbsBitmap->SizeInPixels().iWidth; case QPaintDevice::PdmHeight: return cfbsBitmap->SizeInPixels().iHeight; - case QPaintDevice::PdmWidthMM: { - TInt twips = cfbsBitmap->SizeInTwips().iWidth; - return (int)(twips * (25.4/KTwipsPerInch)); - } - case QPaintDevice::PdmHeightMM: { - TInt twips = cfbsBitmap->SizeInTwips().iHeight; - return (int)(twips * (25.4/KTwipsPerInch)); - } + case QPaintDevice::PdmWidthMM: + return qRound(cfbsBitmap->SizeInPixels().iWidth * 25.4 / qt_defaultDpiX()); + case QPaintDevice::PdmHeightMM: + return qRound(cfbsBitmap->SizeInPixels().iHeight * 25.4 / qt_defaultDpiY()); case QPaintDevice::PdmNumColors: return TDisplayModeUtils::NumDisplayModeColors(cfbsBitmap->DisplayMode()); case QPaintDevice::PdmDpiX: - case QPaintDevice::PdmPhysicalDpiX: { - TReal inches = cfbsBitmap->SizeInTwips().iWidth / (TReal)KTwipsPerInch; - TInt pixels = cfbsBitmap->SizeInPixels().iWidth; - return pixels / inches; - } + case QPaintDevice::PdmPhysicalDpiX: + return qt_defaultDpiX(); case QPaintDevice::PdmDpiY: - case QPaintDevice::PdmPhysicalDpiY: { - TReal inches = cfbsBitmap->SizeInTwips().iHeight / (TReal)KTwipsPerInch; - TInt pixels = cfbsBitmap->SizeInPixels().iHeight; - return pixels / inches; - } + case QPaintDevice::PdmPhysicalDpiY: + return qt_defaultDpiY(); case QPaintDevice::PdmDepth: return TDisplayModeUtils::NumDisplayModeBitsPerPixel(cfbsBitmap->DisplayMode()); default: -- cgit v0.12 From 76f84c7a91751b4ddc5d9c4c59b6e5158d7ea998 Mon Sep 17 00:00:00 2001 From: Markus Goetz <Markus.Goetz@nokia.com> Date: Wed, 16 Mar 2011 13:06:08 +0100 Subject: QTcpSocket: Fix for disconnect in Unbuffered mode. We need to set the state properly after we have been disconnected. Also fix the HTTP layer, it needs to handle the disconnect when reading. Reviewed-by: Peter Hartmann --- src/network/access/qhttpnetworkconnectionchannel.cpp | 13 ++++++++----- src/network/socket/qabstractsocket.cpp | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 2076d72..c735801 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -905,15 +905,18 @@ bool QHttpNetworkConnectionChannel::isSocketReading() const //private slots void QHttpNetworkConnectionChannel::_q_readyRead() { - // We got a readyRead but no bytes are available.. - // This happens for the Unbuffered QTcpSocket - // Also check if socket is in ConnectedState since - // this function may also be invoked via the event loop. if (socket->state() == QAbstractSocket::ConnectedState && socket->bytesAvailable() == 0) { + // We got a readyRead but no bytes are available.. + // This happens for the Unbuffered QTcpSocket + // Also check if socket is in ConnectedState since + // this function may also be invoked via the event loop. char c; qint64 ret = socket->peek(&c, 1); if (ret < 0) { - socket->disconnectFromHost(); + _q_error(socket->error()); + // We still need to handle the reply so it emits its signals etc. + if (reply) + _q_receiveReply(); return; } } diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 2a942cc..c7c2e82 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -2210,6 +2210,8 @@ qint64 QAbstractSocket::readData(char *data, qint64 maxSize) } else if (readBytes < 0) { d->socketError = d->socketEngine->error(); setErrorString(d->socketEngine->errorString()); + d->resetSocketLayer(); + d->state = QAbstractSocket::UnconnectedState; } else if (!d->socketEngine->isReadNotificationEnabled()) { // Only do this when there was no error d->socketEngine->setReadNotificationEnabled(true); -- cgit v0.12 From eac5573dff483dfefb2deb028850c3ab6f01c555 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Wed, 16 Mar 2011 14:39:14 +0200 Subject: Temporarily removed Harmattan specific patches Patches are not applying properly yet, so no use to release them. Reviewed-by: TrustMe --- .../harmattan/patches/default_widget_size.diff | 13 - .../harmattan/patches/glshadercache.diff | 1003 -------------------- config.profiles/harmattan/patches/icu.diff | 732 -------------- .../patches/no_read_pro_from_quilt_dir.diff | 13 - .../patches/pinch_gesture_sent_twice.diff | 56 -- .../harmattan/patches/qgltexturecache.diff | 23 - config.profiles/harmattan/patches/qwidget_x11.diff | 39 - .../harmattan/patches/qwidget_x11_mapping.diff | 17 - .../patches/runtime-window-geometry-revert.diff | 12 - config.profiles/harmattan/patches/series | 14 - .../harmattan/patches/signon_authenticator4.diff | 230 ----- config.profiles/harmattan/patches/temppath.diff | 28 - .../harmattan/patches/tst_qprogressbar.diff | 19 - .../harmattan/patches/tst_qscrollbar.diff | 12 - .../harmattan/patches/tst_qvariant.diff | 21 - 15 files changed, 2232 deletions(-) delete mode 100644 config.profiles/harmattan/patches/default_widget_size.diff delete mode 100644 config.profiles/harmattan/patches/glshadercache.diff delete mode 100644 config.profiles/harmattan/patches/icu.diff delete mode 100644 config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff delete mode 100644 config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff delete mode 100644 config.profiles/harmattan/patches/qgltexturecache.diff delete mode 100644 config.profiles/harmattan/patches/qwidget_x11.diff delete mode 100644 config.profiles/harmattan/patches/qwidget_x11_mapping.diff delete mode 100644 config.profiles/harmattan/patches/runtime-window-geometry-revert.diff delete mode 100644 config.profiles/harmattan/patches/series delete mode 100644 config.profiles/harmattan/patches/signon_authenticator4.diff delete mode 100644 config.profiles/harmattan/patches/temppath.diff delete mode 100644 config.profiles/harmattan/patches/tst_qprogressbar.diff delete mode 100644 config.profiles/harmattan/patches/tst_qscrollbar.diff delete mode 100644 config.profiles/harmattan/patches/tst_qvariant.diff diff --git a/config.profiles/harmattan/patches/default_widget_size.diff b/config.profiles/harmattan/patches/default_widget_size.diff deleted file mode 100644 index 1f72881..0000000 --- a/config.profiles/harmattan/patches/default_widget_size.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qwidget.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget.cpp -@@ -1326,7 +1326,7 @@ - data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); - } - #else -- data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,640,480); -+ data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,854,480); - #endif - - focus_next = focus_prev = q; diff --git a/config.profiles/harmattan/patches/glshadercache.diff b/config.profiles/harmattan/patches/glshadercache.diff deleted file mode 100644 index 2c6ad9a..0000000 --- a/config.profiles/harmattan/patches/glshadercache.diff +++ /dev/null @@ -1,1003 +0,0 @@ -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -@@ -42,12 +42,12 @@ - #include "qglengineshadermanager_p.h" - #include "qglengineshadersource_p.h" - #include "qpaintengineex_opengl2_p.h" -+#include "qglshadercache_p.h" - - #if defined(QT_DEBUG) - #include <QMetaEnum> - #endif - -- - QT_BEGIN_NAMESPACE - - static void qt_shared_shaders_free(void *data) -@@ -165,62 +165,89 @@ - - QGLShader* fragShader; - QGLShader* vertexShader; -- QByteArray source; -+ QByteArray vertexSource; -+ QByteArray fragSource; - - // Compile up the simple shader: -- source.clear(); -- source.append(qShaderSnippets[MainVertexShader]); -- source.append(qShaderSnippets[PositionOnlyVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, context, this); -- if (!vertexShader->compileSourceCode(source)) -- qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); -- -- source.clear(); -- source.append(qShaderSnippets[MainFragmentShader]); -- source.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); -- fragShader = new QGLShader(QGLShader::Fragment, context, this); -- if (!fragShader->compileSourceCode(source)) -- qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); -+ vertexSource.append(qShaderSnippets[MainVertexShader]); -+ vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]); -+ -+ fragSource.append(qShaderSnippets[MainFragmentShader]); -+ fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); - - simpleShaderProg = new QGLShaderProgram(context, this); -- simpleShaderProg->addShader(vertexShader); -- simpleShaderProg->addShader(fragShader); -- simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ -+ CachedShader simpleShaderCache(fragSource, vertexSource); -+ -+ bool inCache = simpleShaderCache.load(simpleShaderProg, context); -+ -+ if (!inCache) { -+ vertexShader = new QGLShader(QGLShader::Vertex, context, this); -+ if (!vertexShader->compileSourceCode(vertexSource)) -+ qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); -+ -+ fragShader = new QGLShader(QGLShader::Fragment, context, this); -+ if (!fragShader->compileSourceCode(fragSource)) -+ qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); -+ -+ simpleShaderProg->addShader(vertexShader); -+ simpleShaderProg->addShader(fragShader); -+ -+ simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ } -+ - simpleShaderProg->link(); -- if (!simpleShaderProg->isLinked()) { -+ -+ if (simpleShaderProg->isLinked()) { -+ if (!inCache) -+ simpleShaderCache.store(simpleShaderProg, context); -+ } else { - qCritical() << "Errors linking simple shader:" - << simpleShaderProg->log(); - } - - // Compile the blit shader: -- source.clear(); -- source.append(qShaderSnippets[MainWithTexCoordsVertexShader]); -- source.append(qShaderSnippets[UntransformedPositionVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, context, this); -- if (!vertexShader->compileSourceCode(source)) -- qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); -- -- source.clear(); -- source.append(qShaderSnippets[MainFragmentShader]); -- source.append(qShaderSnippets[ImageSrcFragmentShader]); -- fragShader = new QGLShader(QGLShader::Fragment, context, this); -- if (!fragShader->compileSourceCode(source)) -- qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); -+ vertexSource.clear(); -+ vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]); -+ vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]); -+ -+ fragSource.clear(); -+ fragSource.append(qShaderSnippets[MainFragmentShader]); -+ fragSource.append(qShaderSnippets[ImageSrcFragmentShader]); - - blitShaderProg = new QGLShaderProgram(context, this); -- blitShaderProg->addShader(vertexShader); -- blitShaderProg->addShader(fragShader); -- blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -- blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ -+ CachedShader blitShaderCache(fragSource, vertexSource); -+ -+ inCache = blitShaderCache.load(blitShaderProg, context); -+ -+ if (!inCache) { -+ vertexShader = new QGLShader(QGLShader::Vertex, context, this); -+ if (!vertexShader->compileSourceCode(vertexSource)) -+ qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); -+ -+ fragShader = new QGLShader(QGLShader::Fragment, context, this); -+ if (!fragShader->compileSourceCode(fragSource)) -+ qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); -+ -+ blitShaderProg->addShader(vertexShader); -+ blitShaderProg->addShader(fragShader); -+ -+ blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -+ blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ } -+ - blitShaderProg->link(); -- if (!blitShaderProg->isLinked()) { -+ if (blitShaderProg->isLinked()) { -+ if (!inCache) -+ blitShaderCache.store(blitShaderProg, context); -+ } else { - qCritical() << "Errors linking blit shader:" -- << simpleShaderProg->log(); -+ << blitShaderProg->log(); - } -- - } - - QGLEngineSharedShaders::~QGLEngineSharedShaders() -@@ -262,99 +289,108 @@ - } - } - -- QGLShader *vertexShader = 0; -- QGLShader *fragShader = 0; -- QGLEngineShaderProg *newProg = 0; -- bool success = false; -+ QScopedPointer<QGLEngineShaderProg> newProg; - - do { -- QByteArray source; -+ QByteArray fragSource; - // Insert the custom stage before the srcPixel shader to work around an ATI driver bug - // where you cannot forward declare a function that takes a sampler as argument. - if (prog.srcPixelFragShader == CustomImageSrcFragmentShader) -- source.append(prog.customStageSource); -- source.append(qShaderSnippets[prog.mainFragShader]); -- source.append(qShaderSnippets[prog.srcPixelFragShader]); -+ fragSource.append(prog.customStageSource); -+ fragSource.append(qShaderSnippets[prog.mainFragShader]); -+ fragSource.append(qShaderSnippets[prog.srcPixelFragShader]); - if (prog.compositionFragShader) -- source.append(qShaderSnippets[prog.compositionFragShader]); -+ fragSource.append(qShaderSnippets[prog.compositionFragShader]); - if (prog.maskFragShader) -- source.append(qShaderSnippets[prog.maskFragShader]); -- fragShader = new QGLShader(QGLShader::Fragment, ctxGuard.context(), this); -- QByteArray description; -+ fragSource.append(qShaderSnippets[prog.maskFragShader]); -+ -+ QByteArray vertexSource; -+ vertexSource.append(qShaderSnippets[prog.mainVertexShader]); -+ vertexSource.append(qShaderSnippets[prog.positionVertexShader]); -+ -+ QScopedPointer<QGLShaderProgram> shaderProgram(new QGLShaderProgram(ctxGuard.context(), this)); -+ -+ CachedShader shaderCache(fragSource, vertexSource); -+ bool inCache = shaderCache.load(shaderProgram.data(), ctxGuard.context()); -+ -+ if (!inCache) { -+ -+ QScopedPointer<QGLShader> fragShader(new QGLShader(QGLShader::Fragment, ctxGuard.context(), this)); -+ QByteArray description; - #if defined(QT_DEBUG) -- // Name the shader for easier debugging -- description.append("Fragment shader: main="); -- description.append(snippetNameStr(prog.mainFragShader)); -- description.append(", srcPixel="); -- description.append(snippetNameStr(prog.srcPixelFragShader)); -- if (prog.compositionFragShader) { -- description.append(", composition="); -- description.append(snippetNameStr(prog.compositionFragShader)); -- } -- if (prog.maskFragShader) { -- description.append(", mask="); -- description.append(snippetNameStr(prog.maskFragShader)); -- } -- fragShader->setObjectName(QString::fromLatin1(description)); -+ // Name the shader for easier debugging -+ description.append("Fragment shader: main="); -+ description.append(snippetNameStr(prog.mainFragShader)); -+ description.append(", srcPixel="); -+ description.append(snippetNameStr(prog.srcPixelFragShader)); -+ if (prog.compositionFragShader) { -+ description.append(", composition="); -+ description.append(snippetNameStr(prog.compositionFragShader)); -+ } -+ if (prog.maskFragShader) { -+ description.append(", mask="); -+ description.append(snippetNameStr(prog.maskFragShader)); -+ } -+ fragShader->setObjectName(QString::fromLatin1(description)); - #endif -- if (!fragShader->compileSourceCode(source)) { -- qWarning() << "Warning:" << description << "failed to compile!"; -- break; -- } -+ if (!fragShader->compileSourceCode(fragSource)) { -+ qWarning() << "Warning:" << description << "failed to compile!"; -+ break; -+ } - -- source.clear(); -- source.append(qShaderSnippets[prog.mainVertexShader]); -- source.append(qShaderSnippets[prog.positionVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, ctxGuard.context(), this); -+ QScopedPointer<QGLShader> vertexShader(new QGLShader(QGLShader::Vertex, ctxGuard.context(), this)); - #if defined(QT_DEBUG) -- // Name the shader for easier debugging -- description.clear(); -- description.append("Vertex shader: main="); -- description.append(snippetNameStr(prog.mainVertexShader)); -- description.append(", position="); -- description.append(snippetNameStr(prog.positionVertexShader)); -- vertexShader->setObjectName(QString::fromLatin1(description)); -+ // Name the shader for easier debugging -+ description.clear(); -+ description.append("Vertex shader: main="); -+ description.append(snippetNameStr(prog.mainVertexShader)); -+ description.append(", position="); -+ description.append(snippetNameStr(prog.positionVertexShader)); -+ vertexShader->setObjectName(QString::fromLatin1(description)); - #endif -- if (!vertexShader->compileSourceCode(source)) { -- qWarning() << "Warning:" << description << "failed to compile!"; -- break; -- } -+ if (!vertexShader->compileSourceCode(vertexSource)) { -+ qWarning() << "Warning:" << description << "failed to compile!"; -+ break; -+ } - -- newProg = new QGLEngineShaderProg(prog); -+ shaderProgram->addShader(vertexShader.take()); -+ shaderProgram->addShader(fragShader.take()); - -- // If the shader program's not found in the cache, create it now. -- newProg->program = new QGLShaderProgram(ctxGuard.context(), this); -- newProg->program->addShader(vertexShader); -- newProg->program->addShader(fragShader); -- -- // We have to bind the vertex attribute names before the program is linked: -- newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -- if (newProg->useTextureCoords) -- newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -- if (newProg->useOpacityAttribute) -- newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); -- if (newProg->usePmvMatrixAttribute) { -- newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -- newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -- newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ // We have to bind the vertex attribute names before the program is linked: -+ shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ if (prog.useTextureCoords) -+ shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -+ if (prog.useOpacityAttribute) -+ shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); -+ if (prog.usePmvMatrixAttribute) { -+ shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -+ shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -+ shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ } - } - -+ newProg.reset(new QGLEngineShaderProg(prog)); -+ newProg->program = shaderProgram.take(); -+ - newProg->program->link(); -- if (!newProg->program->isLinked()) { -+ if (newProg->program->isLinked()) { -+ if (!inCache) -+ shaderCache.store(newProg->program, ctxGuard.context()); -+ } else { - QLatin1String none("none"); - QLatin1String br("\n"); - QString error; -- error = QLatin1String("Shader program failed to link,") -+ error = QLatin1String("Shader program failed to link,"); - #if defined(QT_DEBUG) -- + br -- + QLatin1String(" Shaders Used:") + br -- + QLatin1String(" ") + vertexShader->objectName() + QLatin1String(": ") + br -- + QLatin1String(vertexShader->sourceCode()) + br -- + QLatin1String(" ") + fragShader->objectName() + QLatin1String(": ") + br -- + QLatin1String(fragShader->sourceCode()) + br -+ error += QLatin1String("\n Shaders Used:\n"); -+ for (int i = 0; i < newProg->program->shaders().count(); ++i) { -+ QGLShader *shader = newProg->program->shaders().at(i); -+ error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n") -+ + QLatin1String(shader->sourceCode()) + br; -+ } - #endif -- + QLatin1String(" Error Log:\n") -- + QLatin1String(" ") + newProg->program->log(); -+ error += QLatin1String(" Error Log:\n") -+ + QLatin1String(" ") + newProg->program->log(); - qWarning() << error; - break; - } -@@ -376,26 +412,10 @@ - } - } - -- cachedPrograms.insert(0, newProg); -- -- success = true; -+ cachedPrograms.insert(0, newProg.data()); - } while (false); - -- // Clean up everything if we weren't successful -- if (!success) { -- if (newProg) { -- delete newProg; // Also deletes the QGLShaderProgram which in turn deletes the QGLShaders -- newProg = 0; -- } -- else { -- if (vertexShader) -- delete vertexShader; -- if (fragShader) -- delete fragShader; -- } -- } -- -- return newProg; -+ return newProg.take(); - } - - void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage) -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h -@@ -0,0 +1,457 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtOpenGL module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists purely as an -+// implementation detail. This header file may change from version to -+// version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QGLSHADERCACHE_MEEGO_P_H -+#define QGLSHADERCACHE_MEEGO_P_H -+ -+#include <QtCore/qglobal.h> -+ -+#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) -+ -+#include <QtCore/qcryptographichash.h> -+#include <QtCore/qsharedmemory.h> -+#include <QtCore/qsystemsemaphore.h> -+ -+#ifndef QT_BOOTSTRAPPED -+# include <GLES2/gl2ext.h> -+#endif -+#if defined(QT_DEBUG) || defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) -+# include <syslog.h> -+#endif -+ -+QT_BEGIN_HEADER -+ -+/* -+ This cache stores internal Qt shader programs in shared memory. -+ -+ This header file is ugly on purpose and can only be included once. It is only to be used -+ for the internal shader cache, not as a generic cache for anyone's shaders. -+ -+ The cache stores either ShaderCacheMaxEntries shader programs or ShaderCacheDataSize kilobytes -+ of shader programs, whatever limit is reached first. -+ -+ The layout of the cache is as outlined in the CachedShaders struct. After some -+ integers, an array of headers is reserved, then comes the space for the actual binaries. -+ -+ Shader Programs are identified by the md5sum of their frag and vertex shader source code. -+ -+ Shader Programs are never removed. The cache never shrinks or re-shuffles. This is done -+ on purpose to ensure minimum amount of locking, no alignment problems and very few write -+ operations. -+ -+ Note: Locking the shader cache could be expensive, because the entire system might hang. -+ That's why the cache is immutable to minimize the time we need to keep it locked. -+ -+ Why is it Meego specific? -+ -+ First, the size is chosen so that it fits to generic meego usage. Second, on Meego, there's -+ always at least one Qt application active (the launcher), so the cache will never be destroyed. -+ Only when the last Qt app exits, the cache dies, which should only be when someone kills the -+ X11 server. And last but not least it was only tested with Meego's SGX driver. -+ -+ There's a small tool in src/opengl/util/meego that dumps the contents of the cache. -+ */ -+ -+// anonymous namespace, prevent exporting of the private symbols -+namespace -+{ -+ -+struct CachedShaderHeader -+{ -+ /* the index in the data[] member of CachedShaders */ -+ int index; -+ /* the size of the binary shader */ -+ GLsizei size; -+ /* the format of the binary shader */ -+ GLenum format; -+ /* the md5sum of the frag+vertex shaders */ -+ char md5Sum[16]; -+}; -+ -+enum -+{ -+ /* The maximum amount of shader programs the cache can hold */ -+ ShaderCacheMaxEntries = 20 -+}; -+ -+typedef CachedShaderHeader CachedShaderHeaders[ShaderCacheMaxEntries]; -+ -+enum -+{ -+ // ShaderCacheDataSize is 20k minus the other data members of CachedShaders -+ ShaderCacheDataSize = 1024 * ShaderCacheMaxEntries - sizeof(CachedShaderHeaders) - 2 * sizeof(int) -+}; -+ -+struct CachedShaders -+{ -+ /* How much space is still available in the cache */ -+ inline int availableSize() const { return ShaderCacheDataSize - dataSize; } -+ -+ /* The current amount of cached shaders */ -+ int shaderCount; -+ -+ /* The current amount (in bytes) of cached data */ -+ int dataSize; -+ -+ /* The headers describing the shaders */ -+ CachedShaderHeaders headers; -+ -+ /* The actual binary data of the shader programs */ -+ char data[ShaderCacheDataSize]; -+}; -+ -+//#define QT_DEBUG_SHADER_CACHE -+#ifdef QT_DEBUG_SHADER_CACHE -+static QDebug shaderCacheDebug() -+{ -+ return QDebug(QtDebugMsg); -+} -+#else -+static inline QNoDebug shaderCacheDebug() { return QNoDebug(); } -+#endif -+ -+class ShaderCacheSharedMemory -+{ -+public: -+ ShaderCacheSharedMemory() -+ : shm(QLatin1String("qt_gles2_shadercache_" QT_VERSION_STR)) -+ { -+ // we need a system semaphore here, since cache creation and initialization must be atomic -+ QSystemSemaphore attachSemaphore(QLatin1String("qt_gles2_shadercache_mutex_" QT_VERSION_STR), 1); -+ -+ if (!attachSemaphore.acquire()) { -+ shaderCacheDebug() << "Unable to require shader cache semaphore:" << attachSemaphore.errorString(); -+ return; -+ } -+ -+ if (shm.attach()) { -+ // success! -+ shaderCacheDebug() << "Attached to shader cache"; -+ } else { -+ -+ // no cache exists - create and initialize it -+ if (shm.create(sizeof(CachedShaders))) { -+ shaderCacheDebug() << "Created new shader cache"; -+ initializeCache(); -+ } else { -+ shaderCacheDebug() << "Unable to create shader cache:" << shm.errorString(); -+ } -+ } -+ -+ attachSemaphore.release(); -+ } -+ -+ inline bool isAttached() const { return shm.isAttached(); } -+ -+ inline bool lock() { return shm.lock(); } -+ inline bool unlock() { return shm.unlock(); } -+ inline void *data() { return shm.data(); } -+ inline QString errorString() { return shm.errorString(); } -+ -+ ~ShaderCacheSharedMemory() -+ { -+ if (!shm.detach()) -+ shaderCacheDebug() << "Unable to detach shader cache" << shm.errorString(); -+ } -+ -+private: -+ void initializeCache() -+ { -+ // no need to lock the shared memory since we're already protected by the -+ // attach system semaphore. -+ -+ void *data = shm.data(); -+ Q_ASSERT(data); -+ -+ memset(data, 0, sizeof(CachedShaders)); -+ } -+ -+ QSharedMemory shm; -+}; -+ -+class ShaderCacheLocker -+{ -+public: -+ inline ShaderCacheLocker(ShaderCacheSharedMemory *cache) -+ : shm(cache->lock() ? cache : (ShaderCacheSharedMemory *)0) -+ { -+ if (!shm) -+ shaderCacheDebug() << "Unable to lock shader cache" << cache->errorString(); -+ } -+ -+ inline bool isLocked() const { return shm; } -+ -+ inline ~ShaderCacheLocker() -+ { -+ if (!shm) -+ return; -+ if (!shm->unlock()) -+ shaderCacheDebug() << "Unable to unlock shader cache" << shm->errorString(); -+ } -+ -+private: -+ ShaderCacheSharedMemory *shm; -+}; -+ -+#ifdef QT_BOOTSTRAPPED -+} // end namespace -+#else -+ -+static void traceCacheOverflow(const char *message) -+{ -+#if defined(QT_DEBUG) || defined (QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) -+ openlog(qPrintable(QCoreApplication::applicationName()), LOG_PID | LOG_ODELAY, LOG_USER); -+ syslog(LOG_DEBUG, message); -+ closelog(); -+#endif -+ shaderCacheDebug() << message; -+} -+ -+Q_GLOBAL_STATIC(ShaderCacheSharedMemory, shaderCacheSharedMemory) -+ -+/* -+ Finds the index of the shader program identified by md5Sum in the cache. -+ Note: Does NOT lock the cache for reading, the cache must already be locked! -+ -+ Returns -1 when no shader was found. -+ */ -+static int qt_cache_index_unlocked(const QByteArray &md5Sum, CachedShaders *cache) -+{ -+ for (int i = 0; i < cache->shaderCount; ++i) { -+ if (qstrncmp(md5Sum.constData(), cache->headers[i].md5Sum, 16) == 0) { -+ return i; -+ } -+ } -+ return -1; -+} -+ -+/* Returns the index of the shader identified by md5Sum */ -+static int qt_cache_index(const QByteArray &md5Sum) -+{ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ Q_ASSERT(md5Sum.length() == 16); -+ -+ ShaderCacheLocker locker(shm); -+ if (!locker.isLocked()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); -+ -+ return qt_cache_index_unlocked(md5Sum, cache); -+} -+ -+/* Loads the cached shader at index \a shaderIndex into \a program -+ * Note: Since the cache is immutable, this operation doesn't lock the shared memory. -+ */ -+static bool qt_cached_shader(QGLShaderProgram *program, const QGLContext *ctx, int shaderIndex) -+{ -+ Q_ASSERT(shaderIndex >= 0 && shaderIndex <= ShaderCacheMaxEntries); -+ Q_ASSERT(program); -+ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); -+ -+ shaderCacheDebug() << "fetching cached shader at index" << shaderIndex -+ << "dataIndex" << cache->headers[shaderIndex].index -+ << "size" << cache->headers[shaderIndex].size -+ << "format" << cache->headers[shaderIndex].format; -+ -+ // call program->programId first, since that resolves the glProgramBinaryOES symbol -+ GLuint programId = program->programId(); -+ glProgramBinaryOES(programId, cache->headers[shaderIndex].format, -+ cache->data + cache->headers[shaderIndex].index, -+ cache->headers[shaderIndex].size); -+ -+ return true; -+} -+ -+/* Stores the shader program in the cache. Returns false if there's an error with the cache, or -+ if the cache is too small to hold the shader. */ -+static bool qt_cache_shader(const QGLShaderProgram *shader, const QGLContext *ctx, const QByteArray &md5Sum) -+{ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); -+ -+ ShaderCacheLocker locker(shm); -+ if (!locker.isLocked()) -+ return false; -+ -+ int cacheIdx = cache->shaderCount; -+ if (cacheIdx >= ShaderCacheMaxEntries) { -+ traceCacheOverflow("Qt OpenGL shader cache index overflow!"); -+ return false; -+ } -+ -+ // now that we have the lock on the shared memory, make sure no one -+ // inserted the shader already while we were unlocked -+ if (qt_cache_index_unlocked(md5Sum, cache) != -1) -+ return true; // already cached -+ -+ shaderCacheDebug() << "Caching shader at index" << cacheIdx; -+ -+ GLint binaryLength = 0; -+ glGetProgramiv(shader->programId(), GL_PROGRAM_BINARY_LENGTH_OES, &binaryLength); -+ -+ if (!binaryLength) { -+ shaderCacheDebug() << "Unable to determine binary shader size!"; -+ return false; -+ } -+ -+ if (binaryLength > cache->availableSize()) { -+ traceCacheOverflow("Qt OpenGL shader cache data overflow!"); -+ return false; -+ } -+ -+ GLsizei size = 0; -+ GLenum format = 0; -+ glGetProgramBinaryOES(shader->programId(), binaryLength, &size, &format, -+ cache->data + cache->dataSize); -+ -+ if (!size) { -+ shaderCacheDebug() << "Unable to get binary shader!"; -+ return false; -+ } -+ -+ cache->headers[cacheIdx].index = cache->dataSize; -+ cache->dataSize += binaryLength; -+ ++cache->shaderCount; -+ cache->headers[cacheIdx].size = binaryLength; -+ cache->headers[cacheIdx].format = format; -+ -+ memcpy(cache->headers[cacheIdx].md5Sum, md5Sum.constData(), 16); -+ -+ shaderCacheDebug() << "cached shader size" << size -+ << "format" << format -+ << "binarySize" << binaryLength -+ << "cache index" << cacheIdx -+ << "data index" << cache->headers[cacheIdx].index; -+ -+ return true; -+} -+ -+} // namespace -+ -+QT_BEGIN_NAMESPACE -+ -+QT_MODULE(OpenGL) -+ -+class CachedShader -+{ -+public: -+ CachedShader(const QByteArray &fragSource, const QByteArray &vertexSource) -+ : cacheIdx(-1) -+ { -+ QCryptographicHash md5Hash(QCryptographicHash::Md5); -+ -+ md5Hash.addData(fragSource); -+ md5Hash.addData(vertexSource); -+ -+ md5Sum = md5Hash.result(); -+ } -+ -+ bool isCached() -+ { -+ return cacheIndex() != -1; -+ } -+ -+ int cacheIndex() -+ { -+ if (cacheIdx != -1) -+ return cacheIdx; -+ cacheIdx = qt_cache_index(md5Sum); -+ return cacheIdx; -+ } -+ -+ bool load(QGLShaderProgram *program, const QGLContext *ctx) -+ { -+ if (cacheIndex() == -1) -+ return false; -+ return qt_cached_shader(program, ctx, cacheIdx); -+ } -+ -+ bool store(QGLShaderProgram *program, const QGLContext *ctx) -+ { -+ return qt_cache_shader(program, ctx, md5Sum); -+ } -+ -+private: -+ QByteArray md5Sum; -+ int cacheIdx; -+}; -+ -+ -+QT_END_NAMESPACE -+ -+#endif -+ -+QT_END_HEADER -+ -+#endif -+#endif -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h -@@ -0,0 +1,98 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtOpenGL module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists purely as an -+// implementation detail. This header file may change from version to -+// version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QGLSHADERCACHE_P_H -+#define QGLSHADERCACHE_P_H -+ -+#include <QtCore/qglobal.h> -+ -+#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) -+# include "qglshadercache_meego_p.h" -+#else -+ -+QT_BEGIN_HEADER -+ -+QT_BEGIN_NAMESPACE -+ -+QT_MODULE(OpenGL) -+ -+class QGLShaderProgram; -+class QGLContext; -+ -+class CachedShader -+{ -+public: -+ inline CachedShader(const QByteArray &, const QByteArray &) -+ {} -+ -+ inline bool isCached() -+ { -+ return false; -+ } -+ -+ inline bool load(QGLShaderProgram *, const QGLContext *) -+ { -+ return false; -+ } -+ -+ inline bool store(QGLShaderProgram *, const QGLContext *) -+ { -+ return false; -+ } -+}; -+ -+QT_END_NAMESPACE -+ -+QT_END_HEADER -+ -+#endif -+#endif -Index: qt-maemo-qtp/src/opengl/opengl.pro -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/opengl.pro -+++ qt-maemo-qtp/src/opengl/opengl.pro -@@ -58,7 +58,9 @@ - gl2paintengineex/qglcustomshaderstage_p.h \ - gl2paintengineex/qtriangulatingstroker_p.h \ - gl2paintengineex/qtriangulator_p.h \ -- gl2paintengineex/qtextureglyphcache_gl_p.h -+ gl2paintengineex/qtextureglyphcache_gl_p.h \ -+ gl2paintengineex/qglshadercache_p.h \ -+ gl2paintengineex/qglshadercache_meego_p.h - - SOURCES += qglshaderprogram.cpp \ - qglpixmapfilter.cpp \ -Index: qt-maemo-qtp/src/opengl/util/meego/main.cpp -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/util/meego/main.cpp -@@ -0,0 +1,48 @@ -+#include <QtCore/qdebug.h> -+ -+#define QT_DEBUG_SHADER_CACHE -+#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE -+#define QT_OPENGL_ES_2 -+#define QT_BOOTSTRAPPED -+ -+typedef int GLsizei; -+typedef unsigned int GLenum; -+ -+#include "../../gl2paintengineex/qglshadercache_meego_p.h" -+ -+#include <stdlib.h> -+#include <stdio.h> -+ -+int main() -+{ -+ ShaderCacheSharedMemory shm; -+ -+ if (!shm.isAttached()) { -+ fprintf(stderr, "Unable to attach to shared memory\n"); -+ return EXIT_FAILURE; -+ } -+ -+ ShaderCacheLocker locker(&shm); -+ if (!locker.isLocked()) { -+ fprintf(stderr, "Unable to lock shared memory\n"); -+ return EXIT_FAILURE; -+ } -+ -+ void *data = shm.data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast<CachedShaders *>(data); -+ -+ for (int i = 0; i < cache->shaderCount; ++i) { -+ printf("Shader %d: %d bytes\n", i, cache->headers[i].size); -+ } -+ -+ printf("\nSummary:\n\n" -+ " Amount of cached shaders: %d\n" -+ " Bytes used: %d\n" -+ " Bytes available: %d\n", -+ cache->shaderCount, cache->dataSize, cache->availableSize()); -+ -+ return EXIT_SUCCESS; -+} -+ -Index: qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro -@@ -0,0 +1,7 @@ -+TEMPLATE = app -+ -+SOURCES += main.cpp -+ -+TARGET = shader-cache-introspector -+ -+QT = core diff --git a/config.profiles/harmattan/patches/icu.diff b/config.profiles/harmattan/patches/icu.diff deleted file mode 100644 index 16a17fd..0000000 --- a/config.profiles/harmattan/patches/icu.diff +++ /dev/null @@ -1,732 +0,0 @@ -diff --git a/configure b/configure -index 3a748e2..77232dc 100755 ---- a/configure -+++ b/configure -@@ -779,6 +779,7 @@ CFG_PULSEAUDIO=auto - CFG_COREWLAN=auto - CFG_ICD=auto - CFG_NOPROCESS=no -+CFG_ICU=no - - # initalize variables used for installation - QT_INSTALL_PREFIX= -@@ -940,7 +941,7 @@ while [ "$#" -gt 0 ]; do - VAL=no - ;; - #Qt style yes options -- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles) -+ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) - VAR=`echo $1 | sed "s,^-\(.*\),\1,"` - VAL=yes - ;; -@@ -2242,6 +2243,13 @@ while [ "$#" -gt 0 ]; do - QT_CFLAGS_FPU=$VAL - fi - ;; -+ icu) -+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then -+ CFG_ICU="$VAL" -+ else -+ UNKNOWN_OPT=yes -+ fi -+ ;; - *) - UNKNOWN_OPT=yes - ;; -@@ -7040,6 +7048,10 @@ if [ "$CFG_ICD" = "yes" ]; then - QT_CONFIG="$QT_CONFIG icd" - fi - -+if [ "$CFG_ICU" = "yes" ]; then -+ QT_CONFIG="$QT_CONFIG icu" -+fi -+ - # - # Some Qt modules are too advanced in C++ for some old compilers - # Detect here the platforms where they are known to work. -diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp -index 7cdc256..11a85d5 100644 ---- a/src/corelib/tools/qchar.cpp -+++ b/src/corelib/tools/qchar.cpp -@@ -57,6 +57,12 @@ - - QT_BEGIN_NAMESPACE - -+#ifdef QT_USE_ICU -+// from qlocale_icu.cpp -+extern uint qt_u_toUpper(uint c); -+extern uint qt_u_toLower(uint c); -+#endif -+ - #ifndef QT_NO_CODEC_FOR_C_STRINGS - # ifdef QT_NO_TEXTCODEC - # define QT_NO_CODEC_FOR_C_STRINGS -@@ -1076,6 +1082,12 @@ QChar::UnicodeVersion QChar::unicodeVersion(ushort ucs2) - */ - QChar QChar::toLower() const - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs); -+ if (res) -+ return QChar(res); -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs); - if (!p->lowerCaseSpecial) - return ucs + p->lowerCaseDiff; -@@ -1090,6 +1102,12 @@ QChar QChar::toLower() const - */ - uint QChar::toLower(uint ucs4) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs4); -+ if (res) -+ return res; -+ // else fall through -+#endif - if (ucs4 > UNICODE_LAST_CODEPOINT) - return ucs4; - const QUnicodeTables::Properties *p = qGetProp(ucs4); -@@ -1106,6 +1124,12 @@ uint QChar::toLower(uint ucs4) - */ - ushort QChar::toLower(ushort ucs2) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs2); -+ if (res) -+ return res & 0xffff; -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs2); - if (!p->lowerCaseSpecial) - return ucs2 + p->lowerCaseDiff; -@@ -1118,6 +1142,12 @@ ushort QChar::toLower(ushort ucs2) - */ - QChar QChar::toUpper() const - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs); -+ if (res) -+ return QChar(res); -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs); - if (!p->upperCaseSpecial) - return ucs + p->upperCaseDiff; -@@ -1132,6 +1162,12 @@ QChar QChar::toUpper() const - */ - uint QChar::toUpper(uint ucs4) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs4); -+ if (res) -+ return res; -+ // else fall through -+#endif - if (ucs4 > UNICODE_LAST_CODEPOINT) - return ucs4; - const QUnicodeTables::Properties *p = qGetProp(ucs4); -@@ -1148,6 +1184,12 @@ uint QChar::toUpper(uint ucs4) - */ - ushort QChar::toUpper(ushort ucs2) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs2); -+ if (res) -+ return res & 0xffff; -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs2); - if (!p->upperCaseSpecial) - return ucs2 + p->upperCaseDiff; -diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp -index 6515edb..5470048 100644 ---- a/src/corelib/tools/qlocale.cpp -+++ b/src/corelib/tools/qlocale.cpp -@@ -134,6 +134,10 @@ void qt_symbianUpdateSystemPrivate(); - void qt_symbianInitSystemLocale(); - #endif - -+#ifdef QT_USE_ICU -+extern bool qt_initIcu(const QString &localeName); -+#endif -+ - /****************************************************************************** - ** Helpers for accessing Qt locale database - */ -@@ -2346,6 +2350,10 @@ void QLocale::setDefault(const QLocale &locale) - { - default_lp = locale.d(); - default_number_options = locale.numberOptions(); -+ -+#ifdef QT_USE_ICU -+ qt_initIcu(locale.name()); -+#endif - } - - /*! -diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp -new file mode 100644 -index 0000000..7fe3801 ---- /dev/null -+++ b/src/corelib/tools/qlocale_icu.cpp -@@ -0,0 +1,247 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtCore module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qglobal.h" -+#include "qlibrary.h" -+#include "qdebug.h" -+ -+#include "unicode/uversion.h" -+#include "unicode/ucol.h" -+ -+QT_BEGIN_NAMESPACE -+ -+typedef UCollator *(*Ptr_ucol_open)(const char *loc, UErrorCode *status); -+typedef void (*Ptr_ucol_close)(UCollator *coll); -+typedef UCollationResult (*Ptr_ucol_strcoll)(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); -+typedef int32_t (*Ptr_u_strToCase)(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode); -+ -+static Ptr_ucol_open ptr_ucol_open = 0; -+static Ptr_ucol_strcoll ptr_ucol_strcoll = 0; -+static Ptr_ucol_close ptr_ucol_close = 0; -+static Ptr_u_strToCase ptr_u_strToUpper = 0; -+static Ptr_u_strToCase ptr_u_strToLower = 0; -+ -+enum LibLoadStatus -+{ -+ ErrorLoading = -1, -+ NotLoaded = 0, -+ Loaded = 1 -+}; -+ -+static LibLoadStatus status = NotLoaded; -+ -+static UCollator *icuCollator = 0; -+ -+#define STRINGIFY2(x) #x -+#define STRINGIFY(x) STRINGIFY2(x) -+ -+bool qt_initIcu(const QString &localeString) -+{ -+ if (status == ErrorLoading) -+ return false; -+ -+ if (status == NotLoaded) { -+ -+ // resolve libicui18n -+ QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); -+ if (!lib.load()) { -+ qWarning() << "Unable to load library icui18n" << lib.errorString(); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open"); -+ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close"); -+ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll"); -+ -+ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { -+ // try again with decorated symbol names -+ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ } -+ -+ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { -+ ptr_ucol_open = 0; -+ ptr_ucol_close = 0; -+ ptr_ucol_strcoll = 0; -+ -+ qWarning("Unable to find symbols in icui18n"); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ // resolve libicuuc -+ QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); -+ if (!ucLib.load()) { -+ qWarning() << "Unable to load library icuuc" << ucLib.errorString(); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper"); -+ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower"); -+ -+ if (!ptr_u_strToUpper || !ptr_u_strToLower) { -+ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ } -+ -+ if (!ptr_u_strToUpper || !ptr_u_strToLower) { -+ ptr_u_strToUpper = 0; -+ ptr_u_strToLower = 0; -+ -+ qWarning("Unable to find symbols in icuuc"); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ // success :) -+ status = Loaded; -+ } -+ -+ if (icuCollator) { -+ ptr_ucol_close(icuCollator); -+ icuCollator = 0; -+ } -+ -+ UErrorCode icuStatus = U_ZERO_ERROR; -+ icuCollator = ptr_ucol_open(localeString.toLatin1().constData(), &icuStatus); -+ -+ if (!icuCollator) { -+ qWarning("Unable to open locale %s in ICU, error code %d", qPrintable(localeString), icuStatus); -+ return false; -+ } -+ -+ return true; -+} -+ -+bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result) -+{ -+ Q_ASSERT(result); -+ Q_ASSERT(source); -+ Q_ASSERT(target); -+ -+ if (!icuCollator) -+ return false; -+ -+ *result = ptr_ucol_strcoll(icuCollator, reinterpret_cast<const UChar *>(source), int32_t(sourceLength), -+ reinterpret_cast<const UChar *>(target), int32_t(targetLength)); -+ -+ return true; -+} -+ -+// caseFunc can either be u_strToUpper or u_strToLower -+static bool qt_u_strToCase(const QString &str, QString *out, const QLocale &locale, Ptr_u_strToCase caseFunc) -+{ -+ Q_ASSERT(out); -+ -+ if (!icuCollator) -+ return false; -+ -+ QString result(str.size(), Qt::Uninitialized); -+ -+ UErrorCode status = U_ZERO_ERROR; -+ -+ int32_t size = caseFunc(reinterpret_cast<UChar *>(result.data()), result.size(), -+ reinterpret_cast<const UChar *>(str.constData()), str.size(), -+ locale.name().toLatin1().constData(), &status); -+ -+ if (U_FAILURE(status)) -+ return false; -+ -+ if (size < result.size()) { -+ result.resize(size); -+ } else if (size > result.size()) { -+ qDebug() << "RESULT SIZE MISMATCH"; -+ // the resulting string is larger than our source string -+ result.resize(size); -+ -+ status = U_ZERO_ERROR; -+ size = caseFunc(reinterpret_cast<UChar *>(result.data()), result.size(), -+ reinterpret_cast<const UChar *>(str.constData()), str.size(), -+ locale.name().toLatin1().constData(), &status); -+ -+ if (U_FAILURE(status)) -+ return false; -+ -+ // if the sizes don't match now, we give up. -+ if (size != result.size()) -+ return false; -+ } -+ -+ *out = result; -+ return true; -+} -+ -+bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale) -+{ -+ return qt_u_strToCase(str, out, locale, ptr_u_strToUpper); -+} -+ -+bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale) -+{ -+ return qt_u_strToCase(str, out, locale, ptr_u_strToLower); -+} -+ -+uint qt_u_toUpper(uint c) -+{ -+ if (c > 0xffff) -+ return 0; -+ -+ QString out; -+ if (qt_u_strToUpper(QChar(c), &out, QLocale()) && !out.isEmpty()) -+ return out.at(0).unicode(); -+ return 0; -+} -+ -+uint qt_u_toLower(uint c) -+{ -+ if (c > 0xffff) -+ return 0; -+ -+ QString out; -+ if (qt_u_strToLower(QChar(c), &out, QLocale()) && !out.isEmpty()) -+ return out.at(0).unicode(); -+ return 0; -+} -+ -+QT_END_NAMESPACE -diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp -index d641d74..0f5cee1 100644 ---- a/src/corelib/tools/qstring.cpp -+++ b/src/corelib/tools/qstring.cpp -@@ -112,6 +112,13 @@ int qFindString(const QChar *haystack, int haystackLen, int from, - int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from, - const QChar *needle, int needleLen, Qt::CaseSensitivity cs); - -+#ifdef QT_USE_ICU -+// qlocale_icu.cpp -+extern bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result); -+extern bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale); -+extern bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale); -+#endif -+ - - // Unicode case-insensitive comparison - static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) -@@ -4808,6 +4815,14 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, - TPtrC p2 = TPtrC16(reinterpret_cast<const TUint16 *>(data2), length2); - return p1.CompareC(p2); - #elif defined(Q_OS_UNIX) -+# if defined(QT_USE_ICU) -+ int res; -+ if (qt_ucol_strcoll(data1, length1, data2, length2, &res)) { -+ if (res == 0) -+ res = ucstrcmp(data1, length1, data2, length2); -+ return res; -+ } // else fall through -+# endif - // declared in <string.h> - int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2)); - if (delta == 0) -@@ -4943,6 +4958,15 @@ QString QString::toLower() const - if (!d->size) - return *this; - -+#ifdef QT_USE_ICU -+ { -+ QString result; -+ if (qt_u_strToLower(*this, &result, QLocale())) -+ return result; -+ // else fall through and use Qt's toUpper -+ } -+#endif -+ - const ushort *e = d->data + d->size; - - // this avoids one out of bounds check in the loop -@@ -5034,6 +5058,15 @@ QString QString::toUpper() const - if (!d->size) - return *this; - -+#ifdef QT_USE_ICU -+ { -+ QString result; -+ if (qt_u_strToUpper(*this, &result, QLocale())) -+ return result; -+ // else fall through and use Qt's toUpper -+ } -+#endif -+ - const ushort *e = d->data + d->size; - - // this avoids one out of bounds check in the loop -diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri -index d81ab04..46c39f3 100644 ---- a/src/corelib/tools/tools.pri -+++ b/src/corelib/tools/tools.pri -@@ -92,6 +92,11 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp - contains(QT_CONFIG, zlib):include($$PWD/../../3rdparty/zlib.pri) - else:include($$PWD/../../3rdparty/zlib_dependency.pri) - -+contains(QT_CONFIG,icu) { -+ SOURCES += tools/qlocale_icu.cpp -+ DEFINES += QT_USE_ICU -+} -+ - DEFINES += HB_EXPORT=Q_CORE_EXPORT - INCLUDEPATH += ../3rdparty/harfbuzz/src - HEADERS += ../3rdparty/harfbuzz/src/harfbuzz.h -diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro -index 3813e4e..d991365 100644 ---- a/tests/auto/qchar/qchar.pro -+++ b/tests/auto/qchar/qchar.pro -@@ -13,3 +13,5 @@ symbian: { - } else { - DEFINES += SRCDIR=\\\"$$PWD/\\\" - } -+ -+contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU -diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp -index 45dd7eb..514a836 100644 ---- a/tests/auto/qchar/tst_qchar.cpp -+++ b/tests/auto/qchar/tst_qchar.cpp -@@ -103,7 +103,8 @@ tst_QChar::~tst_QChar() - { } - - void tst_QChar::initTestCase() --{ } -+{ -+} - - void tst_QChar::cleanupTestCase() - { } -@@ -114,6 +115,7 @@ void tst_QChar::init() - int argc = 0; - app = new QCoreApplication(argc, NULL); - #endif -+ QLocale::setDefault(QLocale::C); - } - - void tst_QChar::cleanup() -@@ -143,9 +145,36 @@ void tst_QChar::toUpper() - QVERIFY(QChar::toUpper((uint)0x1c8) == 0x1c7); - QVERIFY(QChar::toUpper((uint)0x1c9) == 0x1c7); - -- QVERIFY(QChar::toUpper((uint)0x10400) == 0x10400); -- QVERIFY(QChar::toUpper((uint)0x10428) == 0x10400); -+ QCOMPARE(QChar::toUpper((uint)0x10400), 0x10400u); -+ QCOMPARE(QChar::toUpper((uint)0x10428), 0x10400u); -+ -+#ifdef QT_USE_ICU -+ QCOMPARE(QChar('i').toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort('i')), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint('i')), uint('I')); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // in Turkish locale, upper-caseing a 'i' will result in a capital I plus dot (0x0130) -+ QCOMPARE(QChar('i').toUpper(), QChar(0x0130u)); -+ QCOMPARE(QChar::toUpper(ushort('i')), ushort(0x0130u)); -+ QCOMPARE(QChar::toUpper(uint('i')), 0x0130u); -+ -+ // upper-casing a lower-case i without dot (0x0131) will result in 'I' -+ QCOMPARE(QChar(0x0131u).toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort(0x0131u)), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint(0x0131u)), uint('I')); -+ -+ // upper-casing an upper-case 0x0130 should do nothing -+ QCOMPARE(QChar(0x0130u).toUpper(), QChar(0x0130u)); -+ QCOMPARE(QChar::toUpper(ushort(0x0130u)), ushort(0x0130u)); -+ QCOMPARE(QChar::toUpper(uint(0x0130u)), uint(0x0130u)); - -+ // upper-casing an upper-case I should do nothing -+ QCOMPARE(QChar('I').toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort('I')), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint('I')), uint('I')); -+#endif - } - - void tst_QChar::toLower() -@@ -170,6 +199,34 @@ void tst_QChar::toLower() - - QVERIFY(QChar::toLower((uint)0x10400) == 0x10428); - QVERIFY(QChar::toLower((uint)0x10428) == 0x10428); -+ -+#ifdef QT_USE_ICU -+ QCOMPARE(QChar('I').toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort('I')), ushort('i')); -+ QCOMPARE(QChar::toLower(uint('I')), uint('i')); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // in turkish locale, lower-casing an 'I' will result with a lower-case i without dot (0x0131) -+ QCOMPARE(QChar('I').toLower(), QChar(0x0131u)); -+ QCOMPARE(QChar::toLower(ushort('I')), ushort(0x0131u)); -+ QCOMPARE(QChar::toLower(uint('I')), uint(0x0131u)); -+ -+ // lower-casing a captial I with dot (0x0130) will result in 'i' -+ QCOMPARE(QChar(0x0130u).toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort(0x0130u)), ushort('i')); -+ QCOMPARE(QChar::toLower(uint(0x0130u)), uint('i')); -+ -+ // lower-casing a lower-case i should do nothing -+ QCOMPARE(QChar('i').toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort('i')), ushort('i')); -+ QCOMPARE(QChar::toLower(uint('i')), uint('i')); -+ -+ // lower-casing a lower-case i without dot (0x0131) should do nothing -+ QCOMPARE(QChar(0x0131u).toLower(), QChar(0x0131u)); -+ QCOMPARE(QChar::toLower(ushort(0x0131u)), ushort(0x0131u)); -+ QCOMPARE(QChar::toLower(uint(0x0131u)), uint(0x0131u)); -+#endif - } - - void tst_QChar::toTitle() -diff --git a/tests/auto/qstring/qstring.pro b/tests/auto/qstring/qstring.pro -index ed758c6..92dd755 100644 ---- a/tests/auto/qstring/qstring.pro -+++ b/tests/auto/qstring/qstring.pro -@@ -6,3 +6,5 @@ symbian:LIBS += -llibm - QT = core - - DEFINES += QT_NO_CAST_TO_ASCII -+ -+contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU -diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp -index ecae3d8..6baf9fc 100644 ---- a/tests/auto/qstring/tst_qstring.cpp -+++ b/tests/auto/qstring/tst_qstring.cpp -@@ -210,6 +210,8 @@ private slots: - void task262677remove(); - void QTBUG10404_compareRef(); - void QTBUG9281_arg_locale(); -+ -+ void toUpperLower_icu(); - }; - - typedef QList<int> IntList; -@@ -1544,6 +1546,11 @@ void tst_QString::toUpper() - QCOMPARE( lower.toUpper(), upper); - - -+#ifdef QT_USE_ICU -+ // test doesn't work with ICU support, since QChar is unaware of any locale -+ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); -+ QVERIFY(false); -+#else - for (int i = 0; i < 65536; ++i) { - QString str(1, QChar(i)); - QString upper = str.toUpper(); -@@ -1551,6 +1558,7 @@ void tst_QString::toUpper() - if (upper.length() == 1) - QVERIFY(upper == QString(1, QChar(i).toUpper())); - } -+#endif - } - - void tst_QString::toLower() -@@ -1582,6 +1590,11 @@ void tst_QString::toLower() - upper += QChar(QChar::lowSurrogate(0x10400)); - QCOMPARE( upper.toLower(), lower); - -+#ifdef QT_USE_ICU -+ // test doesn't work with ICU support, since QChar is unaware of any locale -+ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); -+ QVERIFY(false); -+#else - for (int i = 0; i < 65536; ++i) { - QString str(1, QChar(i)); - QString lower = str.toLower(); -@@ -1589,6 +1602,7 @@ void tst_QString::toLower() - if (lower.length() == 1) - QVERIFY(str.toLower() == QString(1, QChar(i).toLower())); - } -+#endif - } - - void tst_QString::trimmed() -@@ -4200,6 +4214,8 @@ void tst_QString::localeAwareCompare() - - #elif defined (Q_WS_MAC) - QSKIP("Setting the locale is not supported on OS X (you can set the C locale, but that won't affect CFStringCompare which is used to compare strings)", SkipAll); -+#elif defined(QT_USE_ICU) -+ QLocale::setDefault(QLocale(locale)); - #else - if (!locale.isEmpty()) { - const char *newLocale = setlocale(LC_ALL, locale.toLatin1()); -@@ -4211,6 +4227,11 @@ void tst_QString::localeAwareCompare() - } - #endif - -+#ifdef QT_USE_ICU -+ // ### for c1, ICU disagrees with libc on how to compare -+ QEXPECT_FAIL("c1", "ICU disagrees with test", Abort); -+#endif -+ - int testres = QString::localeAwareCompare(s1, s2); - if (result < 0) { - QVERIFY(testres < 0); -@@ -4912,6 +4933,40 @@ void tst_QString::QTBUG9281_arg_locale() - QLocale::setDefault(QLocale::C); - } - -+void tst_QString::toUpperLower_icu() -+{ -+#ifndef QT_USE_ICU -+ QSKIP("Qt was built without ICU support", QTest::SkipAll); -+#endif -+ -+ QString s = QString::fromLatin1("i"); -+ -+ QCOMPARE(s.toUpper(), QString::fromLatin1("I")); -+ QCOMPARE(s.toLower(), QString::fromLatin1("i")); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // turkish locale has a capital I with a dot (U+0130, utf8 c4b0) -+ -+ QCOMPARE(s.toUpper(), QString::fromUtf8("\xc4\xb0")); -+ QCOMPARE(QString::fromUtf8("\xc4\xb0").toLower(), s); -+ -+ // nothing should happen here -+ QCOMPARE(s.toLower(), s); -+ QCOMPARE(QString::fromLatin1("I").toUpper(), QString::fromLatin1("I")); -+ -+ // U+0131, utf8 c4b1 is the lower-case i without a dot -+ QString sup = QString::fromUtf8("\xc4\xb1"); -+ -+ QCOMPARE(sup.toUpper(), QString::fromLatin1("I")); -+ QCOMPARE(QString::fromLatin1("I").toLower(), sup); -+ -+ // nothing should happen here -+ QCOMPARE(sup.toLower(), sup); -+ QCOMPARE(QString::fromLatin1("i").toLower(), QString::fromLatin1("i")); -+ -+ // the cleanup function will restore the default locale -+} - - - QTEST_APPLESS_MAIN(tst_QString) diff --git a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff deleted file mode 100644 index f5ddb67..0000000 --- a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: qt-maemo-qtp/configure -=================================================================== ---- qt-maemo-qtp.orig/configure -+++ qt-maemo-qtp/configure -@@ -8465,7 +8465,7 @@ - # .projects.3 -> the rest - rm -f .projects .projects.1 .projects.2 .projects.3 - --QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -print | sed 's-/\./-/-'` -+QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -a ! -path '*/.pc/*' -print | sed 's-/\./-/-'` - if [ -z "$AWK" ]; then - for p in `echo $QMAKE_PROJECTS`; do - echo "$p" >> .projects diff --git a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff deleted file mode 100644 index 61dfbf9..0000000 --- a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff +++ /dev/null @@ -1,56 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qstandardgestures.cpp -+++ qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp -@@ -66,6 +66,9 @@ - #else - static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); - #endif -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QPanGesture; - } -@@ -157,7 +160,11 @@ - { - if (target && target->isWidgetType()) { - static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } -+ - return new QPinchGesture; - } - -@@ -286,6 +293,9 @@ - { - if (target && target->isWidgetType()) { - static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QSwipeGesture; - } -@@ -424,6 +434,9 @@ - { - if (target && target->isWidgetType()) { - static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QTapGesture; - } -@@ -495,6 +508,9 @@ - { - if (target && target->isWidgetType()) { - static_cast<QWidget *>(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QTapAndHoldGesture; - } diff --git a/config.profiles/harmattan/patches/qgltexturecache.diff b/config.profiles/harmattan/patches/qgltexturecache.diff deleted file mode 100644 index 0fa8ad2..0000000 --- a/config.profiles/harmattan/patches/qgltexturecache.diff +++ /dev/null @@ -1,23 +0,0 @@ -Index: qt-maemo-qtp/src/opengl/qgl.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/qgl.cpp -+++ qt-maemo-qtp/src/opengl/qgl.cpp -@@ -1831,18 +1831,6 @@ - void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost) - { - QWriteLocker locker(&m_lock); -- if (m_cache.totalCost() + cost > m_cache.maxCost()) { -- // the cache is full - make an attempt to remove something -- const QList<QGLTextureCacheKey> keys = m_cache.keys(); -- int i = 0; -- while (i < m_cache.count() -- && (m_cache.totalCost() + cost > m_cache.maxCost())) { -- QGLTexture *tex = m_cache.object(keys.at(i)); -- if (tex->context == ctx) -- m_cache.remove(keys.at(i)); -- ++i; -- } -- } - const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; - m_cache.insert(cacheKey, texture, cost); - } diff --git a/config.profiles/harmattan/patches/qwidget_x11.diff b/config.profiles/harmattan/patches/qwidget_x11.diff deleted file mode 100644 index 8bcb011..0000000 --- a/config.profiles/harmattan/patches/qwidget_x11.diff +++ /dev/null @@ -1,39 +0,0 @@ -commit 4ecc45086102807901a3bd2b9e02a169ca212716 -Author: Harald Fernengel <harald.fernengel@nokia.com> -Date: Thu Dec 9 10:51:01 2010 +0100 - - Fix a rare race condition when showing windows - - When setting a window to translucent shortly before showing it with the - OpenGL graphics system, the hijacking would call XDestroyWindow without - resetting the internal state. This might lead to the window waiting for - a map notify message forever. - - The patch now properly resets the internal state when destroying the old - window, so it'll get mapped correctly when show() is called. - - Reviewed-by: Denis Dzyubenko - -Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -@@ -961,8 +961,17 @@ - inputContext->setFocusWidget(q); - } - -- if (destroyw) -+ if (destroyw) { - qt_XDestroyWindow(q, dpy, destroyw); -+ if (QTLWExtra *topData = maybeTopData()) { -+#ifndef QT_NO_XSYNC -+ if (topData->syncUpdateCounter) -+ XSyncDestroyCounter(dpy, topData->syncUpdateCounter); -+#endif -+ // we destroyed our old window - reset the top-level state -+ createTLSysExtra(); -+ } -+ } - - // newly created windows are positioned at the window system's - // (0,0) position. If the parent uses wrect mapping to expand the diff --git a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff deleted file mode 100644 index 4866cfb..0000000 --- a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff +++ /dev/null @@ -1,17 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -@@ -1353,6 +1353,12 @@ - //cannot trust that !isWindow() implies parentWidget() before create - return (q->isWindow() || !q->parentWidget()) ? p : q->parentWidget()->d_func()->mapToGlobal(p); - } -+ -+ // we're not embedded - use the client rect to compute the global position -+ if (!q->window()->d_func()->topData()->embedded) -+ return mapFromWS(QPoint(pos.x() - q->data->crect.left(), pos.y() - q->data->crect.top())); -+ -+ // otherwise, go through the (slow-ish) X11 round-trip - int x, y; - Window child; - QPoint p = mapToWS(pos); diff --git a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff deleted file mode 100644 index af55a60..0000000 --- a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/painting/qgraphicssystem_runtime.cpp -+++ qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp -@@ -285,7 +285,6 @@ - - void QRuntimeWindowSurface::setGeometry(const QRect &rect) - { -- QWindowSurface::setGeometry(rect); - m_windowSurface->setGeometry(rect); - } - diff --git a/config.profiles/harmattan/patches/series b/config.profiles/harmattan/patches/series deleted file mode 100644 index f2ee5f9..0000000 --- a/config.profiles/harmattan/patches/series +++ /dev/null @@ -1,14 +0,0 @@ -tst_qscrollbar.diff -signon_authenticator4.diff -pinch_gesture_sent_twice.diff -no_read_pro_from_quilt_dir.diff -tst_qvariant.diff -icu.diff -qgltexturecache.diff -qwidget_x11.diff -qwidget_x11_mapping.diff -glshadercache.diff -temppath.diff -tst_qprogressbar.diff -default_widget_size.diff -runtime-window-geometry-revert.diff diff --git a/config.profiles/harmattan/patches/signon_authenticator4.diff b/config.profiles/harmattan/patches/signon_authenticator4.diff deleted file mode 100644 index 63e8d51..0000000 --- a/config.profiles/harmattan/patches/signon_authenticator4.diff +++ /dev/null @@ -1,230 +0,0 @@ -Index: qt-maemo-qtp/src/3rdparty/signon/signon.pri -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/3rdparty/signon/signon.pri -@@ -0,0 +1,2 @@ -+# signon dependency -+CONFIG += qdbus -Index: qt-maemo-qtp/src/network/access/access.pri -=================================================================== ---- qt-maemo-qtp.orig/src/network/access/access.pri -+++ qt-maemo-qtp/src/network/access/access.pri -@@ -61,3 +61,4 @@ - access/qnetworkdiskcache.cpp - - include($$PWD/../../3rdparty/zlib_dependency.pri) -+include($$PWD/../../3rdparty/signon/signon.pri) -Index: qt-maemo-qtp/src/network/kernel/qauthenticator.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/network/kernel/qauthenticator.cpp -+++ qt-maemo-qtp/src/network/kernel/qauthenticator.cpp -@@ -129,6 +129,9 @@ - \sa QSslSocket - */ - -+#ifndef QT_NO_SIGNON -+#include <QtDBus/QtDBus> -+#endif //QT_NO_SIGNON - - /*! - Constructs an empty authentication object -@@ -421,17 +424,40 @@ - { - QByteArray response; - const char *methodString = 0; -+#ifndef QT_NO_SIGNON -+ bool valid = false; -+ qint32 id = 0; -+#endif //QT_NO_SIGNON -+ - switch(method) { - case QAuthenticatorPrivate::None: - methodString = ""; - phase = Done; - break; - case QAuthenticatorPrivate::Plain: -+#ifndef QT_NO_SIGNON -+ id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); -+ response = '\0' + signon.value(QLatin1String("UserName")).toString().toUtf8() -+ + '\0' + signon.value(QLatin1String("Secret")).toString().toUtf8(); -+ } else -+#endif //QT_NO_SIGNON - response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); - phase = Done; - break; - case QAuthenticatorPrivate::Basic: - methodString = "Basic "; -+#ifndef QT_NO_SIGNON -+ id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); -+ response = signon.value(QLatin1String("UserName")).toString().toLatin1() -+ + ':' + signon.value(QLatin1String("Secret")).toString().toLatin1(); -+ } else -+#endif //QT_NO_SIGNON - response = user.toLatin1() + ':' + password.toLatin1(); - response = response.toBase64(); - phase = Done; -@@ -613,6 +639,90 @@ - return hash.result().toHex(); - } - -+#ifndef QT_NO_SIGNON -+ -+static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args) -+{ -+ //check dbus connection -+ QDBusConnection connection = QDBusConnection::sessionBus(); -+ if (!QDBusConnection::sessionBus().isConnected()) { -+ qCritical() << "DBus connection failed"; -+ return QVariantMap(); -+ } -+ -+ QDBusMessage msg = -+ QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), -+ QLatin1String("/com/nokia/SingleSignOn") , -+ QLatin1String("com.nokia.SingleSignOn.AuthService"), -+ QLatin1String("getAuthSessionObjectPath")); -+ msg << id << method; -+ QDBusReply<QString> pathReply = connection.call(msg); -+ -+ QString sessionPath; -+ if (pathReply.isValid()) { -+ sessionPath = pathReply.value(); -+ } else { -+ qDebug() << pathReply.error(); -+ return QVariantMap(); -+ } -+ -+ //authenticate using auth session -+ msg = QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), -+ sessionPath, QString(), -+ QLatin1String("process")); -+ msg << args << method; -+ QDBusReply<QVariantMap> reply = connection.call(msg); -+ -+ if (reply.isValid()) { -+ QVariantMap map = reply.value(); -+ return map; -+ } else { -+ qDebug() << reply.error(); -+ return QVariantMap(); -+ } -+ return QVariantMap(); -+} -+ -+static QByteArray signonDigestMd5( -+ const quint32 id, -+ const QByteArray &alg, -+ QString &user, -+ const QByteArray &realm, -+ const QByteArray &nonce, /* nonce from server */ -+ QByteArray &nonceCount, /* 8 hex digits */ -+ QByteArray &cNonce, /* client nonce */ -+ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ -+ const QByteArray &method, /* method from the request */ -+ const QByteArray &digestUri, /* requested URL */ -+ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ -+ ) -+{ -+ QByteArray digest = QByteArray(); -+ nonceCount = "00000001"; -+ -+ QVariantMap args; -+ args.insert(QLatin1String("Algorithm"), alg); -+ args.insert(QLatin1String("Realm"), QLatin1String(realm)); -+ args.insert(QLatin1String("nonce"), nonce); -+ args.insert(QLatin1String("nonceCount"), nonceCount); -+ args.insert(QLatin1String("cNonce"), cNonce); -+ args.insert(QLatin1String("qop"), qop); -+ args.insert(QLatin1String("method"), method); -+ args.insert(QLatin1String("digestUri"), digestUri); -+ args.insert(QLatin1String("Entity"), hEntity); -+ -+ QVariantMap response = signonResponse(id, QLatin1String("digest"), args); -+ -+ if (response.isEmpty()) -+ return digest; -+ digest = response.value(QLatin1String("Digest")).toByteArray(); -+ user = response.value(QLatin1String("UserName")).toString(); -+ cNonce = response.value(QLatin1String("cNonce")).toByteArray(); -+ -+ return digest; -+} -+#endif //QT_NO_SIGNON -+ - QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge, const QByteArray &method, const QByteArray &path) - { - QHash<QByteArray,QByteArray> options = parseDigestAuthenticationChallenge(challenge); -@@ -625,9 +735,23 @@ - QByteArray nonce = options.value("nonce"); - QByteArray opaque = options.value("opaque"); - QByteArray qop = options.value("qop"); -+ QByteArray response; - - // qDebug() << "calculating digest: method=" << method << "path=" << path; -- QByteArray response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), -+ -+#ifndef QT_NO_SIGNON -+ bool valid = false; -+ qint32 id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ response = signonDigestMd5(id, options.value("algorithm"), user, -+ realm.toLatin1(), -+ nonce, nonceCountString, -+ cnonce, qop, method, -+ path, QByteArray()); -+ } else -+#endif //QT_NO_SIGNON -+ response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), - realm.toLatin1(), password.toLatin1(), - nonce, nonceCountString, - cnonce, qop, method, -Index: qt-maemo-qtp/src/network/kernel/qauthenticator_p.h -=================================================================== ---- qt-maemo-qtp.orig/src/network/kernel/qauthenticator_p.h -+++ qt-maemo-qtp/src/network/kernel/qauthenticator_p.h -@@ -109,6 +109,23 @@ - - }; - -+#ifndef QT_NO_SIGNON -+ static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args); -+ static QByteArray signonDigestMd5( -+ const quint32 id, -+ const QByteArray &alg, -+ QString &user, -+ const QByteArray &realm, -+ const QByteArray &nonce, /* nonce from server */ -+ QByteArray &nonceCount, /* 8 hex digits */ -+ QByteArray &cNonce, /* client nonce */ -+ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ -+ const QByteArray &method, /* method from the request */ -+ const QByteArray &digestUri, /* requested URL */ -+ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ -+ ); -+#endif //QT_NO_SIGNON -+ - - QT_END_NAMESPACE - -Index: qt-maemo-qtp/src/src.pro -=================================================================== ---- qt-maemo-qtp.orig/src/src.pro -+++ qt-maemo-qtp/src/src.pro -@@ -4,8 +4,9 @@ - unset(SRC_SUBDIRS) - win32:SRC_SUBDIRS += src_winmain - symbian:SRC_SUBDIRS += src_s60main --SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib -+SRC_SUBDIRS += src_corelib src_xml - !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus -+SRC_SUBDIRS += src_network src_sql src_testlib - !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui - !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support - diff --git a/config.profiles/harmattan/patches/temppath.diff b/config.profiles/harmattan/patches/temppath.diff deleted file mode 100644 index 065c2d0..0000000 --- a/config.profiles/harmattan/patches/temppath.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h -=================================================================== ---- qt-maemo-qtp.orig/mkspecs/linux-g++-maemo/qplatformdefs.h -+++ qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h -@@ -43,3 +43,8 @@ - - #define QT_GUI_DOUBLE_CLICK_RADIUS 20 - #define QT_GUI_DRAG_DISTANCE 16 -+ -+// TMPDIR sometimes points to /tmp and sometimes to /var/tmp -+// To guarantee native platform key generation for QSharedMemory and friends, -+// we must hard code the temp path to /var/tmp here. -+#define QT_UNIX_TEMP_PATH_OVERRIDE "/var/tmp" -Index: qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/corelib/io/qfsfileengine_unix.cpp -+++ qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp -@@ -643,7 +643,9 @@ - - QString QFSFileEngine::tempPath() - { --#if defined(Q_OS_SYMBIAN) -+#if defined(QT_UNIX_TEMP_PATH_OVERRIDE) -+ QString temp = QLatin1String(QT_UNIX_TEMP_PATH_OVERRIDE); -+#elif defined(Q_OS_SYMBIAN) - TFileName symbianPath = PathInfo::PhoneMemoryRootPath(); - QString temp = QDir::fromNativeSeparators(qt_TDesC2QString(symbianPath)); - temp += QLatin1String( "temp/"); diff --git a/config.profiles/harmattan/patches/tst_qprogressbar.diff b/config.profiles/harmattan/patches/tst_qprogressbar.diff deleted file mode 100644 index d252fe3..0000000 --- a/config.profiles/harmattan/patches/tst_qprogressbar.diff +++ /dev/null @@ -1,19 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qprogressbar/tst_qprogressbar.cpp -+++ qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp -@@ -179,10 +179,14 @@ - bar.repainted = false; - bar.setFormat("%v of %m (%p%)"); - qApp->processEvents(); -+ -+#if 0 // Removed - #ifndef Q_WS_MAC - // The Mac scroll bar is animated, which means we get paint events all the time. - QVERIFY(!bar.repainted); - #endif -+#endif -+ - QCOMPARE(bar.text(), QString("1 of 10 (10%)")); - bar.setRange(5, 5); - bar.setValue(5); diff --git a/config.profiles/harmattan/patches/tst_qscrollbar.diff b/config.profiles/harmattan/patches/tst_qscrollbar.diff deleted file mode 100644 index 3c777a9..0000000 --- a/config.profiles/harmattan/patches/tst_qscrollbar.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qscrollbar/tst_qscrollbar.cpp -+++ qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp -@@ -104,6 +104,7 @@ - - void tst_QScrollBar::task_209492() - { -+ QSKIP("Unstable test on Harmattan", SkipSingle); - class MyScrollArea : public QScrollArea - { - public: diff --git a/config.profiles/harmattan/patches/tst_qvariant.diff b/config.profiles/harmattan/patches/tst_qvariant.diff deleted file mode 100644 index bcded52..0000000 --- a/config.profiles/harmattan/patches/tst_qvariant.diff +++ /dev/null @@ -1,21 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qvariant/tst_qvariant.cpp -+++ qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp -@@ -3122,6 +3122,7 @@ - - void tst_QVariant::numericalConvert() - { -+ int low_int = 3; - QVariant vfloat(float(5.3)); - QVariant vdouble(double(5.3)); - QVariant vreal(qreal(5.3)); -@@ -3137,7 +3138,7 @@ - - for(int i = 0; i < vect.size(); i++) { - double num = 5.3; -- if (i >= 3 && i <= 7) -+ if (i >= low_int && i <= 7) - num = 5; - QVariant *v = vect.at(i); - QCOMPARE(v->toFloat() , float(num)); -- cgit v0.12 From cc994cf5a10a4ab31e37ae8712b9cd1b37878e79 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Wed, 16 Mar 2011 13:45:42 +0100 Subject: Remove the check on flushRequested. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The check on flushRequested was needed since we were flushing the toolbar with the main window, but the flushing is now independent so we don't need it anymore. It is now making us skip some flushing. Reviewed-by: Samuel Rødal --- src/gui/kernel/qcocoaview_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 43eb072..54e7e3e 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -299,7 +299,7 @@ static int qCocoaViewCount = 0; } else { QUnifiedToolbarSurface *unifiedSurface = qwidgetprivate->unifiedSurface; - if (!unifiedSurface || !qwidgetprivate->flushRequested) { + if (!unifiedSurface) { qt_mac_release_graphics_context(context); return; } -- cgit v0.12 From d149125e0b539ff13f77cb2a67194ac3d6e331a0 Mon Sep 17 00:00:00 2001 From: Fabien Freling <fabien.freling@nokia.com> Date: Wed, 16 Mar 2011 13:53:30 +0100 Subject: Add an overloading function to flush(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the case of the unified toolbar, we don't need as much arguments for flush(). So we overload flush() to only take one argument, the widget. Reviewed-by: Samuel Rødal --- src/gui/painting/qunifiedtoolbarsurface_mac.cpp | 8 ++++++++ src/gui/painting/qunifiedtoolbarsurface_mac_p.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp index 63364f3..9913c9a 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp +++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp @@ -156,6 +156,14 @@ void QUnifiedToolbarSurface::updateToolbarOffset(QWidget *widget) mlayout->updateUnifiedToolbarOffset(); } +void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(region); + Q_UNUSED(offset); + + this->flush(widget); +} + void QUnifiedToolbarSurface::flush(QWidget *widget) { Q_D(QUnifiedToolbarSurface); diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h index b0075b6..0a7ebf1 100644 --- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h +++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h @@ -80,6 +80,7 @@ public: ~QUnifiedToolbarSurface(); void flush(QWidget *widget); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); void setGeometry(const QRect &rect); void beginPaint(const QRegion &rgn); void insertToolbar(QWidget *toolbar, const QPoint &offset); -- cgit v0.12 From d376a506cc25dc2beb5c88ded145bc5e807f9f85 Mon Sep 17 00:00:00 2001 From: Morten Sorvig <msorvig@trolltech.com> Date: Wed, 16 Mar 2011 12:19:45 +0100 Subject: Rename qnaclunimplemented -> qfunctions_nacl (Match the existing files for wince and vxworks.) --- mkspecs/qws/linux-nacl-g++/qplatformdefs.h | 2 + mkspecs/qws/macx-nacl-g++/qplatformdefs.h | 2 + src/corelib/global/global.pri | 4 - src/corelib/global/qglobal.h | 4 - src/corelib/global/qnaclunimplemented.cpp | 156 ----------------------------- src/corelib/global/qnaclunimplemented.h | 97 ------------------ src/corelib/kernel/kernel.pri | 7 ++ src/corelib/kernel/qfunctions_nacl.cpp | 156 +++++++++++++++++++++++++++++ src/corelib/kernel/qfunctions_nacl.h | 97 ++++++++++++++++++ src/corelib/kernel/qfunctions_p.h | 2 + 10 files changed, 266 insertions(+), 261 deletions(-) delete mode 100644 src/corelib/global/qnaclunimplemented.cpp delete mode 100644 src/corelib/global/qnaclunimplemented.h create mode 100644 src/corelib/kernel/qfunctions_nacl.cpp create mode 100644 src/corelib/kernel/qfunctions_nacl.h diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h index 70572bf..ec8ca8f 100644 --- a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h @@ -59,6 +59,8 @@ #define PATH_MAX 256 #include "../../common/posix/qplatformdefs.h" +#include "qfunctions_nacl.h" +#include <pthread.h> #undef QT_LSTAT #define QT_LSTAT QT_STAT diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h index f893238..05b133f 100644 --- a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h @@ -58,6 +58,8 @@ #define PATH_MAX 256 #include "../../common/posix/qplatformdefs.h" +#include "qfunctions_nacl.h" +#include <pthread.h> #undef QT_LSTAT #define QT_LSTAT QT_STAT diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 83caa96..d80706a 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -13,10 +13,6 @@ SOURCES += \ global/qmalloc.cpp \ global/qnumeric.cpp -nacl { - SOURCES += global/qnaclunimplemented.cpp -} - # qlibraryinfo.cpp includes qconfig.cpp INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 1879537..0bcaeb5 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2714,10 +2714,6 @@ QT_LICENSED_MODULE(DBus) # define QT_NO_PROCESS #endif -#ifdef Q_OS_NACL -#include <QtCore/qnaclunimplemented.h> -#endif - #if defined (__ELF__) # if defined (Q_OS_LINUX) || defined (Q_OS_SOLARIS) || defined (Q_OS_FREEBSD) || defined (Q_OS_OPENBSD) || defined (Q_OS_IRIX) # define Q_OF_ELF diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp deleted file mode 100644 index 1a89b8df..0000000 --- a/src/corelib/global/qnaclunimplemented.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qnaclunimplemented.h" -#include <pthread.h> -#include <qglobal.h> - -/* - The purpose of this file is to stub out certain functions - that are not provided by the Native Client SDK. This is - done as an alterative to sprinkling the Qt sources with - NACL ifdefs. - - There are two main classes of functions: - - - Functions that are called but can have no effect: - For these we simply give an empty implementation - - - Functions that are referenced in the source code, but - is not/must not be called at run-time: - These we either leave undefined or implement with a - qFatal. - - This is a work in progress. -*/ - -extern "C" { - -void pthread_cleanup_push(void (*)(void *), void *) -{ - -} - -void pthread_cleanup_pop(int) -{ - -} - -int pthread_setcancelstate(int, int *) -{ - return 0; -} - -int pthread_setcanceltype(int, int *) -{ - return 0; -} - -void pthread_testcancel(void) -{ - -} - - -int pthread_cancel(pthread_t) -{ - return 0; -} - -int pthread_attr_setinheritsched(pthread_attr_t *,int) -{ - return 0; -} - - -int pthread_attr_getinheritsched(const pthread_attr_t *, int *) -{ - return 0; -} - -// event dispatcher, select -//struct fd_set; -//struct timeval; - -int fcntl(int, int, ...) -{ - return 0; -} - -int sigaction(int, const struct sigaction *, struct sigaction *) -{ - return 0; -} - -int open(const char *, int, ...) -{ - return 0; -} - -int open64(const char *, int, ...) -{ - return 0; -} - -int access(const char *, int) -{ - return 0; -} - -typedef long off64_t; -off64_t ftello64(void *) -{ - qFatal("ftello64 called"); - return 0; -} - -off64_t lseek64(int, off_t, int) -{ - qFatal("lseek64 called"); - return 0; -} - -} // Extern C - -int select(int, fd_set *, fd_set *, fd_set *, struct timeval *) -{ - return 0; -} diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h deleted file mode 100644 index 921667e..0000000 --- a/src/corelib/global/qnaclunimplemented.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QNACLUNIMPLEMENTED_H -#define QNACLUNIMPLEMENTED_H - -#ifdef Q_OS_NACL - -#include <sys/types.h> - -// pthread -#include <pthread.h> -#define PTHREAD_CANCEL_DISABLE 1 -#define PTHREAD_CANCEL_ENABLE 2 -#define PTHREAD_INHERIT_SCHED 3 - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Core) - -extern "C" { - -void pthread_cleanup_push(void (*handler)(void *), void *arg); -void pthread_cleanup_pop(int execute); - -int pthread_setcancelstate(int state, int *oldstate); -int pthread_setcanceltype(int type, int *oldtype); -void pthread_testcancel(void); -int pthread_cancel(pthread_t thread); - -int pthread_attr_setinheritsched(pthread_attr_t *attr, - int inheritsched); -int pthread_attr_getinheritsched(const pthread_attr_t *attr, - int *inheritsched); - -// event dispatcher, select -//struct fd_set; -//struct timeval; -int fcntl(int fildes, int cmd, ...); -int sigaction(int sig, const struct sigaction * act, struct sigaction * oact); - -typedef long off64_t; -off64_t ftello64(void *stream); -off64_t lseek64(int fildes, off_t offset, int whence); -int open64(const char *path, int oflag, ...); - -} - -int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, struct timeval * timeout); - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif //Q_OS_NACL - -#endif //QNACLUNIMPLEMENTED_H diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index c3a6721..a3628b1 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -90,6 +90,13 @@ mac:!nacl { kernel/qcore_mac.cpp } +nacl { + SOURCES += \ + kernel/qfunctions_nacl.cpp + HEADERS += \ + kernel/qfunctions_nacl.h +} + unix:!symbian { SOURCES += \ kernel/qcore_unix.cpp \ diff --git a/src/corelib/kernel/qfunctions_nacl.cpp b/src/corelib/kernel/qfunctions_nacl.cpp new file mode 100644 index 0000000..bc14cf0 --- /dev/null +++ b/src/corelib/kernel/qfunctions_nacl.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qfunctions_nacl.h" +#include <pthread.h> +#include <qglobal.h> + +/* + The purpose of this file is to stub out certain functions + that are not provided by the Native Client SDK. This is + done as an alterative to sprinkling the Qt sources with + NACL ifdefs. + + There are two main classes of functions: + + - Functions that are called but can have no effect: + For these we simply give an empty implementation + + - Functions that are referenced in the source code, but + is not/must not be called at run-time: + These we either leave undefined or implement with a + qFatal. + + This is a work in progress. +*/ + +extern "C" { + +void pthread_cleanup_push(void (*)(void *), void *) +{ + +} + +void pthread_cleanup_pop(int) +{ + +} + +int pthread_setcancelstate(int, int *) +{ + return 0; +} + +int pthread_setcanceltype(int, int *) +{ + return 0; +} + +void pthread_testcancel(void) +{ + +} + + +int pthread_cancel(pthread_t) +{ + return 0; +} + +int pthread_attr_setinheritsched(pthread_attr_t *,int) +{ + return 0; +} + + +int pthread_attr_getinheritsched(const pthread_attr_t *, int *) +{ + return 0; +} + +// event dispatcher, select +//struct fd_set; +//struct timeval; + +int fcntl(int, int, ...) +{ + return 0; +} + +int sigaction(int, const struct sigaction *, struct sigaction *) +{ + return 0; +} + +int open(const char *, int, ...) +{ + return 0; +} + +int open64(const char *, int, ...) +{ + return 0; +} + +int access(const char *, int) +{ + return 0; +} + +typedef long off64_t; +off64_t ftello64(void *) +{ + qFatal("ftello64 called"); + return 0; +} + +off64_t lseek64(int, off_t, int) +{ + qFatal("lseek64 called"); + return 0; +} + +} // Extern C + +int select(int, fd_set *, fd_set *, fd_set *, struct timeval *) +{ + return 0; +} diff --git a/src/corelib/kernel/qfunctions_nacl.h b/src/corelib/kernel/qfunctions_nacl.h new file mode 100644 index 0000000..921667e --- /dev/null +++ b/src/corelib/kernel/qfunctions_nacl.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNACLUNIMPLEMENTED_H +#define QNACLUNIMPLEMENTED_H + +#ifdef Q_OS_NACL + +#include <sys/types.h> + +// pthread +#include <pthread.h> +#define PTHREAD_CANCEL_DISABLE 1 +#define PTHREAD_CANCEL_ENABLE 2 +#define PTHREAD_INHERIT_SCHED 3 + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Core) + +extern "C" { + +void pthread_cleanup_push(void (*handler)(void *), void *arg); +void pthread_cleanup_pop(int execute); + +int pthread_setcancelstate(int state, int *oldstate); +int pthread_setcanceltype(int type, int *oldtype); +void pthread_testcancel(void); +int pthread_cancel(pthread_t thread); + +int pthread_attr_setinheritsched(pthread_attr_t *attr, + int inheritsched); +int pthread_attr_getinheritsched(const pthread_attr_t *attr, + int *inheritsched); + +// event dispatcher, select +//struct fd_set; +//struct timeval; +int fcntl(int fildes, int cmd, ...); +int sigaction(int sig, const struct sigaction * act, struct sigaction * oact); + +typedef long off64_t; +off64_t ftello64(void *stream); +off64_t lseek64(int fildes, off_t offset, int whence); +int open64(const char *path, int oflag, ...); + +} + +int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, struct timeval * timeout); + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif //Q_OS_NACL + +#endif //QNACLUNIMPLEMENTED_H diff --git a/src/corelib/kernel/qfunctions_p.h b/src/corelib/kernel/qfunctions_p.h index 3d41c0c..d27fec3 100644 --- a/src/corelib/kernel/qfunctions_p.h +++ b/src/corelib/kernel/qfunctions_p.h @@ -59,6 +59,8 @@ # include "QtCore/qfunctions_wince.h" #elif defined(Q_OS_VXWORKS) # include "QtCore/qfunctions_vxworks.h" +#elif defined(Q_OS_NACL) +# include "QtCore/qfunctions_nacl.h" #endif #ifdef Q_CC_RVCT -- cgit v0.12 From ce8fd88984f3da545de8132b6094ed519bdbaa11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Wed, 16 Mar 2011 15:10:01 +0100 Subject: Lighthouse: Add pkg-config check for opengl es2 --- configure | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 2ea3689..bf9d0b4 100755 --- a/configure +++ b/configure @@ -6134,7 +6134,16 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi elif [ "$CFG_OPENGL" = "es2" ]; then #OpenGL ES 2.x - "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists glesv2 2>/dev/null; then + QMAKE_INCDIR_OPENGL_ES2=`$PKG_CONFIG --variable=includedir glesv2 2>/dev/null` + QMAKE_LIBDIR_OPENGL_ES2=`$PKG_CONFIG --variable=libdir glesv2 2>/dev/null` + QMAKE_LIBS_OPENGL_ES2=`$PKG_CONFIG --libs glesv2 2>/dev/null` + QMakeVar set QMAKE_INCDIR_OPENGL_ES2 "$QMAKE_INCDIR_OPENGL_ES2" + QMakeVar set QMAKE_LIBDIR_OPENGL_ES2 "$QMAKE_LIBDIR_OPENGL_ES2" + QMakeVar set QMAKE_LIBS_OPENGL_ES2 "$QMAKE_LIBS_OPENGL_ES2" + fi + + "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS -I$QMAKE_INCDIR_OPENGL_ES2 $QMAKE_LIBS_OPENGL_ES2 -L$QMAKE_LIBDIR_OPENGL_ES2 if [ $? != "0" ]; then echo "The OpenGL ES 2.0 functionality test failed!" echo " You might need to modify the include and library search paths by editing" -- cgit v0.12 From f2f545a37982e44c3a9e614b64bf484294c13756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Wed, 16 Mar 2011 15:11:40 +0100 Subject: Lighthouse: Make sure we don't use xkbcommon when we don't have it --- configure | 18 ++++++++++++++---- mkspecs/common/linux.conf | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/configure b/configure index bf9d0b4..a71dd31 100755 --- a/configure +++ b/configure @@ -6181,10 +6181,18 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi - if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists wayland-client xkbcommon 2>/dev/null; then - QMAKE_CFLAGS_WAYLAND=`$PKG_CONFIG --cflags wayland-client xkbcommon 2>/dev/null` - QMAKE_LIBS_WAYLAND=`$PKG_CONFIG --libs wayland-client xkbcommon 2>/dev/null` - QMAKE_INCDIR_WAYLAND=`$PKG_CONFIG --variable=includedir wayland-client xkbcommon 2>/dev/null` + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists wayland-client 2>/dev/null; then + QMAKE_CFLAGS_WAYLAND=`$PKG_CONFIG --cflags wayland-client 2>/dev/null` + QMAKE_LIBS_WAYLAND=`$PKG_CONFIG --libs wayland-client 2>/dev/null` + QMAKE_INCDIR_WAYLAND=`$PKG_CONFIG --variable=includedir wayland-client 2>/dev/null` + QMAKE_LIBDIR_WAYLAND=`$PKG_CONFIG --variable=libdir wayland-client 2>/dev/null` + + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xkbcommon 2>/dev/null; then + QMAKE_CFLAGS_WAYLAND=$QMAKE_CFLAGS_WAYLAND `$PKG_CONFIG --cflags xkbcommon 2>/dev/null` + QMAKE_LIBS_WAYLAND=$QMAKE_LIBS_WAYLAND `$PKG_CONFIG --libs xkbcommon 2>/dev/null` + else + QMAKE_DEFINES_WAYLAND=QT_NO_WAYLAND_XKB + fi fi # QMake variables set here override those in the mkspec. Therefore we only set the variables here if they are not zero. @@ -6192,6 +6200,8 @@ if [ "$PLATFORM_QPA" = "yes" ]; then QMakeVar set QMAKE_CFLAGS_WAYLAND "$QMAKE_CFLAGS_WAYLAND" QMakeVar set QMAKE_INCDIR_WAYLAND "$QMAKE_INCDIR_WAYLAND" QMakeVar set QMAKE_LIBS_WAYLAND "$QMAKE_LIBS_WAYLAND" + QMakeVar set QMAKE_LIBDIR_WAYLAND "$QMAKE_LIBDIR_WAYLAND" + QMakeVar set QMAKE_DEFINES_WAYLAND " $QMAKE_DEFINES_WAYLAND" fi if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/qpa/wayland "Wayland" $L_FLAGS $I_FLAGS $l_FLAGS $QMAKE_CFLAGS_WAYLAND -I$QMAKE_INCDIR_WAYLAND $QMAKE_LIBS_WAYLAND; then diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf index 283cf83..d60533e 100644 --- a/mkspecs/common/linux.conf +++ b/mkspecs/common/linux.conf @@ -37,7 +37,8 @@ QMAKE_LIBS_THREAD = -lpthread QMAKE_CFLAGS_WAYLAND = QMAKE_INCDIR_WAYLAND = -QMAKE_LIBS_WAYLAND = -lwayland-client -lxkbcommon +QMAKE_LIBS_WAYLAND = +QMAKE_LIBDIR_WAYLAND = QMAKE_DEFINES_WAYLAND = QMAKE_MOC = $$[QT_INSTALL_BINS]/moc -- cgit v0.12 From f3ec9966ab23d1c4e56e17e593b99165364612ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Wed, 16 Mar 2011 15:52:07 +0100 Subject: Lighthouse: Xcb, compile fix for the glx path --- src/plugins/platforms/xcb/qxcbconnection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index da60311..5a6bef7 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -443,10 +443,12 @@ void QXcbConnection::initializeAllAtoms() { m_allAtoms[i] = xcb_intern_atom_reply(xcb_connection(), cookies[i], 0)->atom; } +#if defined(XCB_USE_EGL) bool QXcbConnection::hasEgl() const { return m_has_egl; } +#endif // defined(XCB_USE_EGL) #ifdef XCB_USE_DRI2 void QXcbConnection::initializeDri2() -- cgit v0.12 From 59e1092c5d6a748f8d144b1decadde2dfcb3f7cc Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Wed, 16 Mar 2011 16:54:24 +0100 Subject: benchmarks: first shot at alternative implementation for qHash(QString) --- tests/benchmarks/corelib/tools/qhash/data.txt | 195 +++++++++++++++++++++ tests/benchmarks/corelib/tools/qhash/outofline.cpp | 90 ++++++++++ tests/benchmarks/corelib/tools/qhash/qhash.pro | 6 + .../corelib/tools/qhash/qhash_string.cpp | 132 ++++++++++++++ .../benchmarks/corelib/tools/qhash/qhash_string.h | 12 ++ 5 files changed, 435 insertions(+) create mode 100644 tests/benchmarks/corelib/tools/qhash/data.txt create mode 100644 tests/benchmarks/corelib/tools/qhash/outofline.cpp create mode 100644 tests/benchmarks/corelib/tools/qhash/qhash.pro create mode 100644 tests/benchmarks/corelib/tools/qhash/qhash_string.cpp create mode 100644 tests/benchmarks/corelib/tools/qhash/qhash_string.h diff --git a/tests/benchmarks/corelib/tools/qhash/data.txt b/tests/benchmarks/corelib/tools/qhash/data.txt new file mode 100644 index 0000000..d5acd28 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qhash/data.txt @@ -0,0 +1,195 @@ +. +./corelib.pro +./kernel +./kernel/kernel.pro +./kernel/qobject +./kernel/qobject/main.cpp +./kernel/qobject/object.cpp +./kernel/qobject/object.h +./kernel/qobject/Makefile +./kernel/qobject/qobject.pro +./kernel/qvariant +./kernel/qvariant/tst_qvariant.cpp +./kernel/qvariant/Makefile +./kernel/qvariant/qvariant.pro +./kernel/qtimer_vs_qmetaobject +./kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp +./kernel/qtimer_vs_qmetaobject/Makefile +./kernel/qtimer_vs_qmetaobject/qtimer_vs_qmetaobject.pro +./kernel/.pch +./kernel/.pch/debug-shared +./kernel/qmetaobject +./kernel/qmetaobject/main.cpp +./kernel/qmetaobject/qmetaobject.pro +./kernel/qmetaobject/Makefile +./kernel/Makefile +./kernel/.obj +./kernel/.obj/debug-shared +./kernel/events +./kernel/events/events.pro +./kernel/events/main.cpp +./kernel/events/Makefile +./kernel/qmetatype +./kernel/qmetatype/qmetatype.pro +./kernel/qmetatype/Makefile +./kernel/qmetatype/tst_qmetatype.cpp +./codecs +./codecs/qtextcodec +./codecs/qtextcodec/qtextcodec.pro +./codecs/qtextcodec/main.cpp +./codecs/qtextcodec/Makefile +./codecs/qtextcodec/utf-8.txt +./codecs/codecs.pro +./codecs/.pch +./codecs/.pch/debug-shared +./codecs/Makefile +./codecs/.obj +./codecs/.obj/debug-shared +./.pch +./.pch/debug-shared +./tools +./tools/tools.pro +./tools/qregexp +./tools/qregexp/qregexp.qrc +./tools/qregexp/main.cpp +./tools/qregexp/Makefile +./tools/qregexp/qregexp.pro +./tools/qvector +./tools/qvector/tst_vector +./tools/qvector/.pch +./tools/qvector/.pch/debug-shared +./tools/qvector/qrawvector.h +./tools/qvector/main.cpp +./tools/qvector/Makefile +./tools/qvector/.moc +./tools/qvector/.moc/release-shared +./tools/qvector/.moc/release-shared/main.moc +./tools/qvector/.obj +./tools/qvector/.obj/release-shared +./tools/qvector/.obj/release-shared/outofline.o +./tools/qvector/.obj/release-shared/main.o +./tools/qvector/outofline.cpp +./tools/qvector/qvector.pro +./tools/.pch +./tools/.pch/debug-shared +./tools/qstringbuilder +./tools/qstringbuilder/main.cpp +./tools/qstringbuilder/Makefile +./tools/qstringbuilder/qstringbuilder.pro +./tools/containers-sequential +./tools/containers-sequential/containers-sequential.pro +./tools/containers-sequential/main.cpp +./tools/containers-sequential/Makefile +./tools/qstring +./tools/qstring/generatelist.pl +./tools/qstring/data.h +./tools/qstring/qstring.pro +./tools/qstring/main.cpp +./tools/qstring/data.cpp +./tools/qstring/Makefile +./tools/qstring/utf-8.txt +./tools/qstringlist +./tools/qstringlist/qstringlist.pro +./tools/qstringlist/main.cpp +./tools/qstringlist/.gitignore +./tools/qstringlist/Makefile +./tools/qbytearray +./tools/qbytearray/qbytearray.pro +./tools/qbytearray/main.cpp +./tools/qbytearray/Makefile +./tools/containers-associative +./tools/containers-associative/containers-associative.pro +./tools/containers-associative/main.cpp +./tools/containers-associative/Makefile +./tools/qrect +./tools/qrect/main.cpp +./tools/qrect/Makefile +./tools/qrect/qrect.pro +./tools/Makefile +./tools/qhash +./tools/qhash/data.txt +./tools/qhash/qhash_string.cpp +./tools/qhash/.qhash_string.cpp.swp +./tools/qhash/qhash.pro +./tools/qhash/outofline.cpp +./tools/.obj +./tools/.obj/debug-shared +./Makefile +./.obj +./.obj/debug-shared +./plugin +./plugin/plugin.pro +./plugin/.pch +./plugin/.pch/debug-shared +./plugin/Makefile +./plugin/.obj +./plugin/.obj/debug-shared +./plugin/quuid +./plugin/quuid/tst_quuid.cpp +./plugin/quuid/quuid.pro +./plugin/quuid/Makefile +./io +./io/qtemporaryfile +./io/qtemporaryfile/qtemporaryfile.pro +./io/qtemporaryfile/main.cpp +./io/qtemporaryfile/Makefile +./io/qiodevice +./io/qiodevice/qiodevice.pro +./io/qiodevice/main.cpp +./io/qiodevice/Makefile +./io/qurl +./io/qurl/main.cpp +./io/qurl/Makefile +./io/qurl/qurl.pro +./io/qdir +./io/qdir/.pch +./io/qdir/.pch/debug-shared +./io/qdir/qdir.pro +./io/qdir/tree +./io/qdir/tree/bench_qdir_tree.qrc +./io/qdir/tree/tree.pro +./io/qdir/tree/4.6.0-list.txt +./io/qdir/tree/Makefile +./io/qdir/tree/bench_qdir_tree.cpp +./io/qdir/Makefile +./io/qdir/.obj +./io/qdir/.obj/debug-shared +./io/qdir/10000 +./io/qdir/10000/10000.pro +./io/qdir/10000/bench_qdir_10000.cpp +./io/qdir/10000/Makefile +./io/.pch +./io/.pch/debug-shared +./io/qfile +./io/qfile/qfile.pro +./io/qfile/main.cpp +./io/qfile/Makefile +./io/io.pro +./io/qfileinfo +./io/qfileinfo/qfileinfo.pro +./io/qfileinfo/main.cpp +./io/qfileinfo/Makefile +./io/qdiriterator +./io/qdiriterator/qfilesystemiterator.h +./io/qdiriterator/main.cpp +./io/qdiriterator/Makefile +./io/qdiriterator/qfilesystemiterator.cpp +./io/qdiriterator/qdiriterator.pro +./io/Makefile +./io/.obj +./io/.obj/debug-shared +./thread +./thread/qmutex +./thread/qmutex/tst_qmutex.cpp +./thread/qmutex/Makefile +./thread/qmutex/qmutex.pro +./thread/qthreadstorage +./thread/qthreadstorage/qthreadstorage.pro +./thread/qthreadstorage/Makefile +./thread/qthreadstorage/tst_qthreadstorage.cpp +./thread/.pch +./thread/.pch/debug-shared +./thread/Makefile +./thread/.obj +./thread/.obj/debug-shared +./thread/thread.pro diff --git a/tests/benchmarks/corelib/tools/qhash/outofline.cpp b/tests/benchmarks/corelib/tools/qhash/outofline.cpp new file mode 100644 index 0000000..0a60da2 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qhash/outofline.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtTest module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qhash_string.h" + +static void doHash(const unsigned short *p, uint &h) +{ +#if 1 + // Copied from static uint hash(const QChar *p, int n). + // Possibly not the cheapest way. + h = (h << 4) + (*p++); + h ^= (h & 0xf0000000) >> 23; + h &= 0x0fffffff; + + h = (h << 4) + (*p++); + h ^= (h & 0xf0000000) >> 23; + h &= 0x0fffffff; + + h = (h << 4) + (*p++); + h ^= (h & 0xf0000000) >> 23; + h &= 0x0fffffff; + + h = (h << 4) + (*p++); + h ^= (h & 0xf0000000) >> 23; + h &= 0x0fffffff; +#else + // Faster, but probably less spread. + h ^= *(unsigned int *)p; +#endif +} + +QT_BEGIN_NAMESPACE + +uint qHash(const String &str) +{ + const unsigned short *p = (unsigned short *)str.constData(); + const int s = str.size(); + switch (s) { + case 0: return 0; + case 1: return *p; + case 2: return *(unsigned int *)p; + case 3: return (*(unsigned int *)p) ^ *(p + 2); + //case 3: return (*p << 11) + (*(p + 1) << 22) + *(p + 2); + } + uint h = 0; + doHash(p, h); + doHash(p + s / 2 - 2, h); + doHash(p + s - 4, h); + return h; +} + +QT_END_NAMESPACE diff --git a/tests/benchmarks/corelib/tools/qhash/qhash.pro b/tests/benchmarks/corelib/tools/qhash/qhash.pro new file mode 100644 index 0000000..dff152c --- /dev/null +++ b/tests/benchmarks/corelib/tools/qhash/qhash.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +TARGET = tst_hash +QT = core +INCLUDEPATH += . +SOURCES += qhash_string.cpp outofline.cpp +CONFIG += release diff --git a/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp b/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp new file mode 100644 index 0000000..fde1722 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp @@ -0,0 +1,132 @@ + +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + +//////////////////////////////////////////////////////////////////// + +This benchmark serves as reality check on the idea that hashing the complete +string is a good idea. + + Executive summary: It is not a good idea. + +//////////////////////////////////////////////////////////////////// + +********* Start testing of tst_QHash ********* +Config: Using QTest library 4.8.0, Qt 4.8.0 +PASS : tst_QHash::initTestCase() +RESULT : tst_QHash::qhash_qt4(): + 0.041 msecs per iteration (total: 85, iterations: 2048) +PASS : tst_QHash::qhash_qt4() +RESULT : tst_QHash::qhash_faster(): + 0.0122 msecs per iteration (total: 100, iterations: 8192) +PASS : tst_QHash::qhash_faster() +PASS : tst_QHash::cleanupTestCase() +Totals: 4 passed, 0 failed, 0 skipped + +//////////////////////////////////////////////////////////////////// + +*/ + +#include "qhash_string.h" + +#include <QFile> +#include <QHash> +#include <QString> +#include <QStringList> + +#include <QTest> + + +class tst_QHash : public QObject +{ + Q_OBJECT + +private slots: + void qhash_qt4(); + void qhash_faster(); + +private: + QString data(); +}; + +const int N = 1000000; +extern double s; + +///////////////////// QHash ///////////////////// + +QString tst_QHash::data() +{ + QFile file("data.txt"); + file.open(QIODevice::ReadOnly); + return QString::fromLatin1(file.readAll()); +} + +void tst_QHash::qhash_qt4() +{ + QStringList items = data().split(QLatin1Char('\n')); + QHash<QString, int> hash; + + QBENCHMARK { + for (int i = 0, n = items.size(); i != n; ++i) { + hash[items.at(i)] = i; + } + } +} + +void tst_QHash::qhash_faster() +{ + QList<String> items; + foreach (const QString &s, data().split(QLatin1Char('\n'))) + items.append(s); + QHash<String, int> hash; + + QBENCHMARK { + for (int i = 0, n = items.size(); i != n; ++i) { + hash[items.at(i)] = i; + } + } +} + +QTEST_MAIN(tst_QHash) + +#include "qhash_string.moc" diff --git a/tests/benchmarks/corelib/tools/qhash/qhash_string.h b/tests/benchmarks/corelib/tools/qhash/qhash_string.h new file mode 100644 index 0000000..bdc7770 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qhash/qhash_string.h @@ -0,0 +1,12 @@ + +#include <QString> + +struct String : QString +{ + String() {} + String(const QString &s) : QString(s) {} +}; + +QT_BEGIN_NAMESPACE +uint qHash(const String &); +QT_END_NAMESPACE -- cgit v0.12 From 65ae717b2c8fc979ccb30c967335999a6d90eb4f Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Wed, 16 Mar 2011 17:02:56 +0100 Subject: corelib/tools: Add two ### Qt 5 comments A proposol to speed up qHash(QString) and QVector. --- src/corelib/tools/qhash.cpp | 4 ++++ src/corelib/tools/qvector.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 66ec660..b6ba8b2 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -54,6 +54,10 @@ QT_BEGIN_NAMESPACE + +// ### Qt 5: see tests/benchmarks/corelib/tools/qhash/qhash_string.cpp +// Hashing of the whole string is a waste of cycles. + /* These functions are based on Peter J. Weinberger's hash function (from the Dragon Book). The constant 24 in the original function diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 56d1cca..9418642 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -115,6 +115,8 @@ class QVector }; public: + // ### Qt 5: Consider making QVector non-shared to get at least one + // "really fast" container. See tests/benchmarks/corelib/tools/qvector/ inline QVector() : d(&QVectorData::shared_null) { d->ref.ref(); } explicit QVector(int size); QVector(int size, const T &t); -- cgit v0.12 From 50c0c6a032ef2c0af8c93f52f5c2f86ca145e852 Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 17 Mar 2011 14:41:40 +1000 Subject: Re-enable lineHeight tests. These tests were disabled by 24d8e96624af91ab01a20c10625858300f16099b Change-Id: I5bf3e11dfb3c975415c3039b39a39c22984d2900 --- tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 2d52642..581b58c 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -1206,13 +1206,13 @@ void tst_qdeclarativetext::lineHeight() myText->setLineHeightMode(QDeclarativeText::ProportionalHeight); myText->setLineHeight(1.0); - //qreal h2 = myText->height(); + qreal h2 = myText->height(); myText->setLineHeight(2.0); - //QVERIFY(myText->height() == h2 * 2.0); + QVERIFY(myText->height() == h2 * 2.0); myText->setLineHeightMode(QDeclarativeText::FixedHeight); myText->setLineHeight(10); - //QCOMPARE(myText->height(), myText->lineCount() * 10.0); + QCOMPARE(myText->height(), myText->lineCount() * 10.0); delete canvas; } -- cgit v0.12 From 82a53835a71a8e1902774c67e792bf6d7d6385de Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 17 Mar 2011 14:24:50 +1000 Subject: QDeclarativeView flickers when composited on MeeGo Set Qt::WA_OpaquePaintEvent and Qt::WA_NoSystemBackground for QDeclarativeView on meego. Change-Id: I301d2381ae831485d205ff42b0c15b3fa7a73424 Task-number: QTBUG-17173 Reviewed-by: Michael Brasser --- doc/src/declarative/qdeclarativeperformance.qdoc | 11 +++++++++++ src/declarative/declarative.pro | 2 ++ src/declarative/util/qdeclarativeview.cpp | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/doc/src/declarative/qdeclarativeperformance.qdoc b/doc/src/declarative/qdeclarativeperformance.qdoc index 36b4878..6760869 100644 --- a/doc/src/declarative/qdeclarativeperformance.qdoc +++ b/doc/src/declarative/qdeclarativeperformance.qdoc @@ -136,4 +136,15 @@ The QML Viewer uses the raster graphics system by default for X11 and OS X. It a includes a \c -opengl command line option which sets a QGLWidget as the viewport of the view. On OS X, a QGLWidget is always used. +You can also prevent QDeclarativeView from painting its window background if +you will provide the background of your application using QML, e.g. + +\code +QDeclarativeView window; +window.setAttribute(Qt::WA_OpaquePaintEvent); +window.setAttribute(Qt::WA_NoSystemBackground); +window.viewport()->setAttribute(Qt::WA_OpaquePaintEvent); +window.viewport()->setAttribute(Qt::WA_NoSystemBackground); +\endcode + */ diff --git a/src/declarative/declarative.pro b/src/declarative/declarative.pro index 1ad888b..f3a7db9 100644 --- a/src/declarative/declarative.pro +++ b/src/declarative/declarative.pro @@ -29,6 +29,8 @@ symbian: { LIBS += -lefsrv } +linux-g++-maemo:DEFINES += QDECLARATIVEVIEW_NOBACKGROUND + DEFINES += QT_NO_OPENTYPE INCLUDEPATH += ../3rdparty/harfbuzz/src diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index c2e5efe..13880c2 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -293,6 +293,13 @@ void QDeclarativeViewPrivate::init() q->setFocusPolicy(Qt::StrongFocus); q->scene()->setStickyFocus(true); //### needed for correct focus handling + +#ifdef QDECLARATIVEVIEW_NOBACKGROUND + q->setAttribute(Qt::WA_OpaquePaintEvent); + q->setAttribute(Qt::WA_NoSystemBackground); + q->viewport()->setAttribute(Qt::WA_OpaquePaintEvent); + q->viewport()->setAttribute(Qt::WA_NoSystemBackground); +#endif } /*! -- cgit v0.12 From cb0b93e3ef107b8a47445c926753b6bcf07b796d Mon Sep 17 00:00:00 2001 From: Yann Bodson <yann.bodson@nokia.com> Date: Thu, 17 Mar 2011 16:12:29 +1000 Subject: Doc improvement for Image.fillMode. Change-Id: I2aec2c9fae07a8551001b2c7d5f5ab8da0fbb7df Task-number: QTBUG-14899 --- src/declarative/graphicsitems/qdeclarativeimage.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 2c9bde5..ec20200 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -147,8 +147,8 @@ void QDeclarativeImagePrivate::setPixmap(const QPixmap &pixmap) /*! \qmlproperty enumeration Image::fillMode - Set this property to define what happens when the image set for the item is smaller - than the size of the item. + Set this property to define what happens when the source image has a different size + than the item. \list \o Image.Stretch - the image is scaled to fit @@ -234,6 +234,9 @@ void QDeclarativeImagePrivate::setPixmap(const QPixmap &pixmap) \endtable + Note that \c clip is \c false by default which means that the element might + paint outside its bounding rectangle even if the fillMode is set to \c PreserveAspectCrop. + \sa {declarative/imageelements/image}{Image example} */ QDeclarativeImage::FillMode QDeclarativeImage::fillMode() const -- cgit v0.12 From 695a39410c8ce186a2ce78cef51093c55fc32643 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 17 Mar 2011 17:10:56 +1000 Subject: Image.PreserveAspectFit has unexpected effect on Image's sourceSize The sourceSize should always be the size of the image, unless set otherwise. When calculating the size of an image with Image.PreserveAspectFit set the natural image size should be used for the calculation if no size has been set explicitly. Change-Id: I104b7d1c3c16aa5b4fc98b1f9078ed8ae997cf69 Task-number: QTBUG-16389 Reviewed-by: Joona Petrell --- .../graphicsitems/qdeclarativeimage.cpp | 10 +++++--- .../graphicsitems/qdeclarativeimagebase.cpp | 2 +- .../qdeclarativeimage/data/qtbug_16389.qml | 30 ++++++++++++++++++++++ .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 24 +++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeimage/data/qtbug_16389.qml diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index ec20200..ed5d5fc 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -389,14 +389,16 @@ void QDeclarativeImage::updatePaintedGeometry() if (d->fillMode == PreserveAspectFit) { if (!d->pix.width() || !d->pix.height()) return; - qreal widthScale = width() / qreal(d->pix.width()); - qreal heightScale = height() / qreal(d->pix.height()); + qreal w = widthValid() ? width() : d->pix.width(); + qreal widthScale = w / qreal(d->pix.width()); + qreal h = heightValid() ? height() : d->pix.height(); + qreal heightScale = h / qreal(d->pix.height()); if (widthScale <= heightScale) { - d->paintedWidth = width(); + d->paintedWidth = w; d->paintedHeight = widthScale * qreal(d->pix.height()); } else if(heightScale < widthScale) { d->paintedWidth = heightScale * qreal(d->pix.width()); - d->paintedHeight = height(); + d->paintedHeight = h; } if (widthValid() && !heightValid()) { setImplicitHeight(d->paintedHeight); diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp index 471c87f..2de3ba0 100644 --- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp @@ -130,7 +130,7 @@ QSize QDeclarativeImageBase::sourceSize() const int width = d->sourcesize.width(); int height = d->sourcesize.height(); - return QSize(width != -1 ? width : implicitWidth(), height != -1 ? height : implicitHeight()); + return QSize(width != -1 ? width : d->pix.width(), height != -1 ? height : d->pix.height()); } bool QDeclarativeImageBase::cache() const diff --git a/tests/auto/declarative/qdeclarativeimage/data/qtbug_16389.qml b/tests/auto/declarative/qdeclarativeimage/data/qtbug_16389.qml new file mode 100644 index 0000000..29fba40 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimage/data/qtbug_16389.qml @@ -0,0 +1,30 @@ +import QtQuick 1.0 +Rectangle { + width: 400 + height: 400 + + Item { + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: blueHandle.top + anchors.right: blueHandle.left + + Image { + id: iconImage + objectName: "iconImage" + anchors.top: parent.top + anchors.bottom: parent.bottom + source: "heart200.png" + fillMode: Image.PreserveAspectFit + smooth: true + } + } + + Rectangle { + id: blueHandle + objectName: "blueHandle" + color: "blue" + width: 25 + height: 25 + } +} diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index f1fe2bd..9e090d2 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -89,6 +89,7 @@ private slots: void noLoading(); void paintedWidthHeight(); void sourceSize_QTBUG_14303(); + void sourceSize_QTBUG_16389(); void nullPixmapPaint(); void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); @@ -640,6 +641,29 @@ void tst_qdeclarativeimage::sourceSize_QTBUG_14303() QTRY_COMPARE(sourceSizeSpy.count(), 2); } +void tst_qdeclarativeimage::sourceSize_QTBUG_16389() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/qtbug_16389.qml")); + canvas->show(); + qApp->processEvents(); + + QDeclarativeImage *image = findItem<QDeclarativeImage>(canvas->rootObject(), "iconImage"); + QDeclarativeItem *handle = findItem<QDeclarativeItem>(canvas->rootObject(), "blueHandle"); + + QCOMPARE(image->sourceSize().width(), 200); + QCOMPARE(image->sourceSize().height(), 200); + QCOMPARE(image->paintedWidth(), 0.0); + QCOMPARE(image->paintedHeight(), 0.0); + + handle->setY(20); + + QCOMPARE(image->sourceSize().width(), 200); + QCOMPARE(image->sourceSize().height(), 200); + QCOMPARE(image->paintedWidth(), 20.0); + QCOMPARE(image->paintedHeight(), 20.0); +} + static int numberOfWarnings = 0; static void checkWarnings(QtMsgType, const char *) { -- cgit v0.12 From ac704e9f682378a5ec56e3f5c195dcf2f2dfa1ac Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Thu, 17 Mar 2011 18:01:50 +1000 Subject: PathView doesn't update if preferred highlight range changes. Simply call refill() when they change. Change-Id: I45ab56cbcaf5c726ce4c4f23f66ee687a6d89dad Task-number: QTBUG-15356 Reviewed-by: Kevin Wu Won --- .../graphicsitems/qdeclarativepathview.cpp | 2 ++ .../qdeclarativepathview/data/dragpath.qml | 2 +- .../tst_qdeclarativepathview.cpp | 40 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index 4e401e9..778b8b9 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -796,6 +796,7 @@ void QDeclarativePathView::setPreferredHighlightBegin(qreal start) return; d->highlightRangeStart = start; d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; + refill(); emit preferredHighlightBeginChanged(); } @@ -812,6 +813,7 @@ void QDeclarativePathView::setPreferredHighlightEnd(qreal end) return; d->highlightRangeEnd = end; d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd; + refill(); emit preferredHighlightEndChanged(); } diff --git a/tests/auto/declarative/qdeclarativepathview/data/dragpath.qml b/tests/auto/declarative/qdeclarativepathview/data/dragpath.qml index a361bdc..0f94840 100644 --- a/tests/auto/declarative/qdeclarativepathview/data/dragpath.qml +++ b/tests/auto/declarative/qdeclarativepathview/data/dragpath.qml @@ -9,7 +9,7 @@ PathView { startX: 0; startY: 100 PathLine { x: 400; y: 100 } } - delegate: Rectangle { height: 100; width: 1; color: PathView.isCurrentItem?"red" : "black" } + delegate: Rectangle { objectName: "wrapper"; height: 100; width: 2; color: PathView.isCurrentItem?"red" : "black" } dragMargin: 100 preferredHighlightBegin: 0.5 preferredHighlightEnd: 0.5 diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index ebb5f98..8000137 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -111,6 +111,7 @@ private slots: void undefinedPath(); void mouseDrag(); void treeModel(); + void changePreferredHighlight(); private: QDeclarativeView *createView(); @@ -948,6 +949,45 @@ void tst_QDeclarativePathView::treeModel() delete canvas; } +void tst_QDeclarativePathView::changePreferredHighlight() +{ + QDeclarativeView *canvas = createView(); + canvas->setFixedSize(400,200); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragpath.qml")); + canvas->show(); + QApplication::setActiveWindow(canvas); + QTest::qWaitForWindowShown(canvas); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas)); + + QDeclarativePathView *pathview = qobject_cast<QDeclarativePathView*>(canvas->rootObject()); + QVERIFY(pathview != 0); + + int current = pathview->currentIndex(); + QCOMPARE(current, 0); + + QDeclarativeRectangle *firstItem = findItem<QDeclarativeRectangle>(pathview, "wrapper", 0); + QVERIFY(firstItem); + QDeclarativePath *path = qobject_cast<QDeclarativePath*>(pathview->path()); + QVERIFY(path); + QPointF start = path->pointAt(0.5); + start.setX(qRound(start.x())); + start.setY(qRound(start.y())); + QPointF offset;//Center of item is at point, but pos is from corner + offset.setX(firstItem->width()/2); + offset.setY(firstItem->height()/2); + QTRY_COMPARE(firstItem->pos() + offset, start); + + pathview->setPreferredHighlightBegin(0.8); + pathview->setPreferredHighlightEnd(0.8); + start = path->pointAt(0.8); + start.setX(qRound(start.x())); + start.setY(qRound(start.y())); + QTRY_COMPARE(firstItem->pos() + offset, start); + QCOMPARE(pathview->currentIndex(), 0); + + delete canvas; +} + QDeclarativeView *tst_QDeclarativePathView::createView() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From 58548add6d3ff7c09db0573abdba4d006a10bad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Wed, 16 Mar 2011 10:45:16 +0100 Subject: Don't skip remaining events on unhandled events in xcb backend. --- src/plugins/platforms/xcb/qxcbconnection.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 5a6bef7..de3f926 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -216,6 +216,7 @@ void printXcbEvent(const char *message, xcb_generic_event_t *event) void QXcbConnection::eventDispatcher() { while (xcb_generic_event_t *event = xcb_poll_for_event(xcb_connection())) { + bool handled = true; switch (event->response_type & ~0x80) { case XCB_EXPOSE: HANDLE_PLATFORM_WINDOW_EVENT(xcb_expose_event_t, window, handleExposeEvent); @@ -245,10 +246,13 @@ void QXcbConnection::eventDispatcher() m_keyboard->handleMappingNotifyEvent((xcb_mapping_notify_event_t *)event); break; default: - printXcbEvent("Unhandled XCB event", event); + handled = false; return; } - printXcbEvent("Handled XCB event", event); + if (handled) + printXcbEvent("Handled XCB event", event); + else + printXcbEvent("Unhandled XCB event", event); } } -- cgit v0.12 From 64f06b90f58a3f88482e116fa36f2b26acd82b0b Mon Sep 17 00:00:00 2001 From: Morten Sorvig <msorvig@trolltech.com> Date: Thu, 17 Mar 2011 12:22:26 +0100 Subject: Mac: add autorelease pools to create_sys Fixes a couple of on-startup leaks. --- src/gui/kernel/qwidget_mac.mm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 14a90ef..34918e4 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2476,6 +2476,8 @@ void QWidgetPrivate::createWindow_sys() void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) { Q_Q(QWidget); + QMacCocoaAutoReleasePool pool; + OSViewRef destroyid = 0; #ifndef QT_MAC_USE_COCOA window_event = 0; @@ -4423,6 +4425,8 @@ void QWidgetPrivate::adjustWithinMaxAndMinSize(int &w, int &h) void QWidgetPrivate::applyMaxAndMinSizeOnWindow() { Q_Q(QWidget); + QMacCocoaAutoReleasePool pool; + const float max_f(20000); #ifndef QT_MAC_USE_COCOA #define SF(x) ((x > max_f) ? max_f : x) -- cgit v0.12 From 2ba58fc0a36a30d19e46f9c012598958f98c2e33 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Thu, 17 Mar 2011 12:23:51 +0100 Subject: Clipboard/Windows: Fix a hang when sending to non-responsive clients. Check if clipboard viewer is responsive before sending the contents. This prevents Qt Creator from hanging when copying text while a debugging session with a crashed/stopped debuggee is in progress. Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com> Task-number: QTBUG-17465 --- src/gui/kernel/qclipboard_win.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qclipboard_win.cpp b/src/gui/kernel/qclipboard_win.cpp index 52b9663..ea41165 100644 --- a/src/gui/kernel/qclipboard_win.cpp +++ b/src/gui/kernel/qclipboard_win.cpp @@ -52,6 +52,7 @@ #include "qt_windows.h" #include "qdnd_p.h" #include <private/qwidget_p.h> +#include <private/qsystemlibrary_p.h> QT_BEGIN_NAMESPACE @@ -70,6 +71,9 @@ void QtCeFlushClipboard(); #endif +typedef BOOL (WINAPI *PtrIsHungAppWindow)(HWND); + +static PtrIsHungAppWindow ptrIsHungAppWindow = 0; class QClipboardWatcher : public QInternalMimeData { public: @@ -327,9 +331,16 @@ bool QClipboard::event(QEvent *e) d->releaseIData(); propagate = true; } - if (propagate && d->nextClipboardViewer) { - SendMessage(d->nextClipboardViewer, m->message, m->wParam, m->lParam); + if (ptrIsHungAppWindow == 0) { + QSystemLibrary library(QLatin1String("User32")); + ptrIsHungAppWindow = (PtrIsHungAppWindow)library.resolve("IsHungAppWindow"); + } + if (ptrIsHungAppWindow && ptrIsHungAppWindow(d->nextClipboardViewer)) { + qWarning("%s: Cowardly refusing to send clipboard message to hung application...", Q_FUNC_INFO); + } else { + SendMessage(d->nextClipboardViewer, m->message, m->wParam, m->lParam); + } } return true; -- cgit v0.12 From b9b1d0c5ae9ff9a8799616acd7165565afbd2337 Mon Sep 17 00:00:00 2001 From: aavit <qt-info@nokia.com> Date: Thu, 17 Mar 2011 11:16:16 +0100 Subject: Fixes: some text fields in PNG image files were not read Text chunks placed after the real image data (IDAT chunks) were ignored. Reviewed-by: Kim --- src/gui/image/qpnghandler.cpp | 65 ++++++++++++++++----------- tests/auto/qimagereader/images/txts.png | Bin 0 -> 5413 bytes tests/auto/qimagereader/qimagereader.qrc | 1 + tests/auto/qimagereader/tst_qimagereader.cpp | 28 ++++++++++++ 4 files changed, 68 insertions(+), 26 deletions(-) create mode 100755 tests/auto/qimagereader/images/txts.png diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index a9aad51..450e8c6 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -109,6 +109,7 @@ public: bool readPngHeader(); bool readPngImage(QImage *image); + void readPngTexts(png_info *info); QImage::Format readImageFormat(); @@ -359,6 +360,39 @@ static void CALLBACK_CALL_TYPE qt_png_warning(png_structp /*png_ptr*/, png_const } #endif + +/*! + \internal +*/ +void Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngTexts(png_info *info) +{ +#ifndef QT_NO_IMAGE_TEXT + png_textp text_ptr; + int num_text=0; + png_get_text(png_ptr, info, &text_ptr, &num_text); + + while (num_text--) { + QString key, value; + key = QString::fromLatin1(text_ptr->key); +#if defined(PNG_iTXt_SUPPORTED) + if (text_ptr->itxt_length) { + value = QString::fromUtf8(text_ptr->text, int(text_ptr->itxt_length)); + } else +#endif + { + value = QString::fromLatin1(text_ptr->text, int(text_ptr->text_length)); + } + if (!description.isEmpty()) + description += QLatin1String("\n\n"); + description += key + QLatin1String(": ") + value.simplified(); + readTexts.append(key); + readTexts.append(value); + text_ptr++; + } +#endif +} + + /*! \internal */ @@ -394,30 +428,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngHeader() png_set_read_fn(png_ptr, this, iod_read_fn); png_read_info(png_ptr, info_ptr); -#ifndef QT_NO_IMAGE_TEXT - png_textp text_ptr; - int num_text=0; - png_get_text(png_ptr,info_ptr,&text_ptr,&num_text); - - while (num_text--) { - QString key, value; - key = QString::fromLatin1(text_ptr->key); -#if defined(PNG_iTXt_SUPPORTED) - if (text_ptr->itxt_length) { - value = QString::fromUtf8(text_ptr->text, int(text_ptr->itxt_length)); - } else -#endif - { - value = QString::fromLatin1(QByteArray(text_ptr->text, int(text_ptr->text_length))); - } - if (!description.isEmpty()) - description += QLatin1String("\n\n"); - description += key + QLatin1String(": ") + value.simplified(); - readTexts.append(key); - readTexts.append(value); - text_ptr++; - } -#endif + readPngTexts(info_ptr); state = ReadHeader; return true; @@ -492,11 +503,13 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) outImage->setDotsPerMeterX(png_get_x_pixels_per_meter(png_ptr,info_ptr)); outImage->setDotsPerMeterY(png_get_y_pixels_per_meter(png_ptr,info_ptr)); + state = ReadingEnd; + png_read_end(png_ptr, end_info); + + readPngTexts(end_info); for (int i = 0; i < readTexts.size()-1; i+=2) outImage->setText(readTexts.at(i), readTexts.at(i+1)); - state = ReadingEnd; - png_read_end(png_ptr, end_info); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); delete [] row_pointers; png_ptr = 0; diff --git a/tests/auto/qimagereader/images/txts.png b/tests/auto/qimagereader/images/txts.png new file mode 100755 index 0000000..99be1eb Binary files /dev/null and b/tests/auto/qimagereader/images/txts.png differ diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc index 5536b38..632b73a 100644 --- a/tests/auto/qimagereader/qimagereader.qrc +++ b/tests/auto/qimagereader/qimagereader.qrc @@ -64,5 +64,6 @@ <file>images/corrupt.svg</file> <file>images/corrupt.svgz</file> <file>images/qtbug13653-no_eoi.jpg</file> + <file>images/txts.png</file> </qresource> </RCC> diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp index f02fd6a..5db5f56 100644 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/qimagereader/tst_qimagereader.cpp @@ -183,6 +183,9 @@ private slots: void saveFormat_data(); void saveFormat(); + void readText_data(); + void readText(); + void preserveTexts_data(); void preserveTexts(); }; @@ -1968,6 +1971,31 @@ void tst_QImageReader::saveFormat() } +void tst_QImageReader::readText_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<QString>("key"); + QTest::addColumn<QString>("text"); + + QTest::newRow("png, tEXt before img") << "txts.png" << "Title" << "PNG"; + QTest::newRow("png, zTXt before img") << "txts.png" << "Comment" << "Some compressed text."; + QTest::newRow("png, tEXt after img") << "txts.png" << "Disclaimer" << "For testing only."; + QTest::newRow("png, zTXt after img") << "txts.png" << "Description" << "Rendered by Persistence of Vision (tm) Ray Tracer"; +} + + +void tst_QImageReader::readText() +{ + QFETCH(QString, fileName); + QFETCH(QString, key); + QFETCH(QString, text); + + QImage img(prefix + fileName); + QVERIFY(img.textKeys().contains(key)); + QCOMPARE(img.text(key), text); +} + + void tst_QImageReader::preserveTexts_data() { QTest::addColumn<QString>("text"); -- cgit v0.12 From 1cd2752dab75ed88a4b41e352dc695060935594a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 17 Mar 2011 12:32:41 +0100 Subject: Fixup license headers in Lighthouse plugins --- src/plugins/platforms/cocoa/main.mm | 2 +- .../platforms/cocoa/qcocoaautoreleasepool.h | 2 +- .../platforms/cocoa/qcocoaautoreleasepool.mm | 2 +- .../platforms/cocoa/qcocoaeventloopintegration.h | 2 +- .../platforms/cocoa/qcocoaeventloopintegration.mm | 2 +- src/plugins/platforms/cocoa/qcocoaintegration.h | 2 +- src/plugins/platforms/cocoa/qcocoaintegration.mm | 2 +- src/plugins/platforms/cocoa/qcocoawindow.h | 4 +-- src/plugins/platforms/cocoa/qcocoawindow.mm | 4 +-- src/plugins/platforms/cocoa/qcocoawindowsurface.h | 4 +-- src/plugins/platforms/cocoa/qcocoawindowsurface.mm | 4 +-- src/plugins/platforms/cocoa/qnsview.h | 2 +- src/plugins/platforms/cocoa/qnsview.mm | 2 +- src/plugins/platforms/cocoa/qnswindowdelegate.h | 2 +- src/plugins/platforms/cocoa/qnswindowdelegate.mm | 2 +- src/plugins/platforms/directfb/main.cpp | 2 +- .../eglconvenience/qxlibeglintegration.cpp | 4 +-- .../platforms/eglconvenience/qxlibeglintegration.h | 2 +- src/plugins/platforms/linuxfb/main.cpp | 2 +- .../platforms/linuxfb/qlinuxfbintegration.cpp | 2 +- .../platforms/linuxfb/qlinuxfbintegration.h | 2 +- src/plugins/platforms/openvglite/main.cpp | 2 +- .../openvglite/qgraphicssystem_vglite.cpp | 2 +- .../platforms/openvglite/qgraphicssystem_vglite.h | 2 +- .../platforms/openvglite/qwindowsurface_vglite.cpp | 4 +-- .../platforms/openvglite/qwindowsurface_vglite.h | 2 +- src/plugins/platforms/qvfb/main.cpp | 2 +- src/plugins/platforms/qvfb/qvfbintegration.cpp | 2 +- src/plugins/platforms/qvfb/qvfbintegration.h | 2 +- src/plugins/platforms/qvfb/qvfbwindowsurface.cpp | 4 +-- src/plugins/platforms/qvfb/qvfbwindowsurface.h | 4 +-- .../qmlapplicationviewer/qmlapplicationviewer.cpp | 41 ++++++++++++++++++++++ .../qmlapplicationviewer/qmlapplicationviewer.h | 41 ++++++++++++++++++++++ src/plugins/platforms/uikit/main.mm | 2 +- src/plugins/platforms/uikit/quikiteventloop.h | 2 +- src/plugins/platforms/uikit/quikiteventloop.mm | 2 +- src/plugins/platforms/uikit/quikitintegration.h | 2 +- src/plugins/platforms/uikit/quikitintegration.mm | 2 +- src/plugins/platforms/uikit/quikitscreen.h | 2 +- src/plugins/platforms/uikit/quikitscreen.mm | 2 +- src/plugins/platforms/uikit/quikitwindow.h | 2 +- src/plugins/platforms/uikit/quikitwindow.mm | 2 +- src/plugins/platforms/uikit/quikitwindowsurface.h | 2 +- src/plugins/platforms/uikit/quikitwindowsurface.mm | 2 +- src/plugins/platforms/vnc/main.cpp | 2 +- src/plugins/platforms/vnc/qvnccursor.cpp | 4 +-- src/plugins/platforms/vnc/qvnccursor.h | 4 +-- src/plugins/platforms/vnc/qvncintegration.cpp | 2 +- src/plugins/platforms/vnc/qvncintegration.h | 2 +- src/plugins/platforms/vnc/qvncserver.cpp | 2 +- src/plugins/platforms/vnc/qvncserver.h | 2 +- src/plugins/platforms/wayland/main.cpp | 2 +- src/plugins/platforms/wayland/qwaylandcursor.cpp | 2 +- src/plugins/platforms/wayland/qwaylandcursor.h | 2 +- .../platforms/wayland/qwaylanddrmsurface.cpp | 4 +-- .../platforms/wayland/qwaylandintegration.h | 2 +- .../platforms/wayland/qwaylandshmsurface.cpp | 4 +-- src/plugins/platforms/wayland/qwaylandshmsurface.h | 4 +-- src/plugins/platforms/xcb/main.cpp | 2 +- src/plugins/platforms/xcb/qdri2context.cpp | 41 ++++++++++++++++++++++ src/plugins/platforms/xcb/qdri2context.h | 41 ++++++++++++++++++++++ src/plugins/platforms/xcb/qglxintegration.cpp | 2 +- src/plugins/platforms/xcb/qglxintegration.h | 2 +- src/plugins/platforms/xcb/qxcbconnection.cpp | 2 +- src/plugins/platforms/xcb/qxcbconnection.h | 2 +- src/plugins/platforms/xcb/qxcbintegration.cpp | 2 +- src/plugins/platforms/xcb/qxcbintegration.h | 2 +- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 2 +- src/plugins/platforms/xcb/qxcbkeyboard.h | 2 +- src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 41 ++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbnativeinterface.h | 41 ++++++++++++++++++++++ src/plugins/platforms/xcb/qxcbobject.h | 2 +- src/plugins/platforms/xcb/qxcbscreen.cpp | 2 +- src/plugins/platforms/xcb/qxcbscreen.h | 2 +- src/plugins/platforms/xcb/qxcbwindow.cpp | 2 +- src/plugins/platforms/xcb/qxcbwindow.h | 2 +- src/plugins/platforms/xcb/qxcbwindowsurface.cpp | 2 +- src/plugins/platforms/xcb/qxcbwindowsurface.h | 2 +- src/plugins/platforms/xlib/main.cpp | 2 +- src/plugins/platforms/xlib/qglxintegration.cpp | 2 +- src/plugins/platforms/xlib/qglxintegration.h | 2 +- src/plugins/platforms/xlib/qxlibclipboard.cpp | 4 +-- src/plugins/platforms/xlib/qxlibclipboard.h | 4 +-- src/plugins/platforms/xlib/qxlibcursor.cpp | 2 +- src/plugins/platforms/xlib/qxlibcursor.h | 4 +-- src/plugins/platforms/xlib/qxlibdisplay.cpp | 41 ++++++++++++++++++++++ src/plugins/platforms/xlib/qxlibdisplay.h | 41 ++++++++++++++++++++++ src/plugins/platforms/xlib/qxlibintegration.cpp | 2 +- src/plugins/platforms/xlib/qxlibintegration.h | 2 +- src/plugins/platforms/xlib/qxlibkeyboard.cpp | 2 +- src/plugins/platforms/xlib/qxlibkeyboard.h | 2 +- src/plugins/platforms/xlib/qxlibmime.cpp | 2 +- src/plugins/platforms/xlib/qxlibmime.h | 2 +- src/plugins/platforms/xlib/qxlibscreen.cpp | 2 +- src/plugins/platforms/xlib/qxlibscreen.h | 2 +- src/plugins/platforms/xlib/qxlibstatic.cpp | 2 +- src/plugins/platforms/xlib/qxlibstatic.h | 2 +- src/plugins/platforms/xlib/qxlibwindow.cpp | 4 +-- src/plugins/platforms/xlib/qxlibwindow.h | 4 +-- src/plugins/platforms/xlib/qxlibwindowsurface.cpp | 4 +-- src/plugins/platforms/xlib/qxlibwindowsurface.h | 4 +-- 101 files changed, 441 insertions(+), 113 deletions(-) diff --git a/src/plugins/platforms/cocoa/main.mm b/src/plugins/platforms/cocoa/main.mm index 8be8883..da7af3f 100644 --- a/src/plugins/platforms/cocoa/main.mm +++ b/src/plugins/platforms/cocoa/main.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h index 47b94d1..6e41e9a 100644 --- a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h +++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm index 9a18fe2..35750cd 100644 --- a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm +++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h index 87998e3..81e272e 100644 --- a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm index 844751c..885916e 100644 --- a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index b94bcb9..2a04e8c 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index a75b88c..7c4319c 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 660e9f8..b71879d 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 4e233ee..aa54fe9 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.h b/src/plugins/platforms/cocoa/qcocoawindowsurface.h index 35f4064..5ae7be1 100644 --- a/src/plugins/platforms/cocoa/qcocoawindowsurface.h +++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.mm b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm index 443a486..ecf6879 100644 --- a/src/plugins/platforms/cocoa/qcocoawindowsurface.mm +++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h index 0523725..fc946e2 100644 --- a/src/plugins/platforms/cocoa/qnsview.h +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 60de6ba..6fda27b 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h index 9fc1d63..f4dcec7 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.h +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm index c04602b..58dffb7 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp index f4ece32..d9caa70 100644 --- a/src/plugins/platforms/directfb/main.cpp +++ b/src/plugins/platforms/directfb/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp b/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp index 1135d2f..7f296c5 100644 --- a/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp +++ b/src/plugins/platforms/eglconvenience/qxlibeglintegration.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/eglconvenience/qxlibeglintegration.h b/src/plugins/platforms/eglconvenience/qxlibeglintegration.h index f62dce4..51996da 100644 --- a/src/plugins/platforms/eglconvenience/qxlibeglintegration.h +++ b/src/plugins/platforms/eglconvenience/qxlibeglintegration.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index c5f7fe0..fb14ef4 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index af5a337..a088a31 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index ddf8873..f361843 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openvglite/main.cpp b/src/plugins/platforms/openvglite/main.cpp index dc0b4a8..97321fa 100644 --- a/src/plugins/platforms/openvglite/main.cpp +++ b/src/plugins/platforms/openvglite/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp index 41b2303..5f7106e 100644 --- a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp +++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h index 512793d..9d45bf9 100644 --- a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h +++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp index c73e35a..8432ad6 100644 --- a/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp +++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.h b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h index b7d0a92..6d66c42 100644 --- a/src/plugins/platforms/openvglite/qwindowsurface_vglite.h +++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp index 997e544..5c3b72b 100644 --- a/src/plugins/platforms/qvfb/main.cpp +++ b/src/plugins/platforms/qvfb/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp index 0cc3938..ddde800 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.cpp +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h index 198a45c..33e31a5 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.h +++ b/src/plugins/platforms/qvfb/qvfbintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp index 6699072..85918eb 100644 --- a/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp +++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.h b/src/plugins/platforms/qvfb/qvfbwindowsurface.h index 9228189..9f828d3 100644 --- a/src/plugins/platforms/qvfb/qvfbwindowsurface.h +++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp index 7844e46..72f8c52 100644 --- a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + // checksum 0x17fa version 0x3000a /* This file was generated by the Qt Quick Application wizard of Qt Creator. diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h index 0e4de04..01b2af0 100644 --- a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/qmlapplicationviewer.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + // checksum 0x5a59 version 0x3000a /* This file was generated by the Qt Quick Application wizard of Qt Creator. diff --git a/src/plugins/platforms/uikit/main.mm b/src/plugins/platforms/uikit/main.mm index 05e0d02..1ef69fa 100644 --- a/src/plugins/platforms/uikit/main.mm +++ b/src/plugins/platforms/uikit/main.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikiteventloop.h b/src/plugins/platforms/uikit/quikiteventloop.h index 5c18999..cf5c682 100644 --- a/src/plugins/platforms/uikit/quikiteventloop.h +++ b/src/plugins/platforms/uikit/quikiteventloop.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm index 78f046e..70757b1 100644 --- a/src/plugins/platforms/uikit/quikiteventloop.mm +++ b/src/plugins/platforms/uikit/quikiteventloop.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitintegration.h b/src/plugins/platforms/uikit/quikitintegration.h index e448881..a986e92 100644 --- a/src/plugins/platforms/uikit/quikitintegration.h +++ b/src/plugins/platforms/uikit/quikitintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitintegration.mm b/src/plugins/platforms/uikit/quikitintegration.mm index f1fc402..d4b4192 100644 --- a/src/plugins/platforms/uikit/quikitintegration.mm +++ b/src/plugins/platforms/uikit/quikitintegration.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitscreen.h b/src/plugins/platforms/uikit/quikitscreen.h index 0253795..15c7d69 100644 --- a/src/plugins/platforms/uikit/quikitscreen.h +++ b/src/plugins/platforms/uikit/quikitscreen.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitscreen.mm b/src/plugins/platforms/uikit/quikitscreen.mm index 718ba54..ec94e3a 100644 --- a/src/plugins/platforms/uikit/quikitscreen.mm +++ b/src/plugins/platforms/uikit/quikitscreen.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitwindow.h b/src/plugins/platforms/uikit/quikitwindow.h index 8e8c51b..d5a6690 100644 --- a/src/plugins/platforms/uikit/quikitwindow.h +++ b/src/plugins/platforms/uikit/quikitwindow.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitwindow.mm b/src/plugins/platforms/uikit/quikitwindow.mm index 457598b..ebdee06 100644 --- a/src/plugins/platforms/uikit/quikitwindow.mm +++ b/src/plugins/platforms/uikit/quikitwindow.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitwindowsurface.h b/src/plugins/platforms/uikit/quikitwindowsurface.h index 2c22d7f..50d02b4 100644 --- a/src/plugins/platforms/uikit/quikitwindowsurface.h +++ b/src/plugins/platforms/uikit/quikitwindowsurface.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/uikit/quikitwindowsurface.mm b/src/plugins/platforms/uikit/quikitwindowsurface.mm index f21bb77..1274fca 100644 --- a/src/plugins/platforms/uikit/quikitwindowsurface.mm +++ b/src/plugins/platforms/uikit/quikitwindowsurface.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index e051e2d..890b8f8 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index e83696d..dbcdef3 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h index eeb3686..8eb26e0 100644 --- a/src/plugins/platforms/vnc/qvnccursor.h +++ b/src/plugins/platforms/vnc/qvnccursor.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 56cbe4b..b99ff3f 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 80338a1..ef16dfa 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index 288d1bc..be2de7c 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index 7244bdf..3b514a5 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/wayland/main.cpp b/src/plugins/platforms/wayland/main.cpp index 1bca661..6dc1c2b 100644 --- a/src/plugins/platforms/wayland/main.cpp +++ b/src/plugins/platforms/wayland/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/wayland/qwaylandcursor.cpp b/src/plugins/platforms/wayland/qwaylandcursor.cpp index 0ad0702..614686f 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.cpp +++ b/src/plugins/platforms/wayland/qwaylandcursor.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/wayland/qwaylandcursor.h b/src/plugins/platforms/wayland/qwaylandcursor.h index 19e6047..254cb94 100644 --- a/src/plugins/platforms/wayland/qwaylandcursor.h +++ b/src/plugins/platforms/wayland/qwaylandcursor.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp index 38bbc59..a8bc352 100644 --- a/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylanddrmsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/wayland/qwaylandintegration.h b/src/plugins/platforms/wayland/qwaylandintegration.h index c3919ab..067b6e4 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.h +++ b/src/plugins/platforms/wayland/qwaylandintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp index 6872bac..54da9a1 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.h b/src/plugins/platforms/wayland/qwaylandshmsurface.h index 615d944..02b324a 100644 --- a/src/plugins/platforms/wayland/qwaylandshmsurface.h +++ b/src/plugins/platforms/wayland/qwaylandshmsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/main.cpp b/src/plugins/platforms/xcb/main.cpp index 1966003..89bc66e 100644 --- a/src/plugins/platforms/xcb/main.cpp +++ b/src/plugins/platforms/xcb/main.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qdri2context.cpp b/src/plugins/platforms/xcb/qdri2context.cpp index 10c9417..0079f91 100644 --- a/src/plugins/platforms/xcb/qdri2context.cpp +++ b/src/plugins/platforms/xcb/qdri2context.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdri2context.h" #include "qxcbwindow.h" diff --git a/src/plugins/platforms/xcb/qdri2context.h b/src/plugins/platforms/xcb/qdri2context.h index 8e4ac89..42dd6bd 100644 --- a/src/plugins/platforms/xcb/qdri2context.h +++ b/src/plugins/platforms/xcb/qdri2context.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDRI2CONTEXT_H #define QDRI2CONTEXT_H diff --git a/src/plugins/platforms/xcb/qglxintegration.cpp b/src/plugins/platforms/xcb/qglxintegration.cpp index 0cb6b1d..e94b6a6 100644 --- a/src/plugins/platforms/xcb/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/qglxintegration.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qglxintegration.h b/src/plugins/platforms/xcb/qglxintegration.h index 0006363..f2e20c4 100644 --- a/src/plugins/platforms/xcb/qglxintegration.h +++ b/src/plugins/platforms/xcb/qglxintegration.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index de3f926..191699b 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index a7fa7fd..e00fbb1 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 0981655..63c26a1 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index eab6949..6c9634e 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index f594232..ec9a009 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h index 2a17e48..ddade79 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.h +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index 8b6678b..b2ca1be 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qxcbnativeinterface.h" #include "qxcbscreen.h" diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index 72c27d5..f60905c 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QXCBNATIVEINTERFACE_H #define QXCBNATIVEINTERFACE_H diff --git a/src/plugins/platforms/xcb/qxcbobject.h b/src/plugins/platforms/xcb/qxcbobject.h index cabfd7c..69494b0 100644 --- a/src/plugins/platforms/xcb/qxcbobject.h +++ b/src/plugins/platforms/xcb/qxcbobject.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index f868db8..53b0563 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h index 77ee46f..6f69fc7 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 9478b5b..cbf50f7 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 2e8238b..1e9930d 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp index 513de08..7fed230 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.cpp +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xcb/qxcbwindowsurface.h b/src/plugins/platforms/xcb/qxcbwindowsurface.h index ee63190..61689b1 100644 --- a/src/plugins/platforms/xcb/qxcbwindowsurface.h +++ b/src/plugins/platforms/xcb/qxcbwindowsurface.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/main.cpp b/src/plugins/platforms/xlib/main.cpp index 3e2a6b9..f0bf6ff 100644 --- a/src/plugins/platforms/xlib/main.cpp +++ b/src/plugins/platforms/xlib/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qglxintegration.cpp b/src/plugins/platforms/xlib/qglxintegration.cpp index 89cd768..80011d9 100644 --- a/src/plugins/platforms/xlib/qglxintegration.cpp +++ b/src/plugins/platforms/xlib/qglxintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qglxintegration.h b/src/plugins/platforms/xlib/qglxintegration.h index 81b48c9..dbb5c2e 100644 --- a/src/plugins/platforms/xlib/qglxintegration.h +++ b/src/plugins/platforms/xlib/qglxintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qxlibclipboard.cpp b/src/plugins/platforms/xlib/qxlibclipboard.cpp index 49b2dc7..dfaf552 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.cpp +++ b/src/plugins/platforms/xlib/qxlibclipboard.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibclipboard.h b/src/plugins/platforms/xlib/qxlibclipboard.h index ec1d728..15901b0 100644 --- a/src/plugins/platforms/xlib/qxlibclipboard.h +++ b/src/plugins/platforms/xlib/qxlibclipboard.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibcursor.cpp b/src/plugins/platforms/xlib/qxlibcursor.cpp index 074d2f7..042cbc9 100644 --- a/src/plugins/platforms/xlib/qxlibcursor.cpp +++ b/src/plugins/platforms/xlib/qxlibcursor.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibcursor.h b/src/plugins/platforms/xlib/qxlibcursor.h index 77c66bf..62b13eb 100644 --- a/src/plugins/platforms/xlib/qxlibcursor.h +++ b/src/plugins/platforms/xlib/qxlibcursor.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibdisplay.cpp b/src/plugins/platforms/xlib/qxlibdisplay.cpp index 3b60af2..d8aa230 100644 --- a/src/plugins/platforms/xlib/qxlibdisplay.cpp +++ b/src/plugins/platforms/xlib/qxlibdisplay.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qxlibdisplay.h" QXlibDisplay::QXlibDisplay(Display *display) diff --git a/src/plugins/platforms/xlib/qxlibdisplay.h b/src/plugins/platforms/xlib/qxlibdisplay.h index f2cca9e..557ab52 100644 --- a/src/plugins/platforms/xlib/qxlibdisplay.h +++ b/src/plugins/platforms/xlib/qxlibdisplay.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QXLIBDISPLAY_H #define QXLIBDISPLAY_H diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp index c207eb2..6733ed1 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.cpp +++ b/src/plugins/platforms/xlib/qxlibintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qxlibintegration.h b/src/plugins/platforms/xlib/qxlibintegration.h index dd8cdec..3bbf897 100644 --- a/src/plugins/platforms/xlib/qxlibintegration.h +++ b/src/plugins/platforms/xlib/qxlibintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.cpp b/src/plugins/platforms/xlib/qxlibkeyboard.cpp index 690d273..8d94157 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.cpp +++ b/src/plugins/platforms/xlib/qxlibkeyboard.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibkeyboard.h b/src/plugins/platforms/xlib/qxlibkeyboard.h index 02fc290..5e0135a 100644 --- a/src/plugins/platforms/xlib/qxlibkeyboard.h +++ b/src/plugins/platforms/xlib/qxlibkeyboard.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibmime.cpp b/src/plugins/platforms/xlib/qxlibmime.cpp index 61a0735..e98983d 100644 --- a/src/plugins/platforms/xlib/qxlibmime.cpp +++ b/src/plugins/platforms/xlib/qxlibmime.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibmime.h b/src/plugins/platforms/xlib/qxlibmime.h index 316d423..a9bc265 100644 --- a/src/plugins/platforms/xlib/qxlibmime.h +++ b/src/plugins/platforms/xlib/qxlibmime.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibscreen.cpp b/src/plugins/platforms/xlib/qxlibscreen.cpp index 5a9aca9..23a2d07 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.cpp +++ b/src/plugins/platforms/xlib/qxlibscreen.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qxlibscreen.h b/src/plugins/platforms/xlib/qxlibscreen.h index 8dac41d..35c0141 100644 --- a/src/plugins/platforms/xlib/qxlibscreen.h +++ b/src/plugins/platforms/xlib/qxlibscreen.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/xlib/qxlibstatic.cpp b/src/plugins/platforms/xlib/qxlibstatic.cpp index f67fbdc..6117781 100644 --- a/src/plugins/platforms/xlib/qxlibstatic.cpp +++ b/src/plugins/platforms/xlib/qxlibstatic.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibstatic.h b/src/plugins/platforms/xlib/qxlibstatic.h index 8473ee9..72cfaec 100644 --- a/src/plugins/platforms/xlib/qxlibstatic.h +++ b/src/plugins/platforms/xlib/qxlibstatic.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp index b0d32d9..a7bc53c 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.cpp +++ b/src/plugins/platforms/xlib/qxlibwindow.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibwindow.h b/src/plugins/platforms/xlib/qxlibwindow.h index be98032..08694a5 100644 --- a/src/plugins/platforms/xlib/qxlibwindow.h +++ b/src/plugins/platforms/xlib/qxlibwindow.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp index fa1e197..513f10d 100644 --- a/src/plugins/platforms/xlib/qxlibwindowsurface.cpp +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/xlib/qxlibwindowsurface.h b/src/plugins/platforms/xlib/qxlibwindowsurface.h index 12b4c60..d46b7b4 100644 --- a/src/plugins/platforms/xlib/qxlibwindowsurface.h +++ b/src/plugins/platforms/xlib/qxlibwindowsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage -- cgit v0.12 From 483a069415f2648a0d4c1f86d69f372607750ae6 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Thu, 17 Mar 2011 14:51:10 +0100 Subject: Fix disk cache interaction for range retrieval HTTP requests. The disk cache API does not currently support retrieving partial content, it can only serve entire files. Therefore we disable the use of the cache for these kinds of requests, as indicated by the presence of the Range header field. Done-with: Jocelyn Turcotte Reviewed-by: Markus Goetz Reviewed-by: Peter Hartmann --- src/network/access/qnetworkaccesshttpbackend.cpp | 5 ++ tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 74 +++++++++++++++++------- 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 4189743..108ac68 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -360,6 +360,11 @@ void QNetworkAccessHttpBackend::validateCache(QHttpNetworkRequest &httpRequest, return; } + // The disk cache API does not currently support partial content retrieval. + // That is why we don't use the disk cache for any such requests. + if (request().hasRawHeader("Range")) + return; + QAbstractNetworkCache *nc = networkCache(); if (!nc) return; // no local cache diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 39bb0fc..4338e74 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -2663,6 +2663,7 @@ void tst_QNetworkReply::ioGetFromHttpWithCache_data() QTest::addColumn<QString>("body"); QTest::addColumn<MyMemoryCache::CachedContent>("cachedReply"); QTest::addColumn<int>("cacheMode"); + QTest::addColumn<QStringList>("extraHttpHeaders"); QTest::addColumn<bool>("loadedFromCache"); QTest::addColumn<bool>("networkUsed"); @@ -2680,11 +2681,11 @@ void tst_QNetworkReply::ioGetFromHttpWithCache_data() "\r\n"; QTest::newRow("not-cached,always-network") - << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::AlwaysNetwork) << false << true; + << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::AlwaysNetwork) << QStringList() << false << true; QTest::newRow("not-cached,prefer-network") - << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferNetwork) << false << true; + << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferNetwork) << QStringList() << false << true; QTest::newRow("not-cached,prefer-cache") - << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferCache) << false << true; + << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferCache) << QStringList() << false << true; QDateTime present = QDateTime::currentDateTime().toUTC(); QDateTime past = present.addSecs(-3600); @@ -2706,14 +2707,14 @@ void tst_QNetworkReply::ioGetFromHttpWithCache_data() content.first.setLastModified(past); QTest::newRow("expired,200,prefer-network") - << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << false << true; + << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << false << true; QTest::newRow("expired,200,prefer-cache") - << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferCache) << false << true; + << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << false << true; QTest::newRow("expired,304,prefer-network") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << true; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << true << true; QTest::newRow("expired,304,prefer-cache") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << true; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << true << true; // // Set to not-expired @@ -2725,20 +2726,20 @@ void tst_QNetworkReply::ioGetFromHttpWithCache_data() content.first.setExpirationDate(future); QTest::newRow("not-expired,200,always-network") - << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << false << true; + << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << QStringList() << false << true; QTest::newRow("not-expired,200,prefer-network") - << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << false; + << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << true << false; QTest::newRow("not-expired,200,prefer-cache") - << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; + << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << true << false; QTest::newRow("not-expired,200,always-cache") - << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; + << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << QStringList() << true << false; QTest::newRow("not-expired,304,prefer-network") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << false; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << true << false; QTest::newRow("not-expired,304,prefer-cache") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << true << false; QTest::newRow("not-expired,304,always-cache") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << QStringList() << true << false; // // Set must-revalidate now @@ -2749,20 +2750,42 @@ void tst_QNetworkReply::ioGetFromHttpWithCache_data() content.first.setRawHeaders(rawHeaders); QTest::newRow("must-revalidate,200,always-network") - << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << false << true; + << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << QStringList() << false << true; QTest::newRow("must-revalidate,200,prefer-network") - << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << false << true; + << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << false << true; QTest::newRow("must-revalidate,200,prefer-cache") - << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; + << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << true << false; QTest::newRow("must-revalidate,200,always-cache") - << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; + << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << QStringList() << true << false; QTest::newRow("must-revalidate,304,prefer-network") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << true; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << QStringList() << true << true; QTest::newRow("must-revalidate,304,prefer-cache") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << QStringList() << true << false; QTest::newRow("must-revalidate,304,always-cache") - << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; + << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << QStringList() << true << false; + + // + // Partial content + // + rawHeaders.clear(); + rawHeaders << QNetworkCacheMetaData::RawHeader("Date", QLocale::c().toString(past, dateFormat).toLatin1()) + << QNetworkCacheMetaData::RawHeader("Cache-control", "max-age=7200"); // isn't used in cache loading + content.first.setRawHeaders(rawHeaders); + content.first.setExpirationDate(future); + + QByteArray reply206 = + "HTTP/1.0 206\r\n" + "Connection: keep-alive\r\n" + "Content-Type: text/plain\r\n" + "Cache-control: no-cache\r\n" + "Content-Range: bytes 2-6/8\r\n" + "Content-length: 4\r\n" + "\r\n" + "load"; + + QTest::newRow("partial,dontuse-cache") + << reply206 << "load" << content << int(QNetworkRequest::PreferCache) << (QStringList() << "Range" << "bytes=2-6") << false << true; } void tst_QNetworkReply::ioGetFromHttpWithCache() @@ -2784,6 +2807,15 @@ void tst_QNetworkReply::ioGetFromHttpWithCache() QNetworkRequest request(url); request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, cacheMode); request.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false); + + QFETCH(QStringList, extraHttpHeaders); + QStringListIterator it(extraHttpHeaders); + while (it.hasNext()) { + QString header = it.next(); + QString value = it.next(); + request.setRawHeader(header.toLatin1(), value.toLatin1()); // To latin1? Deal with it! + } + QNetworkReplyPtr reply = manager.get(request); connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); -- cgit v0.12 From 268394b854766855c7ce5697bbc079a6974ad866 Mon Sep 17 00:00:00 2001 From: Simon Hausmann <simon.hausmann@nokia.com> Date: Thu, 17 Mar 2011 15:19:25 +0100 Subject: Fix accidental population of the disk cache with partial content Since the disk cache does not support partial content, we should not try to store it in the cache altogether. Done-with: Jocelyn Turcotte Reviewed-by: Markus Goetz Reviewed-by: Peter Hartmann --- src/network/access/qnetworkreplyimpl.cpp | 7 ++ tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 93 ++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 343f344..894df79 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -505,6 +505,13 @@ void QNetworkReplyImplPrivate::initCacheSaveDevice() { Q_Q(QNetworkReplyImpl); + // The disk cache does not support partial content, so don't even try to + // save any such content into the cache. + if (q->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 206) { + cacheEnabled = false; + return; + } + // save the meta data QNetworkCacheMetaData metaData; metaData.setUrl(url); diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 4338e74..81278b6 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -333,6 +333,8 @@ private Q_SLOTS: void synchronousRequest(); void synchronousRequestSslFailure(); + void dontInsertPartialContentIntoTheCache(); + // NOTE: This test must be last! void parentingRepliesToTheApp(); }; @@ -573,6 +575,63 @@ public: Q_DECLARE_METATYPE(MyMemoryCache::CachedContent) Q_DECLARE_METATYPE(MyMemoryCache::CacheData) +class MySpyMemoryCache: public QAbstractNetworkCache +{ +public: + MySpyMemoryCache(QObject *parent) : QAbstractNetworkCache(parent) {} + ~MySpyMemoryCache() + { + qDeleteAll(m_buffers); + m_buffers.clear(); + } + + QHash<QUrl, QIODevice*> m_buffers; + QList<QUrl> m_insertedUrls; + + QNetworkCacheMetaData metaData(const QUrl &) + { + return QNetworkCacheMetaData(); + } + + void updateMetaData(const QNetworkCacheMetaData &) + { + } + + QIODevice *data(const QUrl &) + { + return 0; + } + + bool remove(const QUrl &url) + { + delete m_buffers.take(url); + return m_insertedUrls.removeAll(url) > 0; + } + + qint64 cacheSize() const + { + return 0; + } + + QIODevice *prepare(const QNetworkCacheMetaData &metaData) + { + QBuffer* buffer = new QBuffer; + buffer->open(QIODevice::ReadWrite); + buffer->setProperty("url", metaData.url()); + m_buffers.insert(metaData.url(), buffer); + return buffer; + } + + void insert(QIODevice *buffer) + { + QUrl url = buffer->property("url").toUrl(); + m_insertedUrls << url; + delete m_buffers.take(url); + } + + void clear() { m_insertedUrls.clear(); } +}; + class DataReader: public QObject { Q_OBJECT @@ -5275,6 +5334,39 @@ void tst_QNetworkReply::synchronousRequestSslFailure() QCOMPARE(sslErrorsSpy.count(), 0); } +void tst_QNetworkReply::dontInsertPartialContentIntoTheCache() +{ + QByteArray reply206 = + "HTTP/1.0 206\r\n" + "Connection: keep-alive\r\n" + "Content-Type: text/plain\r\n" + "Cache-control: no-cache\r\n" + "Content-Range: bytes 2-6/8\r\n" + "Content-length: 4\r\n" + "\r\n" + "load"; + + MiniHttpServer server(reply206); + server.doClose = false; + + MySpyMemoryCache *memoryCache = new MySpyMemoryCache(&manager); + manager.setCache(memoryCache); + + QUrl url = "http://localhost:" + QString::number(server.serverPort()); + QNetworkRequest request(url); + request.setRawHeader("Range", "bytes=2-6"); + + QNetworkReplyPtr reply = manager.get(request); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QVERIFY(server.totalConnections > 0); + QCOMPARE(reply->readAll().constData(), "load"); + QCOMPARE(memoryCache->m_insertedUrls.count(), 0); +} + // NOTE: This test must be last testcase in tst_qnetworkreply! void tst_QNetworkReply::parentingRepliesToTheApp() { @@ -5284,4 +5376,5 @@ void tst_QNetworkReply::parentingRepliesToTheApp() } QTEST_MAIN(tst_QNetworkReply) + #include "tst_qnetworkreply.moc" -- cgit v0.12 From ce33fe15dde2151905839196da9927f4c19b18be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com> Date: Thu, 17 Mar 2011 17:12:38 +0100 Subject: Fixes detected by the static-check This included added a license header on a moc file. Its nasty, but has to stay like that until we have a better sollution for generating moc files on uikit --- src/gui/kernel/qplatformintegration_qpa.h | 2 +- .../platforms/uikit/examples/qmltest/main.mm | 45 +++++++++++++++++++++- .../moc_qmlapplicationviewer.cpp | 41 ++++++++++++++++++++ src/plugins/platforms/xcb/qxcbscreen.cpp | 2 +- 4 files changed, 86 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index e76d077..0aacefa 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -98,7 +98,7 @@ public: //jl:XXX should it be hasGLContext and do we need it at all? virtual bool hasOpenGL() const; -// Access native handles. The window handle is allready available from Wid; +// Access native handles. The window handle is already available from Wid; virtual QPlatformNativeInterface *nativeInterface() const; }; diff --git a/src/plugins/platforms/uikit/examples/qmltest/main.mm b/src/plugins/platforms/uikit/examples/qmltest/main.mm index d90be56..6fd5629 100644 --- a/src/plugins/platforms/uikit/examples/qmltest/main.mm +++ b/src/plugins/platforms/uikit/examples/qmltest/main.mm @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + // // main.m // qmltest @@ -16,9 +57,9 @@ Q_IMPORT_PLUGIN(UIKit) int main(int argc, char *argv[]) { - + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - + setenv("QT_QPA_PLATFORM","uikit",1); QApplication app(argc, argv); diff --git a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp index 7733ce2..a2b40ec 100644 --- a/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp +++ b/src/plugins/platforms/uikit/examples/qmltest/qmlapplicationviewer/moc_qmlapplicationviewer.cpp @@ -1,4 +1,45 @@ /**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/**************************************************************************** ** Meta object code from reading C++ file 'qmlapplicationviewer.h' ** ** Created: Fri Feb 18 17:53:42 2011 diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index 53b0563..fffeb2e 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -49,7 +49,7 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen, int num , m_number(number) { printf ("\n"); - printf ("Informations of screen %d:\n", screen->root); + printf ("Information of screen %d:\n", screen->root); printf (" width.........: %d\n", screen->width_in_pixels); printf (" height........: %d\n", screen->height_in_pixels); printf (" depth.........: %d\n", screen->root_depth); -- cgit v0.12 From 5e2f4be486140d694c0acccbfc7a55fc7c104c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Thu, 17 Mar 2011 12:03:06 +0100 Subject: Switch to raster also when last window is destroyed (on MeeGo). This will save GPU resources for applications that are in the background for most of the time and only show a window now and then. Reviewed-by: Armin Berres --- .../graphicssystems/meego/qmeegographicssystem.cpp | 39 +++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 18a0944..cb66695 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -59,6 +59,8 @@ #include "qmeegographicssystem.h" #include "qmeegoextensions.h" +#include <QTimer> + bool QMeeGoGraphicsSystem::surfaceWasCreated = false; QHash <Qt::HANDLE, QPixmap*> QMeeGoGraphicsSystem::liveTexturePixmaps; @@ -85,8 +87,12 @@ public: void addWidget(QWidget *widget); bool eventFilter(QObject *, QEvent *); + void handleMapNotify(); + private slots: void removeWidget(QObject *object); + void switchToRaster(); + void switchToMeeGo(); private: int visibleWidgets() const; @@ -95,22 +101,46 @@ private: QList<QWidget *> m_widgets; }; +typedef bool(*QX11FilterFunction)(XEvent *event); +Q_GUI_EXPORT void qt_installX11EventFilter(QX11FilterFunction func); + +static bool x11EventFilter(XEvent *event); + QMeeGoGraphicsSystemSwitchHandler::QMeeGoGraphicsSystemSwitchHandler() { + qt_installX11EventFilter(x11EventFilter); } void QMeeGoGraphicsSystemSwitchHandler::addWidget(QWidget *widget) { - if (!m_widgets.contains(widget)) { + if (widget != qt_gl_share_widget() && !m_widgets.contains(widget)) { widget->installEventFilter(this); connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(removeWidget(QObject *))); m_widgets << widget; } } +void QMeeGoGraphicsSystemSwitchHandler::handleMapNotify() +{ + if (m_widgets.isEmpty()) + QTimer::singleShot(0, this, SLOT(switchToMeeGo())); +} + void QMeeGoGraphicsSystemSwitchHandler::removeWidget(QObject *object) { m_widgets.removeOne(static_cast<QWidget *>(object)); + if (m_widgets.isEmpty()) + QTimer::singleShot(0, this, SLOT(switchToRaster())); +} + +void QMeeGoGraphicsSystemSwitchHandler::switchToRaster() +{ + QMeeGoGraphicsSystem::switchToRaster(); +} + +void QMeeGoGraphicsSystemSwitchHandler::switchToMeeGo() +{ + QMeeGoGraphicsSystem::switchToMeeGo(); } int QMeeGoGraphicsSystemSwitchHandler::visibleWidgets() const @@ -148,6 +178,13 @@ bool QMeeGoGraphicsSystemSwitchHandler::eventFilter(QObject *object, QEvent *eve Q_GLOBAL_STATIC(QMeeGoGraphicsSystemSwitchHandler, switch_handler) +bool x11EventFilter(XEvent *event) +{ + if (event->type == MapNotify) + switch_handler()->handleMapNotify(); + return false; +} + QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const { QGLWidget *shareWidget = qt_gl_share_widget(); -- cgit v0.12 From 3fb5fce61b6f64534ad292a78250e4256a6514b6 Mon Sep 17 00:00:00 2001 From: Robin Burchell <robin.burchell@collabora.co.uk> Date: Thu, 17 Mar 2011 18:32:58 +0100 Subject: Changes to driver workarounds. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Force enable brokenFBOReadBack on non-Nokia v1.4 SGX drivers (as this is apparantly not fixed, except on the Nokia drivers) - Add debug when workarounds are enabled to ease debugging This fixes the following MeeGo bug: https://bugs.meego.com/show_bug.cgi?id=5616 Merge-request: 1144 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> --- src/opengl/qgl_egl.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index 674d80d..d6b2d3b 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include <QtCore/qdebug.h> #include <QtOpenGL/qgl.h> #include <QtOpenGL/qglpixelbuffer.h> #include "qgl_p.h" @@ -195,6 +196,7 @@ void QGLContext::makeCurrent() // PowerVR MBX/SGX chips needs to clear all buffers when starting to render // a new frame, otherwise there will be a performance penalty to pay for // each frame. + qDebug() << "Found SGX/MBX driver, enabling FullClearOnEveryFrame"; d->workaround_needsFullClearOnEveryFrame = true; // Older PowerVR SGX drivers (like the one in the N900) have a @@ -202,10 +204,31 @@ void QGLContext::makeCurrent() // or GL_ALPHA texture bound to an FBO. The only way to // identify that driver is to check the EGL version number for it. const char *egl_version = eglQueryString(d->eglContext->display(), EGL_VERSION); - if (egl_version && strstr(egl_version, "1.3")) + + if (egl_version && strstr(egl_version, "1.3")) { + qDebug() << "Found v1.3 driver, enabling brokenFBOReadBack"; d->workaround_brokenFBOReadBack = true; - else if (egl_version && strstr(egl_version, "1.4")) + } else if (egl_version && strstr(egl_version, "1.4")) { + qDebug() << "Found v1.4 driver, enabling brokenTexSubImage"; d->workaround_brokenTexSubImage = true; + + // this is a bit complicated; 1.4 version SGX drivers from + // Nokia have fixed the brokenFBOReadBack problem, but + // official drivers from TI haven't, meaning that things + // like the beagleboard are broken unless we hack around it + // - but at the same time, we want to not reduce performance + // by not enabling this elsewhere. + // + // so, let's check for a Nokia-specific addon, and only + // enable if it isn't present. + // (see MeeGo bug #5616) + if (!QEgl::hasExtension("EGL_NOK_image_shared")) { + // no Nokia extension, this is probably a standard SGX + // driver, so enable the workaround + qDebug() << "Found non-Nokia v1.4 driver, enabling brokenFBOReadBack"; + d->workaround_brokenFBOReadBack = true; + } + } } } } -- cgit v0.12 From 9d39e3e9df50eec695608497533d0440cce3a03e Mon Sep 17 00:00:00 2001 From: Jani Hautakangas <jani.hautakangas@nokia.com> Date: Thu, 17 Mar 2011 19:36:09 +0100 Subject: Fix def files Reviewed-by: TRUSTME --- src/s60installs/bwins/QtGuiu.def | 770 ++++++++++++++++++++++++--------------- src/s60installs/eabi/QtGuiu.def | 617 ++++++++++++++++--------------- 2 files changed, 800 insertions(+), 587 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 68cdc9e..38bd760 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -5028,7 +5028,7 @@ EXPORTS ?hasSelection@QItemSelectionModel@@QBE_NXZ @ 5027 NONAME ; bool QItemSelectionModel::hasSelection(void) const ?hasSelection@QTextCursor@@QBE_NXZ @ 5028 NONAME ; bool QTextCursor::hasSelection(void) const ?hasStaticContents@QWindowSurface@@IBE_NXZ @ 5029 NONAME ; bool QWindowSurface::hasStaticContents(void) const - ?hasStaticContentsSupport@QWindowSurface@@QBE_NXZ @ 5030 NONAME ; bool QWindowSurface::hasStaticContentsSupport(void) const + ?hasStaticContentsSupport@QWindowSurface@@UBE_NXZ @ 5030 NONAME ; bool QWindowSurface::hasStaticContentsSupport(void) const ?hasThemeIcon@QIcon@@SA_NABVQString@@@Z @ 5031 NONAME ; bool QIcon::hasThemeIcon(class QString const &) ?hasTracking@QAbstractSlider@@QBE_NXZ @ 5032 NONAME ; bool QAbstractSlider::hasTracking(void) const ?hasTranslateOnlySceneTransform@QGraphicsItemPrivate@@QAE_NXZ @ 5033 NONAME ; bool QGraphicsItemPrivate::hasTranslateOnlySceneTransform(void) @@ -9875,6 +9875,7 @@ EXPORTS ?setState@QPaintEngineEx@@UAEXPAVQPainterState@@@Z @ 9874 NONAME ; void QPaintEngineEx::setState(class QPainterState *) ?setState@TouchPoint@QTouchEvent@@QAEXV?$QFlags@W4TouchPointState@Qt@@@@@Z @ 9875 NONAME ; void QTouchEvent::TouchPoint::setState(class QFlags<enum Qt::TouchPointState>) ?setStaticContents@QWindowSurface@@QAEXABVQRegion@@@Z @ 9876 NONAME ; void QWindowSurface::setStaticContents(class QRegion const &) + ?setStaticContentsSupport@QWindowSurface@@IAEX_N@Z @ 9877 NONAME ABSENT ; void QWindowSurface::setStaticContentsSupport(bool) ?setStatus@QPictureIO@@QAEXH@Z @ 9878 NONAME ; void QPictureIO::setStatus(int) ?setStatusBar@QMainWindow@@QAEXPAVQStatusBar@@@Z @ 9879 NONAME ; void QMainWindow::setStatusBar(class QStatusBar *) ?setStatusTip@QAction@@QAEXABVQString@@@Z @ 9880 NONAME ; void QAction::setStatusTip(class QString const &) @@ -12650,6 +12651,7 @@ EXPORTS ?toImage@QRuntimePixmapData@@UBE?AVQImage@@XZ @ 12650 NONAME ; class QImage QRuntimePixmapData::toImage(void) const ??0QAbstractScrollAreaPrivate@@QAE@XZ @ 12651 NONAME ; QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate(void) ?resizeEvent@QSplitterHandle@@MAEXPAVQResizeEvent@@@Z @ 12652 NONAME ; void QSplitterHandle::resizeEvent(class QResizeEvent *) + ?setPartialUpdateSupport@QWindowSurface@@IAEX_N@Z @ 12653 NONAME ABSENT ; void QWindowSurface::setPartialUpdateSupport(bool) ?HandleForegroundEventL@QS60MainAppUi@@MAEXH@Z @ 12654 NONAME ; void QS60MainAppUi::HandleForegroundEventL(int) ?curveThreshold@QStrokerOps@@QBEMXZ @ 12655 NONAME ; float QStrokerOps::curveThreshold(void) const ?createTextureData@QImageTextureGlyphCache@@UAEXHH@Z @ 12656 NONAME ; void QImageTextureGlyphCache::createTextureData(int, int) @@ -12851,7 +12853,7 @@ EXPORTS ?updateAll@QGraphicsViewPrivate@@QAEXXZ @ 12852 NONAME ; void QGraphicsViewPrivate::updateAll(void) ?updateMicroFocus@QGraphicsItem@@IAEXXZ @ 12853 NONAME ; void QGraphicsItem::updateMicroFocus(void) ?populate@QTextureGlyphCache@@QAEXPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12854 NONAME ABSENT ; void QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) - ?hasPartialUpdateSupport@QWindowSurface@@QBE_NXZ @ 12855 NONAME ; bool QWindowSurface::hasPartialUpdateSupport(void) const + ?hasPartialUpdateSupport@QWindowSurface@@UBE_NXZ @ 12855 NONAME ; bool QWindowSurface::hasPartialUpdateSupport(void) const ?scroll@QRuntimePixmapData@@UAE_NHHABVQRect@@@Z @ 12856 NONAME ; bool QRuntimePixmapData::scroll(int, int, class QRect const &) ?qt_draw_glyphs@@YAXPAVQPainter@@PBIPBVQPointF@@H@Z @ 12857 NONAME ; void qt_draw_glyphs(class QPainter *, unsigned int const *, class QPointF const *, int) ?nativeDisplay@QEgl@@YAHXZ @ 12858 NONAME ; int QEgl::nativeDisplay(void) @@ -12903,302 +12905,470 @@ EXPORTS ?reactivateDeferredActiveObjects@QEventDispatcherS60@@UAEXXZ @ 12904 NONAME ; void QEventDispatcherS60::reactivateDeferredActiveObjects(void) ?userData@QStaticTextItem@@QBEPAVQStaticTextUserData@@XZ @ 12905 NONAME ; class QStaticTextUserData * QStaticTextItem::userData(void) const ?populate@QTextureGlyphCache@@QAE_NPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12906 NONAME ; bool QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) - ?clipEnabledChanged@QBlitterPaintEngine@@UAEXXZ @ 12907 NONAME ; void QBlitterPaintEngine::clipEnabledChanged(void) - ?supportsSubPixelPositions@QFontEngine@@UBE_NXZ @ 12908 NONAME ; bool QFontEngine::supportsSubPixelPositions(void) const - ?heightForWidth@QTabWidget@@UBEHH@Z @ 12909 NONAME ; int QTabWidget::heightForWidth(int) const - ??0QRasterWindowSurface@@QAE@PAVQWidget@@_N@Z @ 12910 NONAME ; QRasterWindowSurface::QRasterWindowSurface(class QWidget *, bool) - ?brushChanged@QBlitterPaintEngine@@UAEXXZ @ 12911 NONAME ; void QBlitterPaintEngine::brushChanged(void) - ?clip@QBlitterPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 12912 NONAME ; void QBlitterPaintEngine::clip(class QRect const &, enum Qt::ClipOperation) - ?detach@QGlyphs@@AAEXXZ @ 12913 NONAME ; void QGlyphs::detach(void) - ?capabilities@QBlittable@@QBE?AV?$QFlags@W4Capability@QBlittable@@@@XZ @ 12914 NONAME ; class QFlags<enum QBlittable::Capability> QBlittable::capabilities(void) const - ?swap@QBrush@@QAEXAAV1@@Z @ 12915 NONAME ; void QBrush::swap(class QBrush &) - ?swap@QPixmap@@QAEXAAV1@@Z @ 12916 NONAME ; void QPixmap::swap(class QPixmap &) - ??0QBlitterPaintEngine@@QAE@PAVQBlittablePixmapData@@@Z @ 12917 NONAME ; QBlitterPaintEngine::QBlitterPaintEngine(class QBlittablePixmapData *) - ?numberPrefix@QTextListFormat@@QBE?AVQString@@XZ @ 12918 NONAME ; class QString QTextListFormat::numberPrefix(void) const - ??MQItemSelectionRange@@QBE_NABV0@@Z @ 12919 NONAME ; bool QItemSelectionRange::operator<(class QItemSelectionRange const &) const - ?setWidthForHeight@QSizePolicy@@QAEX_N@Z @ 12920 NONAME ; void QSizePolicy::setWidthForHeight(bool) - ?qt_fontdata_from_index@@YA?AVQByteArray@@H@Z @ 12921 NONAME ; class QByteArray qt_fontdata_from_index(int) - ?swap@QImage@@QAEXAAV1@@Z @ 12922 NONAME ; void QImage::swap(class QImage &) - ?compositionModeChanged@QBlitterPaintEngine@@UAEXXZ @ 12923 NONAME ; void QBlitterPaintEngine::compositionModeChanged(void) - ?drawRects@QBlitterPaintEngine@@UAEXPBVQRectF@@H@Z @ 12924 NONAME ; void QBlitterPaintEngine::drawRects(class QRectF const *, int) - ??1QBlitterPaintEngine@@UAE@XZ @ 12925 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(void) - ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRectF@@H@Z @ 12926 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const *, int) - ?drawTextItem@QBlitterPaintEngine@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 12927 NONAME ; void QBlitterPaintEngine::drawTextItem(class QPointF const &, class QTextItem const &) - ??8QGlyphs@@QBE_NABV0@@Z @ 12928 NONAME ; bool QGlyphs::operator==(class QGlyphs const &) const - ?drawImage@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 12929 NONAME ; void QBlitterPaintEngine::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags<enum Qt::ImageConversionFlag>) - ?mimeTypes@QAbstractProxyModel@@UBE?AVQStringList@@XZ @ 12930 NONAME ; class QStringList QAbstractProxyModel::mimeTypes(void) const - ?createState@QBlitterPaintEngine@@UBEPAVQPainterState@@PAV2@@Z @ 12931 NONAME ; class QPainterState * QBlitterPaintEngine::createState(class QPainterState *) const - ?removeItem@QGraphicsGridLayout@@QAEXPAVQGraphicsLayoutItem@@@Z @ 12932 NONAME ; void QGraphicsGridLayout::removeItem(class QGraphicsLayoutItem *) - ?clipBoundingRect@QPainter@@QBE?AVQRectF@@XZ @ 12933 NONAME ; class QRectF QPainter::clipBoundingRect(void) const - ?raster@QBlitterPaintEngine@@ABEPAVQRasterPaintEngine@@XZ @ 12934 NONAME ; class QRasterPaintEngine * QBlitterPaintEngine::raster(void) const - ?sort@QAbstractProxyModel@@UAEXHW4SortOrder@Qt@@@Z @ 12935 NONAME ; void QAbstractProxyModel::sort(int, enum Qt::SortOrder) - ?d_func@QBlittable@@AAEPAVQBlittablePrivate@@XZ @ 12936 NONAME ; class QBlittablePrivate * QBlittable::d_func(void) - ?type@QBlitterPaintEngine@@UBE?AW4Type@QPaintEngine@@XZ @ 12937 NONAME ; enum QPaintEngine::Type QBlitterPaintEngine::type(void) const - ?buddy@QAbstractProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 12938 NONAME ; class QModelIndex QAbstractProxyModel::buddy(class QModelIndex const &) const - ?fill@QImage@@QAEXABVQColor@@@Z @ 12939 NONAME ; void QImage::fill(class QColor const &) - ?fill@QImage@@QAEXW4GlobalColor@Qt@@@Z @ 12940 NONAME ; void QImage::fill(enum Qt::GlobalColor) - ?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 12941 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const - ?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 12942 NONAME ; void QGlyphs::setFont(class QFont const &) - ?resize@QBlittablePixmapData@@UAEXHH@Z @ 12943 NONAME ; void QBlittablePixmapData::resize(int, int) - ?getText@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1W4EchoMode@QLineEdit@@1PA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 12944 NONAME ; class QString QInputDialog::getText(class QWidget *, class QString const &, class QString const &, enum QLineEdit::EchoMode, class QString const &, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) - ?hasWidthForHeight@QSizePolicy@@QBE_NXZ @ 12945 NONAME ; bool QSizePolicy::hasWidthForHeight(void) const - ?transformChanged@QBlitterPaintEngine@@UAEXXZ @ 12946 NONAME ; void QBlitterPaintEngine::transformChanged(void) - ??0QBlittablePixmapData@@QAE@XZ @ 12947 NONAME ; QBlittablePixmapData::QBlittablePixmapData(void) - ?size@QBlittable@@QBE?AVQSize@@XZ @ 12948 NONAME ; class QSize QBlittable::size(void) const - ?setBlittable@QBlittablePixmapData@@QAEXPAVQBlittable@@@Z @ 12949 NONAME ; void QBlittablePixmapData::setBlittable(class QBlittable *) - ?opacityChanged@QBlitterPaintEngine@@UAEXXZ @ 12950 NONAME ; void QBlitterPaintEngine::opacityChanged(void) - ?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 12951 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const - ?setState@QBlitterPaintEngine@@UAEXPAVQPainterState@@@Z @ 12952 NONAME ; void QBlitterPaintEngine::setState(class QPainterState *) - ?clip@QBlitterPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 12953 NONAME ; void QBlitterPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation) - ?subPixelPositionForX@QTextureGlyphCache@@QBE?AUQFixed@@U2@@Z @ 12954 NONAME ; struct QFixed QTextureGlyphCache::subPixelPositionForX(struct QFixed) const - ?hasAlphaChannel@QBlittablePixmapData@@UBE_NXZ @ 12955 NONAME ; bool QBlittablePixmapData::hasAlphaChannel(void) const - ?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 12956 NONAME ; class QString QTextListFormat::numberSuffix(void) const - ??HQGlyphs@@ABE?AV0@ABV0@@Z @ 12957 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const - ?end@QBlitterPaintEngine@@UAE_NXZ @ 12958 NONAME ; bool QBlitterPaintEngine::end(void) - ?fill@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 12959 NONAME ; void QBlitterPaintEngine::fill(class QVectorPath const &, class QBrush const &) - ?drawPixmap@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 12960 NONAME ; void QBlitterPaintEngine::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &) - ?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 12961 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const - ?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 12962 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &) - ?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 12963 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &) - ?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 12964 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const - ?alphaRGBMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@HABVQTransform@@@Z @ 12965 NONAME ; class QImage QFontEngine::alphaRGBMapForGlyph(unsigned int, struct QFixed, int, class QTransform const &) - ?swap@QBitmap@@QAEXAAV1@@Z @ 12966 NONAME ; void QBitmap::swap(class QBitmap &) - ??0QWindowSurface@@QAE@PAVQWidget@@_N@Z @ 12967 NONAME ; QWindowSurface::QWindowSurface(class QWidget *, bool) - ?fill@QBlittablePixmapData@@UAEXABVQColor@@@Z @ 12968 NONAME ; void QBlittablePixmapData::fill(class QColor const &) - ?metric@QBlittablePixmapData@@UBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 12969 NONAME ; int QBlittablePixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const - ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQColor@@@Z @ 12970 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QColor const &) - ??6@YA?AVQDebug@@V0@PBVQSymbianEvent@@@Z @ 12971 NONAME ; class QDebug operator<<(class QDebug, class QSymbianEvent const *) - ??_EQBlittablePixmapData@@UAE@I@Z @ 12972 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(unsigned int) - ?mimeData@QAbstractProxyModel@@UBEPAVQMimeData@@ABV?$QList@VQModelIndex@@@@@Z @ 12973 NONAME ; class QMimeData * QAbstractProxyModel::mimeData(class QList<class QModelIndex> const &) const - ?minimumSizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 12974 NONAME ; class QSize QRadioButton::minimumSizeHint(void) const - ?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 12975 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &) - ?drawRects@QBlitterPaintEngine@@UAEXPBVQRect@@H@Z @ 12976 NONAME ; void QBlitterPaintEngine::drawRects(class QRect const *, int) - ?fillInPendingGlyphs@QTextureGlyphCache@@QAEXXZ @ 12977 NONAME ; void QTextureGlyphCache::fillInPendingGlyphs(void) - ?renderHintsChanged@QBlitterPaintEngine@@UAEXXZ @ 12978 NONAME ; void QBlitterPaintEngine::renderHintsChanged(void) - ?supportedDropActions@QAbstractProxyModel@@UBE?AV?$QFlags@W4DropAction@Qt@@@@XZ @ 12979 NONAME ; class QFlags<enum Qt::DropAction> QAbstractProxyModel::supportedDropActions(void) const - ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQBrush@@@Z @ 12980 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QBrush const &) - ?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 12981 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &) - ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IABVQTransform@@W4GlyphFormat@1@@Z @ 12982 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, class QTransform const &, enum QFontEngine::GlyphFormat) - ?d_func@QBlittable@@ABEPBVQBlittablePrivate@@XZ @ 12983 NONAME ; class QBlittablePrivate const * QBlittable::d_func(void) const - ?state@QBlitterPaintEngine@@QBEPBVQPainterState@@XZ @ 12984 NONAME ; class QPainterState const * QBlitterPaintEngine::state(void) const - ?clear@QGlyphs@@QAEXXZ @ 12985 NONAME ; void QGlyphs::clear(void) - ??1QBlittablePixmapData@@UAE@XZ @ 12986 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(void) - ?font@QGlyphs@@QBE?AVQFont@@XZ @ 12987 NONAME ; class QFont QGlyphs::font(void) const - ?paintEngine@QBlittablePixmapData@@UBEPAVQPaintEngine@@XZ @ 12988 NONAME ; class QPaintEngine * QBlittablePixmapData::paintEngine(void) const - ?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 12989 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const - ?swap@QPen@@QAEXAAV1@@Z @ 12990 NONAME ; void QPen::swap(class QPen &) - ?span@QAbstractProxyModel@@UBE?AVQSize@@ABVQModelIndex@@@Z @ 12991 NONAME ; class QSize QAbstractProxyModel::span(class QModelIndex const &) const - ?textureMapForGlyph@QTextureGlyphCache@@QBE?AVQImage@@IUQFixed@@@Z @ 12992 NONAME ; class QImage QTextureGlyphCache::textureMapForGlyph(unsigned int, struct QFixed) const - ??0QGlyphs@@QAE@XZ @ 12993 NONAME ; QGlyphs::QGlyphs(void) - ?begin@QBlitterPaintEngine@@UAE_NPAVQPaintDevice@@@Z @ 12994 NONAME ; bool QBlitterPaintEngine::begin(class QPaintDevice *) - ?inFontUcs4@QFontMetricsF@@QBE_NI@Z @ 12995 NONAME ; bool QFontMetricsF::inFontUcs4(unsigned int) const - ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 12996 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const &) - ?d_func@QBlitterPaintEngine@@AAEPAVQBlitterPaintEnginePrivate@@XZ @ 12997 NONAME ; class QBlitterPaintEnginePrivate * QBlitterPaintEngine::d_func(void) - ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 12998 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &) - ?getItem@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1ABVQStringList@@H_NPA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 12999 NONAME ; class QString QInputDialog::getItem(class QWidget *, class QString const &, class QString const &, class QStringList const &, int, bool, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) - ?clip@QBlitterPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 13000 NONAME ; void QBlitterPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation) - ?positions@QGlyphs@@QBE?AV?$QVector@VQPointF@@@@XZ @ 13001 NONAME ; class QVector<class QPointF> QGlyphs::positions(void) const - ?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13002 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const - ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@ABVQTransform@@@Z @ 13003 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed, class QTransform const &) - ?fromImage@QBlittablePixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13004 NONAME ; void QBlittablePixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>) - ??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13005 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &) - ??0QBlittable@@QAE@ABVQSize@@V?$QFlags@W4Capability@QBlittable@@@@@Z @ 13006 NONAME ; QBlittable::QBlittable(class QSize const &, class QFlags<enum QBlittable::Capability>) - ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRect@@H@Z @ 13007 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRect const *, int) - ?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 13008 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const - ?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13009 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const - ?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13010 NONAME ; void QAbstractProxyModel::resetInternalData(void) - ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQVectorPath@@@Z @ 13011 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QVectorPath const &) - ?clip@QBlitterPaintEngine@@QAEPBVQClipData@@XZ @ 13012 NONAME ; class QClipData const * QBlitterPaintEngine::clip(void) - ?setNumberSuffix@QTextListFormat@@QAEXABVQString@@@Z @ 13013 NONAME ; void QTextListFormat::setNumberSuffix(class QString const &) - ?swap@QPicture@@QAEXAAV1@@Z @ 13014 NONAME ; void QPicture::swap(class QPicture &) - ?swap@QPainterPath@@QAEXAAV1@@Z @ 13015 NONAME ; void QPainterPath::swap(class QPainterPath &) - ?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 13016 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const - ?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13017 NONAME ; class QFont QFontEngine::createExplicitFont(void) const - ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@@Z @ 13018 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed) - ?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 13019 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) - ?swap@QIcon@@QAEXAAV1@@Z @ 13020 NONAME ; void QIcon::swap(class QIcon &) - ?unmarkRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13021 NONAME ; void QBlittablePixmapData::unmarkRasterOverlay(class QRectF const &) - ?brushOriginChanged@QBlitterPaintEngine@@UAEXXZ @ 13022 NONAME ; void QBlitterPaintEngine::brushOriginChanged(void) - ??0QApplicationPrivate@@QAE@AAHPAPADW4Type@QApplication@@H@Z @ 13023 NONAME ; QApplicationPrivate::QApplicationPrivate(int &, char * *, enum QApplication::Type, int) - ?inFontUcs4@QFontMetrics@@QBE_NI@Z @ 13024 NONAME ; bool QFontMetrics::inFontUcs4(unsigned int) const - ?unlock@QBlittable@@QAEXXZ @ 13025 NONAME ; void QBlittable::unlock(void) - ?swap@QRegion@@QAEXAAV1@@Z @ 13026 NONAME ; void QRegion::swap(class QRegion &) - ?setItemData@QAbstractProxyModel@@UAE_NABVQModelIndex@@ABV?$QMap@HVQVariant@@@@@Z @ 13027 NONAME ; bool QAbstractProxyModel::setItemData(class QModelIndex const &, class QMap<int, class QVariant> const &) - ?swap@QPolygonF@@QAEXAAV1@@Z @ 13028 NONAME ; void QPolygonF::swap(class QPolygonF &) - ?swap@QPolygon@@QAEXAAV1@@Z @ 13029 NONAME ; void QPolygon::swap(class QPolygon &) - ?d_func@QBlitterPaintEngine@@ABEPBVQBlitterPaintEnginePrivate@@XZ @ 13030 NONAME ; class QBlitterPaintEnginePrivate const * QBlitterPaintEngine::d_func(void) const - ?swap@QKeySequence@@QAEXAAV1@@Z @ 13031 NONAME ; void QKeySequence::swap(class QKeySequence &) - ??1QGlyphs@@QAE@XZ @ 13032 NONAME ; QGlyphs::~QGlyphs(void) - ?stroke@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQPen@@@Z @ 13033 NONAME ; void QBlitterPaintEngine::stroke(class QVectorPath const &, class QPen const &) - ??9QGlyphs@@QBE_NABV0@@Z @ 13034 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const - ??1QBlittable@@UAE@XZ @ 13035 NONAME ; QBlittable::~QBlittable(void) - ??_EQBlitterPaintEngine@@UAE@I@Z @ 13036 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(unsigned int) - ?buffer@QBlittablePixmapData@@UAEPAVQImage@@XZ @ 13037 NONAME ; class QImage * QBlittablePixmapData::buffer(void) - ?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13038 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *) - ??0QGlyphs@@QAE@ABV0@@Z @ 13039 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &) - ?lock@QBlittable@@QAEPAVQImage@@XZ @ 13040 NONAME ; class QImage * QBlittable::lock(void) - ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQPointF@@ABVQTextItem@@@Z @ 13041 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QPointF const &, class QTextItem const &) - ??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13042 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &) - ?drawEllipse@QBlitterPaintEngine@@UAEXABVQRectF@@@Z @ 13043 NONAME ; void QBlitterPaintEngine::drawEllipse(class QRectF const &) - ?blittable@QBlittablePixmapData@@QBEPAVQBlittable@@XZ @ 13044 NONAME ; class QBlittable * QBlittablePixmapData::blittable(void) const - ?resizeCache@QTextureGlyphCache@@QAEXHH@Z @ 13045 NONAME ; void QTextureGlyphCache::resizeCache(int, int) - ?state@QBlitterPaintEngine@@QAEPAVQPainterState@@XZ @ 13046 NONAME ; class QPainterState * QBlitterPaintEngine::state(void) - ?penChanged@QBlitterPaintEngine@@UAEXXZ @ 13047 NONAME ; void QBlitterPaintEngine::penChanged(void) - ?hasHeightForWidth@QWidgetPrivate@@UBE_NXZ @ 13048 NONAME ; bool QWidgetPrivate::hasHeightForWidth(void) const - ?toImage@QBlittablePixmapData@@UBE?AVQImage@@XZ @ 13049 NONAME ; class QImage QBlittablePixmapData::toImage(void) const - ??_EQBlittable@@UAE@I@Z @ 13050 NONAME ; QBlittable::~QBlittable(unsigned int) - ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13051 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) - ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13052 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) - ??0QFlickGesture@@QAE@PAVQObject@@W4MouseButton@Qt@@0@Z @ 13053 NONAME ; QFlickGesture::QFlickGesture(class QObject *, enum Qt::MouseButton, class QObject *) - ??0QScrollEvent@@QAE@ABVQPointF@@0W4ScrollState@0@@Z @ 13054 NONAME ; QScrollEvent::QScrollEvent(class QPointF const &, class QPointF const &, enum QScrollEvent::ScrollState) - ??0QScrollPrepareEvent@@QAE@ABVQPointF@@@Z @ 13055 NONAME ; QScrollPrepareEvent::QScrollPrepareEvent(class QPointF const &) - ??0QScroller@@AAE@PAVQObject@@@Z @ 13056 NONAME ; QScroller::QScroller(class QObject *) - ??0QScrollerProperties@@QAE@ABV0@@Z @ 13057 NONAME ; QScrollerProperties::QScrollerProperties(class QScrollerProperties const &) - ??0QScrollerProperties@@QAE@XZ @ 13058 NONAME ; QScrollerProperties::QScrollerProperties(void) - ??1QFlickGesture@@UAE@XZ @ 13059 NONAME ; QFlickGesture::~QFlickGesture(void) - ??1QScrollEvent@@UAE@XZ @ 13060 NONAME ; QScrollEvent::~QScrollEvent(void) - ??1QScrollPrepareEvent@@UAE@XZ @ 13061 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(void) - ??1QScroller@@EAE@XZ @ 13062 NONAME ; QScroller::~QScroller(void) - ??1QScrollerProperties@@UAE@XZ @ 13063 NONAME ; QScrollerProperties::~QScrollerProperties(void) - ??4QScrollerProperties@@QAEAAV0@ABV0@@Z @ 13064 NONAME ; class QScrollerProperties & QScrollerProperties::operator=(class QScrollerProperties const &) - ??8QScrollerProperties@@QBE_NABV0@@Z @ 13065 NONAME ; bool QScrollerProperties::operator==(class QScrollerProperties const &) const - ??9QScrollerProperties@@QBE_NABV0@@Z @ 13066 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const - ??_EQFlickGesture@@UAE@I@Z @ 13067 NONAME ; QFlickGesture::~QFlickGesture(unsigned int) - ??_EQScrollEvent@@UAE@I@Z @ 13068 NONAME ; QScrollEvent::~QScrollEvent(unsigned int) - ??_EQScrollPrepareEvent@@UAE@I@Z @ 13069 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(unsigned int) - ??_EQScroller@@UAE@I@Z @ 13070 NONAME ; QScroller::~QScroller(unsigned int) - ??_EQScrollerProperties@@UAE@I@Z @ 13071 NONAME ; QScrollerProperties::~QScrollerProperties(unsigned int) - ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13072 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void) - ?canStartScrollingAt@QAbstractScrollAreaPrivate@@QAE_NABVQPoint@@@Z @ 13073 NONAME ; bool QAbstractScrollAreaPrivate::canStartScrollingAt(class QPoint const &) - ?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 13074 NONAME ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *, class QGraphicsItem *) - ?contentPos@QScrollEvent@@QBE?AVQPointF@@XZ @ 13075 NONAME ; class QPointF QScrollEvent::contentPos(void) const - ?contentPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13076 NONAME ; class QPointF QScrollPrepareEvent::contentPos(void) const - ?contentPosRange@QScrollPrepareEvent@@QBE?AVQRectF@@XZ @ 13077 NONAME ; class QRectF QScrollPrepareEvent::contentPosRange(void) const - ?d_func@QFlickGesture@@AAEPAVQFlickGesturePrivate@@XZ @ 13078 NONAME ; class QFlickGesturePrivate * QFlickGesture::d_func(void) - ?d_func@QFlickGesture@@ABEPBVQFlickGesturePrivate@@XZ @ 13079 NONAME ; class QFlickGesturePrivate const * QFlickGesture::d_func(void) const - ?d_func@QScrollEvent@@AAEPAVQScrollEventPrivate@@XZ @ 13080 NONAME ; class QScrollEventPrivate * QScrollEvent::d_func(void) - ?d_func@QScrollEvent@@ABEPBVQScrollEventPrivate@@XZ @ 13081 NONAME ; class QScrollEventPrivate const * QScrollEvent::d_func(void) const - ?d_func@QScrollPrepareEvent@@AAEPAVQScrollPrepareEventPrivate@@XZ @ 13082 NONAME ; class QScrollPrepareEventPrivate * QScrollPrepareEvent::d_func(void) - ?d_func@QScrollPrepareEvent@@ABEPBVQScrollPrepareEventPrivate@@XZ @ 13083 NONAME ; class QScrollPrepareEventPrivate const * QScrollPrepareEvent::d_func(void) const - ?d_func@QScroller@@AAEPAVQScrollerPrivate@@XZ @ 13084 NONAME ; class QScrollerPrivate * QScroller::d_func(void) - ?d_func@QScroller@@ABEPBVQScrollerPrivate@@XZ @ 13085 NONAME ; class QScrollerPrivate const * QScroller::d_func(void) const - ?ensureVisible@QScroller@@QAEXABVQRectF@@MM@Z @ 13086 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float) - ?ensureVisible@QScroller@@QAEXABVQRectF@@MMH@Z @ 13087 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float, int) - ?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13088 NONAME ; class QPointF QScroller::finalPosition(void) const - ?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13089 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void) - ?getStaticMetaObject@QScroller@@SAABUQMetaObject@@XZ @ 13090 NONAME ; struct QMetaObject const & QScroller::getStaticMetaObject(void) - ?grabGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@W4ScrollerGestureType@1@@Z @ 13091 NONAME ; enum Qt::GestureType QScroller::grabGesture(class QObject *, enum QScroller::ScrollerGestureType) - ?grabbedGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@@Z @ 13092 NONAME ; enum Qt::GestureType QScroller::grabbedGesture(class QObject *) - ?handleInput@QScroller@@QAE_NW4Input@1@ABVQPointF@@_J@Z @ 13093 NONAME ; bool QScroller::handleInput(enum QScroller::Input, class QPointF const &, long long) - ?hasScroller@QScroller@@SA_NPAVQObject@@@Z @ 13094 NONAME ; bool QScroller::hasScroller(class QObject *) - ?metaObject@QFlickGesture@@UBEPBUQMetaObject@@XZ @ 13095 NONAME ; struct QMetaObject const * QFlickGesture::metaObject(void) const - ?metaObject@QScroller@@UBEPBUQMetaObject@@XZ @ 13096 NONAME ; struct QMetaObject const * QScroller::metaObject(void) const - ?overshootDistance@QScrollEvent@@QBE?AVQPointF@@XZ @ 13097 NONAME ; class QPointF QScrollEvent::overshootDistance(void) const - ?pixelPerMeter@QScroller@@QBE?AVQPointF@@XZ @ 13098 NONAME ; class QPointF QScroller::pixelPerMeter(void) const - ?qGamma_correct_back_to_linear_cs@@YAXPAVQImage@@@Z @ 13099 NONAME ; void qGamma_correct_back_to_linear_cs(class QImage *) - ?qt_metacall@QFlickGesture@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13100 NONAME ; int QFlickGesture::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@QScroller@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13101 NONAME ; int QScroller::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13102 NONAME ; void * QFlickGesture::qt_metacast(char const *) - ?qt_metacast@QScroller@@UAEPAXPBD@Z @ 13103 NONAME ; void * QScroller::qt_metacast(char const *) - ?resendPrepareEvent@QScroller@@QAEXXZ @ 13104 NONAME ; void QScroller::resendPrepareEvent(void) - ?resetCursorBlinkTimer@QLineControl@@QAEXXZ @ 13105 NONAME ; void QLineControl::resetCursorBlinkTimer(void) - ?scrollMetric@QScrollerProperties@@QBE?AVQVariant@@W4ScrollMetric@1@@Z @ 13106 NONAME ; class QVariant QScrollerProperties::scrollMetric(enum QScrollerProperties::ScrollMetric) const - ?scrollState@QScrollEvent@@QBE?AW4ScrollState@1@XZ @ 13107 NONAME ; enum QScrollEvent::ScrollState QScrollEvent::scrollState(void) const - ?scrollTo@QScroller@@QAEXABVQPointF@@@Z @ 13108 NONAME ; void QScroller::scrollTo(class QPointF const &) - ?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13109 NONAME ; void QScroller::scrollTo(class QPointF const &, int) - ?scroller@QScroller@@SAPAV1@PAVQObject@@@Z @ 13110 NONAME ; class QScroller * QScroller::scroller(class QObject *) - ?scroller@QScroller@@SAPBV1@PBVQObject@@@Z @ 13111 NONAME ; class QScroller const * QScroller::scroller(class QObject const *) - ?scrollerProperties@QScroller@@QBE?AVQScrollerProperties@@XZ @ 13112 NONAME ; class QScrollerProperties QScroller::scrollerProperties(void) const - ?scrollerPropertiesChanged@QScroller@@IAEXABVQScrollerProperties@@@Z @ 13113 NONAME ; void QScroller::scrollerPropertiesChanged(class QScrollerProperties const &) - ?setContentPos@QScrollPrepareEvent@@QAEXABVQPointF@@@Z @ 13114 NONAME ; void QScrollPrepareEvent::setContentPos(class QPointF const &) - ?setContentPosRange@QScrollPrepareEvent@@QAEXABVQRectF@@@Z @ 13115 NONAME ; void QScrollPrepareEvent::setContentPosRange(class QRectF const &) - ?setDefaultScrollerProperties@QScrollerProperties@@SAXABV1@@Z @ 13116 NONAME ; void QScrollerProperties::setDefaultScrollerProperties(class QScrollerProperties const &) - ?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13117 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &) - ?setScrollerProperties@QScroller@@QAEXABVQScrollerProperties@@@Z @ 13118 NONAME ; void QScroller::setScrollerProperties(class QScrollerProperties const &) - ?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13119 NONAME ; void QScroller::setSnapPositionsX(class QList<float> const &) - ?setSnapPositionsX@QScroller@@QAEXMM@Z @ 13120 NONAME ; void QScroller::setSnapPositionsX(float, float) - ?setSnapPositionsY@QScroller@@QAEXABV?$QList@M@@@Z @ 13121 NONAME ; void QScroller::setSnapPositionsY(class QList<float> const &) - ?setSnapPositionsY@QScroller@@QAEXMM@Z @ 13122 NONAME ; void QScroller::setSnapPositionsY(float, float) - ?setSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 13123 NONAME ; void QGraphicsItemPrivate::setSubFocus(class QGraphicsItem *, class QGraphicsItem *) - ?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13124 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &) - ?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13125 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const - ?state@QScroller@@QBE?AW4State@1@XZ @ 13126 NONAME ; enum QScroller::State QScroller::state(void) const - ?stateChanged@QScroller@@IAEXW4State@1@@Z @ 13127 NONAME ; void QScroller::stateChanged(enum QScroller::State) - ?stop@QScroller@@QAEXXZ @ 13128 NONAME ; void QScroller::stop(void) - ?target@QScroller@@QBEPAVQObject@@XZ @ 13129 NONAME ; class QObject * QScroller::target(void) const - ?tr@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13130 NONAME ; class QString QFlickGesture::tr(char const *, char const *) - ?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13131 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int) - ?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13132 NONAME ; class QString QScroller::tr(char const *, char const *) - ?tr@QScroller@@SA?AVQString@@PBD0H@Z @ 13133 NONAME ; class QString QScroller::tr(char const *, char const *, int) - ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13134 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *) - ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13135 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *, int) - ?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13136 NONAME ; class QString QScroller::trUtf8(char const *, char const *) - ?trUtf8@QScroller@@SA?AVQString@@PBD0H@Z @ 13137 NONAME ; class QString QScroller::trUtf8(char const *, char const *, int) - ?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13138 NONAME ; void QScroller::ungrabGesture(class QObject *) - ?unsetDefaultScrollerProperties@QScrollerProperties@@SAXXZ @ 13139 NONAME ; void QScrollerProperties::unsetDefaultScrollerProperties(void) - ?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13140 NONAME ; class QPointF QScroller::velocity(void) const - ?viewportSize@QScrollPrepareEvent@@QBE?AVQSizeF@@XZ @ 13141 NONAME ; class QSizeF QScrollPrepareEvent::viewportSize(void) const - ?staticMetaObject@QScroller@@2UQMetaObject@@B @ 13142 NONAME ; struct QMetaObject const QScroller::staticMetaObject - ?staticMetaObject@QFlickGesture@@2UQMetaObject@@B @ 13143 NONAME ; struct QMetaObject const QFlickGesture::staticMetaObject - ?isDragEnabled@QTextControl@@QBE_NXZ @ 13144 NONAME ; bool QTextControl::isDragEnabled(void) const - ?setWordSelectionEnabled@QTextControl@@QAEX_N@Z @ 13145 NONAME ; void QTextControl::setWordSelectionEnabled(bool) - ?setDragEnabled@QTextControl@@QAEX_N@Z @ 13146 NONAME ; void QTextControl::setDragEnabled(bool) - ?isWordSelectionEnabled@QTextControl@@QBE_NXZ @ 13147 NONAME ; bool QTextControl::isWordSelectionEnabled(void) const - ?ProcessCommandParametersL@QS60MainAppUi@@UAEHW4TApaCommand@@AAV?$TBuf@$0BAA@@@ABVTDesC8@@@Z @ 13148 NONAME ; int QS60MainAppUi::ProcessCommandParametersL(enum TApaCommand, class TBuf<256> &, class TDesC8 const &) - ?openFile@QFileOpenEvent@@QBE_NAAVQFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13149 NONAME ; bool QFileOpenEvent::openFile(class QFile &, class QFlags<enum QIODevice::OpenModeFlag>) const - ??0QFileOpenEvent@@QAE@ABVRFile@@@Z @ 13150 NONAME ; QFileOpenEvent::QFileOpenEvent(class RFile const &) - ?beginDataAccess@QVolatileImage@@QBEXXZ @ 13151 NONAME ; void QVolatileImage::beginDataAccess(void) const - ??1QVolatileImage@@QAE@XZ @ 13152 NONAME ; QVolatileImage::~QVolatileImage(void) - ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 13153 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *) - ??0QVolatileImage@@QAE@HHW4Format@QImage@@@Z @ 13154 NONAME ; QVolatileImage::QVolatileImage(int, int, enum QImage::Format) - ?ensureFormat@QVolatileImage@@QAE_NW4Format@QImage@@@Z @ 13155 NONAME ; bool QVolatileImage::ensureFormat(enum QImage::Format) - ?fill@QVolatileImage@@QAEXI@Z @ 13156 NONAME ; void QVolatileImage::fill(unsigned int) - ?assignedInputContext@QWidgetPrivate@@QBEPAVQInputContext@@XZ @ 13157 NONAME ; class QInputContext * QWidgetPrivate::assignedInputContext(void) const - ?retrieveData@QInternalMimeData@@MBE?AVQVariant@@ABVQString@@W4Type@2@@Z @ 13158 NONAME ; class QVariant QInternalMimeData::retrieveData(class QString const &, enum QVariant::Type) const - ?formats@QInternalMimeData@@UBE?AVQStringList@@XZ @ 13159 NONAME ; class QStringList QInternalMimeData::formats(void) const - ?isNull@QVolatileImage@@QBE_NXZ @ 13160 NONAME ; bool QVolatileImage::isNull(void) const - ?toImage@QVolatileImage@@QBE?AVQImage@@XZ @ 13161 NONAME ; class QImage QVolatileImage::toImage(void) const - ??0QVolatileImage@@QAE@ABVQImage@@@Z @ 13162 NONAME ; QVolatileImage::QVolatileImage(class QImage const &) - ?tr@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13163 NONAME ; class QString QInternalMimeData::tr(char const *, char const *, int) - ?resolveFontFamilyAlias@QFontDatabase@@CA?AVQString@@ABV2@@Z @ 13164 NONAME ; class QString QFontDatabase::resolveFontFamilyAlias(class QString const &) - ?hasFormat@QInternalMimeData@@UBE_NABVQString@@@Z @ 13165 NONAME ; bool QInternalMimeData::hasFormat(class QString const &) const - ?format@QVolatileImage@@QBE?AW4Format@QImage@@XZ @ 13166 NONAME ; enum QImage::Format QVolatileImage::format(void) const - ?renderDataHelper@QInternalMimeData@@SA?AVQByteArray@@ABVQString@@PBVQMimeData@@@Z @ 13167 NONAME ; class QByteArray QInternalMimeData::renderDataHelper(class QString const &, class QMimeData const *) - ?endDataAccess@QVolatileImage@@QBEX_N@Z @ 13168 NONAME ; void QVolatileImage::endDataAccess(bool) const - ?constBits@QVolatileImage@@QBEPBEXZ @ 13169 NONAME ; unsigned char const * QVolatileImage::constBits(void) const - ?updateMicroFocus@QLineControl@@IAEXXZ @ 13170 NONAME ; void QLineControl::updateMicroFocus(void) - ?height@QVolatileImage@@QBEHXZ @ 13171 NONAME ; int QVolatileImage::height(void) const - ?duplicateNativeImage@QVolatileImage@@QBEPAXXZ @ 13172 NONAME ; void * QVolatileImage::duplicateNativeImage(void) const - ?formatsHelper@QInternalMimeData@@SA?AVQStringList@@PBVQMimeData@@@Z @ 13173 NONAME ; class QStringList QInternalMimeData::formatsHelper(class QMimeData const *) - ?qt_metacast@QInternalMimeData@@UAEPAXPBD@Z @ 13174 NONAME ; void * QInternalMimeData::qt_metacast(char const *) - ?bits@QVolatileImage@@QAEPAEXZ @ 13175 NONAME ; unsigned char * QVolatileImage::bits(void) - ?paintEngine@QVolatileImage@@QAEPAVQPaintEngine@@XZ @ 13176 NONAME ; class QPaintEngine * QVolatileImage::paintEngine(void) - ?bytesPerLine@QVolatileImage@@QBEHXZ @ 13177 NONAME ; int QVolatileImage::bytesPerLine(void) const - ?width@QVolatileImage@@QBEHXZ @ 13178 NONAME ; int QVolatileImage::width(void) const - ?qt_metacall@QInternalMimeData@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13179 NONAME ; int QInternalMimeData::qt_metacall(enum QMetaObject::Call, int, void * *) - ?lineHeightType@QTextBlockFormat@@QBEHXZ @ 13180 NONAME ; int QTextBlockFormat::lineHeightType(void) const - ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13181 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *, int) - ?copyFrom@QVolatileImage@@QAEXPAV1@ABVQRect@@@Z @ 13182 NONAME ; void QVolatileImage::copyFrom(class QVolatileImage *, class QRect const &) - ?lineHeight@QTextBlockFormat@@QBEMMM@Z @ 13183 NONAME ; float QTextBlockFormat::lineHeight(float, float) const - ?canReadData@QInternalMimeData@@SA_NABVQString@@@Z @ 13184 NONAME ; bool QInternalMimeData::canReadData(class QString const &) - ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 13185 NONAME ; void QGraphicsSystem::releaseCachedResources(void) - ??0QInternalMimeData@@QAE@XZ @ 13186 NONAME ; QInternalMimeData::QInternalMimeData(void) - ?setLineHeight@QTextBlockFormat@@QAEXMH@Z @ 13187 NONAME ; void QTextBlockFormat::setLineHeight(float, int) - ?imageRef@QVolatileImage@@QAEAAVQImage@@XZ @ 13188 NONAME ; class QImage & QVolatileImage::imageRef(void) - ??0QVolatileImage@@QAE@PAX0@Z @ 13189 NONAME ; QVolatileImage::QVolatileImage(void *, void *) - ??4QVolatileImage@@QAEAAV0@ABV0@@Z @ 13190 NONAME ; class QVolatileImage & QVolatileImage::operator=(class QVolatileImage const &) - ??0QVolatileImage@@QAE@XZ @ 13191 NONAME ; QVolatileImage::QVolatileImage(void) - ?getStaticMetaObject@QInternalMimeData@@SAABUQMetaObject@@XZ @ 13192 NONAME ; struct QMetaObject const & QInternalMimeData::getStaticMetaObject(void) - ?lineHeight@QTextBlockFormat@@QBEMXZ @ 13193 NONAME ; float QTextBlockFormat::lineHeight(void) const - ?tr@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 13194 NONAME ; class QString QInternalMimeData::tr(char const *, char const *) - ?hasAlphaChannel@QVolatileImage@@QBE_NXZ @ 13195 NONAME ; bool QVolatileImage::hasAlphaChannel(void) const - ?setAlphaChannel@QVolatileImage@@QAEXABVQPixmap@@@Z @ 13196 NONAME ; void QVolatileImage::setAlphaChannel(class QPixmap const &) - ??_EQInternalMimeData@@UAE@I@Z @ 13197 NONAME ; QInternalMimeData::~QInternalMimeData(unsigned int) - ?byteCount@QVolatileImage@@QBEHXZ @ 13198 NONAME ; int QVolatileImage::byteCount(void) const - ??0QVolatileImage@@QAE@ABV0@@Z @ 13199 NONAME ; QVolatileImage::QVolatileImage(class QVolatileImage const &) - ?metaObject@QInternalMimeData@@UBEPBUQMetaObject@@XZ @ 13200 NONAME ; struct QMetaObject const * QInternalMimeData::metaObject(void) const - ?depth@QVolatileImage@@QBEHXZ @ 13201 NONAME ; int QVolatileImage::depth(void) const - ?hasFormatHelper@QInternalMimeData@@SA_NABVQString@@PBVQMimeData@@@Z @ 13202 NONAME ; bool QInternalMimeData::hasFormatHelper(class QString const &, class QMimeData const *) - ??1QInternalMimeData@@UAE@XZ @ 13203 NONAME ; QInternalMimeData::~QInternalMimeData(void) - ?staticMetaObject@QInternalMimeData@@2UQMetaObject@@B @ 13204 NONAME ; struct QMetaObject const QInternalMimeData::staticMetaObject + ?resetCursorBlinkTimer@QLineControl@@QAEXXZ @ 12907 NONAME ; void QLineControl::resetCursorBlinkTimer(void) + ?setSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 12908 NONAME ; void QGraphicsItemPrivate::setSubFocus(class QGraphicsItem *, class QGraphicsItem *) + ?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@0@Z @ 12909 NONAME ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *, class QGraphicsItem *) + ?hitTest@QTextDocumentLayout@@UBEHABVQPointF@@W4HitTestAccuracy@Qt@@@Z @ 12910 NONAME ABSENT ; int QTextDocumentLayout::hitTest(class QPointF const &, enum Qt::HitTestAccuracy) const + ?positionInlineObject@QTextDocumentLayout@@MAEXVQTextInlineObject@@HABVQTextFormat@@@Z @ 12911 NONAME ABSENT ; void QTextDocumentLayout::positionInlineObject(class QTextInlineObject, int, class QTextFormat const &) + ?timerEvent@QTextDocumentLayout@@MAEXPAVQTimerEvent@@@Z @ 12912 NONAME ABSENT ; void QTextDocumentLayout::timerEvent(class QTimerEvent *) + ?draw@QTextDocumentLayout@@UAEXPAVQPainter@@ABUPaintContext@QAbstractTextDocumentLayout@@@Z @ 12913 NONAME ABSENT ; void QTextDocumentLayout::draw(class QPainter *, struct QAbstractTextDocumentLayout::PaintContext const &) + ?documentSize@QTextDocumentLayout@@UBE?AVQSizeF@@XZ @ 12914 NONAME ABSENT ; class QSizeF QTextDocumentLayout::documentSize(void) const + ?drawInlineObject@QTextDocumentLayout@@MAEXPAVQPainter@@ABVQRectF@@VQTextInlineObject@@HABVQTextFormat@@@Z @ 12915 NONAME ABSENT ; void QTextDocumentLayout::drawInlineObject(class QPainter *, class QRectF const &, class QTextInlineObject, int, class QTextFormat const &) + ?resizeInlineObject@QTextDocumentLayout@@MAEXVQTextInlineObject@@HABVQTextFormat@@@Z @ 12916 NONAME ABSENT ; void QTextDocumentLayout::resizeInlineObject(class QTextInlineObject, int, class QTextFormat const &) + ?dynamicDocumentSize@QTextDocumentLayout@@QBE?AVQSizeF@@XZ @ 12917 NONAME ABSENT ; class QSizeF QTextDocumentLayout::dynamicDocumentSize(void) const + ?metaObject@QTextDocumentLayout@@UBEPBUQMetaObject@@XZ @ 12918 NONAME ABSENT ; struct QMetaObject const * QTextDocumentLayout::metaObject(void) const + ?getStaticMetaObject@QTextDocumentLayout@@SAABUQMetaObject@@XZ @ 12919 NONAME ABSENT ; struct QMetaObject const & QTextDocumentLayout::getStaticMetaObject(void) + ?blockBoundingRect@QTextDocumentLayout@@UBE?AVQRectF@@ABVQTextBlock@@@Z @ 12920 NONAME ABSENT ; class QRectF QTextDocumentLayout::blockBoundingRect(class QTextBlock const &) const + ?qt_metacall@QTextDocumentLayout@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12921 NONAME ABSENT ; int QTextDocumentLayout::qt_metacall(enum QMetaObject::Call, int, void * *) + ?d_func@QTextDocumentLayout@@AAEPAVQTextDocumentLayoutPrivate@@XZ @ 12922 NONAME ABSENT ; class QTextDocumentLayoutPrivate * QTextDocumentLayout::d_func(void) + ?isDragEnabled@QTextControl@@QBE_NXZ @ 12923 NONAME ; bool QTextControl::isDragEnabled(void) const + ?staticMetaObject@QTextDocumentLayout@@2UQMetaObject@@B @ 12924 NONAME ABSENT ; struct QMetaObject const QTextDocumentLayout::staticMetaObject + ?qt_metacast@QTextDocumentLayout@@UAEPAXPBD@Z @ 12925 NONAME ABSENT ; void * QTextDocumentLayout::qt_metacast(char const *) + ?documentChanged@QTextDocumentLayout@@MAEXHHH@Z @ 12926 NONAME ABSENT ; void QTextDocumentLayout::documentChanged(int, int, int) + ??1QTextDocumentLayout@@UAE@XZ @ 12927 NONAME ABSENT ; QTextDocumentLayout::~QTextDocumentLayout(void) + ?layoutStatus@QTextDocumentLayout@@QBEHXZ @ 12928 NONAME ABSENT ; int QTextDocumentLayout::layoutStatus(void) const + ?setDragEnabled@QTextControl@@QAEX_N@Z @ 12929 NONAME ; void QTextControl::setDragEnabled(bool) + ?d_func@QTextDocumentLayout@@ABEPBVQTextDocumentLayoutPrivate@@XZ @ 12930 NONAME ABSENT ; class QTextDocumentLayoutPrivate const * QTextDocumentLayout::d_func(void) const + ?idealWidth@QTextDocumentLayout@@QBEMXZ @ 12931 NONAME ABSENT ; float QTextDocumentLayout::idealWidth(void) const + ?setFixedColumnWidth@QTextDocumentLayout@@QAEXH@Z @ 12932 NONAME ABSENT ; void QTextDocumentLayout::setFixedColumnWidth(int) + ?cursorWidth@QTextDocumentLayout@@QBEHXZ @ 12933 NONAME ABSENT ; int QTextDocumentLayout::cursorWidth(void) const + ?trUtf8@QTextDocumentLayout@@SA?AVQString@@PBD0H@Z @ 12934 NONAME ABSENT ; class QString QTextDocumentLayout::trUtf8(char const *, char const *, int) + ?pageCount@QTextDocumentLayout@@UBEHXZ @ 12935 NONAME ABSENT ; int QTextDocumentLayout::pageCount(void) const + ?setViewport@QTextDocumentLayout@@QAEXABVQRectF@@@Z @ 12936 NONAME ABSENT ; void QTextDocumentLayout::setViewport(class QRectF const &) + ?contentHasAlignment@QTextDocumentLayout@@QBE_NXZ @ 12937 NONAME ABSENT ; bool QTextDocumentLayout::contentHasAlignment(void) const + ?tr@QTextDocumentLayout@@SA?AVQString@@PBD0@Z @ 12938 NONAME ABSENT ; class QString QTextDocumentLayout::tr(char const *, char const *) + ?setLineHeight@QTextDocumentLayout@@IAEXMW4LineHeightMode@1@@Z @ 12939 NONAME ABSENT ; void QTextDocumentLayout::setLineHeight(float, enum QTextDocumentLayout::LineHeightMode) + ?tr@QTextDocumentLayout@@SA?AVQString@@PBD0H@Z @ 12940 NONAME ABSENT ; class QString QTextDocumentLayout::tr(char const *, char const *, int) + ?trUtf8@QTextDocumentLayout@@SA?AVQString@@PBD0@Z @ 12941 NONAME ABSENT ; class QString QTextDocumentLayout::trUtf8(char const *, char const *) + ?frameBoundingRect@QTextDocumentLayout@@UBE?AVQRectF@@PAVQTextFrame@@@Z @ 12942 NONAME ABSENT ; class QRectF QTextDocumentLayout::frameBoundingRect(class QTextFrame *) const + ?setCursorWidth@QTextDocumentLayout@@QAEXH@Z @ 12943 NONAME ABSENT ; void QTextDocumentLayout::setCursorWidth(int) + ??_EQTextDocumentLayout@@UAE@I@Z @ 12944 NONAME ABSENT ; QTextDocumentLayout::~QTextDocumentLayout(unsigned int) + ??0QTextDocumentLayout@@QAE@PAVQTextDocument@@@Z @ 12945 NONAME ABSENT ; QTextDocumentLayout::QTextDocumentLayout(class QTextDocument *) + ?doLayout@QTextDocumentLayout@@AAE?AVQRectF@@HHH@Z @ 12946 NONAME ABSENT ; class QRectF QTextDocumentLayout::doLayout(int, int, int) + ?ensureLayouted@QTextDocumentLayout@@QAEXM@Z @ 12947 NONAME ABSENT ; void QTextDocumentLayout::ensureLayouted(float) + ?layoutFinished@QTextDocumentLayout@@AAEXXZ @ 12948 NONAME ABSENT ; void QTextDocumentLayout::layoutFinished(void) + ?dynamicPageCount@QTextDocumentLayout@@QBEHXZ @ 12949 NONAME ABSENT ; int QTextDocumentLayout::dynamicPageCount(void) const + ?setWordSelectionEnabled@QTextControl@@QAEX_N@Z @ 12950 NONAME ; void QTextControl::setWordSelectionEnabled(bool) + ?isWordSelectionEnabled@QTextControl@@QBE_NXZ @ 12951 NONAME ; bool QTextControl::isWordSelectionEnabled(void) const + ?assignedInputContext@QWidgetPrivate@@QBEPAVQInputContext@@XZ @ 12952 NONAME ; class QInputContext * QWidgetPrivate::assignedInputContext(void) const + ?updateMicroFocus@QLineControl@@IAEXXZ @ 12953 NONAME ; void QLineControl::updateMicroFocus(void) + ?beginDataAccess@QVolatileImage@@QBEXXZ @ 12954 NONAME ; void QVolatileImage::beginDataAccess(void) const + ??1QVolatileImage@@QAE@XZ @ 12955 NONAME ; QVolatileImage::~QVolatileImage(void) + ??0QVolatileImage@@QAE@HHW4Format@QImage@@@Z @ 12956 NONAME ; QVolatileImage::QVolatileImage(int, int, enum QImage::Format) + ?ensureFormat@QVolatileImage@@QAE_NW4Format@QImage@@@Z @ 12957 NONAME ; bool QVolatileImage::ensureFormat(enum QImage::Format) + ?fill@QVolatileImage@@QAEXI@Z @ 12958 NONAME ; void QVolatileImage::fill(unsigned int) + ?isNull@QVolatileImage@@QBE_NXZ @ 12959 NONAME ; bool QVolatileImage::isNull(void) const + ?toImage@QVolatileImage@@QBE?AVQImage@@XZ @ 12960 NONAME ; class QImage QVolatileImage::toImage(void) const + ??0QVolatileImage@@QAE@ABVQImage@@@Z @ 12961 NONAME ; QVolatileImage::QVolatileImage(class QImage const &) + ?format@QVolatileImage@@QBE?AW4Format@QImage@@XZ @ 12962 NONAME ; enum QImage::Format QVolatileImage::format(void) const + ?endDataAccess@QVolatileImage@@QBEX_N@Z @ 12963 NONAME ; void QVolatileImage::endDataAccess(bool) const + ?constBits@QVolatileImage@@QBEPBEXZ @ 12964 NONAME ; unsigned char const * QVolatileImage::constBits(void) const + ?height@QVolatileImage@@QBEHXZ @ 12965 NONAME ; int QVolatileImage::height(void) const + ?duplicateNativeImage@QVolatileImage@@QBEPAXXZ @ 12966 NONAME ; void * QVolatileImage::duplicateNativeImage(void) const + ?bits@QVolatileImage@@QAEPAEXZ @ 12967 NONAME ; unsigned char * QVolatileImage::bits(void) + ?paintEngine@QVolatileImage@@QAEPAVQPaintEngine@@XZ @ 12968 NONAME ; class QPaintEngine * QVolatileImage::paintEngine(void) + ?bytesPerLine@QVolatileImage@@QBEHXZ @ 12969 NONAME ; int QVolatileImage::bytesPerLine(void) const + ?width@QVolatileImage@@QBEHXZ @ 12970 NONAME ; int QVolatileImage::width(void) const + ?copyFrom@QVolatileImage@@QAEXPAV1@ABVQRect@@@Z @ 12971 NONAME ; void QVolatileImage::copyFrom(class QVolatileImage *, class QRect const &) + ?imageRef@QVolatileImage@@QAEAAVQImage@@XZ @ 12972 NONAME ; class QImage & QVolatileImage::imageRef(void) + ??0QVolatileImage@@QAE@PAX0@Z @ 12973 NONAME ; QVolatileImage::QVolatileImage(void *, void *) + ??4QVolatileImage@@QAEAAV0@ABV0@@Z @ 12974 NONAME ; class QVolatileImage & QVolatileImage::operator=(class QVolatileImage const &) + ??0QVolatileImage@@QAE@XZ @ 12975 NONAME ; QVolatileImage::QVolatileImage(void) + ?hasAlphaChannel@QVolatileImage@@QBE_NXZ @ 12976 NONAME ; bool QVolatileImage::hasAlphaChannel(void) const + ?setAlphaChannel@QVolatileImage@@QAEXABVQPixmap@@@Z @ 12977 NONAME ; void QVolatileImage::setAlphaChannel(class QPixmap const &) + ?byteCount@QVolatileImage@@QBEHXZ @ 12978 NONAME ; int QVolatileImage::byteCount(void) const + ??0QVolatileImage@@QAE@ABV0@@Z @ 12979 NONAME ; QVolatileImage::QVolatileImage(class QVolatileImage const &) + ?depth@QVolatileImage@@QBEHXZ @ 12980 NONAME ; int QVolatileImage::depth(void) const + ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ; void QGraphicsSystem::releaseCachedResources(void) + ?qt_s60_setPartialScreenInputMode@@YAX_N@Z @ 12982 NONAME ; void qt_s60_setPartialScreenInputMode(bool) + ?clipEnabledChanged@QBlitterPaintEngine@@UAEXXZ @ 12983 NONAME ; void QBlitterPaintEngine::clipEnabledChanged(void) + ?supportsSubPixelPositions@QFontEngine@@UBE_NXZ @ 12984 NONAME ; bool QFontEngine::supportsSubPixelPositions(void) const + ??_EQScrollerProperties@@UAE@I@Z @ 12985 NONAME ; QScrollerProperties::~QScrollerProperties(unsigned int) + ??_EQFontPrivate@@QAE@I@Z @ 12986 NONAME ; QFontPrivate::~QFontPrivate(unsigned int) + ??0QMimeSource@@QAE@XZ @ 12987 NONAME ; QMimeSource::QMimeSource(void) + ??0QStyleFactoryInterface@@QAE@XZ @ 12988 NONAME ; QStyleFactoryInterface::QStyleFactoryInterface(void) + ?d_func@QScrollEvent@@AAEPAVQScrollEventPrivate@@XZ @ 12989 NONAME ; class QScrollEventPrivate * QScrollEvent::d_func(void) + ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12990 NONAME ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &) + ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12991 NONAME ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &) + ?heightForWidth@QTabWidget@@UBEHH@Z @ 12992 NONAME ; int QTabWidget::heightForWidth(int) const + ??1QFlickGesture@@UAE@XZ @ 12993 NONAME ; QFlickGesture::~QFlickGesture(void) + ??0QRasterWindowSurface@@QAE@PAVQWidget@@_N@Z @ 12994 NONAME ; QRasterWindowSurface::QRasterWindowSurface(class QWidget *, bool) + ?brushChanged@QBlitterPaintEngine@@UAEXXZ @ 12995 NONAME ; void QBlitterPaintEngine::brushChanged(void) + ?clip@QBlitterPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 12996 NONAME ; void QBlitterPaintEngine::clip(class QRect const &, enum Qt::ClipOperation) + ?detach@QGlyphs@@AAEXXZ @ 12997 NONAME ; void QGlyphs::detach(void) + ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 12998 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *) + ??0QShowEvent@@QAE@ABV0@@Z @ 12999 NONAME ; QShowEvent::QShowEvent(class QShowEvent const &) + ??0QMouseEvent@@QAE@ABV0@@Z @ 13000 NONAME ; QMouseEvent::QMouseEvent(class QMouseEvent const &) + ?setHintingPreference@QFont@@QAEXW4HintingPreference@1@@Z @ 13001 NONAME ; void QFont::setHintingPreference(enum QFont::HintingPreference) + ??0QActionEvent@@QAE@ABV0@@Z @ 13002 NONAME ; QActionEvent::QActionEvent(class QActionEvent const &) + ??0QTouchEvent@@QAE@ABV0@@Z @ 13003 NONAME ; QTouchEvent::QTouchEvent(class QTouchEvent const &) + ?capabilities@QBlittable@@QBE?AV?$QFlags@W4Capability@QBlittable@@@@XZ @ 13004 NONAME ; class QFlags<enum QBlittable::Capability> QBlittable::capabilities(void) const + ?setContentPosRange@QScrollPrepareEvent@@QAEXABVQRectF@@@Z @ 13005 NONAME ; void QScrollPrepareEvent::setContentPosRange(class QRectF const &) + ??_EQImageData@@QAE@I@Z @ 13006 NONAME ; QImageData::~QImageData(unsigned int) + ?swap@QBrush@@QAEXAAV1@@Z @ 13007 NONAME ; void QBrush::swap(class QBrush &) + ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13008 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *, int) + ?fontHintingPreference@QTextCharFormat@@QBE?AW4HintingPreference@QFont@@XZ @ 13009 NONAME ; enum QFont::HintingPreference QTextCharFormat::fontHintingPreference(void) const + ?swap@QPixmap@@QAEXAAV1@@Z @ 13010 NONAME ; void QPixmap::swap(class QPixmap &) + ??0QBlitterPaintEngine@@QAE@PAVQBlittablePixmapData@@@Z @ 13011 NONAME ; QBlitterPaintEngine::QBlitterPaintEngine(class QBlittablePixmapData *) + ?numberPrefix@QTextListFormat@@QBE?AVQString@@XZ @ 13012 NONAME ; class QString QTextListFormat::numberPrefix(void) const + ?setSnapPositionsX@QScroller@@QAEXMM@Z @ 13013 NONAME ; void QScroller::setSnapPositionsX(float, float) + ?scroller@QScroller@@SAPBV1@PBVQObject@@@Z @ 13014 NONAME ; class QScroller const * QScroller::scroller(class QObject const *) + ?qt_metacall@QScroller@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13015 NONAME ; int QScroller::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13016 NONAME ; class QString QFlickGesture::tr(char const *, char const *) + ??4QBezier@@QAEAAV0@ABV0@@Z @ 13017 NONAME ; class QBezier & QBezier::operator=(class QBezier const &) + ?setScrollerProperties@QScroller@@QAEXABVQScrollerProperties@@@Z @ 13018 NONAME ; void QScroller::setScrollerProperties(class QScrollerProperties const &) + ??0QIconEngineV2@@QAE@XZ @ 13019 NONAME ; QIconEngineV2::QIconEngineV2(void) + ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 13020 NONAME ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &) + ??MQItemSelectionRange@@QBE_NABV0@@Z @ 13021 NONAME ; bool QItemSelectionRange::operator<(class QItemSelectionRange const &) const + ?setWidthForHeight@QSizePolicy@@QAEX_N@Z @ 13022 NONAME ; void QSizePolicy::setWidthForHeight(bool) + ?qt_fontdata_from_index@@YA?AVQByteArray@@H@Z @ 13023 NONAME ; class QByteArray qt_fontdata_from_index(int) + ??0QIconEngineV2@@QAE@ABV0@@Z @ 13024 NONAME ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &) + ?swap@QImage@@QAEXAAV1@@Z @ 13025 NONAME ; void QImage::swap(class QImage &) + ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 13026 NONAME ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void) + ??0QScroller@@AAE@PAVQObject@@@Z @ 13027 NONAME ; QScroller::QScroller(class QObject *) + ?compositionModeChanged@QBlitterPaintEngine@@UAEXXZ @ 13028 NONAME ; void QBlitterPaintEngine::compositionModeChanged(void) + ?contentPosRange@QScrollPrepareEvent@@QBE?AVQRectF@@XZ @ 13029 NONAME ; class QRectF QScrollPrepareEvent::contentPosRange(void) const + ?grabGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@W4ScrollerGestureType@1@@Z @ 13030 NONAME ; enum Qt::GestureType QScroller::grabGesture(class QObject *, enum QScroller::ScrollerGestureType) + ??_EQFlickGesture@@UAE@I@Z @ 13031 NONAME ; QFlickGesture::~QFlickGesture(unsigned int) + ?drawRects@QBlitterPaintEngine@@UAEXPBVQRectF@@H@Z @ 13032 NONAME ; void QBlitterPaintEngine::drawRects(class QRectF const *, int) + ??4QTextLine@@QAEAAV0@ABV0@@Z @ 13033 NONAME ; class QTextLine & QTextLine::operator=(class QTextLine const &) + ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13034 NONAME ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &) + ??1QBlitterPaintEngine@@UAE@XZ @ 13035 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(void) + ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRectF@@H@Z @ 13036 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const *, int) + ??0QResizeEvent@@QAE@ABV0@@Z @ 13037 NONAME ; QResizeEvent::QResizeEvent(class QResizeEvent const &) + ??0QIconEngineFactoryInterface@@QAE@XZ @ 13038 NONAME ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void) + ?drawTextItem@QBlitterPaintEngine@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 13039 NONAME ; void QBlitterPaintEngine::drawTextItem(class QPointF const &, class QTextItem const &) + ??0QPictureFormatInterface@@QAE@XZ @ 13040 NONAME ; QPictureFormatInterface::QPictureFormatInterface(void) + ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13041 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *) + ?stop@QScroller@@QAEXXZ @ 13042 NONAME ; void QScroller::stop(void) + ?retrieveData@QInternalMimeData@@MBE?AVQVariant@@ABVQString@@W4Type@2@@Z @ 13043 NONAME ; class QVariant QInternalMimeData::retrieveData(class QString const &, enum QVariant::Type) const + ??8QGlyphs@@QBE_NABV0@@Z @ 13044 NONAME ; bool QGlyphs::operator==(class QGlyphs const &) const + ?drawImage@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13045 NONAME ; void QBlitterPaintEngine::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags<enum Qt::ImageConversionFlag>) + ?contentPos@QScrollEvent@@QBE?AVQPointF@@XZ @ 13046 NONAME ; class QPointF QScrollEvent::contentPos(void) const + ?mimeTypes@QAbstractProxyModel@@UBE?AVQStringList@@XZ @ 13047 NONAME ; class QStringList QAbstractProxyModel::mimeTypes(void) const + ?createState@QBlitterPaintEngine@@UBEPAVQPainterState@@PAV2@@Z @ 13048 NONAME ; class QPainterState * QBlitterPaintEngine::createState(class QPainterState *) const + ?removeItem@QGraphicsGridLayout@@QAEXPAVQGraphicsLayoutItem@@@Z @ 13049 NONAME ; void QGraphicsGridLayout::removeItem(class QGraphicsLayoutItem *) + ?clipBoundingRect@QPainter@@QBE?AVQRectF@@XZ @ 13050 NONAME ; class QRectF QPainter::clipBoundingRect(void) const + ?formats@QInternalMimeData@@UBE?AVQStringList@@XZ @ 13051 NONAME ; class QStringList QInternalMimeData::formats(void) const + ?stateChanged@QScroller@@IAEXW4State@1@@Z @ 13052 NONAME ; void QScroller::stateChanged(enum QScroller::State) + ?raster@QBlitterPaintEngine@@ABEPAVQRasterPaintEngine@@XZ @ 13053 NONAME ; class QRasterPaintEngine * QBlitterPaintEngine::raster(void) const + ?sort@QAbstractProxyModel@@UAEXHW4SortOrder@Qt@@@Z @ 13054 NONAME ; void QAbstractProxyModel::sort(int, enum Qt::SortOrder) + ?d_func@QBlittable@@AAEPAVQBlittablePrivate@@XZ @ 13055 NONAME ; class QBlittablePrivate * QBlittable::d_func(void) + ?setDefaultScrollerProperties@QScrollerProperties@@SAXABV1@@Z @ 13056 NONAME ; void QScrollerProperties::setDefaultScrollerProperties(class QScrollerProperties const &) + ??_EQPolygon@@QAE@I@Z @ 13057 NONAME ; QPolygon::~QPolygon(unsigned int) + ?type@QBlitterPaintEngine@@UBE?AW4Type@QPaintEngine@@XZ @ 13058 NONAME ; enum QPaintEngine::Type QBlitterPaintEngine::type(void) const + ?qt_metacast@QScroller@@UAEPAXPBD@Z @ 13059 NONAME ; void * QScroller::qt_metacast(char const *) + ??_EQImageReader@@QAE@I@Z @ 13060 NONAME ; QImageReader::~QImageReader(unsigned int) + ?buddy@QAbstractProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 13061 NONAME ; class QModelIndex QAbstractProxyModel::buddy(class QModelIndex const &) const + ?tr@QScroller@@SA?AVQString@@PBD0H@Z @ 13062 NONAME ; class QString QScroller::tr(char const *, char const *, int) + ?fill@QImage@@QAEXABVQColor@@@Z @ 13063 NONAME ; void QImage::fill(class QColor const &) + ?scrollMetric@QScrollerProperties@@QBE?AVQVariant@@W4ScrollMetric@1@@Z @ 13064 NONAME ; class QVariant QScrollerProperties::scrollMetric(enum QScrollerProperties::ScrollMetric) const + ?fill@QImage@@QAEXW4GlobalColor@Qt@@@Z @ 13065 NONAME ; void QImage::fill(enum Qt::GlobalColor) + ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13066 NONAME ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &) + ?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13067 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const + ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13068 NONAME ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &) + ??1QScroller@@EAE@XZ @ 13069 NONAME ; QScroller::~QScroller(void) + ?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 13070 NONAME ; void QGlyphs::setFont(class QFont const &) + ?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13071 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const + ?resize@QBlittablePixmapData@@UAEXHH@Z @ 13072 NONAME ; void QBlittablePixmapData::resize(int, int) + ?setTabsClosable@QMdiArea@@QAEX_N@Z @ 13073 NONAME ; void QMdiArea::setTabsClosable(bool) + ?ensureVisible@QScroller@@QAEXABVQRectF@@MM@Z @ 13074 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float) + ?getText@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1W4EchoMode@QLineEdit@@1PA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13075 NONAME ; class QString QInputDialog::getText(class QWidget *, class QString const &, class QString const &, enum QLineEdit::EchoMode, class QString const &, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) + ?hasWidthForHeight@QSizePolicy@@QBE_NXZ @ 13076 NONAME ; bool QSizePolicy::hasWidthForHeight(void) const + ?transformChanged@QBlitterPaintEngine@@UAEXXZ @ 13077 NONAME ; void QBlitterPaintEngine::transformChanged(void) + ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13078 NONAME ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &) + ??0QBlittablePixmapData@@QAE@XZ @ 13079 NONAME ; QBlittablePixmapData::QBlittablePixmapData(void) + ??_EKey@QPixmapCache@@QAE@I@Z @ 13080 NONAME ; QPixmapCache::Key::~Key(unsigned int) + ??_EQCursor@@QAE@I@Z @ 13081 NONAME ; QCursor::~QCursor(unsigned int) + ?size@QBlittable@@QBE?AVQSize@@XZ @ 13082 NONAME ; class QSize QBlittable::size(void) const + ??0QShortcutEvent@@QAE@ABV0@@Z @ 13083 NONAME ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &) + ?setBlittable@QBlittablePixmapData@@QAEXPAVQBlittable@@@Z @ 13084 NONAME ; void QBlittablePixmapData::setBlittable(class QBlittable *) + ?opacityChanged@QBlitterPaintEngine@@UAEXXZ @ 13085 NONAME ; void QBlitterPaintEngine::opacityChanged(void) + ?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13086 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int) + ??_EQTextCursor@@QAE@I@Z @ 13087 NONAME ; QTextCursor::~QTextCursor(unsigned int) + ?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 13088 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const + ?setState@QBlitterPaintEngine@@UAEXPAVQPainterState@@@Z @ 13089 NONAME ; void QBlitterPaintEngine::setState(class QPainterState *) + ?clip@QBlitterPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 13090 NONAME ; void QBlitterPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation) + ?subPixelPositionForX@QTextureGlyphCache@@QBE?AUQFixed@@U2@@Z @ 13091 NONAME ; struct QFixed QTextureGlyphCache::subPixelPositionForX(struct QFixed) const + ?hasAlphaChannel@QBlittablePixmapData@@UBE_NXZ @ 13092 NONAME ; bool QBlittablePixmapData::hasAlphaChannel(void) const + ?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13093 NONAME ; void QScroller::setSnapPositionsX(class QList<float> const &) + ?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 13094 NONAME ; class QString QTextListFormat::numberSuffix(void) const + ??HQGlyphs@@ABE?AV0@ABV0@@Z @ 13095 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const + ??0QGradient@@QAE@ABV0@@Z @ 13096 NONAME ; QGradient::QGradient(class QGradient const &) + ?tabsMovable@QMdiArea@@QBE_NXZ @ 13097 NONAME ; bool QMdiArea::tabsMovable(void) const + ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13098 NONAME ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &) + ?contentPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13099 NONAME ; class QPointF QScrollPrepareEvent::contentPos(void) const + ?getStaticMetaObject@QScroller@@SAABUQMetaObject@@XZ @ 13100 NONAME ; struct QMetaObject const & QScroller::getStaticMetaObject(void) + ?end@QBlitterPaintEngine@@UAE_NXZ @ 13101 NONAME ; bool QBlitterPaintEngine::end(void) + ??1QScrollerProperties@@UAE@XZ @ 13102 NONAME ; QScrollerProperties::~QScrollerProperties(void) + ??0QFlickGesture@@QAE@PAVQObject@@W4MouseButton@Qt@@0@Z @ 13103 NONAME ; QFlickGesture::QFlickGesture(class QObject *, enum Qt::MouseButton, class QObject *) + ?fill@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 13104 NONAME ; void QBlitterPaintEngine::fill(class QVectorPath const &, class QBrush const &) + ?drawPixmap@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 13105 NONAME ; void QBlitterPaintEngine::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &) + ??0QVector2D@@QAE@ABV0@@Z @ 13106 NONAME ; QVector2D::QVector2D(class QVector2D const &) + ?setSnapPositionsY@QScroller@@QAEXABV?$QList@M@@@Z @ 13107 NONAME ; void QScroller::setSnapPositionsY(class QList<float> const &) + ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13108 NONAME ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &) + ??_EQPen@@QAE@I@Z @ 13109 NONAME ; QPen::~QPen(unsigned int) + ??_EQKeySequence@@QAE@I@Z @ 13110 NONAME ; QKeySequence::~QKeySequence(unsigned int) + ?tr@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13111 NONAME ; class QString QInternalMimeData::tr(char const *, char const *, int) + ?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13112 NONAME ; class QPointF QScroller::velocity(void) const + ?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 13113 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const + ?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 13114 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &) + ?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13115 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &) + ??4QGradient@@QAEAAV0@ABV0@@Z @ 13116 NONAME ; class QGradient & QGradient::operator=(class QGradient const &) + ??0QScrollEvent@@QAE@ABVQPointF@@0W4ScrollState@0@@Z @ 13117 NONAME ; QScrollEvent::QScrollEvent(class QPointF const &, class QPointF const &, enum QScrollEvent::ScrollState) + ?d_func@QFlickGesture@@AAEPAVQFlickGesturePrivate@@XZ @ 13118 NONAME ; class QFlickGesturePrivate * QFlickGesture::d_func(void) + ?scrollState@QScrollEvent@@QBE?AW4ScrollState@1@XZ @ 13119 NONAME ; enum QScrollEvent::ScrollState QScrollEvent::scrollState(void) const + ??0QTextTableFormat@@QAE@ABV0@@Z @ 13120 NONAME ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &) + ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13121 NONAME ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int) + ?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 13122 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &) + ?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 13123 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const + ?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13124 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void) + ?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13125 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &) + ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13126 NONAME ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &) + ??0Value@QCss@@QAE@ABU01@@Z @ 13127 NONAME ; QCss::Value::Value(struct QCss::Value const &) + ?d_func@QScrollPrepareEvent@@AAEPAVQScrollPrepareEventPrivate@@XZ @ 13128 NONAME ; class QScrollPrepareEventPrivate * QScrollPrepareEvent::d_func(void) + ?overshootDistance@QScrollEvent@@QBE?AVQPointF@@XZ @ 13129 NONAME ; class QPointF QScrollEvent::overshootDistance(void) const + ?resolveFontFamilyAlias@QFontDatabase@@CA?AVQString@@ABV2@@Z @ 13130 NONAME ; class QString QFontDatabase::resolveFontFamilyAlias(class QString const &) + ?alphaRGBMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@HABVQTransform@@@Z @ 13131 NONAME ; class QImage QFontEngine::alphaRGBMapForGlyph(unsigned int, struct QFixed, int, class QTransform const &) + ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13132 NONAME ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &) + ?swap@QBitmap@@QAEXAAV1@@Z @ 13133 NONAME ; void QBitmap::swap(class QBitmap &) + ?hasFormat@QInternalMimeData@@UBE_NABVQString@@@Z @ 13134 NONAME ; bool QInternalMimeData::hasFormat(class QString const &) const + ?renderDataHelper@QInternalMimeData@@SA?AVQByteArray@@ABVQString@@PBVQMimeData@@@Z @ 13135 NONAME ; class QByteArray QInternalMimeData::renderDataHelper(class QString const &, class QMimeData const *) + ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13136 NONAME ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int) + ??0QWindowSurface@@QAE@PAVQWidget@@_N@Z @ 13137 NONAME ; QWindowSurface::QWindowSurface(class QWidget *, bool) + ?fill@QBlittablePixmapData@@UAEXABVQColor@@@Z @ 13138 NONAME ; void QBlittablePixmapData::fill(class QColor const &) + ?metric@QBlittablePixmapData@@UBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 13139 NONAME ; int QBlittablePixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const + ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13140 NONAME ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &) + ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQColor@@@Z @ 13141 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QColor const &) + ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13142 NONAME ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &) + ??6@YA?AVQDebug@@V0@PBVQSymbianEvent@@@Z @ 13143 NONAME ; class QDebug operator<<(class QDebug, class QSymbianEvent const *) + ??0QSizePolicy@@QAE@ABV0@@Z @ 13144 NONAME ; QSizePolicy::QSizePolicy(class QSizePolicy const &) + ?ProcessCommandParametersL@QS60MainAppUi@@UAEHW4TApaCommand@@AAV?$TBuf@$0BAA@@@ABVTDesC8@@@Z @ 13145 NONAME ; int QS60MainAppUi::ProcessCommandParametersL(enum TApaCommand, class TBuf<256> &, class TDesC8 const &) + ?scrollerProperties@QScroller@@QBE?AVQScrollerProperties@@XZ @ 13146 NONAME ; class QScrollerProperties QScroller::scrollerProperties(void) const + ??_EQBlittablePixmapData@@UAE@I@Z @ 13147 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(unsigned int) + ?mimeData@QAbstractProxyModel@@UBEPAVQMimeData@@ABV?$QList@VQModelIndex@@@@@Z @ 13148 NONAME ; class QMimeData * QAbstractProxyModel::mimeData(class QList<class QModelIndex> const &) const + ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13149 NONAME ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &) + ??_EQScroller@@UAE@I@Z @ 13150 NONAME ; QScroller::~QScroller(unsigned int) + ??1QScrollPrepareEvent@@UAE@XZ @ 13151 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(void) + ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13152 NONAME ; class QVector3D & QVector3D::operator=(class QVector3D const &) + ?setTabsMovable@QMdiArea@@QAEX_N@Z @ 13153 NONAME ; void QMdiArea::setTabsMovable(bool) + ?minimumSizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 13154 NONAME ; class QSize QRadioButton::minimumSizeHint(void) const + ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13155 NONAME ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &) + ?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13156 NONAME ; void * QFlickGesture::qt_metacast(char const *) + ??_EQFont@@QAE@I@Z @ 13157 NONAME ; QFont::~QFont(unsigned int) + ?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 13158 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &) + ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13159 NONAME ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &) + ??0QPainterState@@QAE@ABV0@@Z @ 13160 NONAME ; QPainterState::QPainterState(class QPainterState const &) + ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13161 NONAME ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &) + ?drawRects@QBlitterPaintEngine@@UAEXPBVQRect@@H@Z @ 13162 NONAME ; void QBlitterPaintEngine::drawRects(class QRect const *, int) + ?fillInPendingGlyphs@QTextureGlyphCache@@QAEXXZ @ 13163 NONAME ; void QTextureGlyphCache::fillInPendingGlyphs(void) + ?metaObject@QFlickGesture@@UBEPBUQMetaObject@@XZ @ 13164 NONAME ; struct QMetaObject const * QFlickGesture::metaObject(void) const + ?renderHintsChanged@QBlitterPaintEngine@@UAEXXZ @ 13165 NONAME ; void QBlitterPaintEngine::renderHintsChanged(void) + ?supportedDropActions@QAbstractProxyModel@@UBE?AV?$QFlags@W4DropAction@Qt@@@@XZ @ 13166 NONAME ; class QFlags<enum Qt::DropAction> QAbstractProxyModel::supportedDropActions(void) const + ?hasStaticContentsSupport@QRasterWindowSurface@@UBE_NXZ @ 13167 NONAME ; bool QRasterWindowSurface::hasStaticContentsSupport(void) const + ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQBrush@@@Z @ 13168 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QBrush const &) + ?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 13169 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &) + ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IABVQTransform@@W4GlyphFormat@1@@Z @ 13170 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, class QTransform const &, enum QFontEngine::GlyphFormat) + ?resendPrepareEvent@QScroller@@QAEXXZ @ 13171 NONAME ; void QScroller::resendPrepareEvent(void) + ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13172 NONAME ; class QTextLength & QTextLength::operator=(class QTextLength const &) + ??0QHelpEvent@@QAE@ABV0@@Z @ 13173 NONAME ; QHelpEvent::QHelpEvent(class QHelpEvent const &) + ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13174 NONAME ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &) + ?d_func@QBlittable@@ABEPBVQBlittablePrivate@@XZ @ 13175 NONAME ; class QBlittablePrivate const * QBlittable::d_func(void) const + ?state@QBlitterPaintEngine@@QBEPBVQPainterState@@XZ @ 13176 NONAME ; class QPainterState const * QBlitterPaintEngine::state(void) const + ??0QScrollPrepareEvent@@QAE@ABVQPointF@@@Z @ 13177 NONAME ; QScrollPrepareEvent::QScrollPrepareEvent(class QPointF const &) + ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13178 NONAME ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &) + ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13179 NONAME ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &) + ??0QTabletEvent@@QAE@ABV0@@Z @ 13180 NONAME ; QTabletEvent::QTabletEvent(class QTabletEvent const &) + ?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13181 NONAME ; void QScroller::scrollTo(class QPointF const &, int) + ?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13182 NONAME ; void QScroller::ungrabGesture(class QObject *) + ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13183 NONAME ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &) + ?clear@QGlyphs@@QAEXXZ @ 13184 NONAME ; void QGlyphs::clear(void) + ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13185 NONAME ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int) + ??1QBlittablePixmapData@@UAE@XZ @ 13186 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(void) + ?formatsHelper@QInternalMimeData@@SA?AVQStringList@@PBVQMimeData@@@Z @ 13187 NONAME ; class QStringList QInternalMimeData::formatsHelper(class QMimeData const *) + ?qt_metacast@QInternalMimeData@@UAEPAXPBD@Z @ 13188 NONAME ; void * QInternalMimeData::qt_metacast(char const *) + ?font@QGlyphs@@QBE?AVQFont@@XZ @ 13189 NONAME ; class QFont QGlyphs::font(void) const + ?paintEngine@QBlittablePixmapData@@UBEPAVQPaintEngine@@XZ @ 13190 NONAME ; class QPaintEngine * QBlittablePixmapData::paintEngine(void) const + ?unsetDefaultScrollerProperties@QScrollerProperties@@SAXXZ @ 13191 NONAME ; void QScrollerProperties::unsetDefaultScrollerProperties(void) + ?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13192 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const + ?swap@QPen@@QAEXAAV1@@Z @ 13193 NONAME ; void QPen::swap(class QPen &) + ?span@QAbstractProxyModel@@UBE?AVQSize@@ABVQModelIndex@@@Z @ 13194 NONAME ; class QSize QAbstractProxyModel::span(class QModelIndex const &) const + ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13195 NONAME ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &) + ??0QHoverEvent@@QAE@ABV0@@Z @ 13196 NONAME ; QHoverEvent::QHoverEvent(class QHoverEvent const &) + ??0QPaintEngineState@@QAE@XZ @ 13197 NONAME ; QPaintEngineState::QPaintEngineState(void) + ?setSnapPositionsY@QScroller@@QAEXMM@Z @ 13198 NONAME ; void QScroller::setSnapPositionsY(float, float) + ?d_func@QScrollPrepareEvent@@ABEPBVQScrollPrepareEventPrivate@@XZ @ 13199 NONAME ; class QScrollPrepareEventPrivate const * QScrollPrepareEvent::d_func(void) const + ?textureMapForGlyph@QTextureGlyphCache@@QBE?AVQImage@@IUQFixed@@@Z @ 13200 NONAME ; class QImage QTextureGlyphCache::textureMapForGlyph(unsigned int, struct QFixed) const + ??0QKeyEvent@@QAE@ABV0@@Z @ 13201 NONAME ; QKeyEvent::QKeyEvent(class QKeyEvent const &) + ??0QIconEngine@@QAE@ABV0@@Z @ 13202 NONAME ; QIconEngine::QIconEngine(class QIconEngine const &) + ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13203 NONAME ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &) + ?qt_metacall@QInternalMimeData@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13204 NONAME ; int QInternalMimeData::qt_metacall(enum QMetaObject::Call, int, void * *) + ?lineHeightType@QTextBlockFormat@@QBEHXZ @ 13205 NONAME ; int QTextBlockFormat::lineHeightType(void) const + ?hintingPreference@QFont@@QBE?AW4HintingPreference@1@XZ @ 13206 NONAME ; enum QFont::HintingPreference QFont::hintingPreference(void) const + ??0QGlyphs@@QAE@XZ @ 13207 NONAME ; QGlyphs::QGlyphs(void) + ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13208 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *, int) + ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13209 NONAME ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void) + ??_EQRegion@@QAE@I@Z @ 13210 NONAME ; QRegion::~QRegion(unsigned int) + ?begin@QBlitterPaintEngine@@UAE_NPAVQPaintDevice@@@Z @ 13211 NONAME ; bool QBlitterPaintEngine::begin(class QPaintDevice *) + ?inFontUcs4@QFontMetricsF@@QBE_NI@Z @ 13212 NONAME ; bool QFontMetricsF::inFontUcs4(unsigned int) const + ?viewportSize@QScrollPrepareEvent@@QBE?AVQSizeF@@XZ @ 13213 NONAME ; class QSizeF QScrollPrepareEvent::viewportSize(void) const + ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13214 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const &) + ?d_func@QBlitterPaintEngine@@AAEPAVQBlitterPaintEnginePrivate@@XZ @ 13215 NONAME ; class QBlitterPaintEnginePrivate * QBlitterPaintEngine::d_func(void) + ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 13216 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &) + ?lineHeight@QTextBlockFormat@@QBEMMM@Z @ 13217 NONAME ; float QTextBlockFormat::lineHeight(float, float) const + ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13218 NONAME ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &) + ?getItem@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1ABVQStringList@@H_NPA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13219 NONAME ; class QString QInputDialog::getItem(class QWidget *, class QString const &, class QString const &, class QStringList const &, int, bool, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) + ??_EFileInfo@QZipReader@@QAE@I@Z @ 13220 NONAME ; QZipReader::FileInfo::~FileInfo(unsigned int) + ?qGamma_correct_back_to_linear_cs@@YAXPAVQImage@@@Z @ 13221 NONAME ; void qGamma_correct_back_to_linear_cs(class QImage *) + ??0QBitmap@@QAE@ABV0@@Z @ 13222 NONAME ; QBitmap::QBitmap(class QBitmap const &) + ?clip@QBlitterPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 13223 NONAME ; void QBlitterPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation) + ??1QScrollEvent@@UAE@XZ @ 13224 NONAME ; QScrollEvent::~QScrollEvent(void) + ?state@QScroller@@QBE?AW4State@1@XZ @ 13225 NONAME ; enum QScroller::State QScroller::state(void) const + ?positions@QGlyphs@@QBE?AV?$QVector@VQPointF@@@@XZ @ 13226 NONAME ; class QVector<class QPointF> QGlyphs::positions(void) const + ?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13227 NONAME ; class QString QScroller::tr(char const *, char const *) + ?canReadData@QInternalMimeData@@SA_NABVQString@@@Z @ 13228 NONAME ; bool QInternalMimeData::canReadData(class QString const &) + ?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13229 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const + ??_EQTextFormat@@QAE@I@Z @ 13230 NONAME ; QTextFormat::~QTextFormat(unsigned int) + ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13231 NONAME ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &) + ?trUtf8@QScroller@@SA?AVQString@@PBD0H@Z @ 13232 NONAME ; class QString QScroller::trUtf8(char const *, char const *, int) + ?d_func@QFlickGesture@@ABEPBVQFlickGesturePrivate@@XZ @ 13233 NONAME ; class QFlickGesturePrivate const * QFlickGesture::d_func(void) const + ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13234 NONAME ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &) + ??_EQPainter@@QAE@I@Z @ 13235 NONAME ; QPainter::~QPainter(unsigned int) + ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13236 NONAME ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &) + ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13237 NONAME ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &) + ?hasScroller@QScroller@@SA_NPAVQObject@@@Z @ 13238 NONAME ; bool QScroller::hasScroller(class QObject *) + ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@ABVQTransform@@@Z @ 13239 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed, class QTransform const &) + ??_EQPainterPath@@QAE@I@Z @ 13240 NONAME ; QPainterPath::~QPainterPath(unsigned int) + ??_EQGlyphs@@QAE@I@Z @ 13241 NONAME ; QGlyphs::~QGlyphs(unsigned int) + ?fromImage@QBlittablePixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13242 NONAME ; void QBlittablePixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>) + ??0QInternalMimeData@@QAE@XZ @ 13243 NONAME ; QInternalMimeData::QInternalMimeData(void) + ??_EQScrollEvent@@UAE@I@Z @ 13244 NONAME ; QScrollEvent::~QScrollEvent(unsigned int) + ??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13245 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &) + ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13246 NONAME ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &) + ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13247 NONAME ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &) + ??0QBlittable@@QAE@ABVQSize@@V?$QFlags@W4Capability@QBlittable@@@@@Z @ 13248 NONAME ; QBlittable::QBlittable(class QSize const &, class QFlags<enum QBlittable::Capability>) + ??0QIconDragEvent@@QAE@ABV0@@Z @ 13249 NONAME ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &) + ?scroller@QScroller@@SAPAV1@PAVQObject@@@Z @ 13250 NONAME ; class QScroller * QScroller::scroller(class QObject *) + ??4QScrollerProperties@@QAEAAV0@ABV0@@Z @ 13251 NONAME ; class QScrollerProperties & QScrollerProperties::operator=(class QScrollerProperties const &) + ?d_func@QScroller@@AAEPAVQScrollerPrivate@@XZ @ 13252 NONAME ; class QScrollerPrivate * QScroller::d_func(void) + ?scrollerPropertiesChanged@QScroller@@IAEXABVQScrollerProperties@@@Z @ 13253 NONAME ; void QScroller::scrollerPropertiesChanged(class QScrollerProperties const &) + ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRect@@H@Z @ 13254 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRect const *, int) + ?tabsClosable@QMdiArea@@QBE_NXZ @ 13255 NONAME ; bool QMdiArea::tabsClosable(void) const + ?canStartScrollingAt@QAbstractScrollAreaPrivate@@QAE_NABVQPoint@@@Z @ 13256 NONAME ; bool QAbstractScrollAreaPrivate::canStartScrollingAt(class QPoint const &) + ??0QScrollerProperties@@QAE@XZ @ 13257 NONAME ; QScrollerProperties::QScrollerProperties(void) + ?setLineHeight@QTextBlockFormat@@QAEXMH@Z @ 13258 NONAME ; void QTextBlockFormat::setLineHeight(float, int) + ?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 13259 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const + ??0QTextImageFormat@@QAE@ABV0@@Z @ 13260 NONAME ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &) + ??0QMoveEvent@@QAE@ABV0@@Z @ 13261 NONAME ; QMoveEvent::QMoveEvent(class QMoveEvent const &) + ?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13262 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const + ??0QInputContextFactoryInterface@@QAE@XZ @ 13263 NONAME ; QInputContextFactoryInterface::QInputContextFactoryInterface(void) + ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13264 NONAME ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &) + ?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13265 NONAME ; void QAbstractProxyModel::resetInternalData(void) + ??0Symbol@QCss@@QAE@ABU01@@Z @ 13266 NONAME ; QCss::Symbol::Symbol(struct QCss::Symbol const &) + ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQVectorPath@@@Z @ 13267 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QVectorPath const &) + ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13268 NONAME ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &) + ?scrollTo@QScroller@@QAEXABVQPointF@@@Z @ 13269 NONAME ; void QScroller::scrollTo(class QPointF const &) + ??0QGraphicsSystem@@QAE@XZ @ 13270 NONAME ; QGraphicsSystem::QGraphicsSystem(void) + ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13271 NONAME ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &) + ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13272 NONAME ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &) + ?clip@QBlitterPaintEngine@@QAEPBVQClipData@@XZ @ 13273 NONAME ; class QClipData const * QBlitterPaintEngine::clip(void) + ?d_func@QScroller@@ABEPBVQScrollerPrivate@@XZ @ 13274 NONAME ; class QScrollerPrivate const * QScroller::d_func(void) const + ?setNumberSuffix@QTextListFormat@@QAEXABVQString@@@Z @ 13275 NONAME ; void QTextListFormat::setNumberSuffix(class QString const &) + ?swap@QPicture@@QAEXAAV1@@Z @ 13276 NONAME ; void QPicture::swap(class QPicture &) + ?swap@QPainterPath@@QAEXAAV1@@Z @ 13277 NONAME ; void QPainterPath::swap(class QPainterPath &) + ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13278 NONAME ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &) + ?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 13279 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const + ?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13280 NONAME ; class QFont QFontEngine::createExplicitFont(void) const + ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@@Z @ 13281 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed) + ?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 13282 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) + ?swap@QIcon@@QAEXAAV1@@Z @ 13283 NONAME ; void QIcon::swap(class QIcon &) + ?unmarkRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13284 NONAME ; void QBlittablePixmapData::unmarkRasterOverlay(class QRectF const &) + ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13285 NONAME ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &) + ??0QIconEngine@@QAE@XZ @ 13286 NONAME ; QIconEngine::QIconEngine(void) + ?brushOriginChanged@QBlitterPaintEngine@@UAEXXZ @ 13287 NONAME ; void QBlitterPaintEngine::brushOriginChanged(void) + ?openFile@QFileOpenEvent@@QBE_NAAVQFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13288 NONAME ; bool QFileOpenEvent::openFile(class QFile &, class QFlags<enum QIODevice::OpenModeFlag>) const + ??_EQBrush@@QAE@I@Z @ 13289 NONAME ; QBrush::~QBrush(unsigned int) + ??0QApplicationPrivate@@QAE@AAHPAPADW4Type@QApplication@@H@Z @ 13290 NONAME ; QApplicationPrivate::QApplicationPrivate(int &, char * *, enum QApplication::Type, int) + ?handleInput@QScroller@@QAE_NW4Input@1@ABVQPointF@@_J@Z @ 13291 NONAME ; bool QScroller::handleInput(enum QScroller::Input, class QPointF const &, long long) + ??8QScrollerProperties@@QBE_NABV0@@Z @ 13292 NONAME ; bool QScrollerProperties::operator==(class QScrollerProperties const &) const + ?inFontUcs4@QFontMetrics@@QBE_NI@Z @ 13293 NONAME ; bool QFontMetrics::inFontUcs4(unsigned int) const + ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13294 NONAME ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int) + ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13295 NONAME ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &) + ??0QTextObjectInterface@@QAE@XZ @ 13296 NONAME ; QTextObjectInterface::QTextObjectInterface(void) + ?unlock@QBlittable@@QAEXXZ @ 13297 NONAME ; void QBlittable::unlock(void) + ?metaObject@QScroller@@UBEPBUQMetaObject@@XZ @ 13298 NONAME ; struct QMetaObject const * QScroller::metaObject(void) const + ?d_func@QScrollEvent@@ABEPBVQScrollEventPrivate@@XZ @ 13299 NONAME ; class QScrollEventPrivate const * QScrollEvent::d_func(void) const + ?swap@QRegion@@QAEXAAV1@@Z @ 13300 NONAME ; void QRegion::swap(class QRegion &) + ??0QHideEvent@@QAE@ABV0@@Z @ 13301 NONAME ; QHideEvent::QHideEvent(class QHideEvent const &) + ?ensureVisible@QScroller@@QAEXABVQRectF@@MMH@Z @ 13302 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float, int) + ?qt_metacall@QFlickGesture@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13303 NONAME ; int QFlickGesture::qt_metacall(enum QMetaObject::Call, int, void * *) + ?setItemData@QAbstractProxyModel@@UAE_NABVQModelIndex@@ABV?$QMap@HVQVariant@@@@@Z @ 13304 NONAME ; bool QAbstractProxyModel::setItemData(class QModelIndex const &, class QMap<int, class QVariant> const &) + ?getStaticMetaObject@QInternalMimeData@@SAABUQMetaObject@@XZ @ 13305 NONAME ; struct QMetaObject const & QInternalMimeData::getStaticMetaObject(void) + ?swap@QPolygonF@@QAEXAAV1@@Z @ 13306 NONAME ; void QPolygonF::swap(class QPolygonF &) + ?swap@QPolygon@@QAEXAAV1@@Z @ 13307 NONAME ; void QPolygon::swap(class QPolygon &) + ??_EQScrollPrepareEvent@@UAE@I@Z @ 13308 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(unsigned int) + ?d_func@QBlitterPaintEngine@@ABEPBVQBlitterPaintEnginePrivate@@XZ @ 13309 NONAME ; class QBlitterPaintEnginePrivate const * QBlitterPaintEngine::d_func(void) const + ?pixelPerMeter@QScroller@@QBE?AVQPointF@@XZ @ 13310 NONAME ; class QPointF QScroller::pixelPerMeter(void) const + ?target@QScroller@@QBEPAVQObject@@XZ @ 13311 NONAME ; class QObject * QScroller::target(void) const + ?swap@QKeySequence@@QAEXAAV1@@Z @ 13312 NONAME ; void QKeySequence::swap(class QKeySequence &) + ??1QGlyphs@@QAE@XZ @ 13313 NONAME ; QGlyphs::~QGlyphs(void) + ?lineHeight@QTextBlockFormat@@QBEMXZ @ 13314 NONAME ; float QTextBlockFormat::lineHeight(void) const + ?stroke@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQPen@@@Z @ 13315 NONAME ; void QBlitterPaintEngine::stroke(class QVectorPath const &, class QPen const &) + ?tr@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 13316 NONAME ; class QString QInternalMimeData::tr(char const *, char const *) + ??9QGlyphs@@QBE_NABV0@@Z @ 13317 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const + ??1QBlittable@@UAE@XZ @ 13318 NONAME ; QBlittable::~QBlittable(void) + ??_EQBlitterPaintEngine@@UAE@I@Z @ 13319 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(unsigned int) + ??0QCloseEvent@@QAE@ABV0@@Z @ 13320 NONAME ; QCloseEvent::QCloseEvent(class QCloseEvent const &) + ?grabbedGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@@Z @ 13321 NONAME ; enum Qt::GestureType QScroller::grabbedGesture(class QObject *) + ?buffer@QBlittablePixmapData@@UAEPAVQImage@@XZ @ 13322 NONAME ; class QImage * QBlittablePixmapData::buffer(void) + ??0QTextFrameLayoutData@@QAE@XZ @ 13323 NONAME ; QTextFrameLayoutData::QTextFrameLayoutData(void) + ?staticMetaObject@QFlickGesture@@2UQMetaObject@@B @ 13324 NONAME ; struct QMetaObject const QFlickGesture::staticMetaObject + ?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13325 NONAME ; class QPointF QScroller::finalPosition(void) const + ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13326 NONAME ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &) + ?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13327 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *) + ??0QGlyphs@@QAE@ABV0@@Z @ 13328 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &) + ?lock@QBlittable@@QAEPAVQImage@@XZ @ 13329 NONAME ; class QImage * QBlittable::lock(void) + ?setFontHintingPreference@QTextCharFormat@@QAEXW4HintingPreference@QFont@@@Z @ 13330 NONAME ; void QTextCharFormat::setFontHintingPreference(enum QFont::HintingPreference) + ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13331 NONAME ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &) + ??_EQInternalMimeData@@UAE@I@Z @ 13332 NONAME ; QInternalMimeData::~QInternalMimeData(unsigned int) + ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13333 NONAME ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &) + ??_EQPalette@@QAE@I@Z @ 13334 NONAME ; QPalette::~QPalette(unsigned int) + ??0QFocusEvent@@QAE@ABV0@@Z @ 13335 NONAME ; QFocusEvent::QFocusEvent(class QFocusEvent const &) + ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13336 NONAME ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &) + ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQPointF@@ABVQTextItem@@@Z @ 13337 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QPointF const &, class QTextItem const &) + ?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13338 NONAME ; class QString QScroller::trUtf8(char const *, char const *) + ??_EQIcon@@QAE@I@Z @ 13339 NONAME ; QIcon::~QIcon(unsigned int) + ??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13340 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &) + ??9QScrollerProperties@@QBE_NABV0@@Z @ 13341 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const + ??0QTextListFormat@@QAE@ABV0@@Z @ 13342 NONAME ; QTextListFormat::QTextListFormat(class QTextListFormat const &) + ?drawEllipse@QBlitterPaintEngine@@UAEXABVQRectF@@@Z @ 13343 NONAME ; void QBlitterPaintEngine::drawEllipse(class QRectF const &) + ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13344 NONAME ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void) + ??_EQTextLayout@@QAE@I@Z @ 13345 NONAME ; QTextLayout::~QTextLayout(unsigned int) + ??0QWheelEvent@@QAE@ABV0@@Z @ 13346 NONAME ; QWheelEvent::QWheelEvent(class QWheelEvent const &) + ?blittable@QBlittablePixmapData@@QBEPAVQBlittable@@XZ @ 13347 NONAME ; class QBlittable * QBlittablePixmapData::blittable(void) const + ?resizeCache@QTextureGlyphCache@@QAEXHH@Z @ 13348 NONAME ; void QTextureGlyphCache::resizeCache(int, int) + ??0QScrollerProperties@@QAE@ABV0@@Z @ 13349 NONAME ; QScrollerProperties::QScrollerProperties(class QScrollerProperties const &) + ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13350 NONAME ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &) + ?metaObject@QInternalMimeData@@UBEPBUQMetaObject@@XZ @ 13351 NONAME ; struct QMetaObject const * QInternalMimeData::metaObject(void) const + ?setContentPos@QScrollPrepareEvent@@QAEXABVQPointF@@@Z @ 13352 NONAME ; void QScrollPrepareEvent::setContentPos(class QPointF const &) + ??_EQTextEngine@@QAE@I@Z @ 13353 NONAME ; QTextEngine::~QTextEngine(unsigned int) + ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13354 NONAME ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &) + ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13355 NONAME ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &) + ?staticMetaObject@QScroller@@2UQMetaObject@@B @ 13356 NONAME ; struct QMetaObject const QScroller::staticMetaObject + ?hasFormatHelper@QInternalMimeData@@SA_NABVQString@@PBVQMimeData@@@Z @ 13357 NONAME ; bool QInternalMimeData::hasFormatHelper(class QString const &, class QMimeData const *) + ?state@QBlitterPaintEngine@@QAEPAVQPainterState@@XZ @ 13358 NONAME ; class QPainterState * QBlitterPaintEngine::state(void) + ?penChanged@QBlitterPaintEngine@@UAEXXZ @ 13359 NONAME ; void QBlitterPaintEngine::penChanged(void) + ??0QFileOpenEvent@@QAE@ABVRFile@@@Z @ 13360 NONAME ; QFileOpenEvent::QFileOpenEvent(class RFile const &) + ?hasHeightForWidth@QWidgetPrivate@@UBE_NXZ @ 13361 NONAME ; bool QWidgetPrivate::hasHeightForWidth(void) const + ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13362 NONAME ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &) + ?toImage@QBlittablePixmapData@@UBE?AVQImage@@XZ @ 13363 NONAME ; class QImage QBlittablePixmapData::toImage(void) const + ??_EQBlittable@@UAE@I@Z @ 13364 NONAME ; QBlittable::~QBlittable(unsigned int) + ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13365 NONAME ; class QBitmap & QBitmap::operator=(class QBitmap const &) + ??1QInternalMimeData@@UAE@XZ @ 13366 NONAME ; QInternalMimeData::~QInternalMimeData(void) + ??0QItemSelection@@QAE@ABV0@@Z @ 13367 NONAME ; QItemSelection::QItemSelection(class QItemSelection const &) + ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13368 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) + ?staticMetaObject@QInternalMimeData@@2UQMetaObject@@B @ 13369 NONAME ; struct QMetaObject const QInternalMimeData::staticMetaObject + ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13370 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void) + ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13371 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) + ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13372 NONAME ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 8f4b7cc..fc256e4 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -3164,6 +3164,7 @@ EXPORTS _ZN14QWindowSurface10beginPaintERK7QRegion @ 3163 NONAME _ZN14QWindowSurface11setGeometryERK5QRect @ 3164 NONAME _ZN14QWindowSurface17setStaticContentsERK7QRegion @ 3165 NONAME + _ZN14QWindowSurface24setStaticContentsSupportEb @ 3166 NONAME ABSENT _ZN14QWindowSurface6bufferEPK7QWidget @ 3167 NONAME _ZN14QWindowSurface6scrollERK7QRegionii @ 3168 NONAME _ZN14QWindowSurface8endPaintERK7QRegion @ 3169 NONAME @@ -11886,6 +11887,7 @@ EXPORTS _ZN14QGraphicsScale13zScaleChangedEv @ 11886 NONAME _ZN14QPaintEngineEx19drawPixmapFragmentsEPKN8QPainter14PixmapFragmentEiRK7QPixmap6QFlagsINS0_18PixmapFragmentHintEE @ 11887 NONAME _ZN14QWidgetPrivate6renderEP12QPaintDeviceRK6QPointRK7QRegion6QFlagsIN7QWidget10RenderFlagEEb @ 11888 NONAME + _ZN14QWindowSurface23setPartialUpdateSupportEb @ 11889 NONAME ABSENT _ZN15QGraphicsObject12widthChangedEv @ 11890 NONAME _ZN15QGraphicsObject13heightChangedEv @ 11891 NONAME _ZN15QGraphicsObject15childrenChangedEv @ 11892 NONAME @@ -12103,291 +12105,332 @@ EXPORTS _ZN15QStaticTextItemD1Ev @ 12104 NONAME _ZN15QStaticTextItemD2Ev @ 12105 NONAME _ZN19QEventDispatcherS6031reactivateDeferredActiveObjectsEv @ 12106 NONAME - _Z18qt_addBitmapToPathffPKhiiiP12QPainterPath @ 12107 NONAME - _Z22qt_fontdata_from_indexi @ 12108 NONAME - _ZN10QBlittable4lockEv @ 12109 NONAME - _ZN10QBlittable6unlockEv @ 12110 NONAME - _ZN10QBlittableC2ERK5QSize6QFlagsINS_10CapabilityEE @ 12111 NONAME - _ZN10QBlittableD0Ev @ 12112 NONAME - _ZN10QBlittableD1Ev @ 12113 NONAME - _ZN10QBlittableD2Ev @ 12114 NONAME - _ZN11QFontEngine19alphaRGBMapForGlyphEj6QFixediRK10QTransform @ 12115 NONAME - _ZN12QInputDialog7getItemEP7QWidgetRK7QStringS4_RK11QStringListibPb6QFlagsIN2Qt10WindowTypeEES9_INSA_15InputMethodHintEE @ 12116 NONAME - _ZN12QInputDialog7getTextEP7QWidgetRK7QStringS4_N9QLineEdit8EchoModeES4_Pb6QFlagsIN2Qt10WindowTypeEES8_INS9_15InputMethodHintEE @ 12117 NONAME - _ZN14QWindowSurfaceC2EP7QWidgetb @ 12118 NONAME - _ZN18QTextureGlyphCache19fillInPendingGlyphsEv @ 12119 NONAME - _ZN19QAbstractProxyModel11setItemDataERK11QModelIndexRK4QMapIi8QVariantE @ 12120 NONAME - _ZN19QAbstractProxyModel17resetInternalDataEv @ 12121 NONAME - _ZN19QAbstractProxyModel4sortEiN2Qt9SortOrderE @ 12122 NONAME - _ZN19QAbstractProxyModel9fetchMoreERK11QModelIndex @ 12123 NONAME - _ZN19QApplicationPrivateC1ERiPPcN12QApplication4TypeEi @ 12124 NONAME - _ZN19QApplicationPrivateC2ERiPPcN12QApplication4TypeEi @ 12125 NONAME - _ZN19QBlitterPaintEngine10drawPixmapERK6QRectFRK7QPixmapS2_ @ 12126 NONAME - _ZN19QBlitterPaintEngine10penChangedEv @ 12127 NONAME - _ZN19QBlitterPaintEngine11drawEllipseERK6QRectF @ 12128 NONAME - _ZN19QBlitterPaintEngine12brushChangedEv @ 12129 NONAME - _ZN19QBlitterPaintEngine12drawTextItemERK7QPointFRK9QTextItem @ 12130 NONAME - _ZN19QBlitterPaintEngine14opacityChangedEv @ 12131 NONAME - _ZN19QBlitterPaintEngine16transformChangedEv @ 12132 NONAME - _ZN19QBlitterPaintEngine18brushOriginChangedEv @ 12133 NONAME - _ZN19QBlitterPaintEngine18clipEnabledChangedEv @ 12134 NONAME - _ZN19QBlitterPaintEngine18drawStaticTextItemEP15QStaticTextItem @ 12135 NONAME - _ZN19QBlitterPaintEngine18renderHintsChangedEv @ 12136 NONAME - _ZN19QBlitterPaintEngine22compositionModeChangedEv @ 12137 NONAME - _ZN19QBlitterPaintEngine3endEv @ 12138 NONAME - _ZN19QBlitterPaintEngine4clipERK11QVectorPathN2Qt13ClipOperationE @ 12139 NONAME - _ZN19QBlitterPaintEngine4clipERK5QRectN2Qt13ClipOperationE @ 12140 NONAME - _ZN19QBlitterPaintEngine4clipERK7QRegionN2Qt13ClipOperationE @ 12141 NONAME - _ZN19QBlitterPaintEngine4fillERK11QVectorPathRK6QBrush @ 12142 NONAME - _ZN19QBlitterPaintEngine5beginEP12QPaintDevice @ 12143 NONAME - _ZN19QBlitterPaintEngine6strokeERK11QVectorPathRK4QPen @ 12144 NONAME - _ZN19QBlitterPaintEngine8fillRectERK6QRectFRK6QBrush @ 12145 NONAME - _ZN19QBlitterPaintEngine8fillRectERK6QRectFRK6QColor @ 12146 NONAME - _ZN19QBlitterPaintEngine8setStateEP13QPainterState @ 12147 NONAME - _ZN19QBlitterPaintEngine9drawImageERK6QRectFRK6QImageS2_6QFlagsIN2Qt19ImageConversionFlagEE @ 12148 NONAME - _ZN19QBlitterPaintEngine9drawRectsEPK5QRecti @ 12149 NONAME - _ZN19QBlitterPaintEngine9drawRectsEPK6QRectFi @ 12150 NONAME - _ZN19QBlitterPaintEngineC1EP20QBlittablePixmapData @ 12151 NONAME - _ZN19QBlitterPaintEngineC2EP20QBlittablePixmapData @ 12152 NONAME - _ZN19QBlitterPaintEngineD0Ev @ 12153 NONAME - _ZN19QBlitterPaintEngineD1Ev @ 12154 NONAME - _ZN19QBlitterPaintEngineD2Ev @ 12155 NONAME - _ZN19QGraphicsGridLayout10removeItemEP19QGraphicsLayoutItem @ 12156 NONAME - _ZN20QBlittablePixmapData12setBlittableEP10QBlittable @ 12157 NONAME - _ZN20QBlittablePixmapData4fillERK6QColor @ 12158 NONAME - _ZN20QBlittablePixmapData6bufferEv @ 12159 NONAME - _ZN20QBlittablePixmapData6resizeEii @ 12160 NONAME - _ZN20QBlittablePixmapData9fromImageERK6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 12161 NONAME - _ZN20QBlittablePixmapDataC2Ev @ 12162 NONAME - _ZN20QBlittablePixmapDataD0Ev @ 12163 NONAME - _ZN20QBlittablePixmapDataD1Ev @ 12164 NONAME - _ZN20QBlittablePixmapDataD2Ev @ 12165 NONAME - _ZN20QRasterWindowSurfaceC1EP7QWidgetb @ 12166 NONAME - _ZN20QRasterWindowSurfaceC2EP7QWidgetb @ 12167 NONAME - _ZN23QImageTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj6QFixed @ 12168 NONAME - _ZN6QImage4fillEN2Qt11GlobalColorE @ 12169 NONAME - _ZN6QImage4fillERK6QColor @ 12170 NONAME - _ZN7QGlyphs12setPositionsERK7QVectorI7QPointFE @ 12171 NONAME - _ZN7QGlyphs15setGlyphIndexesERK7QVectorIjE @ 12172 NONAME - _ZN7QGlyphs5clearEv @ 12173 NONAME - _ZN7QGlyphs6detachEv @ 12174 NONAME - _ZN7QGlyphs7setFontERK5QFont @ 12175 NONAME - _ZN7QGlyphsC1ERKS_ @ 12176 NONAME - _ZN7QGlyphsC1Ev @ 12177 NONAME - _ZN7QGlyphsC2ERKS_ @ 12178 NONAME - _ZN7QGlyphsC2Ev @ 12179 NONAME - _ZN7QGlyphsD1Ev @ 12180 NONAME - _ZN7QGlyphsD2Ev @ 12181 NONAME - _ZN7QGlyphsaSERKS_ @ 12182 NONAME - _ZN7QGlyphspLERKS_ @ 12183 NONAME - _ZN8QPainter10drawGlyphsERK7QPointFRK7QGlyphs @ 12184 NONAME - _ZNK10QBlittable12capabilitiesEv @ 12185 NONAME - _ZNK10QBlittable4sizeEv @ 12186 NONAME - _ZNK10QTabWidget14heightForWidthEi @ 12187 NONAME - _ZNK11QFontEngine18createExplicitFontEv @ 12188 NONAME - _ZNK11QFontEngine26createExplicitFontWithNameERK7QString @ 12189 NONAME - _ZNK11QTextLayout6glyphsEv @ 12190 NONAME - _ZNK12QFontMetrics10inFontUcs4Ej @ 12191 NONAME - _ZNK12QRadioButton15minimumSizeHintEv @ 12192 NONAME - _ZNK13QFontMetricsF10inFontUcs4Ej @ 12193 NONAME - _ZNK13QTextFragment6glyphsEv @ 12194 NONAME - _ZNK14QWidgetPrivate17hasHeightForWidthEv @ 12195 NONAME - _ZNK16QFileSystemModel5rmdirERK11QModelIndex @ 12196 NONAME - _ZNK18QTextureGlyphCache18textureMapForGlyphEj6QFixed @ 12197 NONAME - _ZNK18QTextureGlyphCache20subPixelPositionForXE6QFixed @ 12198 NONAME - _ZNK18QTextureGlyphCache30calculateSubPixelPositionCountEj @ 12199 NONAME - _ZNK19QAbstractProxyModel11hasChildrenERK11QModelIndex @ 12200 NONAME - _ZNK19QAbstractProxyModel12canFetchMoreERK11QModelIndex @ 12201 NONAME - _ZNK19QAbstractProxyModel20supportedDropActionsEv @ 12202 NONAME - _ZNK19QAbstractProxyModel4spanERK11QModelIndex @ 12203 NONAME - _ZNK19QAbstractProxyModel5buddyERK11QModelIndex @ 12204 NONAME - _ZNK19QAbstractProxyModel8mimeDataERK5QListI11QModelIndexE @ 12205 NONAME - _ZNK19QAbstractProxyModel9mimeTypesEv @ 12206 NONAME - _ZNK19QBlitterPaintEngine11createStateEP13QPainterState @ 12207 NONAME - _ZNK20QBlittablePixmapData11paintEngineEv @ 12208 NONAME - _ZNK20QBlittablePixmapData15hasAlphaChannelEv @ 12209 NONAME - _ZNK20QBlittablePixmapData6metricEN12QPaintDevice17PaintDeviceMetricE @ 12210 NONAME - _ZNK20QBlittablePixmapData7toImageEv @ 12211 NONAME - _ZNK20QBlittablePixmapData9blittableEv @ 12212 NONAME - _ZNK7QGlyphs12glyphIndexesEv @ 12213 NONAME - _ZNK7QGlyphs4fontEv @ 12214 NONAME - _ZNK7QGlyphs9positionsEv @ 12215 NONAME - _ZNK7QGlyphseqERKS_ @ 12216 NONAME - _ZNK7QGlyphsneERKS_ @ 12217 NONAME - _ZNK7QGlyphsplERKS_ @ 12218 NONAME - _ZNK8QPainter16clipBoundingRectEv @ 12219 NONAME - _ZNK9QCheckBox15minimumSizeHintEv @ 12220 NONAME - _ZNK9QTextLine6glyphsEii @ 12221 NONAME - _ZTI10QBlittable @ 12222 NONAME - _ZTI19QBlitterPaintEngine @ 12223 NONAME - _ZTI20QBlittablePixmapData @ 12224 NONAME - _ZTV10QBlittable @ 12225 NONAME - _ZTV19QBlitterPaintEngine @ 12226 NONAME - _ZTV20QBlittablePixmapData @ 12227 NONAME - _Zls6QDebugPK13QSymbianEvent @ 12228 NONAME - _ZN13QS60MainAppUi25ProcessCommandParametersLE11TApaCommandR4TBufILi256EERK6TDesC8 @ 12229 NONAME - _ZN14QFileOpenEventC1ERK5RFile @ 12230 NONAME - _ZN14QFileOpenEventC2ERK5RFile @ 12231 NONAME - _ZNK14QFileOpenEvent8openFileER5QFile6QFlagsIN9QIODevice12OpenModeFlagEE @ 12232 NONAME - _ZN11QFontEngine16alphaMapForGlyphEj6QFixed @ 12233 NONAME - _ZN11QFontEngine16alphaMapForGlyphEj6QFixedRK10QTransform @ 12234 NONAME - _Z32qGamma_correct_back_to_linear_csP6QImage @ 12235 NONAME - _ZN12QLineControl21resetCursorBlinkTimerEv @ 12236 NONAME - _ZN12QScrollEvent6d_funcEv @ 12237 NONAME - _ZN12QScrollEventC1ERK7QPointFS2_NS_11ScrollStateE @ 12238 NONAME - _ZN12QScrollEventC2ERK7QPointFS2_NS_11ScrollStateE @ 12239 NONAME - _ZN12QScrollEventD0Ev @ 12240 NONAME - _ZN12QScrollEventD1Ev @ 12241 NONAME - _ZN12QScrollEventD2Ev @ 12242 NONAME - _ZN13QFlickGesture11qt_metacallEN11QMetaObject4CallEiPPv @ 12243 NONAME - _ZN13QFlickGesture11qt_metacastEPKc @ 12244 NONAME - _ZN13QFlickGesture16staticMetaObjectE @ 12245 NONAME DATA 16 - _ZN13QFlickGesture19getStaticMetaObjectEv @ 12246 NONAME - _ZN13QFlickGestureC1EP7QObjectN2Qt11MouseButtonES1_ @ 12247 NONAME - _ZN13QFlickGestureC2EP7QObjectN2Qt11MouseButtonES1_ @ 12248 NONAME - _ZN13QFlickGestureD0Ev @ 12249 NONAME - _ZN13QFlickGestureD1Ev @ 12250 NONAME - _ZN13QFlickGestureD2Ev @ 12251 NONAME - _ZN19QScrollPrepareEvent13setContentPosERK7QPointF @ 12252 NONAME - _ZN19QScrollPrepareEvent15setViewportSizeERK6QSizeF @ 12253 NONAME - _ZN19QScrollPrepareEvent18setContentPosRangeERK6QRectF @ 12254 NONAME - _ZN19QScrollPrepareEvent6d_funcEv @ 12255 NONAME - _ZN19QScrollPrepareEventC1ERK7QPointF @ 12256 NONAME - _ZN19QScrollPrepareEventC2ERK7QPointF @ 12257 NONAME - _ZN19QScrollPrepareEventD0Ev @ 12258 NONAME - _ZN19QScrollPrepareEventD1Ev @ 12259 NONAME - _ZN19QScrollPrepareEventD2Ev @ 12260 NONAME - _ZN19QScrollerProperties15setScrollMetricENS_12ScrollMetricERK8QVariant @ 12261 NONAME - _ZN19QScrollerProperties28setDefaultScrollerPropertiesERKS_ @ 12262 NONAME - _ZN19QScrollerProperties30unsetDefaultScrollerPropertiesEv @ 12263 NONAME - _ZN19QScrollerPropertiesC1ERKS_ @ 12264 NONAME - _ZN19QScrollerPropertiesC1Ev @ 12265 NONAME - _ZN19QScrollerPropertiesC2ERKS_ @ 12266 NONAME - _ZN19QScrollerPropertiesC2Ev @ 12267 NONAME - _ZN19QScrollerPropertiesD0Ev @ 12268 NONAME - _ZN19QScrollerPropertiesD1Ev @ 12269 NONAME - _ZN19QScrollerPropertiesD2Ev @ 12270 NONAME - _ZN19QScrollerPropertiesaSERKS_ @ 12271 NONAME - _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItemS1_ @ 12272 NONAME - _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItemS1_ @ 12273 NONAME - _ZN26QAbstractScrollAreaPrivate19canStartScrollingAtERK6QPoint @ 12274 NONAME - _ZN9QScroller11grabGestureEP7QObjectNS_19ScrollerGestureTypeE @ 12275 NONAME - _ZN9QScroller11handleInputENS_5InputERK7QPointFx @ 12276 NONAME - _ZN9QScroller11hasScrollerEP7QObject @ 12277 NONAME - _ZN9QScroller11qt_metacallEN11QMetaObject4CallEiPPv @ 12278 NONAME - _ZN9QScroller11qt_metacastEPKc @ 12279 NONAME - _ZN9QScroller12stateChangedENS_5StateE @ 12280 NONAME - _ZN9QScroller13ensureVisibleERK6QRectFff @ 12281 NONAME - _ZN9QScroller13ensureVisibleERK6QRectFffi @ 12282 NONAME - _ZN9QScroller13ungrabGestureEP7QObject @ 12283 NONAME - _ZN9QScroller14grabbedGestureEP7QObject @ 12284 NONAME - _ZN9QScroller15activeScrollersEv @ 12285 NONAME - _ZN9QScroller16staticMetaObjectE @ 12286 NONAME DATA 16 - _ZN9QScroller17setSnapPositionsXERK5QListIfE @ 12287 NONAME - _ZN9QScroller17setSnapPositionsXEff @ 12288 NONAME - _ZN9QScroller17setSnapPositionsYERK5QListIfE @ 12289 NONAME - _ZN9QScroller17setSnapPositionsYEff @ 12290 NONAME - _ZN9QScroller18resendPrepareEventEv @ 12291 NONAME - _ZN9QScroller19getStaticMetaObjectEv @ 12292 NONAME - _ZN9QScroller21setScrollerPropertiesERK19QScrollerProperties @ 12293 NONAME - _ZN9QScroller25scrollerPropertiesChangedERK19QScrollerProperties @ 12294 NONAME - _ZN9QScroller4stopEv @ 12295 NONAME - _ZN9QScroller8scrollToERK7QPointF @ 12296 NONAME - _ZN9QScroller8scrollToERK7QPointFi @ 12297 NONAME - _ZN9QScroller8scrollerEP7QObject @ 12298 NONAME - _ZN9QScroller8scrollerEPK7QObject @ 12299 NONAME - _ZN9QScrollerC1EP7QObject @ 12300 NONAME - _ZN9QScrollerC2EP7QObject @ 12301 NONAME - _ZN9QScrollerD0Ev @ 12302 NONAME - _ZN9QScrollerD1Ev @ 12303 NONAME - _ZN9QScrollerD2Ev @ 12304 NONAME - _ZNK12QScrollEvent10contentPosEv @ 12305 NONAME - _ZNK12QScrollEvent11scrollStateEv @ 12306 NONAME - _ZNK12QScrollEvent17overshootDistanceEv @ 12307 NONAME - _ZNK12QScrollEvent6d_funcEv @ 12308 NONAME - _ZNK13QFlickGesture10metaObjectEv @ 12309 NONAME - _ZNK19QScrollPrepareEvent10contentPosEv @ 12310 NONAME - _ZNK19QScrollPrepareEvent12viewportSizeEv @ 12311 NONAME - _ZNK19QScrollPrepareEvent15contentPosRangeEv @ 12312 NONAME - _ZNK19QScrollPrepareEvent6d_funcEv @ 12313 NONAME - _ZNK19QScrollPrepareEvent8startPosEv @ 12314 NONAME - _ZNK19QScrollerProperties12scrollMetricENS_12ScrollMetricE @ 12315 NONAME - _ZNK19QScrollerPropertieseqERKS_ @ 12316 NONAME - _ZNK19QScrollerPropertiesneERKS_ @ 12317 NONAME - _ZNK9QScroller10metaObjectEv @ 12318 NONAME - _ZNK9QScroller13finalPositionEv @ 12319 NONAME - _ZNK9QScroller13pixelPerMeterEv @ 12320 NONAME - _ZNK9QScroller18scrollerPropertiesEv @ 12321 NONAME - _ZNK9QScroller5stateEv @ 12322 NONAME - _ZNK9QScroller6targetEv @ 12323 NONAME - _ZNK9QScroller8velocityEv @ 12324 NONAME - _ZTI12QScrollEvent @ 12325 NONAME - _ZTI13QFlickGesture @ 12326 NONAME - _ZTI19QScrollPrepareEvent @ 12327 NONAME - _ZTI19QScrollerProperties @ 12328 NONAME - _ZTI9QScroller @ 12329 NONAME - _ZTV12QScrollEvent @ 12330 NONAME - _ZTV13QFlickGesture @ 12331 NONAME - _ZTV19QScrollPrepareEvent @ 12332 NONAME - _ZTV19QScrollerProperties @ 12333 NONAME - _ZTV9QScroller @ 12334 NONAME - _ZN12QTextControl14setDragEnabledEb @ 12335 NONAME - _ZN12QTextControl23setWordSelectionEnabledEb @ 12336 NONAME - _ZNK12QTextControl13isDragEnabledEv @ 12337 NONAME - _ZNK12QTextControl22isWordSelectionEnabledEv @ 12338 NONAME - _ZN12QLineControl16updateMicroFocusEv @ 12339 NONAME - _ZN13QFontDatabase22resolveFontFamilyAliasERK7QString @ 12340 NONAME - _ZN14QVolatileImage11paintEngineEv @ 12341 NONAME - _ZN14QVolatileImage12ensureFormatEN6QImage6FormatE @ 12342 NONAME - _ZN14QVolatileImage15setAlphaChannelERK7QPixmap @ 12343 NONAME - _ZN14QVolatileImage4bitsEv @ 12344 NONAME - _ZN14QVolatileImage4fillEj @ 12345 NONAME - _ZN14QVolatileImage8copyFromEPS_RK5QRect @ 12346 NONAME - _ZN14QVolatileImage8imageRefEv @ 12347 NONAME - _ZN14QVolatileImageC1EPvS0_ @ 12348 NONAME - _ZN14QVolatileImageC1ERK6QImage @ 12349 NONAME - _ZN14QVolatileImageC1ERKS_ @ 12350 NONAME - _ZN14QVolatileImageC1EiiN6QImage6FormatE @ 12351 NONAME - _ZN14QVolatileImageC1Ev @ 12352 NONAME - _ZN14QVolatileImageC2EPvS0_ @ 12353 NONAME - _ZN14QVolatileImageC2ERK6QImage @ 12354 NONAME - _ZN14QVolatileImageC2ERKS_ @ 12355 NONAME - _ZN14QVolatileImageC2EiiN6QImage6FormatE @ 12356 NONAME - _ZN14QVolatileImageC2Ev @ 12357 NONAME - _ZN14QVolatileImageD1Ev @ 12358 NONAME - _ZN14QVolatileImageD2Ev @ 12359 NONAME - _ZN14QVolatileImageaSERKS_ @ 12360 NONAME - _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12361 NONAME - _ZN17QInternalMimeData11canReadDataERK7QString @ 12362 NONAME - _ZN17QInternalMimeData11qt_metacallEN11QMetaObject4CallEiPPv @ 12363 NONAME - _ZN17QInternalMimeData11qt_metacastEPKc @ 12364 NONAME - _ZN17QInternalMimeData13formatsHelperEPK9QMimeData @ 12365 NONAME - _ZN17QInternalMimeData15hasFormatHelperERK7QStringPK9QMimeData @ 12366 NONAME - _ZN17QInternalMimeData16renderDataHelperERK7QStringPK9QMimeData @ 12367 NONAME - _ZN17QInternalMimeData16staticMetaObjectE @ 12368 NONAME DATA 16 - _ZN17QInternalMimeData19getStaticMetaObjectEv @ 12369 NONAME - _ZN17QInternalMimeDataC2Ev @ 12370 NONAME - _ZN17QInternalMimeDataD0Ev @ 12371 NONAME - _ZN17QInternalMimeDataD1Ev @ 12372 NONAME - _ZN17QInternalMimeDataD2Ev @ 12373 NONAME - _ZNK14QVolatileImage12bytesPerLineEv @ 12374 NONAME - _ZNK14QVolatileImage13endDataAccessEb @ 12375 NONAME - _ZNK14QVolatileImage15beginDataAccessEv @ 12376 NONAME - _ZNK14QVolatileImage15hasAlphaChannelEv @ 12377 NONAME - _ZNK14QVolatileImage20duplicateNativeImageEv @ 12378 NONAME - _ZNK14QVolatileImage5depthEv @ 12379 NONAME - _ZNK14QVolatileImage5widthEv @ 12380 NONAME - _ZNK14QVolatileImage6formatEv @ 12381 NONAME - _ZNK14QVolatileImage6heightEv @ 12382 NONAME - _ZNK14QVolatileImage6isNullEv @ 12383 NONAME - _ZNK14QVolatileImage7toImageEv @ 12384 NONAME - _ZNK14QVolatileImage9byteCountEv @ 12385 NONAME - _ZNK14QVolatileImage9constBitsEv @ 12386 NONAME - _ZNK14QWidgetPrivate20assignedInputContextEv @ 12387 NONAME - _ZNK17QInternalMimeData10metaObjectEv @ 12388 NONAME - _ZNK17QInternalMimeData12retrieveDataERK7QStringN8QVariant4TypeE @ 12389 NONAME - _ZNK17QInternalMimeData7formatsEv @ 12390 NONAME - _ZNK17QInternalMimeData9hasFormatERK7QString @ 12391 NONAME - _ZTI17QInternalMimeData @ 12392 NONAME - _ZTV17QInternalMimeData @ 12393 NONAME + _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItemS1_ @ 12107 NONAME + _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItemS1_ @ 12108 NONAME + _ZN12QLineControl21resetCursorBlinkTimerEv @ 12109 NONAME + _ZN12QTextControl14setDragEnabledEb @ 12110 NONAME + _ZN19QTextDocumentLayout10timerEventEP11QTimerEvent @ 12111 NONAME ABSENT + _ZN19QTextDocumentLayout11qt_metacallEN11QMetaObject4CallEiPPv @ 12112 NONAME ABSENT + _ZN19QTextDocumentLayout11qt_metacastEPKc @ 12113 NONAME ABSENT + _ZN19QTextDocumentLayout11setViewportERK6QRectF @ 12114 NONAME ABSENT + _ZN19QTextDocumentLayout13setLineHeightEfNS_14LineHeightModeE @ 12115 NONAME ABSENT + _ZN19QTextDocumentLayout14ensureLayoutedEf @ 12116 NONAME ABSENT + _ZN19QTextDocumentLayout14layoutFinishedEv @ 12117 NONAME ABSENT + _ZN19QTextDocumentLayout14setCursorWidthEi @ 12118 NONAME ABSENT + _ZN19QTextDocumentLayout15documentChangedEiii @ 12119 NONAME ABSENT + _ZN19QTextDocumentLayout16drawInlineObjectEP8QPainterRK6QRectF17QTextInlineObjectiRK11QTextFormat @ 12120 NONAME ABSENT + _ZN19QTextDocumentLayout16staticMetaObjectE @ 12121 NONAME DATA 16 ABSENT + _ZN19QTextDocumentLayout18resizeInlineObjectE17QTextInlineObjectiRK11QTextFormat @ 12122 NONAME ABSENT + _ZN19QTextDocumentLayout19getStaticMetaObjectEv @ 12123 NONAME ABSENT + _ZN19QTextDocumentLayout19setFixedColumnWidthEi @ 12124 NONAME ABSENT + _ZN19QTextDocumentLayout20positionInlineObjectE17QTextInlineObjectiRK11QTextFormat @ 12125 NONAME ABSENT + _ZN19QTextDocumentLayout4drawEP8QPainterRKN27QAbstractTextDocumentLayout12PaintContextE @ 12126 NONAME ABSENT + _ZN19QTextDocumentLayout8doLayoutEiii @ 12127 NONAME ABSENT + _ZN19QTextDocumentLayoutC1EP13QTextDocument @ 12128 NONAME ABSENT + _ZN19QTextDocumentLayoutC2EP13QTextDocument @ 12129 NONAME ABSENT + _ZNK12QTextControl13isDragEnabledEv @ 12130 NONAME + _ZNK19QTextDocumentLayout10idealWidthEv @ 12131 NONAME ABSENT + _ZNK19QTextDocumentLayout10metaObjectEv @ 12132 NONAME ABSENT + _ZNK19QTextDocumentLayout11cursorWidthEv @ 12133 NONAME ABSENT + _ZNK19QTextDocumentLayout12documentSizeEv @ 12134 NONAME ABSENT + _ZNK19QTextDocumentLayout12layoutStatusEv @ 12135 NONAME ABSENT + _ZNK19QTextDocumentLayout16dynamicPageCountEv @ 12136 NONAME ABSENT + _ZNK19QTextDocumentLayout17blockBoundingRectERK10QTextBlock @ 12137 NONAME ABSENT + _ZNK19QTextDocumentLayout17frameBoundingRectEP10QTextFrame @ 12138 NONAME ABSENT + _ZNK19QTextDocumentLayout19contentHasAlignmentEv @ 12139 NONAME ABSENT + _ZNK19QTextDocumentLayout19dynamicDocumentSizeEv @ 12140 NONAME ABSENT + _ZNK19QTextDocumentLayout7hitTestERK7QPointFN2Qt15HitTestAccuracyE @ 12141 NONAME ABSENT + _ZNK19QTextDocumentLayout9pageCountEv @ 12142 NONAME ABSENT + _ZTI19QTextDocumentLayout @ 12143 NONAME ABSENT + _ZTV19QTextDocumentLayout @ 12144 NONAME ABSENT + _ZN12QTextControl23setWordSelectionEnabledEb @ 12145 NONAME + _ZNK12QTextControl22isWordSelectionEnabledEv @ 12146 NONAME + _ZN12QLineControl16updateMicroFocusEv @ 12147 NONAME + _ZNK14QWidgetPrivate20assignedInputContextEv @ 12148 NONAME + _ZN14QVolatileImage11paintEngineEv @ 12149 NONAME + _ZN14QVolatileImage12ensureFormatEN6QImage6FormatE @ 12150 NONAME + _ZN14QVolatileImage15setAlphaChannelERK7QPixmap @ 12151 NONAME + _ZN14QVolatileImage4bitsEv @ 12152 NONAME + _ZN14QVolatileImage4fillEj @ 12153 NONAME + _ZN14QVolatileImage8copyFromEPS_RK5QRect @ 12154 NONAME + _ZN14QVolatileImage8imageRefEv @ 12155 NONAME + _ZN14QVolatileImageC1EPvS0_ @ 12156 NONAME + _ZN14QVolatileImageC1ERK6QImage @ 12157 NONAME + _ZN14QVolatileImageC1ERKS_ @ 12158 NONAME + _ZN14QVolatileImageC1EiiN6QImage6FormatE @ 12159 NONAME + _ZN14QVolatileImageC1Ev @ 12160 NONAME + _ZN14QVolatileImageC2EPvS0_ @ 12161 NONAME + _ZN14QVolatileImageC2ERK6QImage @ 12162 NONAME + _ZN14QVolatileImageC2ERKS_ @ 12163 NONAME + _ZN14QVolatileImageC2EiiN6QImage6FormatE @ 12164 NONAME + _ZN14QVolatileImageC2Ev @ 12165 NONAME + _ZN14QVolatileImageD1Ev @ 12166 NONAME + _ZN14QVolatileImageD2Ev @ 12167 NONAME + _ZN14QVolatileImageaSERKS_ @ 12168 NONAME + _ZNK14QVolatileImage12bytesPerLineEv @ 12169 NONAME + _ZNK14QVolatileImage13endDataAccessEb @ 12170 NONAME + _ZNK14QVolatileImage15beginDataAccessEv @ 12171 NONAME + _ZNK14QVolatileImage15hasAlphaChannelEv @ 12172 NONAME + _ZNK14QVolatileImage20duplicateNativeImageEv @ 12173 NONAME + _ZNK14QVolatileImage5depthEv @ 12174 NONAME + _ZNK14QVolatileImage5widthEv @ 12175 NONAME + _ZNK14QVolatileImage6formatEv @ 12176 NONAME + _ZNK14QVolatileImage6heightEv @ 12177 NONAME + _ZNK14QVolatileImage6isNullEv @ 12178 NONAME + _ZNK14QVolatileImage7toImageEv @ 12179 NONAME + _ZNK14QVolatileImage9byteCountEv @ 12180 NONAME + _ZNK14QVolatileImage9constBitsEv @ 12181 NONAME + _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME + _Z32qt_s60_setPartialScreenInputModeb @ 12183 NONAME + _Z18qt_addBitmapToPathffPKhiiiP12QPainterPath @ 12184 NONAME + _Z22qt_fontdata_from_indexi @ 12185 NONAME + _Z32qGamma_correct_back_to_linear_csP6QImage @ 12186 NONAME + _ZN10QBlittable4lockEv @ 12187 NONAME + _ZN10QBlittable6unlockEv @ 12188 NONAME + _ZN10QBlittableC2ERK5QSize6QFlagsINS_10CapabilityEE @ 12189 NONAME + _ZN10QBlittableD0Ev @ 12190 NONAME + _ZN10QBlittableD1Ev @ 12191 NONAME + _ZN10QBlittableD2Ev @ 12192 NONAME + _ZN11QFontEngine16alphaMapForGlyphEj6QFixed @ 12193 NONAME + _ZN11QFontEngine16alphaMapForGlyphEj6QFixedRK10QTransform @ 12194 NONAME + _ZN11QFontEngine19alphaRGBMapForGlyphEj6QFixediRK10QTransform @ 12195 NONAME + _ZN12QInputDialog7getItemEP7QWidgetRK7QStringS4_RK11QStringListibPb6QFlagsIN2Qt10WindowTypeEES9_INSA_15InputMethodHintEE @ 12196 NONAME + _ZN12QInputDialog7getTextEP7QWidgetRK7QStringS4_N9QLineEdit8EchoModeES4_Pb6QFlagsIN2Qt10WindowTypeEES8_INS9_15InputMethodHintEE @ 12197 NONAME + _ZN12QScrollEvent6d_funcEv @ 12198 NONAME + _ZN12QScrollEventC1ERK7QPointFS2_NS_11ScrollStateE @ 12199 NONAME + _ZN12QScrollEventC2ERK7QPointFS2_NS_11ScrollStateE @ 12200 NONAME + _ZN12QScrollEventD0Ev @ 12201 NONAME + _ZN12QScrollEventD1Ev @ 12202 NONAME + _ZN12QScrollEventD2Ev @ 12203 NONAME + _ZN13QFlickGesture11qt_metacallEN11QMetaObject4CallEiPPv @ 12204 NONAME + _ZN13QFlickGesture11qt_metacastEPKc @ 12205 NONAME + _ZN13QFlickGesture16staticMetaObjectE @ 12206 NONAME DATA 16 + _ZN13QFlickGesture19getStaticMetaObjectEv @ 12207 NONAME + _ZN13QFlickGestureC1EP7QObjectN2Qt11MouseButtonES1_ @ 12208 NONAME + _ZN13QFlickGestureC2EP7QObjectN2Qt11MouseButtonES1_ @ 12209 NONAME + _ZN13QFlickGestureD0Ev @ 12210 NONAME + _ZN13QFlickGestureD1Ev @ 12211 NONAME + _ZN13QFlickGestureD2Ev @ 12212 NONAME + _ZN13QFontDatabase22resolveFontFamilyAliasERK7QString @ 12213 NONAME + _ZN13QS60MainAppUi25ProcessCommandParametersLE11TApaCommandR4TBufILi256EERK6TDesC8 @ 12214 NONAME + _ZN14QFileOpenEventC1ERK5RFile @ 12215 NONAME + _ZN14QFileOpenEventC2ERK5RFile @ 12216 NONAME + _ZN14QWindowSurfaceC2EP7QWidgetb @ 12217 NONAME + _ZN17QInternalMimeData11canReadDataERK7QString @ 12218 NONAME + _ZN17QInternalMimeData11qt_metacallEN11QMetaObject4CallEiPPv @ 12219 NONAME + _ZN17QInternalMimeData11qt_metacastEPKc @ 12220 NONAME + _ZN17QInternalMimeData13formatsHelperEPK9QMimeData @ 12221 NONAME + _ZN17QInternalMimeData15hasFormatHelperERK7QStringPK9QMimeData @ 12222 NONAME + _ZN17QInternalMimeData16renderDataHelperERK7QStringPK9QMimeData @ 12223 NONAME + _ZN17QInternalMimeData16staticMetaObjectE @ 12224 NONAME DATA 16 + _ZN17QInternalMimeData19getStaticMetaObjectEv @ 12225 NONAME + _ZN17QInternalMimeDataC2Ev @ 12226 NONAME + _ZN17QInternalMimeDataD0Ev @ 12227 NONAME + _ZN17QInternalMimeDataD1Ev @ 12228 NONAME + _ZN17QInternalMimeDataD2Ev @ 12229 NONAME + _ZN18QTextureGlyphCache19fillInPendingGlyphsEv @ 12230 NONAME + _ZN19QAbstractProxyModel11setItemDataERK11QModelIndexRK4QMapIi8QVariantE @ 12231 NONAME + _ZN19QAbstractProxyModel17resetInternalDataEv @ 12232 NONAME + _ZN19QAbstractProxyModel4sortEiN2Qt9SortOrderE @ 12233 NONAME + _ZN19QAbstractProxyModel9fetchMoreERK11QModelIndex @ 12234 NONAME + _ZN19QApplicationPrivateC1ERiPPcN12QApplication4TypeEi @ 12235 NONAME + _ZN19QApplicationPrivateC2ERiPPcN12QApplication4TypeEi @ 12236 NONAME + _ZN19QBlitterPaintEngine10drawPixmapERK6QRectFRK7QPixmapS2_ @ 12237 NONAME + _ZN19QBlitterPaintEngine10penChangedEv @ 12238 NONAME + _ZN19QBlitterPaintEngine11drawEllipseERK6QRectF @ 12239 NONAME + _ZN19QBlitterPaintEngine12brushChangedEv @ 12240 NONAME + _ZN19QBlitterPaintEngine12drawTextItemERK7QPointFRK9QTextItem @ 12241 NONAME + _ZN19QBlitterPaintEngine14opacityChangedEv @ 12242 NONAME + _ZN19QBlitterPaintEngine16transformChangedEv @ 12243 NONAME + _ZN19QBlitterPaintEngine18brushOriginChangedEv @ 12244 NONAME + _ZN19QBlitterPaintEngine18clipEnabledChangedEv @ 12245 NONAME + _ZN19QBlitterPaintEngine18drawStaticTextItemEP15QStaticTextItem @ 12246 NONAME + _ZN19QBlitterPaintEngine18renderHintsChangedEv @ 12247 NONAME + _ZN19QBlitterPaintEngine22compositionModeChangedEv @ 12248 NONAME + _ZN19QBlitterPaintEngine3endEv @ 12249 NONAME + _ZN19QBlitterPaintEngine4clipERK11QVectorPathN2Qt13ClipOperationE @ 12250 NONAME + _ZN19QBlitterPaintEngine4clipERK5QRectN2Qt13ClipOperationE @ 12251 NONAME + _ZN19QBlitterPaintEngine4clipERK7QRegionN2Qt13ClipOperationE @ 12252 NONAME + _ZN19QBlitterPaintEngine4fillERK11QVectorPathRK6QBrush @ 12253 NONAME + _ZN19QBlitterPaintEngine5beginEP12QPaintDevice @ 12254 NONAME + _ZN19QBlitterPaintEngine6strokeERK11QVectorPathRK4QPen @ 12255 NONAME + _ZN19QBlitterPaintEngine8fillRectERK6QRectFRK6QBrush @ 12256 NONAME + _ZN19QBlitterPaintEngine8fillRectERK6QRectFRK6QColor @ 12257 NONAME + _ZN19QBlitterPaintEngine8setStateEP13QPainterState @ 12258 NONAME + _ZN19QBlitterPaintEngine9drawImageERK6QRectFRK6QImageS2_6QFlagsIN2Qt19ImageConversionFlagEE @ 12259 NONAME + _ZN19QBlitterPaintEngine9drawRectsEPK5QRecti @ 12260 NONAME + _ZN19QBlitterPaintEngine9drawRectsEPK6QRectFi @ 12261 NONAME + _ZN19QBlitterPaintEngineC1EP20QBlittablePixmapData @ 12262 NONAME + _ZN19QBlitterPaintEngineC2EP20QBlittablePixmapData @ 12263 NONAME + _ZN19QBlitterPaintEngineD0Ev @ 12264 NONAME + _ZN19QBlitterPaintEngineD1Ev @ 12265 NONAME + _ZN19QBlitterPaintEngineD2Ev @ 12266 NONAME + _ZN19QGraphicsGridLayout10removeItemEP19QGraphicsLayoutItem @ 12267 NONAME + _ZN19QScrollPrepareEvent13setContentPosERK7QPointF @ 12268 NONAME + _ZN19QScrollPrepareEvent15setViewportSizeERK6QSizeF @ 12269 NONAME + _ZN19QScrollPrepareEvent18setContentPosRangeERK6QRectF @ 12270 NONAME + _ZN19QScrollPrepareEvent6d_funcEv @ 12271 NONAME + _ZN19QScrollPrepareEventC1ERK7QPointF @ 12272 NONAME + _ZN19QScrollPrepareEventC2ERK7QPointF @ 12273 NONAME + _ZN19QScrollPrepareEventD0Ev @ 12274 NONAME + _ZN19QScrollPrepareEventD1Ev @ 12275 NONAME + _ZN19QScrollPrepareEventD2Ev @ 12276 NONAME + _ZN19QScrollerProperties15setScrollMetricENS_12ScrollMetricERK8QVariant @ 12277 NONAME + _ZN19QScrollerProperties28setDefaultScrollerPropertiesERKS_ @ 12278 NONAME + _ZN19QScrollerProperties30unsetDefaultScrollerPropertiesEv @ 12279 NONAME + _ZN19QScrollerPropertiesC1ERKS_ @ 12280 NONAME + _ZN19QScrollerPropertiesC1Ev @ 12281 NONAME + _ZN19QScrollerPropertiesC2ERKS_ @ 12282 NONAME + _ZN19QScrollerPropertiesC2Ev @ 12283 NONAME + _ZN19QScrollerPropertiesD0Ev @ 12284 NONAME + _ZN19QScrollerPropertiesD1Ev @ 12285 NONAME + _ZN19QScrollerPropertiesD2Ev @ 12286 NONAME + _ZN19QScrollerPropertiesaSERKS_ @ 12287 NONAME + _ZN20QBlittablePixmapData12setBlittableEP10QBlittable @ 12288 NONAME + _ZN20QBlittablePixmapData4fillERK6QColor @ 12289 NONAME + _ZN20QBlittablePixmapData6bufferEv @ 12290 NONAME + _ZN20QBlittablePixmapData6resizeEii @ 12291 NONAME + _ZN20QBlittablePixmapData9fromImageERK6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 12292 NONAME + _ZN20QBlittablePixmapDataC2Ev @ 12293 NONAME + _ZN20QBlittablePixmapDataD0Ev @ 12294 NONAME + _ZN20QBlittablePixmapDataD1Ev @ 12295 NONAME + _ZN20QBlittablePixmapDataD2Ev @ 12296 NONAME + _ZN20QRasterWindowSurfaceC1EP7QWidgetb @ 12297 NONAME + _ZN20QRasterWindowSurfaceC2EP7QWidgetb @ 12298 NONAME + _ZN23QImageTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj6QFixed @ 12299 NONAME + _ZN26QAbstractScrollAreaPrivate19canStartScrollingAtERK6QPoint @ 12300 NONAME + _ZN5QFont20setHintingPreferenceENS_17HintingPreferenceE @ 12301 NONAME + _ZN6QImage4fillEN2Qt11GlobalColorE @ 12302 NONAME + _ZN6QImage4fillERK6QColor @ 12303 NONAME + _ZN7QGlyphs12setPositionsERK7QVectorI7QPointFE @ 12304 NONAME + _ZN7QGlyphs15setGlyphIndexesERK7QVectorIjE @ 12305 NONAME + _ZN7QGlyphs5clearEv @ 12306 NONAME + _ZN7QGlyphs6detachEv @ 12307 NONAME + _ZN7QGlyphs7setFontERK5QFont @ 12308 NONAME + _ZN7QGlyphsC1ERKS_ @ 12309 NONAME + _ZN7QGlyphsC1Ev @ 12310 NONAME + _ZN7QGlyphsC2ERKS_ @ 12311 NONAME + _ZN7QGlyphsC2Ev @ 12312 NONAME + _ZN7QGlyphsD1Ev @ 12313 NONAME + _ZN7QGlyphsD2Ev @ 12314 NONAME + _ZN7QGlyphsaSERKS_ @ 12315 NONAME + _ZN7QGlyphspLERKS_ @ 12316 NONAME + _ZN8QMdiArea14setTabsMovableEb @ 12317 NONAME + _ZN8QMdiArea15setTabsClosableEb @ 12318 NONAME + _ZN8QPainter10drawGlyphsERK7QPointFRK7QGlyphs @ 12319 NONAME + _ZN9QScroller11grabGestureEP7QObjectNS_19ScrollerGestureTypeE @ 12320 NONAME + _ZN9QScroller11handleInputENS_5InputERK7QPointFx @ 12321 NONAME + _ZN9QScroller11hasScrollerEP7QObject @ 12322 NONAME + _ZN9QScroller11qt_metacallEN11QMetaObject4CallEiPPv @ 12323 NONAME + _ZN9QScroller11qt_metacastEPKc @ 12324 NONAME + _ZN9QScroller12stateChangedENS_5StateE @ 12325 NONAME + _ZN9QScroller13ensureVisibleERK6QRectFff @ 12326 NONAME + _ZN9QScroller13ensureVisibleERK6QRectFffi @ 12327 NONAME + _ZN9QScroller13ungrabGestureEP7QObject @ 12328 NONAME + _ZN9QScroller14grabbedGestureEP7QObject @ 12329 NONAME + _ZN9QScroller15activeScrollersEv @ 12330 NONAME + _ZN9QScroller16staticMetaObjectE @ 12331 NONAME DATA 16 + _ZN9QScroller17setSnapPositionsXERK5QListIfE @ 12332 NONAME + _ZN9QScroller17setSnapPositionsXEff @ 12333 NONAME + _ZN9QScroller17setSnapPositionsYERK5QListIfE @ 12334 NONAME + _ZN9QScroller17setSnapPositionsYEff @ 12335 NONAME + _ZN9QScroller18resendPrepareEventEv @ 12336 NONAME + _ZN9QScroller19getStaticMetaObjectEv @ 12337 NONAME + _ZN9QScroller21setScrollerPropertiesERK19QScrollerProperties @ 12338 NONAME + _ZN9QScroller25scrollerPropertiesChangedERK19QScrollerProperties @ 12339 NONAME + _ZN9QScroller4stopEv @ 12340 NONAME + _ZN9QScroller8scrollToERK7QPointF @ 12341 NONAME + _ZN9QScroller8scrollToERK7QPointFi @ 12342 NONAME + _ZN9QScroller8scrollerEP7QObject @ 12343 NONAME + _ZN9QScroller8scrollerEPK7QObject @ 12344 NONAME + _ZN9QScrollerC1EP7QObject @ 12345 NONAME + _ZN9QScrollerC2EP7QObject @ 12346 NONAME + _ZN9QScrollerD0Ev @ 12347 NONAME + _ZN9QScrollerD1Ev @ 12348 NONAME + _ZN9QScrollerD2Ev @ 12349 NONAME + _ZNK10QBlittable12capabilitiesEv @ 12350 NONAME + _ZNK10QBlittable4sizeEv @ 12351 NONAME + _ZNK10QTabWidget14heightForWidthEi @ 12352 NONAME + _ZNK11QFontEngine18createExplicitFontEv @ 12353 NONAME + _ZNK11QFontEngine26createExplicitFontWithNameERK7QString @ 12354 NONAME + _ZNK11QTextLayout6glyphsEv @ 12355 NONAME + _ZNK12QFontMetrics10inFontUcs4Ej @ 12356 NONAME + _ZNK12QRadioButton15minimumSizeHintEv @ 12357 NONAME + _ZNK12QScrollEvent10contentPosEv @ 12358 NONAME + _ZNK12QScrollEvent11scrollStateEv @ 12359 NONAME + _ZNK12QScrollEvent17overshootDistanceEv @ 12360 NONAME + _ZNK12QScrollEvent6d_funcEv @ 12361 NONAME + _ZNK13QFlickGesture10metaObjectEv @ 12362 NONAME + _ZNK13QFontMetricsF10inFontUcs4Ej @ 12363 NONAME + _ZNK13QTextFragment6glyphsEv @ 12364 NONAME + _ZNK14QFileOpenEvent8openFileER5QFile6QFlagsIN9QIODevice12OpenModeFlagEE @ 12365 NONAME + _ZNK14QWidgetPrivate17hasHeightForWidthEv @ 12366 NONAME + _ZNK16QFileSystemModel5rmdirERK11QModelIndex @ 12367 NONAME + _ZNK17QInternalMimeData10metaObjectEv @ 12368 NONAME + _ZNK17QInternalMimeData12retrieveDataERK7QStringN8QVariant4TypeE @ 12369 NONAME + _ZNK17QInternalMimeData7formatsEv @ 12370 NONAME + _ZNK17QInternalMimeData9hasFormatERK7QString @ 12371 NONAME + _ZNK18QTextureGlyphCache18textureMapForGlyphEj6QFixed @ 12372 NONAME + _ZNK18QTextureGlyphCache20subPixelPositionForXE6QFixed @ 12373 NONAME + _ZNK18QTextureGlyphCache30calculateSubPixelPositionCountEj @ 12374 NONAME + _ZNK19QAbstractProxyModel11hasChildrenERK11QModelIndex @ 12375 NONAME + _ZNK19QAbstractProxyModel12canFetchMoreERK11QModelIndex @ 12376 NONAME + _ZNK19QAbstractProxyModel20supportedDropActionsEv @ 12377 NONAME + _ZNK19QAbstractProxyModel4spanERK11QModelIndex @ 12378 NONAME + _ZNK19QAbstractProxyModel5buddyERK11QModelIndex @ 12379 NONAME + _ZNK19QAbstractProxyModel8mimeDataERK5QListI11QModelIndexE @ 12380 NONAME + _ZNK19QAbstractProxyModel9mimeTypesEv @ 12381 NONAME + _ZNK19QBlitterPaintEngine11createStateEP13QPainterState @ 12382 NONAME + _ZNK19QScrollPrepareEvent10contentPosEv @ 12383 NONAME + _ZNK19QScrollPrepareEvent12viewportSizeEv @ 12384 NONAME + _ZNK19QScrollPrepareEvent15contentPosRangeEv @ 12385 NONAME + _ZNK19QScrollPrepareEvent6d_funcEv @ 12386 NONAME + _ZNK19QScrollPrepareEvent8startPosEv @ 12387 NONAME + _ZNK19QScrollerProperties12scrollMetricENS_12ScrollMetricE @ 12388 NONAME + _ZNK19QScrollerPropertieseqERKS_ @ 12389 NONAME + _ZNK19QScrollerPropertiesneERKS_ @ 12390 NONAME + _ZNK20QBlittablePixmapData11paintEngineEv @ 12391 NONAME + _ZNK20QBlittablePixmapData15hasAlphaChannelEv @ 12392 NONAME + _ZNK20QBlittablePixmapData6metricEN12QPaintDevice17PaintDeviceMetricE @ 12393 NONAME + _ZNK20QBlittablePixmapData7toImageEv @ 12394 NONAME + _ZNK20QBlittablePixmapData9blittableEv @ 12395 NONAME + _ZNK20QRasterWindowSurface24hasStaticContentsSupportEv @ 12396 NONAME + _ZNK5QFont17hintingPreferenceEv @ 12397 NONAME + _ZNK7QGlyphs12glyphIndexesEv @ 12398 NONAME + _ZNK7QGlyphs4fontEv @ 12399 NONAME + _ZNK7QGlyphs9positionsEv @ 12400 NONAME + _ZNK7QGlyphseqERKS_ @ 12401 NONAME + _ZNK7QGlyphsneERKS_ @ 12402 NONAME + _ZNK7QGlyphsplERKS_ @ 12403 NONAME + _ZNK8QMdiArea11tabsMovableEv @ 12404 NONAME + _ZNK8QMdiArea12tabsClosableEv @ 12405 NONAME + _ZNK8QPainter16clipBoundingRectEv @ 12406 NONAME + _ZNK9QCheckBox15minimumSizeHintEv @ 12407 NONAME + _ZNK9QScroller10metaObjectEv @ 12408 NONAME + _ZNK9QScroller13finalPositionEv @ 12409 NONAME + _ZNK9QScroller13pixelPerMeterEv @ 12410 NONAME + _ZNK9QScroller18scrollerPropertiesEv @ 12411 NONAME + _ZNK9QScroller5stateEv @ 12412 NONAME + _ZNK9QScroller6targetEv @ 12413 NONAME + _ZNK9QScroller8velocityEv @ 12414 NONAME + _ZNK9QTextLine6glyphsEii @ 12415 NONAME + _ZTI10QBlittable @ 12416 NONAME + _ZTI12QScrollEvent @ 12417 NONAME + _ZTI13QFlickGesture @ 12418 NONAME + _ZTI17QInternalMimeData @ 12419 NONAME + _ZTI19QBlitterPaintEngine @ 12420 NONAME + _ZTI19QScrollPrepareEvent @ 12421 NONAME + _ZTI19QScrollerProperties @ 12422 NONAME + _ZTI20QBlittablePixmapData @ 12423 NONAME + _ZTI9QScroller @ 12424 NONAME + _ZTV10QBlittable @ 12425 NONAME + _ZTV12QScrollEvent @ 12426 NONAME + _ZTV13QFlickGesture @ 12427 NONAME + _ZTV17QInternalMimeData @ 12428 NONAME + _ZTV19QBlitterPaintEngine @ 12429 NONAME + _ZTV19QScrollPrepareEvent @ 12430 NONAME + _ZTV19QScrollerProperties @ 12431 NONAME + _ZTV20QBlittablePixmapData @ 12432 NONAME + _ZTV9QScroller @ 12433 NONAME + _Zls6QDebugPK13QSymbianEvent @ 12434 NONAME -- cgit v0.12 From 73d30f514e1411102fb6f8f21258276e72c836ec Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Fri, 18 Mar 2011 16:16:56 +1000 Subject: Doc fix - QtQuick 1.1 scheduling Change-Id: If19934bf378e5fbc6cb1dce1df2164905e97f0ed --- doc/src/declarative/whatsnew.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/declarative/whatsnew.qdoc b/doc/src/declarative/whatsnew.qdoc index 1a8ebd7..8d975c7 100644 --- a/doc/src/declarative/whatsnew.qdoc +++ b/doc/src/declarative/whatsnew.qdoc @@ -29,7 +29,7 @@ \title What's new in Qt Quick \page qtquick-whatsnew.html -\section1 Qt 4.7.3 includes QtQuick 1.1 +\section1 Qt 4.7.4 includes QtQuick 1.1 QtQuick 1.1 is a minor feature update. \e {import QtQuick 1.1} to use the new features. -- cgit v0.12 From 0d481aa65254d76b7d22dc1e073dcd18e2c65f9b Mon Sep 17 00:00:00 2001 From: Joona Petrell <joona.t.petrell@nokia.com> Date: Mon, 14 Mar 2011 16:45:15 +1000 Subject: Write Qt Quick 1.1 right-to-left documentation and examples Task-number: QTBUG-11042 Reviewed-by: Martin Jones Change-Id: I6319992dec52a4d9252c2df39801ebe6a7dee75d --- doc/src/declarative/declarativeui.qdoc | 1 + doc/src/declarative/examples.qdoc | 12 +- doc/src/declarative/righttoleft.qdoc | 186 +++++++++ doc/src/examples/qml-examples.qdoc | 48 ++- .../qml-righttoleft-layoutdirection-example.png | Bin 0 -> 20945 bytes .../qml-righttoleft-layoutmirroring-example.png | Bin 0 -> 31901 bytes doc/src/snippets/declarative/arrow.png | Bin 0 -> 454 bytes doc/src/snippets/declarative/righttoleft.qml | 146 +++++++ doc/src/snippets/declarative/righttoleft/Child.qml | 11 + examples/declarative/positioners/Button.qml | 78 ++++ examples/declarative/positioners/add.png | Bin 0 -> 810 bytes .../positioners/addandremove/Button.qml | 78 ---- .../declarative/positioners/addandremove/add.png | Bin 810 -> 0 bytes .../positioners/addandremove/addandremove.qml | 253 ------------ .../addandremove/addandremove.qmlproject | 18 - .../declarative/positioners/addandremove/del.png | Bin 488 -> 0 bytes examples/declarative/positioners/del.png | Bin 0 -> 488 bytes .../layoutdirection/layoutdirection.qml | 171 --------- .../layoutdirection/layoutdirection.qmlproject | 18 - examples/declarative/positioners/positioners.qml | 253 ++++++++++++ .../declarative/positioners/positioners.qmlproject | 18 + .../layoutdirection/layoutdirection.qml | 246 ++++++++++++ .../layoutdirection/layoutdirection.qmlproject | 18 + .../layoutmirroring/layoutmirroring.qml | 313 +++++++++++++++ .../layoutmirroring/layoutmirroring.qmlproject | 18 + .../righttoleft/textalignment/textalignment.qml | 426 +++++++++++++++++++++ .../textalignment/textalignment.qmlproject | 18 + .../graphicsitems/qdeclarativetextinput.cpp | 2 +- 28 files changed, 1779 insertions(+), 553 deletions(-) create mode 100644 doc/src/declarative/righttoleft.qdoc create mode 100644 doc/src/images/qml-righttoleft-layoutdirection-example.png create mode 100644 doc/src/images/qml-righttoleft-layoutmirroring-example.png create mode 100644 doc/src/snippets/declarative/arrow.png create mode 100644 doc/src/snippets/declarative/righttoleft.qml create mode 100644 doc/src/snippets/declarative/righttoleft/Child.qml create mode 100644 examples/declarative/positioners/Button.qml create mode 100644 examples/declarative/positioners/add.png delete mode 100644 examples/declarative/positioners/addandremove/Button.qml delete mode 100644 examples/declarative/positioners/addandremove/add.png delete mode 100644 examples/declarative/positioners/addandremove/addandremove.qml delete mode 100644 examples/declarative/positioners/addandremove/addandremove.qmlproject delete mode 100644 examples/declarative/positioners/addandremove/del.png create mode 100644 examples/declarative/positioners/del.png delete mode 100644 examples/declarative/positioners/layoutdirection/layoutdirection.qml delete mode 100644 examples/declarative/positioners/layoutdirection/layoutdirection.qmlproject create mode 100644 examples/declarative/positioners/positioners.qml create mode 100644 examples/declarative/positioners/positioners.qmlproject create mode 100644 examples/declarative/righttoleft/layoutdirection/layoutdirection.qml create mode 100644 examples/declarative/righttoleft/layoutdirection/layoutdirection.qmlproject create mode 100644 examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml create mode 100644 examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qmlproject create mode 100644 examples/declarative/righttoleft/textalignment/textalignment.qml create mode 100644 examples/declarative/righttoleft/textalignment/textalignment.qmlproject diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index aa9ed18..3962514 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -140,6 +140,7 @@ Module. \o \l{QML Basic Types} \o \l{QML Global Object} \o \l{QML Internationalization} +\o \l{QML Right-to-left User Interfaces} \o \l{QML Security} \o \l{Qt Declarative Module} \o \l{Debugging QML} diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc index be2d0c7..b359877 100644 --- a/doc/src/declarative/examples.qdoc +++ b/doc/src/declarative/examples.qdoc @@ -136,8 +136,7 @@ The examples can be found in Qt's \c examples/declarative directory. \section2 Positioners \list -\o \l{declarative/positioners/addandremove}{Adding and Removing Items} -\o \l{declarative/positioners/layoutdirection}{Layout Direction} +\o \l{declarative/positioners}{Example} \endlist \section2 Key Interaction @@ -198,13 +197,20 @@ The examples can be found in Qt's \c examples/declarative directory. \o \l{declarative/i18n}{Example} \endlist +\section2 Right-to-left User Interfaces +\list +\o \l{declarative/righttoleft/layoutmirroring}{Layout mirroring} +\o \l{declarative/righttoleft/layoutdirection}{Layout direction} +\o \l{declarative/righttoleft/textalignment}{Text alignment} +\endlist + \section2 Threading \list \o \l{declarative/threading/threadedlistmodel}{Threaded ListModel} \o \l{declarative/threading/workerscript}{WorkerScript} \endlist -\section2 Screen orientation +\section2 Screen Orientation \list \o \l{declarative/screenorientation}{Example} \endlist diff --git a/doc/src/declarative/righttoleft.qdoc b/doc/src/declarative/righttoleft.qdoc new file mode 100644 index 0000000..710855d --- /dev/null +++ b/doc/src/declarative/righttoleft.qdoc @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of this +** file. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! +\page qml-righttoleft.html +\target righttoleft +\title QML Right-to-left User Interfaces + +\section1 Overview + +This chapter discusses different approaches and options available for implementing right-to-left +language support for Qt Quick applications. Some common right-to-left languages include Arabic, Hebrew, +Persian and Urdu. Most changes include making sure that text translated to right-to-left languages +is properly aligned to the right, and horizontally ordered content in views, lists and grids flows +correctly from the right to left. + +In right-to-left language speaking cultures, people naturally scan and read graphic elements and text +from the right to left. General rule of thumb is that the content like photos, videos, maps is not +mirrored, but positioning of the content is, like application layouts and the flow of visual elements. +Common use cases include photos shown in chronological order should flow right-to-left, the +low end range of the horizontal sliders should be located at the right side of the slider, and the +text lines should should be aligned to the right side of the available area. The location of visual +elements should not be mirrored when the position is related to a content, for example when a +position marker is shown to indicate a location on a map. Also, there are some special cases you may +need to take into account where the right-to-left language speakers are used to the left-to-right +positioning, for example when using number dialers in phones and media play, pause, rewind and +forward buttons in music players. + +\section1 Text Alignment + +Applies to \l Text, \l TextInput and \l TextEdit. + +When the horizontal alignment of the text item is not explicitly set, the text element will be +automatically aligned to the natural reading direction of the text. By default left-to-right text +like English is aligned to the left side of the text area, and right-to-left text like Arabic is +aligned to the right side of the text area. The alignment of a text element with empty text takes +it's alignment cue from \l QApplication::keyboardInputDirection(), which is based on the active +system locale. Explicitly setting property \c horizontalAlignment for the text will override any +implicit locale-based alignment. Enabling layout mirroring using attached property +\l LayoutMirroring causes any explicit left and right horizontal alignments to be mirrored. +Note that \c horizontalAlignment property itself will remain unchanged. The effective alignment of +the text element that takes the mirroring into account can be read from the +\c effectiveHorizontalAlignment property. + +\snippet doc/src/snippets/declarative/righttoleft.qml 0 + +\section1 Layout direction of positioners and views + +Applies to \l Row, \l Grid, \l Flow, \l ListView and \l GridView + +From Qt Quick 1.1 onwards horizontal positioners and model views have gained a \c layoutDirection +property for controlling the horizontal direction of the layouts. Setting \c layoutDirection to +\c Qt.RightToLeft causes items to be laid out from the right to left. By default Qt Quick follows +the left-to-right layout direction. + +Enabling application layout mirroring using attached property \c LayoutMirroring causes the effective +\c layoutDirection of positioners and views to be mirrored. Note that actual value of \c layoutDirection +property will remain unchanged. The effective layout direction of positioners and views that takes the mirroring into account can be read from the \c effectiveLayoutDirection property. + +\snippet doc/src/snippets/declarative/righttoleft.qml 1 + +\section1 Layout mirroring + +Attached property \l LayoutMirroring is provided as a convenience for easily implementing right-to-left +support for existing left-to-right Qt Quick applications. It mirrors the behavior of \l {anchor-layout} +{Item anchors}, the layout direction of \l{Using QML Positioner and Repeater Items}{positioners} and +model views and the explicit text alignment of QML text elements. + +You can enable layout mirroring for a particular Item + +\snippet doc/src/snippets/declarative/righttoleft.qml 2 + +or make all children elements also inherit the layout direction + +\snippet doc/src/snippets/declarative/righttoleft.qml 3 + +Mirroring does not change the return value of the layout direction and horizontal alignment properties. +Separate read-only property \c effectiveLayoutDirection can be used to query the effective layout +direction of positioners and model views that takes the mirroring into account. Similarly \c Text, +\c TextInput and \c TextEdit elements have gained read-only property \c effectiveHorizontalAlignment +for querying what is the effective visual alignment of text. + +\c LayoutMirroring doesn't alter application layouts and animations done by using the \l x coordinate +directly. Adding right-to-left support to those layouts requires some code changes to your application, +especially in views that rely on both the anchors and x coordinate-based positioning. + +\snippet doc/src/snippets/declarative/righttoleft.qml 4 + +Not all the layouts should be mirrored. There are cases where the visual element is positioned to +the right side of the screen for better one-handed use, because most people are right-handed, and not +because of the reading direction. In the case that a child element needs to be unaffected by the mirroring, set the \c LayoutMirroring.enabled property for that element to false. Qt Quick is designed +for developing animated, fluid user interfaces. When mirroring your application, remember to test that +the animations and transitions continue to work as expected. If you don't have resources to add +right-to-left support for your application, it may be better to just keep the application layouts left +aligned and just make sure that text is translated and aligned properly. + +\section1 Mirroring icons + +Applies to \l Image, \l BorderImage, \l AnimatedImage + +Most images don't need mirroring, but some directional icons should be mirrored. You can mirror the +painting of these icons with a dedicated \l mirror property introduced in Qt Quick 1.1. + +\snippet doc/src/snippets/declarative/righttoleft.qml 5 + +\section1 Default layout direction + +Property \l Qt.application.layoutDirection can be used to query the active layout direction of the +application. It is based on QApplication::layoutDirection(), which most commonly determines the layout +direction from the active language translation file. + +To define the layout direction for a particular locale, declare the dedicated string literal +\c QT_LAYOUT_DIRECTION in context \c QApplication as either "LTR" or "RTL". + +You can do this by first introducing line + +\code +QT_TRANSLATE_NOOP("QApplication", "QT_LAYOUT_DIRECTION"); +\endcode + +somewhere in your QML source code and calling \c lupdate to generate the translation source file. + +\code +lupdate myapp.qml -ts myapp.ts +\endcode + +This will append following declaration to the translation file, where you can fill either "LTR" or +"RTL" as the translation for the locale. + +\code +<context> + <name>QApplication</name> + <message> + <location filename="myapp.qml" line="33"/> + <source>QT_LAYOUT_DIRECTION</source> + <translation type="unfinished">RTL</translation> + </message> +</context> +\endcode + +You can test that the layout direction works as expected by running your Qt Quick application with +the compiled translation file. + +\code +qmlviewer myapp.qml -translation myapp.qm +\endcode + +You can test your application in right-to-left layout direction simply by executing qmlviewer with a +command-line parameter "-reverse". + +\code +qmlviewer myapp.qml -reverse +\endcode + +Layout direction can also be set from C++ by calling static function \l QApplication::setLayoutDirection(). + +\code +QApplication app(argc, argv); +app.setLayoutDirection(Qt::RightToLeft); +\endcode + +*/ diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index bbea19b..8f34a9f 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -270,23 +270,49 @@ */ /*! - \title Positioners: Adding and Removing Items Example - \example declarative/positioners/addandremove + \title Right-to-left User Interfaces: Text Alignment Example + \example declarative/righttoleft/textalignment - This example shows how to use the positioner elements such as \l Row, \l Column, - \l Grid and \l Flow, in particular how to add and remove items with appropriate transitions. - - \image qml-positioners-example.png + This example shows how the horizontal alignment of \l Text, + \l TextInput and \l TextEdit is affected by the reading direction + of the text and by the layout mirrroring. Click on the gray buttons + shown at the bottom of the example to toggle between different + horizontal alignment options. */ /*! - \title Positioners: Layout Direction Example - \example declarative/positioners/layoutdirection + \title Right-to-left User Interfaces: Layout Direction Example + \example declarative/righttoleft/layoutdirection This example shows how to control the horizontal layout direction of - \l Row, \l Grid and \l Flow positioners. + \l Row, \l Grid and \l Flow positioners, and \l ListView and \l GridView + model views. Click on the gray buttons shown at the bottom of the example + to toggle the layout direction of the shown elements. + + \image qml-righttoleft-layoutdirection-example.png +*/ + + +/*! + \title Right-to-left User Interfaces: Layout Mirroring Example + \example declarative/righttoleft/layoutmirroring - \image qml-positioners-layoutdirection-example.png + This example shows how to mirror the application layouts + using \l LayoutMirroring attached property. Click on the grey button + shown at the bottom of the example to enable or disable the + layout mirroring. + + \image qml-righttoleft-layoutmirroring-example.png +*/ + +/*! + \title Positioners Example + \example declarative/positioners + + This example shows how to use the positioner elements such as \l Row, \l Column, + \l Grid and \l Flow. + + \image qml-positioners-example.png */ /*! @@ -456,7 +482,7 @@ /*! - \title Screen orientation + \title Screen Orientation \example declarative/screenorientation This example shows how to implement screen orientation support for your application. diff --git a/doc/src/images/qml-righttoleft-layoutdirection-example.png b/doc/src/images/qml-righttoleft-layoutdirection-example.png new file mode 100644 index 0000000..e8dd85c Binary files /dev/null and b/doc/src/images/qml-righttoleft-layoutdirection-example.png differ diff --git a/doc/src/images/qml-righttoleft-layoutmirroring-example.png b/doc/src/images/qml-righttoleft-layoutmirroring-example.png new file mode 100644 index 0000000..2fa82ac Binary files /dev/null and b/doc/src/images/qml-righttoleft-layoutmirroring-example.png differ diff --git a/doc/src/snippets/declarative/arrow.png b/doc/src/snippets/declarative/arrow.png new file mode 100644 index 0000000..f0cae21 Binary files /dev/null and b/doc/src/snippets/declarative/arrow.png differ diff --git a/doc/src/snippets/declarative/righttoleft.qml b/doc/src/snippets/declarative/righttoleft.qml new file mode 100644 index 0000000..5d34f50 --- /dev/null +++ b/doc/src/snippets/declarative/righttoleft.qml @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.1 +import "righttoleft" + +Column { + width: 200 +//![0] +// aligned to the left +Text { + text: "Phone" + width: 200 +} + +// aligned to the right +Text { + text: "خامل" + width: 200 +} + +// aligned to the left +Text { + text: "خامل" + horizontalAlignment: Text.AlignLeft + width: 200 +} + +// aligned to the right +Text { + text: "خامل" + horizontalAlignment: Text.AlignLeft + LayoutMirroring.enabled: true + width: 200 +} +//![0] + +//![1] +// by default positions child items from the left to right +Row { + Child {} + Child {} +} + +// positions child items from the right to left +Row { + layoutDirection: Qt.RightToLeft + Child {} + Child {} +} + +// positions child items from the left to right +Row { + LayoutMirroring.enabled: true + layoutDirection: Qt.RightToLeft + Child {} + Child {} +} +//![1] + +//![2] +Item { + // anchor left becomes right + height: 50; width: 150 + LayoutMirroring.enabled: true + anchors.left: parent.left + Row { + // flows from the left to right + Child {} + Child {} + Child {} + } +} +//![2] + +//![3] +Item { + // anchor left becomes right + height: 50; width: 150 + LayoutMirroring.enabled: true + LayoutMirroring.childrenInherit: true + anchors.left: parent.left + Row { + // flows from the right to left + Child {} + Child {} + Child {} + } +} +//![3] + +//![4] +Rectangle { + color: "black" + height: 50; width: 50 + x: mirror(10) + function mirror(value) { + return LayoutMirroring.enabled ? (parent.width - width - value) : value; + } +} +//![4] + +//![5] +Image { + source: "arrow.png" + mirror: true +} +//![5] +} \ No newline at end of file diff --git a/doc/src/snippets/declarative/righttoleft/Child.qml b/doc/src/snippets/declarative/righttoleft/Child.qml new file mode 100644 index 0000000..2b3564e --- /dev/null +++ b/doc/src/snippets/declarative/righttoleft/Child.qml @@ -0,0 +1,11 @@ +import QtQuick 1.0 + +Rectangle { + width: 50; height: 50 + color: "black" + Text { + color: "white" + text: String.fromCharCode(65 + Math.floor(26*Math.random())) + anchors.centerIn: parent + } +} \ No newline at end of file diff --git a/examples/declarative/positioners/Button.qml b/examples/declarative/positioners/Button.qml new file mode 100644 index 0000000..25907c0 --- /dev/null +++ b/examples/declarative/positioners/Button.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + + property string text + property string icon + signal clicked + + border.color: "black"; color: "steelblue"; radius: 5 + width: pix.width + textelement.width + 13 + height: pix.height + 10 + + Image { id: pix; x: 5; y:5; source: parent.icon } + + Text { + id: textelement + text: page.text; color: "white" + x: pix.width + pix.x + 3 + anchors.verticalCenter: pix.verticalCenter + } + + MouseArea { + id: mr + anchors.fill: parent + onClicked: { parent.focus = true; page.clicked() } + } + + states: State { + name: "pressed"; when: mr.pressed + PropertyChanges { target: textelement; x: 5 } + PropertyChanges { target: pix; x: textelement.x + textelement.width + 3 } + } + + transitions: Transition { + NumberAnimation { properties: "x,left"; easing.type: Easing.InOutQuad; duration: 200 } + } +} diff --git a/examples/declarative/positioners/add.png b/examples/declarative/positioners/add.png new file mode 100644 index 0000000..1ee4542 Binary files /dev/null and b/examples/declarative/positioners/add.png differ diff --git a/examples/declarative/positioners/addandremove/Button.qml b/examples/declarative/positioners/addandremove/Button.qml deleted file mode 100644 index 25907c0..0000000 --- a/examples/declarative/positioners/addandremove/Button.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 1.0 - -Rectangle { - id: page - - property string text - property string icon - signal clicked - - border.color: "black"; color: "steelblue"; radius: 5 - width: pix.width + textelement.width + 13 - height: pix.height + 10 - - Image { id: pix; x: 5; y:5; source: parent.icon } - - Text { - id: textelement - text: page.text; color: "white" - x: pix.width + pix.x + 3 - anchors.verticalCenter: pix.verticalCenter - } - - MouseArea { - id: mr - anchors.fill: parent - onClicked: { parent.focus = true; page.clicked() } - } - - states: State { - name: "pressed"; when: mr.pressed - PropertyChanges { target: textelement; x: 5 } - PropertyChanges { target: pix; x: textelement.x + textelement.width + 3 } - } - - transitions: Transition { - NumberAnimation { properties: "x,left"; easing.type: Easing.InOutQuad; duration: 200 } - } -} diff --git a/examples/declarative/positioners/addandremove/add.png b/examples/declarative/positioners/addandremove/add.png deleted file mode 100644 index 1ee4542..0000000 Binary files a/examples/declarative/positioners/addandremove/add.png and /dev/null differ diff --git a/examples/declarative/positioners/addandremove/addandremove.qml b/examples/declarative/positioners/addandremove/addandremove.qml deleted file mode 100644 index 7d6d8fe..0000000 --- a/examples/declarative/positioners/addandremove/addandremove.qml +++ /dev/null @@ -1,253 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 1.0 - -Rectangle { - id: page - width: 420; height: 420 - - Column { - id: layout1 - y: 0 - move: Transition { - NumberAnimation { properties: "y"; easing.type: Easing.OutBounce } - } - add: Transition { - NumberAnimation { properties: "y"; easing.type: Easing.OutQuad } - } - - Rectangle { color: "red"; width: 100; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueV1 - width: 100; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "green"; width: 100; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueV2 - width: 100; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "orange"; width: 100; height: 50; border.color: "black"; radius: 15 } - } - - Row { - id: layout2 - y: 300 - move: Transition { - NumberAnimation { properties: "x"; easing.type: Easing.OutBounce } - } - add: Transition { - NumberAnimation { properties: "x"; easing.type: Easing.OutQuad } - } - - Rectangle { color: "red"; width: 50; height: 100; border.color: "black"; radius: 15 } - - Rectangle { - id: blueH1 - width: 50; height: 100 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "green"; width: 50; height: 100; border.color: "black"; radius: 15 } - - Rectangle { - id: blueH2 - width: 50; height: 100 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "orange"; width: 50; height: 100; border.color: "black"; radius: 15 } - } - - Button { - x: 135; y: 90 - text: "Remove" - icon: "del.png" - - onClicked: { - blueH2.opacity = 0 - blueH1.opacity = 0 - blueV1.opacity = 0 - blueV2.opacity = 0 - blueG1.opacity = 0 - blueG2.opacity = 0 - blueG3.opacity = 0 - blueF1.opacity = 0 - blueF2.opacity = 0 - blueF3.opacity = 0 - } - } - - Button { - x: 145; y: 140 - text: "Add" - icon: "add.png" - - onClicked: { - blueH2.opacity = 1 - blueH1.opacity = 1 - blueV1.opacity = 1 - blueV2.opacity = 1 - blueG1.opacity = 1 - blueG2.opacity = 1 - blueG3.opacity = 1 - blueF1.opacity = 1 - blueF2.opacity = 1 - blueF3.opacity = 1 - } - } - - Grid { - x: 260; y: 0 - columns: 3 - - move: Transition { - NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } - } - - add: Transition { - NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } - } - - Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueG1 - width: 50; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueG2 - width: 50; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueG3 - width: 50; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } - Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } - Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } - } - - Flow { - id: layout4 - x: 260; y: 250; width: 150 - - move: Transition { - NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } - } - - add: Transition { - NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } - } - - Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueF1 - width: 60; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "green"; width: 30; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueF2 - width: 60; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } - - Rectangle { - id: blueF3 - width: 40; height: 50 - color: "lightsteelblue" - border.color: "black" - radius: 15 - Behavior on opacity { NumberAnimation {} } - } - - Rectangle { color: "red"; width: 80; height: 50; border.color: "black"; radius: 15 } - } - -} diff --git a/examples/declarative/positioners/addandremove/addandremove.qmlproject b/examples/declarative/positioners/addandremove/addandremove.qmlproject deleted file mode 100644 index e526217..0000000 --- a/examples/declarative/positioners/addandremove/addandremove.qmlproject +++ /dev/null @@ -1,18 +0,0 @@ -/* File generated by QtCreator */ - -import QmlProject 1.0 - -Project { - /* Include .qml, .js, and image files from current directory and subdirectories */ - QmlFiles { - directory: "." - } - JavaScriptFiles { - directory: "." - } - ImageFiles { - directory: "." - } - /* List of plugin directories passed to QML runtime */ - // importPaths: [ " ../exampleplugin " ] -} diff --git a/examples/declarative/positioners/addandremove/del.png b/examples/declarative/positioners/addandremove/del.png deleted file mode 100644 index 8d2eaed..0000000 Binary files a/examples/declarative/positioners/addandremove/del.png and /dev/null differ diff --git a/examples/declarative/positioners/del.png b/examples/declarative/positioners/del.png new file mode 100644 index 0000000..8d2eaed Binary files /dev/null and b/examples/declarative/positioners/del.png differ diff --git a/examples/declarative/positioners/layoutdirection/layoutdirection.qml b/examples/declarative/positioners/layoutdirection/layoutdirection.qml deleted file mode 100644 index 080010e..0000000 --- a/examples/declarative/positioners/layoutdirection/layoutdirection.qml +++ /dev/null @@ -1,171 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 1.1 - -Rectangle { - property bool mirror - property int direction: Qt.application.layoutDirection - LayoutMirroring.enabled: mirror - LayoutMirroring.childrenInherit: true - - width: column.width + 100 - height: column.height + 100 - - Column { - id: column - spacing: 10 - anchors.centerIn: parent - width: 230 - - Text { - text: "Row" - anchors.horizontalCenter: parent.horizontalCenter - } - Row { - layoutDirection: direction - spacing: 10 - move: Transition { - NumberAnimation { - properties: "x" - } - } - Repeater { - model: 4 - Loader { - property int value: index - sourceComponent: delegate - } - } - } - Text { - text: "Grid" - anchors.horizontalCenter: parent.horizontalCenter - } - Grid { - layoutDirection: direction - spacing: 10; columns: 4 - move: Transition { - NumberAnimation { - properties: "x" - } - } - Repeater { - model: 11 - Loader { - property int value: index - sourceComponent: delegate - } - } - } - Text { - text: "Flow" - anchors.horizontalCenter: parent.horizontalCenter - } - Flow { - layoutDirection: direction - spacing: 10; width: parent.width - move: Transition { - NumberAnimation { - properties: "x" - } - } - Repeater { - model: 10 - Loader { - property int value: index - sourceComponent: delegate - } - } - } - Rectangle { - height: 50; width: parent.width - color: mouseArea.pressed ? "black" : "gray" - Text { - text: direction ? "Right to left" : "Left to right" - color: "white" - font.pixelSize: 16 - anchors.centerIn: parent - } - MouseArea { - id: mouseArea - onClicked: { - if (direction == Qt.LeftToRight) { - direction = Qt.RightToLeft; - } else { - direction = Qt.LeftToRight; - } - } - anchors.fill: parent - } - } - Rectangle { - height: 50; width: parent.width - color: mouseArea2.pressed ? "black" : "gray" - Text { - text: mirror ? "Mirrored" : "Normal" - color: "white" - font.pixelSize: 16 - anchors.centerIn: parent - } - MouseArea { - id: mouseArea2 - onClicked: { - mirror = !mirror; - } - anchors.fill: parent - } - } - } - - Component { - id: delegate - Rectangle { - width: 50; height: 50 - color: Qt.rgba(0.8/(parent.value+1),0.8/(parent.value+1),0.8/(parent.value+1),1.0) - Text { - text: parent.parent.value+1 - color: "white" - font.pixelSize: 20 - anchors.centerIn: parent - } - } - } -} diff --git a/examples/declarative/positioners/layoutdirection/layoutdirection.qmlproject b/examples/declarative/positioners/layoutdirection/layoutdirection.qmlproject deleted file mode 100644 index e526217..0000000 --- a/examples/declarative/positioners/layoutdirection/layoutdirection.qmlproject +++ /dev/null @@ -1,18 +0,0 @@ -/* File generated by QtCreator */ - -import QmlProject 1.0 - -Project { - /* Include .qml, .js, and image files from current directory and subdirectories */ - QmlFiles { - directory: "." - } - JavaScriptFiles { - directory: "." - } - ImageFiles { - directory: "." - } - /* List of plugin directories passed to QML runtime */ - // importPaths: [ " ../exampleplugin " ] -} diff --git a/examples/declarative/positioners/positioners.qml b/examples/declarative/positioners/positioners.qml new file mode 100644 index 0000000..7d6d8fe --- /dev/null +++ b/examples/declarative/positioners/positioners.qml @@ -0,0 +1,253 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +Rectangle { + id: page + width: 420; height: 420 + + Column { + id: layout1 + y: 0 + move: Transition { + NumberAnimation { properties: "y"; easing.type: Easing.OutBounce } + } + add: Transition { + NumberAnimation { properties: "y"; easing.type: Easing.OutQuad } + } + + Rectangle { color: "red"; width: 100; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueV1 + width: 100; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 100; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueV2 + width: 100; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 100; height: 50; border.color: "black"; radius: 15 } + } + + Row { + id: layout2 + y: 300 + move: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.OutBounce } + } + add: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.OutQuad } + } + + Rectangle { color: "red"; width: 50; height: 100; border.color: "black"; radius: 15 } + + Rectangle { + id: blueH1 + width: 50; height: 100 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 50; height: 100; border.color: "black"; radius: 15 } + + Rectangle { + id: blueH2 + width: 50; height: 100 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 100; border.color: "black"; radius: 15 } + } + + Button { + x: 135; y: 90 + text: "Remove" + icon: "del.png" + + onClicked: { + blueH2.opacity = 0 + blueH1.opacity = 0 + blueV1.opacity = 0 + blueV2.opacity = 0 + blueG1.opacity = 0 + blueG2.opacity = 0 + blueG3.opacity = 0 + blueF1.opacity = 0 + blueF2.opacity = 0 + blueF3.opacity = 0 + } + } + + Button { + x: 145; y: 140 + text: "Add" + icon: "add.png" + + onClicked: { + blueH2.opacity = 1 + blueH1.opacity = 1 + blueV1.opacity = 1 + blueV2.opacity = 1 + blueG1.opacity = 1 + blueG2.opacity = 1 + blueG3.opacity = 1 + blueF1.opacity = 1 + blueF2.opacity = 1 + blueF3.opacity = 1 + } + } + + Grid { + x: 260; y: 0 + columns: 3 + + move: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + add: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG1 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG2 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueG3 + width: 50; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + Rectangle { color: "green"; width: 50; height: 50; border.color: "black"; radius: 15 } + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + } + + Flow { + id: layout4 + x: 260; y: 250; width: 150 + + move: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + add: Transition { + NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce } + } + + Rectangle { color: "red"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF1 + width: 60; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "green"; width: 30; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF2 + width: 60; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "orange"; width: 50; height: 50; border.color: "black"; radius: 15 } + + Rectangle { + id: blueF3 + width: 40; height: 50 + color: "lightsteelblue" + border.color: "black" + radius: 15 + Behavior on opacity { NumberAnimation {} } + } + + Rectangle { color: "red"; width: 80; height: 50; border.color: "black"; radius: 15 } + } + +} diff --git a/examples/declarative/positioners/positioners.qmlproject b/examples/declarative/positioners/positioners.qmlproject new file mode 100644 index 0000000..e526217 --- /dev/null +++ b/examples/declarative/positioners/positioners.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml new file mode 100644 index 0000000..ff641d7 --- /dev/null +++ b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.1 + +Rectangle { + id: root + property bool mirror + property int direction: Qt.application.layoutDirection + LayoutMirroring.enabled: mirror + LayoutMirroring.childrenInherit: true + width: column.width + 80 + height: column.height + 40 + Column { + id: column + width: 190 + spacing: 10 + anchors.centerIn: parent + + Text { + text: "Row" + anchors.horizontalCenter: parent.horizontalCenter + } + + Row { + layoutDirection: root.direction + spacing: 10 + move: Transition { + NumberAnimation { + properties: "x" + } + } + Repeater { + model: 4 + Loader { + property int value: index + sourceComponent: positionerDelegate + } + } + } + + Text { + text: "Grid" + anchors.horizontalCenter: parent.horizontalCenter + } + + Grid { + layoutDirection: root.direction + spacing: 10; columns: 4 + move: Transition { + NumberAnimation { + properties: "x" + } + } + Repeater { + model: 11 + Loader { + property int value: index + sourceComponent: positionerDelegate + } + } + } + + Text { + text: "Flow" + anchors.horizontalCenter: parent.horizontalCenter + } + + Flow { + layoutDirection: root.direction + spacing: 10; width: parent.width + move: Transition { + NumberAnimation { + properties: "x" + } + } + Repeater { + model: 10 + Loader { + property int value: index + sourceComponent: positionerDelegate + } + } + } + + Text { + text: "ListView" + anchors.horizontalCenter: parent.horizontalCenter + } + + ListView { + id: listView + clip: true + width: parent.width; height: 40 + layoutDirection: root.direction + orientation: Qt.Horizontal + model: 48 + delegate: viewDelegate + } + + Text { + text: "GridView" + anchors.horizontalCenter: parent.horizontalCenter + } + + GridView { + clip: true + width: 200; height: 160 + cellWidth: 50; cellHeight: 50 + layoutDirection: root.direction + model: 48 + delegate: viewDelegate + } + + Rectangle { + height: 50; width: parent.width + color: mouseArea.pressed ? "black" : "gray" + Column { + anchors.centerIn: parent + Text { + text: root.direction ? "Right to left" : "Left to right" + color: "white" + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "(click here)" + color: "white" + font.pixelSize: 10 + font.italic: true + anchors.horizontalCenter: parent.horizontalCenter + } + } + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: { + if (root.direction == Qt.LeftToRight) { + root.direction = Qt.RightToLeft; + } else { + root.direction = Qt.LeftToRight; + } + } + } + } + + Rectangle { + height: 50; width: parent.width + color: mouseArea2.pressed ? "black" : "gray" + Column { + anchors.centerIn: parent + Text { + text: root.mirror ? "Mirrored" : "Normal" + color: "white" + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "(click here)" + color: "white" + font.pixelSize: 10 + font.italic: true + anchors.horizontalCenter: parent.horizontalCenter + } + } + MouseArea { + id: mouseArea2 + anchors.fill: parent + onClicked: { + root.mirror = !root.mirror; + } + } + } + } + + Component { + id: positionerDelegate + Rectangle { + width: 40; height: 40 + color: Qt.rgba(0.8/(parent.value+1),0.8/(parent.value+1),0.8/(parent.value+1),1.0) + Text { + text: parent.parent.value+1 + color: "white" + font.pixelSize: 18 + anchors.centerIn: parent + } + } + } + Component { + id: viewDelegate + Item { + width: (listView.effectiveLayoutDirection == Qt.LeftToRight ? (index == 48 - 1) : (index == 0)) ? 40 : 50 + Rectangle { + width: 40; height: 40 + color: Qt.rgba(0.5+(48 - index)*Math.random()/48, + 0.3+index*Math.random()/48, + 0.3*Math.random(), + 1.0) + Text { + text: index+1 + color: "white" + font.pixelSize: 18 + anchors.centerIn: parent + } + } + } + } +} + diff --git a/examples/declarative/righttoleft/layoutdirection/layoutdirection.qmlproject b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qmlproject new file mode 100644 index 0000000..e526217 --- /dev/null +++ b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml new file mode 100644 index 0000000..25fa52b --- /dev/null +++ b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml @@ -0,0 +1,313 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.1 + +Rectangle { + id: root + property bool mirror: Qt.application.layoutDirection == Qt.RightToLeft + LayoutMirroring.enabled: mirror + LayoutMirroring.childrenInherit: true + width: 400 + height: 875 + color: "lightblue" + + Column { + spacing: 10 + anchors { left: parent.left; right: parent.right; top: parent.top; margins: 10 } + + Text { + text: "Positioners" + anchors.left: parent.left + } + + Column { + id: positioners + spacing: 5 + anchors.left: parent.left + Row { + id: row + spacing: 4 + property string text: "THISISROW" + anchors.left: parent.left + Repeater { + model: parent.text.length + delegate: positionerDelegate + } + } + Flow { + id: flow + spacing: 4 + width: 90 + property string text: "THISISFLOW" + anchors.left: parent.left + Repeater { + model: parent.text.length + delegate: positionerDelegate + } + } + Grid { + id: grid + spacing: 4 + columns: 6 + property string text: "THISISGRID" + anchors.left: parent.left + Repeater { + model: parent.text.length + delegate: positionerDelegate + } + } + Component { + id: positionerDelegate + Text { + color: "white" + font.pixelSize: 20 + text: parent.text[index] + Rectangle { + z: -1 + opacity: 0.7 + color: "black" + anchors.fill: parent + } + } + } + } + + Text { + text: "Text alignment" + anchors.left: parent.left + } + + Rectangle { + id: textStrings + width: 148 + height: 85 + color: "white" + anchors.left: parent.left + Column { + spacing: 5 + width: parent.width + anchors { fill: parent; margins: 5 } + Text { + id: englishText + width: parent.width + text: "English text" + } + Text { + id: arabicText + width: parent.width + text: "النص العربي" + } + Text { + id: leftAlignedText + width: parent.width + text: "Text aligned to left" + horizontalAlignment: Text.AlignLeft + } + Text { + id: rightAlignedText + width: parent.width + text: "Text aligned to right" + horizontalAlignment: Text.AlignRight + } + } + } + + Text { + text: "Model views" + anchors.left: parent.left + } + + Column { + id: views + spacing: 10 + anchors.left: parent.left + ListView { + id: listView + z: -1 + clip: true + model: text.length + width: 360; height: 45 + orientation: Qt.Horizontal + property string text: "LISTVIEWLISTVIEWLISTVIEWLISTVIEWLISTVIEWLISTVIEW" + delegate: Rectangle { + color: "black" + width: 45; height: 45 + Rectangle { + anchors { fill: parent; margins: 1 } + color: "red" + } + Text { + text: listView.text[index] + font.pixelSize: 30 + anchors.centerIn: parent + } + } + } + GridView { + id: gridView + z: -1 + clip: true + model: text.length + width: 180; height: 90 + cellWidth: 45; cellHeight: 45 + property string text: "GRIDVIEWGRIDVIEWGRIDVIEWGRIDVIEWGRIDVIEWGRIDVIEW" + anchors.left: parent.left + delegate: Rectangle { + color: "black" + width: 45; height: 45 + Rectangle { + anchors { fill: parent; margins: 1 } + color: "red" + } + Text { + anchors.centerIn: parent + font.pixelSize: 30 + text: gridView.text[index] + } + } + } + } + + Text { + text: "Item x" + anchors.left: parent.left + } + Rectangle { + id: items + color: Qt.rgba(0.2, 0.2, 0.2, 0.6) + width: 275; height: 95 + anchors.left: parent.left + Rectangle { + y: 5; x: 5 + width: 130; height: 40 + Text { + text: "Item with x: 5\n(not mirrored)" + anchors.centerIn: parent + } + } + Rectangle { + color: Qt.rgba(0.7, 0.7, 0.7) + y: 50; x: mirror(5) + width: 130; height: 40 + function mirror(value) { + return LayoutMirroring.enabled ? (parent.width - width - value) : value; + } + Text { + text: "Item with x: " + parent.x + "\n(manually mirrored)" + anchors.centerIn: parent + } + } + } + Text { + text: "Item anchors" + anchors.left: parent.left + } + + Rectangle { + id: anchoredItems + color: Qt.rgba(0.2, 0.2, 0.2, 0.6) + width: 270; height: 170 + anchors.left: parent.left + Rectangle { + id: blackRectangle + color: "black" + width: 180; height: 90 + anchors { horizontalCenter: parent.horizontalCenter; horizontalCenterOffset: 30 } + Text { + text: "Horizontal center anchored\nwith offset 30\nto the horizontal center\nof the parent." + color: "white" + anchors.centerIn: parent + } + } + Rectangle { + id: whiteRectangle + color: "white" + width: 120; height: 70 + anchors { left: parent.left; bottom: parent.bottom } + Text { + text: "Left side anchored\nto the left side\nof the parent." + color: "black" + anchors.centerIn: parent + } + } + Rectangle { + id: grayRectangle + color: Qt.rgba(0.7, 0.7, 0.7) + width: 140; height: 90 + anchors { right: parent.right; bottom: parent.bottom } + Text { + text: "Right side anchored\nto the right side\nof the parent." + anchors.centerIn: parent + } + } + } + Rectangle { + id: mirrorButton + color: mouseArea2.pressed ? "black" : "gray" + height: 50; width: parent.width + anchors.left: parent.left + Column { + anchors.centerIn: parent + Text { + text: root.mirror ? "Mirrored" : "Normal" + color: "white" + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "(click here)" + color: "white" + font.pixelSize: 10 + font.italic: true + anchors.horizontalCenter: parent.horizontalCenter + } + } + MouseArea { + id: mouseArea2 + anchors.fill: parent + onClicked: { + root.mirror = !root.mirror; + } + } + } + } +} + diff --git a/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qmlproject b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qmlproject new file mode 100644 index 0000000..e526217 --- /dev/null +++ b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/righttoleft/textalignment/textalignment.qml b/examples/declarative/righttoleft/textalignment/textalignment.qml new file mode 100644 index 0000000..90168de --- /dev/null +++ b/examples/declarative/righttoleft/textalignment/textalignment.qml @@ -0,0 +1,426 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.1 + +Rectangle { + id: root + color: "white" + width: containerColumn.width + height: containerColumn.height + containerColumn.anchors.topMargin + + property bool mirror: false + property variant horizontalAlignment: undefined + + property variant editorType: ["Plain Text", "Styled Text", "Plain Rich Text", "Italic Rich Text", "Plain TextEdit", "Italic TextEdit", "TextInput"] + property variant text: ["", " ", "Hello world!", "مرحبا العالم!", "Hello world! Hello!\nHello world! Hello!", "مرحبا العالم! مرحبا! مرحبا العالم! مرحبا!" ,"مرحبا العالم! مرحبا! مرحبا Hello world!\nالعالم! مرحبا!"] + property variant description: ["empty text", "white-space-only text", "left-to-right text", "right-to-left text", "multi-line left-to-right text", "multi-line right-to-left text", "multi-line bidi text"] + property variant textComponents: [plainTextComponent, styledTextComponent, richTextComponent, italicRichTextComponent, plainTextEdit, italicTextEdit, textInput] + + function shortText(horizontalAlignment) { + + // all the different QML editors have + // the same alignment values + switch (horizontalAlignment) { + case Text.AlignLeft: + return "L"; + case Text.AlignRight: + return "R"; + case Text.AlignHCenter: + return "C"; + case Text.AlignJustify: + return "J"; + default: + return "Error"; + } + } + Column { + id: containerColumn + spacing: 10 + width: editorTypeRow.width + anchors { top: parent.top; topMargin: 5 } + Row { + id: editorTypeRow + Repeater { + model: editorType.length + Item { + width: editorColumn.width + height: editorColumn.height + Column { + id: editorColumn + spacing: 5 + width: textColumn.width+10 + Text { + text: root.editorType[index] + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Column { + id: textColumn + spacing: 5 + anchors.horizontalCenter: parent.horizontalCenter + Repeater { + model: textComponents.length + delegate: textComponents[index] + } + } + } + } + } + } + Column { + spacing: 2 + width: parent.width + Rectangle { + // button + height: 50; width: parent.width + color: mouseArea.pressed ? "black" : "lightgray" + Column { + anchors.centerIn: parent + Text { + text: root.mirror ? "Mirrored" : "Normal" + color: "white" + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "(click here)" + color: "white" + font.pixelSize: 10 + font.italic: true + anchors.horizontalCenter: parent.horizontalCenter + } + } + MouseArea { + id: mouseArea + property int index: 0 + anchors.fill: parent + onClicked: root.mirror = !root.mirror + } + } + Rectangle { + // button + height: 50; width: parent.width + color: mouseArea2.pressed ? "black" : "gray" + Column { + anchors.centerIn: parent + Text { + text: { + if (root.horizontalAlignment == undefined) + return "Implict alignment"; + switch (root.horizontalAlignment) { + case Text.AlignLeft: + return "Left alignment"; + case Text.AlignRight: + return "Right alignment"; + case Text.AlignHCenter: + return "Center alignment"; + case Text.AlignJustify: + return "Justify alignment"; + } + } + color: "white" + font.pixelSize: 16 + anchors.horizontalCenter: parent.horizontalCenter + } + Text { + text: "(click here)" + color: "white" + font.pixelSize: 10 + font.italic: true + anchors.horizontalCenter: parent.horizontalCenter + } + } + MouseArea { + id: mouseArea2 + property int index: 0 + anchors.fill: parent + onClicked: { + if (index < 0) { + root.horizontalAlignment = undefined; + } else { + root.horizontalAlignment = Math.pow(2, index); + } + index = (index + 2) % 5 - 1; + } + } + } + } + } + + Component { + id: plainTextComponent + Text { + width: 180 + text: root.text[index] + font.pixelSize: 24 + wrapMode: Text.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + textFormat: Text.RichText + Rectangle { + z: -1 + color: Qt.rgba(0.8, 0.2, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: styledTextComponent + Text { + width: 180 + text: root.text[index] + font.pixelSize: 24 + wrapMode: Text.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + textFormat: Text.RichText + style: Text.Sunken + styleColor: "white" + Rectangle { + z: -1 + color: Qt.rgba(0.8, 0.2, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: richTextComponent + Text { + width: 180 + text: root.text[index] + font.pixelSize: 24 + wrapMode: Text.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + textFormat: Text.RichText + Rectangle { + z: -1 + color: Qt.rgba(0.8, 0.2, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: italicRichTextComponent + Text { + width: 180 + text: "<i>" + root.text[index] + "</i>" + font.pixelSize: 24 + wrapMode: Text.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + textFormat: Text.RichText + property variant backgroundColor: Qt.rgba(0.8, 0.2, 0.2, 0.3) + Rectangle { + z: -1 + color: parent.backgroundColor + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: plainTextEdit + TextEdit { + width: 180 + text: root.text[index] + font.pixelSize: 24 + cursorVisible: true + wrapMode: TextEdit.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + Rectangle { + z: -1 + color: Qt.rgba(0.5, 0.5, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: italicTextEdit + TextEdit { + width: 180 + text: "<i>" + root.text[index] + "<i>" + font.pixelSize: 24 + cursorVisible: true + wrapMode: TextEdit.WordWrap + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + Rectangle { + z: -1 + color: Qt.rgba(0.5, 0.5, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + + Component { + id: textInput + Item { + width: 180 + height: textInput.text.length > 20 ? 3*textInput.height : textInput.height + TextInput { + id: textInput + width: 180 + text: root.text[index] + font.pixelSize: 24 + cursorVisible: true + horizontalAlignment: root.horizontalAlignment + LayoutMirroring.enabled: root.mirror + Rectangle { + z: -1 + color: Qt.rgba(0.6, 0.4, 0.2, 0.3) + anchors.fill: parent + } + Text { + text: root.description[index] + color: Qt.rgba(1,1,1,1.0) + anchors.centerIn: parent + Rectangle { + z: -1 + color: Qt.rgba(0.3, 0, 0, 0.3) + anchors { fill: parent; margins: -3 } + } + } + Text { + color: "white" + text: shortText(parent.horizontalAlignment) + anchors { top: parent.top; right: parent.right; margins: 2 } + } + } + } + } +} + diff --git a/examples/declarative/righttoleft/textalignment/textalignment.qmlproject b/examples/declarative/righttoleft/textalignment/textalignment.qmlproject new file mode 100644 index 0000000..e526217 --- /dev/null +++ b/examples/declarative/righttoleft/textalignment/textalignment.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index c6de7a0..af18c90 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -399,10 +399,10 @@ bool QDeclarativeTextInputPrivate::setHAlign(QDeclarativeTextInput::HAlignment a if ((hAlign != alignment || forceAlign) && alignment <= QDeclarativeTextInput::AlignHCenter) { // justify not supported QDeclarativeTextInput::HAlignment oldEffectiveHAlign = q->effectiveHAlign(); hAlign = alignment; - return true; emit q->horizontalAlignmentChanged(alignment); if (oldEffectiveHAlign != q->effectiveHAlign()) emit q->effectiveHorizontalAlignmentChanged(); + return true; } return false; } -- cgit v0.12 From 25a2df08706679d89780fae9216508ef0f094221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Fri, 18 Mar 2011 12:53:28 +0100 Subject: Remove undefined symbol from tst_qwindowsurface. --- tests/auto/qwindowsurface/tst_qwindowsurface.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp index 4e3435e..b209258 100644 --- a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp +++ b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp @@ -66,7 +66,6 @@ private slots: void getSetWindowSurface(); void flushOutsidePaintEvent(); void grabWidget(); - void staticContentsAndPartialUpdateSupport(); }; class MyWindowSurface : public QWindowSurface -- cgit v0.12 From d164ca3dd62cb645767f332b7cddf07b400c8beb Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Fri, 18 Mar 2011 14:35:08 +0200 Subject: Add /q switch to QMAKE_DEL_FILE command in symbian Builds will otherwise halt without giving reason if a wildcard is given in QMAKE_CLEAN in symbian-abld. Task-number: QTBUG-18207 Reviewed-by: axis --- mkspecs/common/symbian/symbian.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index c16e4f1..eab9644 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -93,7 +93,7 @@ contains(QMAKE_HOST.os,Windows) { QMAKE_COPY = copy /y QMAKE_COPY_DIR = xcopy /s /q /y /i QMAKE_MOVE = move - QMAKE_DEL_FILE = del 2> NUL + QMAKE_DEL_FILE = del /q 2> NUL QMAKE_MKDIR = mkdir QMAKE_DEL_DIR = rmdir QMAKE_DEL_TREE = rmdir /s /q -- cgit v0.12 From c2317645b94f9a3004d76dda558c4a2b853a1489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Fri, 18 Mar 2011 14:24:03 +0100 Subject: Added setSwitchPolicy to MeeGo graphicssystem helper API. This lets the application control whether or not automatic switching should be used, and also to completely disable switching if desired. Reviewed-by: Armin Berres --- .../graphicssystems/meego/qmeegographicssystem.cpp | 19 ++++++++++++++----- .../graphicssystems/meego/qmeegographicssystem.h | 6 +++++- .../qmeegographicssystemhelper.cpp | 5 +++++ .../qmeegographicssystemhelper.h | 19 +++++++++++++++++++ tools/qmeegographicssystemhelper/qmeegoruntime.cpp | 13 ++++++++++++- tools/qmeegographicssystemhelper/qmeegoruntime.h | 3 +++ 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index cb66695..c904c3c 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -67,6 +67,8 @@ QHash <Qt::HANDLE, QPixmap*> QMeeGoGraphicsSystem::liveTexturePixmaps; QList<QMeeGoSwitchCallback> QMeeGoGraphicsSystem::switchCallbacks; +QMeeGoGraphicsSystem::SwitchPolicy QMeeGoGraphicsSystem::switchPolicy = QMeeGoGraphicsSystem::AutomaticSwitch; + QMeeGoGraphicsSystem::QMeeGoGraphicsSystem() { qDebug("Using the meego graphics system"); @@ -122,14 +124,14 @@ void QMeeGoGraphicsSystemSwitchHandler::addWidget(QWidget *widget) void QMeeGoGraphicsSystemSwitchHandler::handleMapNotify() { - if (m_widgets.isEmpty()) + if (m_widgets.isEmpty() && QMeeGoGraphicsSystem::switchPolicy == QMeeGoGraphicsSystem::AutomaticSwitch) QTimer::singleShot(0, this, SLOT(switchToMeeGo())); } void QMeeGoGraphicsSystemSwitchHandler::removeWidget(QObject *object) { m_widgets.removeOne(static_cast<QWidget *>(object)); - if (m_widgets.isEmpty()) + if (m_widgets.isEmpty() && QMeeGoGraphicsSystem::switchPolicy == QMeeGoGraphicsSystem::AutomaticSwitch) QTimer::singleShot(0, this, SLOT(switchToRaster())); } @@ -153,7 +155,9 @@ int QMeeGoGraphicsSystemSwitchHandler::visibleWidgets() const bool QMeeGoGraphicsSystemSwitchHandler::eventFilter(QObject *object, QEvent *event) { - if (event->type() == QEvent::WindowStateChange) { + if (event->type() == QEvent::WindowStateChange + && QMeeGoGraphicsSystem::switchPolicy == QMeeGoGraphicsSystem::AutomaticSwitch) + { QWindowStateChangeEvent *change = static_cast<QWindowStateChangeEvent *>(event); QWidget *widget = static_cast<QWidget *>(object); @@ -380,7 +384,7 @@ QString QMeeGoGraphicsSystem::runningGraphicsSystemName() void QMeeGoGraphicsSystem::switchToMeeGo() { - if (meeGoRunning()) + if (switchPolicy == NoSwitch || meeGoRunning()) return; if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) @@ -397,7 +401,7 @@ void QMeeGoGraphicsSystem::switchToMeeGo() void QMeeGoGraphicsSystem::switchToRaster() { - if (runningGraphicsSystemName() == QLatin1String("raster")) + if (switchPolicy == NoSwitch || runningGraphicsSystemName() == QLatin1String("raster")) return; if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) @@ -522,4 +526,9 @@ void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback) QMeeGoGraphicsSystem::registerSwitchCallback(callback); } +void qt_meego_set_switch_policy(int policy) +{ + QMeeGoGraphicsSystem::switchPolicy = QMeeGoGraphicsSystem::SwitchPolicy(policy); +} + #include "qmeegographicssystem.moc" diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h index ecc85b2..3528425 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.h +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h @@ -52,6 +52,8 @@ extern "C" typedef void (*QMeeGoSwitchCallback)(int type, const char *name); class QMeeGoGraphicsSystem : public QGraphicsSystem { public: + enum SwitchPolicy { AutomaticSwitch, ManualSwitch, NoSwitch }; + QMeeGoGraphicsSystem(); ~QMeeGoGraphicsSystem(); @@ -84,6 +86,8 @@ public: static void registerSwitchCallback(QMeeGoSwitchCallback callback); + static SwitchPolicy switchPolicy; + private: static bool meeGoRunning(); static EGLSurface getSurfaceForLiveTexturePixmap(QPixmap *pixmap); @@ -93,7 +97,6 @@ private: static bool surfaceWasCreated; static QHash<Qt::HANDLE, QPixmap*> liveTexturePixmaps; static QList<QMeeGoSwitchCallback> switchCallbacks; - }; /* C api */ @@ -118,6 +121,7 @@ extern "C" { Q_DECL_EXPORT void qt_meego_switch_to_raster(void); Q_DECL_EXPORT void qt_meego_switch_to_meego(void); Q_DECL_EXPORT void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback); + Q_DECL_EXPORT void qt_meego_set_switch_policy(int policy); } #endif diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp index 3f39bda..6778bd5 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp @@ -136,6 +136,11 @@ void QMeeGoGraphicsSystemHelper::setSwapBehavior(SwapMode mode) QGLWindowSurface::swapBehavior = QGLWindowSurface::KillSwap; } +void QMeeGoGraphicsSystemHelper::setSwitchPolicy(SwitchPolicy policy) +{ + QMeeGoRuntime::setSwitchPolicy(policy); +} + void QMeeGoGraphicsSystemHelper::enableSwitchEvents() { QMeeGoRuntime::enableSwitchEvents(); diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index 9e50652..4612190 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -112,6 +112,7 @@ public: If switch events are enabled, two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) and one after the switch (QMeeGoSwitchEvent::DidSwitch). + If the switch policy is set to NoSwitch, this function has no effect. */ static void switchToMeeGo(); @@ -124,9 +125,27 @@ public: Calling this function will emit QMeeGoSwitchEvent to the top level widgets. If switch events are enabled, two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) and one after the switch (QMeeGoSwitchEvent::DidSwitch). + If the switch policy is set to NoSwitch, this function has no effect. */ static void switchToRaster(); + //! Used to specify the policy for graphics system switching. + enum SwitchPolicy { + AutomaticSwitch, /**< Automatic switching */ + ManualSwitch, /**< Switching is controleld by the application */ + NoSwitch /**< Switching is disabled completely */ + }; + + //! Sets the policy of graphicssystem switching + /*! + By default, the switch to raster happens automatically when all windows are either + minimized or when the last window is destroyed. This function lets the application + change the graphicssystem switching policy to prevent the switching from happening + automatically (that is if the application doesn't want switching at all or wishes + to control the switching manually). + */ + static void setSwitchPolicy(SwitchPolicy policy); + //! Returns the name of the active graphics system /*! Returns the name of the currently active system. If running with 'runtime' graphics diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp index 15f9cdf..928d01a 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp @@ -75,6 +75,7 @@ typedef void (*QMeeGoInvalidateLiveSurfacesFunc) (void); typedef void (*QMeeGoSwitchToRasterFunc) (void); typedef void (*QMeeGoSwitchToMeeGoFunc) (void); typedef void (*QMeeGoRegisterSwitchCallbackFunc) (void (*callback)(int type, const char *name)); +typedef void (*QMeeGoSetSwitchPolicyFunc) (int policy); static QMeeGoImageToEglSharedImageFunc qt_meego_image_to_egl_shared_image = NULL; static QMeeGoPixmapDataFromEglSharedImageFunc qt_meego_pixmapdata_from_egl_shared_image = NULL; @@ -95,6 +96,7 @@ static QMeeGoInvalidateLiveSurfacesFunc qt_meego_invalidate_live_surfaces = NULL static QMeeGoSwitchToRasterFunc qt_meego_switch_to_raster = NULL; static QMeeGoSwitchToMeeGoFunc qt_meego_switch_to_meego = NULL; static QMeeGoRegisterSwitchCallbackFunc qt_meego_register_switch_callback = NULL; +static QMeeGoSetSwitchPolicyFunc qt_meego_set_switch_policy = NULL; extern "C" void handleSwitch(int type, const char *name) { @@ -134,6 +136,7 @@ void QMeeGoRuntime::initialize() qt_meego_switch_to_raster = (QMeeGoSwitchToRasterFunc) library.resolve("qt_meego_switch_to_raster"); qt_meego_switch_to_meego = (QMeeGoSwitchToMeeGoFunc) library.resolve("qt_meego_switch_to_meego"); qt_meego_register_switch_callback = (QMeeGoRegisterSwitchCallbackFunc) library.resolve("qt_meego_register_switch_callback"); + qt_meego_set_switch_policy = (QMeeGoSetSwitchPolicyFunc) library.resolve("qt_meego_set_switch_policy"); if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_with_gl_texture && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap && @@ -141,7 +144,8 @@ void QMeeGoRuntime::initialize() qt_meego_pixmapdata_with_new_live_texture && qt_meego_pixmapdata_from_live_texture_handle && qt_meego_live_texture_lock && qt_meego_live_texture_release && qt_meego_live_texture_get_handle && qt_meego_create_fence_sync && qt_meego_destroy_fence_sync && qt_meego_invalidate_live_surfaces && - qt_meego_switch_to_raster && qt_meego_switch_to_meego && qt_meego_register_switch_callback) + qt_meego_switch_to_raster && qt_meego_switch_to_meego && qt_meego_register_switch_callback && + qt_meego_set_switch_policy) { qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion)); } else { @@ -289,3 +293,10 @@ void QMeeGoRuntime::enableSwitchEvents() switchEventsEnabled = true; } } + +void QMeeGoRuntime::setSwitchPolicy(QMeeGoGraphicsSystemHelper::SwitchPolicy policy) +{ + ENSURE_INITIALIZED; + Q_ASSERT(qt_meego_set_switch_policy); + qt_meego_set_switch_policy(int(policy)); +} diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h index 6279b4c..b898699 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.h +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h @@ -42,6 +42,8 @@ #include <QPixmap> #include <QImage> +#include "qmeegographicssystemhelper.h" + class QMeeGoRuntime { public: @@ -66,6 +68,7 @@ public: static void switchToRaster(); static void switchToMeeGo(); static void enableSwitchEvents(); + static void setSwitchPolicy(QMeeGoGraphicsSystemHelper::SwitchPolicy policy); private: static bool initialized; -- cgit v0.12 From 59373dd338cb9428514b67c21d0e03b8dc189eef Mon Sep 17 00:00:00 2001 From: Gareth Stockwell <gareth.stockwell@accenture.com> Date: Fri, 18 Mar 2011 10:21:26 +0000 Subject: Fixed unmatched quotes in s60installs.pro Reviewed-by: Miikka Heikkinen --- src/s60installs/s60installs.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 1e5ce0f..76f1dda 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -58,7 +58,7 @@ symbian: { " \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\"" \ " \"$$bearerPluginLocation/qsymbianbearer$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qsymbianbearer$${QT_LIBINFIX}.dll\"" \ "ENDIF" \ - " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\" + " \"$$bearerStubZ\" - \"c:$$replace(QT_PLUGINS_BASE_DIR,/,\\)\\bearer\\qsymbianbearer$${QT_LIBINFIX}.qtplugin\"" } else { # No need to deploy plugins for older platform versions when building on Symbian3 or later qts60plugindeployment = \ -- cgit v0.12 From 31514ab488c610056973318f5a950d925155d480 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell <ext-gareth.stockwell@nokia.com> Date: Wed, 16 Mar 2011 15:53:45 +0000 Subject: Add flag for forcibly propagating backing store alpha to framebuffer Previously, the following rules applies to the creation and blitting of the Symbian raster backing store: 1. Creation of backing store with an alpha channel: Backing store has an alpha channel only if !QWidget::isOpaque. 2. Pre-filling of backing store prior to paint loop: Backing store is filled with transparent pixels if !QWidget::isOpaque. 3. Blitting of backing store: CGraphicsContext::EDrawModeWriteAlpha is used (meaning that backing store alpha values are propagated into the frame buffer), if QWidget::isOpaque. In order for the direct camera viewfinder to be visible on DSA devices, alpha=0 must be written into the framebuffer in the region where the viewfinder will be displayed. This requires a backing store with an alpha channel (1), use of CGraphicsContext::EDrawModeWriteAlpha (3), but not pre-filling of the entire backing store (2). This patch adds a new enum value, QWExtra::BlitWriteAlpha, which can be used by camera backends to achieve the desired behaviour. Task-number: QTMOBILITY-1278 Reviewed-by: Jani Hautakangas --- src/gui/kernel/qapplication_s60.cpp | 3 ++- src/gui/kernel/qwidget_p.h | 5 +++++ src/gui/kernel/qwidget_s60.cpp | 10 +++++++--- src/gui/painting/qwindowsurface_s60.cpp | 28 +++++++++++++++++++--------- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 43b9b01..2b10d63 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1132,7 +1132,8 @@ void QSymbianControl::Draw(const TRect& controlRect) const // Do nothing break; case QWExtra::Blit: - if (qwidget->d_func()->isOpaque) + case QWExtra::BlitWriteAlpha: + if (qwidget->d_func()->isOpaque || nativePaintMode == QWExtra::BlitWriteAlpha) gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha); gc.BitBlt(controlRect.iTl, bitmap, backingStoreRect); break; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 5235dc4..13e2349 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -315,6 +315,11 @@ struct QWExtra { */ ZeroFill, + /** + * Blit backing store, propagating alpha channel into the framebuffer. + */ + BlitWriteAlpha, + Default = Blit }; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 62d09fe..b65ae4d 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -805,9 +805,14 @@ void QWidgetPrivate::s60UpdateIsOpaque() { Q_Q(QWidget); - if (!q->testAttribute(Qt::WA_WState_Created) || !q->testAttribute(Qt::WA_TranslucentBackground)) + if (!q->testAttribute(Qt::WA_WState_Created)) return; + const bool writeAlpha = extraData()->nativePaintMode == QWExtra::BlitWriteAlpha; + if (!q->testAttribute(Qt::WA_TranslucentBackground) && !writeAlpha) + return; + const bool requireAlphaChannel = !isOpaque || writeAlpha; + createTLExtra(); RWindow *const window = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow()); @@ -819,12 +824,11 @@ void QWidgetPrivate::s60UpdateIsOpaque() return; } #endif - if (!isOpaque) { + if (requireAlphaChannel) { const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); if (window->SetTransparencyAlphaChannel() == KErrNone) { window->SetBackgroundColor(TRgb(255, 255, 255, 0)); extra->topextra->nativeWindowTransparencyEnabled = 1; - if (extra->topextra->backingStore.data() && ( QApplicationPrivate::graphics_system_name == QLatin1String("openvg") || QApplicationPrivate::graphics_system_name == QLatin1String("opengl"))) { diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp index 9f371a8..cb53ea0 100644 --- a/src/gui/painting/qwindowsurface_s60.cpp +++ b/src/gui/painting/qwindowsurface_s60.cpp @@ -63,7 +63,6 @@ struct QS60WindowSurfacePrivate TDisplayMode displayMode(bool opaque) { - TDisplayMode mode = S60->screenDevice()->DisplayMode(); if (opaque) { mode = EColor16MU; @@ -76,10 +75,18 @@ TDisplayMode displayMode(bool opaque) return mode; } +bool blitWriteAlpha(QWidgetPrivate *widgetPrivate) +{ + QWExtra *extra = widgetPrivate->extraData(); + return extra ? extra->nativePaintMode == QWExtra::BlitWriteAlpha : false; +} + QS60WindowSurface::QS60WindowSurface(QWidget* widget) : QWindowSurface(widget), d_ptr(new QS60WindowSurfacePrivate) { - TDisplayMode mode = displayMode(qt_widget_private(widget)->isOpaque); + QWidgetPrivate *widgetPrivate = qt_widget_private(widget); + const bool opaque = widgetPrivate->isOpaque && !blitWriteAlpha(widgetPrivate); + TDisplayMode mode = displayMode(opaque); // We create empty CFbsBitmap here -> it will be resized in setGeometry CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap); // CBase derived object needs check on new qt_symbian_throwIfError( bitmap->Create( TSize(0, 0), mode ) ); @@ -123,7 +130,8 @@ void QS60WindowSurface::beginPaint(const QRegion &rgn) S60->wsSession().Finish(); #endif - if (!qt_widget_private(window())->isOpaque) { + QWidgetPrivate *windowPrivate = qt_widget_private(window()); + if (!windowPrivate->isOpaque || blitWriteAlpha(windowPrivate)) { QS60PixmapData *pixmapData = static_cast<QS60PixmapData *>(d_ptr->device.data_ptr().data()); TDisplayMode mode = displayMode(false); @@ -132,12 +140,14 @@ void QS60WindowSurface::beginPaint(const QRegion &rgn) pixmapData->beginDataAccess(); - QPainter p(&pixmapData->image); - p.setCompositionMode(QPainter::CompositionMode_Source); - const QVector<QRect> rects = rgn.rects(); - const QColor blank = Qt::transparent; - for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) { - p.fillRect(*it, blank); + if (!windowPrivate->isOpaque) { + QPainter p(&pixmapData->image); + p.setCompositionMode(QPainter::CompositionMode_Source); + const QVector<QRect> rects = rgn.rects(); + const QColor blank = Qt::transparent; + for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) { + p.fillRect(*it, blank); + } } pixmapData->endDataAccess(); -- cgit v0.12 From af760349e083c0d9719733abe5f39f35ff02f81c Mon Sep 17 00:00:00 2001 From: Joerg Bornemann <joerg.bornemann@nokia.com> Date: Fri, 18 Mar 2011 19:21:11 +0100 Subject: qmake vcproj generator: do not insert $(INHERIT) This will remove the warnings about undefined environment variables when building with IncrediBuild. The $(INHERIT) feature does not work in the "Create PCH through file" property of Visual Studio. It expands to an empty string but doesn't yield a warning in a standard VS build. Also, the value of "Create PCH through file" is supposed to be exactly the string as in the include statement of the cpp file. Done-with: Marius Storm-Olsen --- qmake/generators/win32/msvc_objectmodel.cpp | 8 ++++---- qmake/generators/win32/msvc_objectmodel.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 020c3d8..815a476 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -355,7 +355,7 @@ VCCLCompilerTool::VCCLCompilerTool() TreatWChar_tAsBuiltInType(unset), TurnOffAssemblyGeneration(unset), UndefineAllPreprocessorDefinitions(unset), - UsePrecompiledHeader(pchNone), + UsePrecompiledHeader(pchUnset), UseUnicodeForAssemblerListing(unset), WarnAsError(unset), WarningLevel(warningLevel_0), @@ -389,7 +389,7 @@ inline XmlOutput::xml_output xformUsePrecompiledHeaderForNET2005(pchOption whatP if (whatPch == pchGenerateAuto) whatPch = (pchOption)0; if (whatPch == pchUseUsingSpecific) whatPch = (pchOption)2; } - return attrE(_UsePrecompiledHeader, whatPch); + return attrE(_UsePrecompiledHeader, whatPch, /*ifNot*/ pchUnset); } inline XmlOutput::xml_output xformExceptionHandlingNET2005(exceptionHandling eh, DotNET compilerVersion) @@ -2146,7 +2146,7 @@ void VCFilter::modifyPCHstage(QString str) useCompilerTool = true; // Setup PCH options CompilerTool.UsePrecompiledHeader = (isCFile ? pchNone : pchCreateUsingSpecific); - CompilerTool.PrecompiledHeaderThrough = (isCPPFile ? QString("$(INHERIT)") : QString("$(NOINHERIT)")); + CompilerTool.PrecompiledHeaderThrough = (isCPPFile ? Project->precompHFilename : QString("$(NOINHERIT)")); CompilerTool.ForcedIncludeFiles = QStringList("$(NOINHERIT)"); } @@ -2514,7 +2514,7 @@ void VCProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool) << attrT(_TurnOffAssemblyGeneration, tool.TurnOffAssemblyGeneration) << attrT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions) << attrX(_UndefinePreprocessorDefinitions, tool.UndefinePreprocessorDefinitions) - << (!tool.PrecompiledHeaderFile.isEmpty() || !tool.PrecompiledHeaderThrough.isEmpty() ? xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) : noxml()) + << xformUsePrecompiledHeaderForNET2005(tool.UsePrecompiledHeader, tool.config->CompilerVersion) << attrT(_WarnAsError, tool.WarnAsError) << attrE(_WarningLevel, tool.WarningLevel, /*ifNot*/ warningLevelUnknown) << attrT(_WholeProgramOptimization, tool.WholeProgramOptimization) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 5431ce0..3e62fb4 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -366,6 +366,7 @@ enum optLinkTimeCodeGenType { optLTCGUpdate }; enum pchOption { + pchUnset = -1, pchNone, pchCreateUsingSpecific, pchGenerateAuto, -- cgit v0.12 From 9f99d85769b3c1c68dd8c9fd9afa1f09c9eeb2e9 Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Mon, 21 Mar 2011 10:28:29 +1000 Subject: Fix license headers in example code Change-Id: I510caf92c2e33df2bb44d87cc07fe78a0823ab5f --- doc/src/snippets/declarative/righttoleft/Child.qml | 42 +++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/doc/src/snippets/declarative/righttoleft/Child.qml b/doc/src/snippets/declarative/righttoleft/Child.qml index 2b3564e..48cb295 100644 --- a/doc/src/snippets/declarative/righttoleft/Child.qml +++ b/doc/src/snippets/declarative/righttoleft/Child.qml @@ -1,3 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + import QtQuick 1.0 Rectangle { @@ -8,4 +48,4 @@ Rectangle { text: String.fromCharCode(65 + Math.floor(26*Math.random())) anchors.centerIn: parent } -} \ No newline at end of file +} -- cgit v0.12 From 40db21b1d8a020291f0a0660d30491b49f49885b Mon Sep 17 00:00:00 2001 From: Bea Lam <bea.lam@nokia.com> Date: Mon, 21 Mar 2011 13:20:36 +1000 Subject: fixes/improvements for new QML right-to-left docs Clarify some of the docs and fix some broken doc links. --- doc/src/declarative/pics/layoutmirroring.png | Bin 0 -> 2542 bytes doc/src/declarative/righttoleft.qdoc | 105 +++++++++++---------- doc/src/declarative/whatsnew.qdoc | 2 +- doc/src/examples/qml-examples.qdoc | 6 ++ .../qml-righttoleft-layoutdirection-example.png | Bin 20945 -> 23327 bytes .../qml-righttoleft-layoutmirroring-example.png | Bin 31901 -> 38982 bytes doc/src/snippets/declarative/layoutmirroring.qml | 13 ++- doc/src/snippets/declarative/righttoleft.qml | 27 +++--- .../layoutdirection/layoutdirection.qml | 6 +- .../layoutmirroring/layoutmirroring.qml | 6 +- .../righttoleft/textalignment/textalignment.qml | 6 +- src/declarative/graphicsitems/qdeclarativeitem.cpp | 67 ++++++++----- .../graphicsitems/qdeclarativepositioners.cpp | 22 ++--- 13 files changed, 152 insertions(+), 108 deletions(-) create mode 100644 doc/src/declarative/pics/layoutmirroring.png diff --git a/doc/src/declarative/pics/layoutmirroring.png b/doc/src/declarative/pics/layoutmirroring.png new file mode 100644 index 0000000..df90ac4 Binary files /dev/null and b/doc/src/declarative/pics/layoutmirroring.png differ diff --git a/doc/src/declarative/righttoleft.qdoc b/doc/src/declarative/righttoleft.qdoc index 710855d..7db6136 100644 --- a/doc/src/declarative/righttoleft.qdoc +++ b/doc/src/declarative/righttoleft.qdoc @@ -27,7 +27,6 @@ /*! \page qml-righttoleft.html -\target righttoleft \title QML Right-to-left User Interfaces \section1 Overview @@ -39,104 +38,114 @@ is properly aligned to the right, and horizontally ordered content in views, lis correctly from the right to left. In right-to-left language speaking cultures, people naturally scan and read graphic elements and text -from the right to left. General rule of thumb is that the content like photos, videos, maps is not -mirrored, but positioning of the content is, like application layouts and the flow of visual elements. -Common use cases include photos shown in chronological order should flow right-to-left, the -low end range of the horizontal sliders should be located at the right side of the slider, and the -text lines should should be aligned to the right side of the available area. The location of visual -elements should not be mirrored when the position is related to a content, for example when a +from the right to left. The general rule of thumb is that content (like photos, videos and maps) is not +mirrored, but positioning of the content (like application layouts and the flow of visual elements) is +mirrored. For example, photos shown in chronological order should flow from right to left, the +low end range of the horizontal sliders should be located at the right side of the slider, and +text lines should should be aligned to the right side of the available text area. The location of visual +elements should not be mirrored when the position is related to a content; for example, when a position marker is shown to indicate a location on a map. Also, there are some special cases you may -need to take into account where the right-to-left language speakers are used to the left-to-right +need to take into account where right-to-left language speakers are used to left-to-right positioning, for example when using number dialers in phones and media play, pause, rewind and forward buttons in music players. \section1 Text Alignment -Applies to \l Text, \l TextInput and \l TextEdit. +(This applies to the \l Text, \l TextInput and \l TextEdit elements.) -When the horizontal alignment of the text item is not explicitly set, the text element will be +When the horizontal alignment of a text item is not explicitly set, the text element is automatically aligned to the natural reading direction of the text. By default left-to-right text like English is aligned to the left side of the text area, and right-to-left text like Arabic is aligned to the right side of the text area. The alignment of a text element with empty text takes -it's alignment cue from \l QApplication::keyboardInputDirection(), which is based on the active -system locale. Explicitly setting property \c horizontalAlignment for the text will override any -implicit locale-based alignment. Enabling layout mirroring using attached property -\l LayoutMirroring causes any explicit left and right horizontal alignments to be mirrored. -Note that \c horizontalAlignment property itself will remain unchanged. The effective alignment of -the text element that takes the mirroring into account can be read from the +its alignment cue from \l QApplication::keyboardInputDirection(), which is based on the active +system locale. + +This default locale-based alignment can be overriden by setting the \c horizontalAlignment +property for the text element, or by enabling layout mirroring using the \l LayoutMirroring attached +property, which causes any explicit left and right horizontal alignments to be mirrored. +Note that when \l LayoutMirroring is set, the \c horizontalAlignment property value remains unchanged; +the effective alignment of the text element that takes the mirroring into account can be read from the \c effectiveHorizontalAlignment property. \snippet doc/src/snippets/declarative/righttoleft.qml 0 \section1 Layout direction of positioners and views -Applies to \l Row, \l Grid, \l Flow, \l ListView and \l GridView +(This applies to the \l Row, \l Grid, \l Flow, \l ListView and \l GridView elements.) -From Qt Quick 1.1 onwards horizontal positioners and model views have gained a \c layoutDirection +From Qt Quick 1.1 onwards, elements used for horizontal positioning and model views have gained a \c layoutDirection property for controlling the horizontal direction of the layouts. Setting \c layoutDirection to \c Qt.RightToLeft causes items to be laid out from the right to left. By default Qt Quick follows the left-to-right layout direction. -Enabling application layout mirroring using attached property \c LayoutMirroring causes the effective -\c layoutDirection of positioners and views to be mirrored. Note that actual value of \c layoutDirection -property will remain unchanged. The effective layout direction of positioners and views that takes the mirroring into account can be read from the \c effectiveLayoutDirection property. +The horizontal layout direction can also be reversed through the \l LayoutMirroring attached property. +This causes the effective \c layoutDirection of positioners and views to be mirrored. Note the actual value +of the \c layoutDirection property will remain unchanged; the effective layout direction of positioners and +views that takes the mirroring into account can be read from the \c effectiveLayoutDirection property. \snippet doc/src/snippets/declarative/righttoleft.qml 1 \section1 Layout mirroring -Attached property \l LayoutMirroring is provided as a convenience for easily implementing right-to-left +The attached property \l LayoutMirroring is provided as a convenience for easily implementing right-to-left support for existing left-to-right Qt Quick applications. It mirrors the behavior of \l {anchor-layout} {Item anchors}, the layout direction of \l{Using QML Positioner and Repeater Items}{positioners} and -model views and the explicit text alignment of QML text elements. +model views, and the explicit text alignment of QML text elements. -You can enable layout mirroring for a particular Item +You can enable layout mirroring for a particular \l Item: \snippet doc/src/snippets/declarative/righttoleft.qml 2 -or make all children elements also inherit the layout direction +Or set all child elements to also inherit the layout direction: \snippet doc/src/snippets/declarative/righttoleft.qml 3 -Mirroring does not change the return value of the layout direction and horizontal alignment properties. -Separate read-only property \c effectiveLayoutDirection can be used to query the effective layout -direction of positioners and model views that takes the mirroring into account. Similarly \c Text, -\c TextInput and \c TextEdit elements have gained read-only property \c effectiveHorizontalAlignment -for querying what is the effective visual alignment of text. - -\c LayoutMirroring doesn't alter application layouts and animations done by using the \l x coordinate -directly. Adding right-to-left support to those layouts requires some code changes to your application, -especially in views that rely on both the anchors and x coordinate-based positioning. +Applying mirroring in this manner does not change the actual value of the relevant anchor, +\c layoutDirection or \c horizontalAlignment properties. The separate read-only property +\c effectiveLayoutDirection can be used to query the effective layout +direction of positioners and model views that takes the mirroring into account. Similarly the \l Text, +\l TextInput and \l TextEdit elements have gained the read-only property \c effectiveHorizontalAlignment +for querying the effective visual alignment of text. For anchors, the read only +\l {Item::anchors}{anchors.mirrored} property reflects whether anchors have been mirrored. + +Note that application layouts and animations that are defined using \l {Item::}{x} property values (as +opposed to anchors or positioner elements) are not affected by the \l LayoutMirroring attached property. +Therefore, adding right-to-left support to these types of layouts may require some code changes to your application, +especially in views that rely on both the anchors and x coordinate-based positioning. Here is one way to use +the \l LayoutMirroring attached property to apply mirroring to an item that is positioned using \l {Item::}{x} +coordinates: \snippet doc/src/snippets/declarative/righttoleft.qml 4 -Not all the layouts should be mirrored. There are cases where the visual element is positioned to -the right side of the screen for better one-handed use, because most people are right-handed, and not -because of the reading direction. In the case that a child element needs to be unaffected by the mirroring, set the \c LayoutMirroring.enabled property for that element to false. Qt Quick is designed -for developing animated, fluid user interfaces. When mirroring your application, remember to test that -the animations and transitions continue to work as expected. If you don't have resources to add +Not all layouts should necessarily be mirrored. There are cases where a visual element is positioned to +the right side of the screen for improved one-handed use, because most people are right-handed, and not +because of the reading direction. In the case that a child element should not be affected by mirroring, +set the \l {LayoutMirroring::enabled}{LayoutMirroring.enabled} property for that element to false. + +Qt Quick is designed for developing animated, fluid user interfaces. When mirroring your application, remember to test that +the animations and transitions continue to work as expected. If you do not have the resources to add right-to-left support for your application, it may be better to just keep the application layouts left aligned and just make sure that text is translated and aligned properly. \section1 Mirroring icons -Applies to \l Image, \l BorderImage, \l AnimatedImage +(This applies to \l Image, \l BorderImage and \l AnimatedImage elements.) -Most images don't need mirroring, but some directional icons should be mirrored. You can mirror the -painting of these icons with a dedicated \l mirror property introduced in Qt Quick 1.1. +Most images do not need to be mirrored, but some directional icons, such as arrows, may need to be mirrored. +The painting of these icons can be mirrored with a dedicated \c mirror property introduced in Qt Quick 1.1: \snippet doc/src/snippets/declarative/righttoleft.qml 5 \section1 Default layout direction -Property \l Qt.application.layoutDirection can be used to query the active layout direction of the +The \l {QML:Qt::application}{Qt.application.layoutDirection} property can be used to query the active layout direction of the application. It is based on QApplication::layoutDirection(), which most commonly determines the layout direction from the active language translation file. To define the layout direction for a particular locale, declare the dedicated string literal \c QT_LAYOUT_DIRECTION in context \c QApplication as either "LTR" or "RTL". -You can do this by first introducing line +You can do this by first introducing this line \code QT_TRANSLATE_NOOP("QApplication", "QT_LAYOUT_DIRECTION"); @@ -148,7 +157,7 @@ somewhere in your QML source code and calling \c lupdate to generate the transla lupdate myapp.qml -ts myapp.ts \endcode -This will append following declaration to the translation file, where you can fill either "LTR" or +This will append the following declaration to the translation file, where you can fill in either "LTR" or "RTL" as the translation for the locale. \code @@ -163,20 +172,20 @@ This will append following declaration to the translation file, where you can fi \endcode You can test that the layout direction works as expected by running your Qt Quick application with -the compiled translation file. +the compiled translation file: \code qmlviewer myapp.qml -translation myapp.qm \endcode You can test your application in right-to-left layout direction simply by executing qmlviewer with a -command-line parameter "-reverse". +command-line parameter "-reverse": \code qmlviewer myapp.qml -reverse \endcode -Layout direction can also be set from C++ by calling static function \l QApplication::setLayoutDirection(). +The layout direction can also be set from C++ by calling the static function \l QApplication::setLayoutDirection(): \code QApplication app(argc, argv); diff --git a/doc/src/declarative/whatsnew.qdoc b/doc/src/declarative/whatsnew.qdoc index 8d975c7..6eb1548 100644 --- a/doc/src/declarative/whatsnew.qdoc +++ b/doc/src/declarative/whatsnew.qdoc @@ -37,7 +37,7 @@ QtQuick 1.1 is a minor feature update. \e {import QtQuick 1.1} to use the new f PinchArea provides support for the common two finger pinch gesture. -\section2 LayoutMirroring +\section2 LayoutMirroring attached property \l {LayoutMirroring}{Layout mirroring} is useful when you need to support both left-to-right and right-to-left layout versions of your application that target different language areas. diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index 8f34a9f..3439b09 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -278,6 +278,8 @@ of the text and by the layout mirrroring. Click on the gray buttons shown at the bottom of the example to toggle between different horizontal alignment options. + + \sa {QML Right-to-left User Interfaces} */ /*! @@ -290,6 +292,8 @@ to toggle the layout direction of the shown elements. \image qml-righttoleft-layoutdirection-example.png + + \sa {QML Right-to-left User Interfaces} */ @@ -303,6 +307,8 @@ layout mirroring. \image qml-righttoleft-layoutmirroring-example.png + + \sa {QML Right-to-left User Interfaces} */ /*! diff --git a/doc/src/images/qml-righttoleft-layoutdirection-example.png b/doc/src/images/qml-righttoleft-layoutdirection-example.png index e8dd85c..381ecd7 100644 Binary files a/doc/src/images/qml-righttoleft-layoutdirection-example.png and b/doc/src/images/qml-righttoleft-layoutdirection-example.png differ diff --git a/doc/src/images/qml-righttoleft-layoutmirroring-example.png b/doc/src/images/qml-righttoleft-layoutmirroring-example.png index 2fa82ac..992c876 100644 Binary files a/doc/src/images/qml-righttoleft-layoutmirroring-example.png and b/doc/src/images/qml-righttoleft-layoutmirroring-example.png differ diff --git a/doc/src/snippets/declarative/layoutmirroring.qml b/doc/src/snippets/declarative/layoutmirroring.qml index 23eecd6..617f39d 100644 --- a/doc/src/snippets/declarative/layoutmirroring.qml +++ b/doc/src/snippets/declarative/layoutmirroring.qml @@ -43,18 +43,25 @@ import QtQuick 1.1 Rectangle { LayoutMirroring.enabled: true LayoutMirroring.childrenInherit: true - width: 240; height: 50 + + width: 300; height: 50 + color: "yellow" + border.width: 1 + Row { anchors { left: parent.left; margins: 5 } y: 5; spacing: 5 + Repeater { model: 5 + Rectangle { color: "red" - opacity: (5-index) / 5 + opacity: (5 - index) / 5 width: 40; height: 40 + Text { - text: index+1 + text: index + 1 anchors.centerIn: parent } } diff --git a/doc/src/snippets/declarative/righttoleft.qml b/doc/src/snippets/declarative/righttoleft.qml index 5d34f50..c2e504a 100644 --- a/doc/src/snippets/declarative/righttoleft.qml +++ b/doc/src/snippets/declarative/righttoleft.qml @@ -44,13 +44,13 @@ import "righttoleft" Column { width: 200 //![0] -// aligned to the left +// automatically aligned to the left Text { text: "Phone" width: 200 } -// aligned to the right +// automatically aligned to the right Text { text: "خامل" width: 200 @@ -73,20 +73,20 @@ Text { //![0] //![1] -// by default positions child items from the left to right +// by default child items are positioned from left to right Row { Child {} Child {} } -// positions child items from the right to left +// position child items from right to left Row { layoutDirection: Qt.RightToLeft Child {} Child {} } -// positions child items from the left to right +// position child items from left to right Row { LayoutMirroring.enabled: true layoutDirection: Qt.RightToLeft @@ -97,12 +97,13 @@ Row { //![2] Item { - // anchor left becomes right height: 50; width: 150 + LayoutMirroring.enabled: true - anchors.left: parent.left + anchors.left: parent.left // anchor left becomes right + Row { - // flows from the left to right + // items flow from left to right (as per default) Child {} Child {} Child {} @@ -112,13 +113,15 @@ Item { //![3] Item { - // anchor left becomes right height: 50; width: 150 + LayoutMirroring.enabled: true LayoutMirroring.childrenInherit: true - anchors.left: parent.left + anchors.left: parent.left // anchor left becomes right + Row { - // flows from the right to left + // setting childrenInherit in the parent causes these + // items to flow from right to left instead Child {} Child {} Child {} @@ -143,4 +146,4 @@ Image { mirror: true } //![5] -} \ No newline at end of file +} diff --git a/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml index ff641d7..b4efebe 100644 --- a/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml +++ b/examples/declarative/righttoleft/layoutdirection/layoutdirection.qml @@ -161,7 +161,7 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter } Text { - text: "(click here)" + text: "(click here to toggle)" color: "white" font.pixelSize: 10 font.italic: true @@ -187,13 +187,13 @@ Rectangle { Column { anchors.centerIn: parent Text { - text: root.mirror ? "Mirrored" : "Normal" + text: root.mirror ? "Mirrored" : "Not mirrored" color: "white" font.pixelSize: 16 anchors.horizontalCenter: parent.horizontalCenter } Text { - text: "(click here)" + text: "(click here to toggle)" color: "white" font.pixelSize: 10 font.italic: true diff --git a/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml index 25fa52b..0d1b871 100644 --- a/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml +++ b/examples/declarative/righttoleft/layoutmirroring/layoutmirroring.qml @@ -47,7 +47,7 @@ Rectangle { LayoutMirroring.childrenInherit: true width: 400 height: 875 - color: "lightblue" + color: "lightsteelblue" Column { spacing: 10 @@ -287,13 +287,13 @@ Rectangle { Column { anchors.centerIn: parent Text { - text: root.mirror ? "Mirrored" : "Normal" + text: root.mirror ? "Mirrored" : "Not mirrored" color: "white" font.pixelSize: 16 anchors.horizontalCenter: parent.horizontalCenter } Text { - text: "(click here)" + text: "(click here to toggle)" color: "white" font.pixelSize: 10 font.italic: true diff --git a/examples/declarative/righttoleft/textalignment/textalignment.qml b/examples/declarative/righttoleft/textalignment/textalignment.qml index 90168de..4c40c3c 100644 --- a/examples/declarative/righttoleft/textalignment/textalignment.qml +++ b/examples/declarative/righttoleft/textalignment/textalignment.qml @@ -115,13 +115,13 @@ Rectangle { Column { anchors.centerIn: parent Text { - text: root.mirror ? "Mirrored" : "Normal" + text: root.mirror ? "Mirrored" : "Not mirrored" color: "white" font.pixelSize: 16 anchors.horizontalCenter: parent.horizontalCenter } Text { - text: "(click here)" + text: "(click here to toggle)" color: "white" font.pixelSize: 10 font.italic: true @@ -161,7 +161,7 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter } Text { - text: "(click here)" + text: "(click here to toggle)" color: "white" font.pixelSize: 10 font.italic: true diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 9cf1e78..4af91ce 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -746,44 +746,63 @@ void QDeclarativeKeyNavigationAttached::setFocusNavigation(QDeclarativeItem *cur \qmlclass LayoutMirroring QDeclarativeLayoutMirroringAttached \since QtQuick 1.1 \ingroup qml-utility-elements - \brief The LayoutMirroring is used for mirroring the Qt Quick application layouts. + \brief The LayoutMirroring attached property is used to mirror layout behavior. - LayoutMirroring \l enabled property can be used to horizontally mirror \l {anchor-layout}{Item anchors}, - \l{Using QML Positioner and Repeater Items}{Positioner} elements and QML views like \l {GridView}{GridView} - and horizontal \l {ListView}{ListView}. Mirroring is a visual change, left anchors will become - right anchors and left-to-right positioner will instead position child items from right to left. - By default setting the \l enabled property to true only affects the item in question. You can set property - LayoutDirection \l childrenInherit to true if you want the item children also inherit the mirror setting. - If no attached property has been defined, mirroring is disabled. + The LayoutMirroring attached property is used to horizontally mirror \l {anchor-layout}{Item anchors}, + \l{Using QML Positioner and Repeater Items}{positioner} elements (such as \l Row and \l Grid) + and views (such as \l GridView and horizontal \l ListView). Mirroring is a visual change: left + anchors become right anchors, and positioner elements like \l Grid and \l Row reverse the + horizontal layout of child items. - The following example shows mirroring in action. When \l enabled is set to true, left anchor - becomes right, and \l {Row}{Row} starts positioning items in a reverse order: + Mirroring is enabled for an item by setting the \l enabled property to true. By default, this + only affects the item itself; setting the \l childrenInherit property to true propagates the mirroring + behavior to all child elements as well. If the \c LayoutMirroring attached property has not been defined + for an item, mirroring is not enabled. + + The following example shows mirroring in action. The \l Row below is specified as being anchored + to the left of its parent. However, since mirroring has been enabled, the anchor is horizontally + reversed and it is now anchored to the right. Also, since items in a \l Row are positioned + from left to right by default, they are now positioned from right to left instead, as demonstrated + by the numbering and opacity of the items: \snippet doc/src/snippets/declarative/layoutmirroring.qml 0 - Layout mirroring is useful when you need to support both left-to-right and right-to-left - layout versions of your application that target different language areas. Inheritance saves - you from having to mirror the layouts manually for each layout item in your application. Keep - in mind however that the mirroring does not affect the positioning done by modifying Item's x - co-ordinate directly, so even with the mirroring enabled you will often need to do some layout - fixes to support the other reading direction. Also, there are cases where you need to disable - mirroring of individual child items, either because mirroring is not the wanted behavior or - because the item already implements mirroring in some custom way. + \image layoutmirroring.png + + Layout mirroring is useful when it is necessary to support both left-to-right and right-to-left + layout versions of an application to target different language areas. The \l childrenInherit + property allows layout mirroring to be applied without manually setting layout configurations + for every item in an application. Keep in mind, however, that mirroring does not affect any + positioning that is defined by the \l Item \l {Item::}{x} coordinate value, so even with + mirroring enabled, it will often be necessary to apply some layout fixes to support the + desired layout direction. Also, it may be necessary to disable the mirroring of individual + child items (by setting \l {enabled}{LayoutMirroring.enabled} to false for such items) if + mirroring is not the desired behavior, or if the child item already implements mirroring in + some custom way. + + See \l {QML Right-to-left User Interfaces} for further details on using \c LayoutMirroring and + other related features to implement right-to-left support for an application. */ /*! \qmlproperty bool LayoutMirroring::enabled - Setting this property to true mirrors item's layout horizontally, whether the layout is done - using \l {anchor-layout}{anchors}, \l{Using QML Positioner and Repeater Items}{Positioners} - or as a QML view \l {GridView}{GridView} or \l {ListView}{ListView}. + This property holds whether the item's layout is mirrored horizontally. Setting this to true + horizontally reverses \l {anchor-layout}{anchor} settings such that left anchors become right, + and right anchors become left. For \l{Using QML Positioner and Repeater Items}{positioner} elements + (such as \l Row and \l Grid) and view elements (such as \l {GridView}{GridView} and \l {ListView}{ListView}) + this also mirrors the horizontal layout direction of the item. + + The default value is false. */ /*! \qmlproperty bool LayoutMirroring::childrenInherit - This property can be set to true if you want the item children - to inherit the item's mirror setting. + This property holds whether the \l {enabled}{LayoutMirroring.enabled} value for this item + is inherited by its children. + + The default value is false. */ QDeclarativeLayoutMirroringAttached::QDeclarativeLayoutMirroringAttached(QObject *parent) : QObject(parent), itemPrivate(0) @@ -1558,7 +1577,7 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec \section1 Layout Mirroring - Item layouts can be mirrored using \l {LayoutMirroring}{LayoutMirroring} attached property. + Item layouts can be mirrored using the \l {LayoutMirroring}{LayoutMirroring} attached property. */ diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp index 84dcec6..8a9bdb3 100644 --- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp +++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp @@ -385,7 +385,7 @@ void QDeclarativeBasePositioner::finishApplyTransitions() Items with a width or height of 0 will not be positioned. - \sa Row, Grid, Flow, {declarative/positioners/addandremove}{Positioners example} + \sa Row, Grid, Flow, {declarative/positioners}{Positioners example} */ /*! \qmlproperty Transition Column::add @@ -425,7 +425,7 @@ void QDeclarativeBasePositioner::finishApplyTransitions() } \endqml - \sa add, {declarative/positioners/addandremove}{Positioners example} + \sa add, {declarative/positioners}{Positioners example} */ /*! \qmlproperty int Column::spacing @@ -528,7 +528,7 @@ void QDeclarativeColumn::reportConflictingAnchors() Items with a width or height of 0 will not be positioned. - \sa Column, Grid, Flow, {declarative/positioners/addandremove}{Positioners example} + \sa Column, Grid, Flow, {declarative/positioners}{Positioners example} */ /*! \qmlproperty Transition Row::add @@ -567,7 +567,7 @@ void QDeclarativeColumn::reportConflictingAnchors() } \endqml - \sa add, {declarative/positioners/addandremove}{Positioners example} + \sa add, {declarative/positioners}{Positioners example} */ /*! \qmlproperty int Row::spacing @@ -597,7 +597,7 @@ QDeclarativeRow::QDeclarativeRow(QDeclarativeItem *parent) the right anchor remains to the right of the row. \endlist - \sa Grid::layoutDirection, Flow::layoutDirection, {declarative/positioners/layoutdirection}{Layout directions example} + \sa Grid::layoutDirection, Flow::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example} */ Qt::LayoutDirection QDeclarativeRow::layoutDirection() const { @@ -753,7 +753,7 @@ void QDeclarativeRow::reportConflictingAnchors() Items with a width or height of 0 will not be positioned. - \sa Flow, Row, Column, {declarative/positioners/addandremove}{Positioners example} + \sa Flow, Row, Column, {declarative/positioners}{Positioners example} */ /*! \qmlproperty Transition Grid::add @@ -791,7 +791,7 @@ void QDeclarativeRow::reportConflictingAnchors() } \endqml - \sa add, {declarative/positioners/addandremove}{Positioners example} + \sa add, {declarative/positioners}{Positioners example} */ /*! \qmlproperty int Grid::spacing @@ -895,7 +895,7 @@ void QDeclarativeGrid::setFlow(Flow flow) \l Grid::flow property. \endlist - \sa Flow::layoutDirection, Row::layoutDirection, {declarative/positioners/layoutdirection}{Layout directions example} + \sa Flow::layoutDirection, Row::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example} */ Qt::LayoutDirection QDeclarativeGrid::layoutDirection() const { @@ -1137,7 +1137,7 @@ void QDeclarativeGrid::reportConflictingAnchors() Items with a width or height of 0 will not be positioned. - \sa Column, Row, Grid, {declarative/positioners/addandremove}{Positioners example} + \sa Column, Row, Grid, {declarative/positioners}{Positioners example} */ /*! \qmlproperty Transition Flow::add @@ -1176,7 +1176,7 @@ void QDeclarativeGrid::reportConflictingAnchors() } \endqml - \sa add, {declarative/positioners/addandremove}{Positioners example} + \sa add, {declarative/positioners}{Positioners example} */ /*! \qmlproperty int Flow::spacing @@ -1255,7 +1255,7 @@ void QDeclarativeFlow::setFlow(Flow flow) \l Flow::flow property. \endlist - \sa Grid::layoutDirection, Row::layoutDirection, {declarative/positioners/layoutdirection}{Layout directions example} + \sa Grid::layoutDirection, Row::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example} */ Qt::LayoutDirection QDeclarativeFlow::layoutDirection() const -- cgit v0.12 From 521a13e3f0a66c31bbf95304de3c7384042a39aa Mon Sep 17 00:00:00 2001 From: Michael Brasser <michael.brasser@nokia.com> Date: Mon, 21 Mar 2011 12:25:47 +1000 Subject: Fix writing to an attached property from script. Change-Id: I80c228092271d4d9c5694607da7a123d06739731 Reviewed-by: Aaron Kennedy --- .../qml/qdeclarativetypenamescriptclass.cpp | 2 +- .../data/writeAttachedProperty.qml | 6 +++++ .../tst_qdeclarativeecmascript.cpp | 30 ++++++++++++++++------ 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/writeAttachedProperty.qml diff --git a/src/declarative/qml/qdeclarativetypenamescriptclass.cpp b/src/declarative/qml/qdeclarativetypenamescriptclass.cpp index d3e2025..0314a7a 100644 --- a/src/declarative/qml/qdeclarativetypenamescriptclass.cpp +++ b/src/declarative/qml/qdeclarativetypenamescriptclass.cpp @@ -158,7 +158,7 @@ void QDeclarativeTypeNameScriptClass::setProperty(Object *o, const Identifier &n Q_ASSERT(!type); QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); - ep->objectClass->setProperty(((TypeNameData *)o)->object, n, v, context()); + ep->objectClass->setProperty(object, n, v, context()); } QT_END_NAMESPACE diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/writeAttachedProperty.qml b/tests/auto/declarative/qdeclarativeecmascript/data/writeAttachedProperty.qml new file mode 100644 index 0000000..31bf69d --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/writeAttachedProperty.qml @@ -0,0 +1,6 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +QtObject { + function writeValue2() { MyQmlObject.value2 = 9 } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 40b0e1b..48466d5 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -639,15 +639,29 @@ void tst_qdeclarativeecmascript::overrideExtensionProperties() void tst_qdeclarativeecmascript::attachedProperties() { - QDeclarativeComponent component(&engine, TEST_FILE("attachedProperty.qml")); - QObject *object = component.create(); - QVERIFY(object != 0); - QCOMPARE(object->property("a").toInt(), 19); - QCOMPARE(object->property("b").toInt(), 19); - QCOMPARE(object->property("c").toInt(), 19); - QCOMPARE(object->property("d").toInt(), 19); + { + QDeclarativeComponent component(&engine, TEST_FILE("attachedProperty.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(object->property("a").toInt(), 19); + QCOMPARE(object->property("b").toInt(), 19); + QCOMPARE(object->property("c").toInt(), 19); + QCOMPARE(object->property("d").toInt(), 19); + } - // ### Need to test attached property assignment + { + QDeclarativeComponent component(&engine, TEST_FILE("writeAttachedProperty.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QMetaObject::invokeMethod(object, "writeValue2"); + + MyQmlAttachedObject *attached = + qobject_cast<MyQmlAttachedObject *>(qmlAttachedPropertiesObject<MyQmlObject>(object)); + QVERIFY(attached != 0); + + QCOMPARE(attached->value2(), 9); + } } void tst_qdeclarativeecmascript::enums() -- cgit v0.12 From 3d91f9a971990324ef1d785c9c0b8bbed1175711 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 21 Mar 2011 09:35:19 +0100 Subject: Designer: Do not translate page object names of QMdiArea. and page-based containers. Task-number: QTBUG-18244 --- tools/designer/src/lib/shared/qdesigner_command.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/designer/src/lib/shared/qdesigner_command.cpp b/tools/designer/src/lib/shared/qdesigner_command.cpp index 148b4c8..f4e250d 100644 --- a/tools/designer/src/lib/shared/qdesigner_command.cpp +++ b/tools/designer/src/lib/shared/qdesigner_command.cpp @@ -2094,12 +2094,12 @@ void AddContainerWidgetPageCommand::init(QWidget *containerWidget, ContainerType case PageContainer: setText(QApplication::translate("Command", "Insert Page")); m_widget = new QDesignerWidget(formWindow(), m_containerWidget); - m_widget->setObjectName(QApplication::translate("Command", "page")); + m_widget->setObjectName(QLatin1String("page")); break; case MdiContainer: setText(QApplication::translate("Command", "Insert Subwindow")); m_widget = new QDesignerWidget(formWindow(), m_containerWidget); - m_widget->setObjectName(QApplication::translate("Command", "subwindow")); + m_widget->setObjectName(QLatin1String("subwindow")); setPropertySheetWindowTitle(core, m_widget, QApplication::translate("Command", "Subwindow")); break; case WizardContainer: // Apply style, don't manage -- cgit v0.12 From 410ddbf93f16a948ed28bbfe177433b3d138bd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= <samuel.rodal@nokia.com> Date: Thu, 17 Mar 2011 15:19:02 +0100 Subject: Optimized glyph uploads in GL texture cache. Avoid doing a lot of glTexSubImage2D calls in favor of doing a single call (even if it involves an additional image copy). Reviewed-by: Eskil --- src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 15 +++++++++++++-- src/opengl/qgl.cpp | 3 +++ src/opengl/qgl_p.h | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 4362c0a..9e8e828 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -339,8 +339,19 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph, QFixed sub // by converting it to a format with four bytes per pixel. Another is to copy one line at a // time. - for (int i = 0; i < maskHeight; ++i) - glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, maskWidth, 1, GL_ALPHA, GL_UNSIGNED_BYTE, mask.scanLine(i)); + if (!ctx->d_ptr->workaround_brokenAlphaTexSubImage_init) { + // don't know which driver versions exhibit this bug, so be conservative for now + const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION))); + ctx->d_ptr->workaround_brokenAlphaTexSubImage = versionString.indexOf("NVIDIA") >= 0; + ctx->d_ptr->workaround_brokenAlphaTexSubImage_init = true; + } + + if (ctx->d_ptr->workaround_brokenAlphaTexSubImage) { + for (int i = 0; i < maskHeight; ++i) + glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, maskWidth, 1, GL_ALPHA, GL_UNSIGNED_BYTE, mask.scanLine(i)); + } else { + glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_ALPHA, GL_UNSIGNED_BYTE, mask.bits()); + } } } diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 76621e9..bff38d7 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1735,6 +1735,9 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) workaround_brokenTextureFromPixmap = false; workaround_brokenTextureFromPixmap_init = false; + workaround_brokenAlphaTexSubImage = false; + workaround_brokenAlphaTexSubImage_init = false; + for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) vertexAttributeArraysEnabledState[i] = false; } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 5508598..5a5e5cc 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -416,6 +416,9 @@ public: uint workaround_brokenTextureFromPixmap : 1; uint workaround_brokenTextureFromPixmap_init : 1; + uint workaround_brokenAlphaTexSubImage : 1; + uint workaround_brokenAlphaTexSubImage_init : 1; + #ifndef QT_NO_EGL uint ownsEglContext : 1; #endif -- cgit v0.12 From 4ff9f1394f0cc527864ecba29bc7f6a9c3210fea Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 21 Mar 2011 11:22:52 +0200 Subject: Prepare fromSymbianCFbsBitmap autotest for 16 bpp format. Due to recent changes QPixmap::fromImage() can return RGB16 images for OpenVG pixmaps created from CFbsBitmap of display mode EColor64K. The qpixmap autotest assumed that the returned image is always 32 bpp which is not true anymore. Now it explicitly checks for 16 bpp and handles it properly. Reviewed-by: Jani Hautakangas --- tests/auto/qpixmap/tst_qpixmap.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index bd9c26f..464cd3b 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -52,6 +52,7 @@ #include <qsplashscreen.h> #include <private/qpixmapdata_p.h> +#include <private/qdrawhelper_p.h> #include <QSet> @@ -1264,7 +1265,10 @@ void tst_QPixmap::fromSymbianCFbsBitmap() QCOMPARE(actualColor, color); QImage shouldBe(pixmap.width(), pixmap.height(), image.format()); - shouldBe.fill(color.rgba()); + if (image.format() == QImage::Format_RGB16) + shouldBe.fill(qrgb565(color.rgba()).rawValue()); + else + shouldBe.fill(color.rgba()); QCOMPARE(image, shouldBe); } __UHEAP_MARKEND; -- cgit v0.12 From 55650943492ff00d086bc76039212ce8438ee203 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Mon, 21 Mar 2011 10:31:21 +0100 Subject: add license headers to qhash_string benchmark --- .../corelib/tools/qhash/qhash_string.cpp | 1 - .../benchmarks/corelib/tools/qhash/qhash_string.h | 40 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp b/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp index fde1722..d9e62cc 100644 --- a/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp +++ b/tests/benchmarks/corelib/tools/qhash/qhash_string.cpp @@ -1,4 +1,3 @@ - /**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). diff --git a/tests/benchmarks/corelib/tools/qhash/qhash_string.h b/tests/benchmarks/corelib/tools/qhash/qhash_string.h index bdc7770..78a3a42 100644 --- a/tests/benchmarks/corelib/tools/qhash/qhash_string.h +++ b/tests/benchmarks/corelib/tools/qhash/qhash_string.h @@ -1,3 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtTest module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #include <QString> -- cgit v0.12 From fda299f55dd5aeb2d075f6f5c842f75c9f559f9c Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Date: Mon, 21 Mar 2011 10:30:51 +0100 Subject: Don't crash calling QTextDocument::blockBoundingRect on invalid block If the block is invalid, QTextBlock::layout() will return 0 and we would dereference a null pointer. Task-number: QTBUG-18192 Reviewed-by: Jiang Jiang --- src/gui/text/qtextdocumentlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index d721c91..65fe0f8 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -3133,7 +3133,7 @@ QRectF QTextDocumentLayoutPrivate::frameBoundingRectInternal(QTextFrame *frame) QRectF QTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const { Q_D(const QTextDocumentLayout); - if (d->docPrivate->pageSize.isNull()) + if (d->docPrivate->pageSize.isNull() || !block.isValid()) return QRectF(); d->ensureLayoutedByPosition(block.position() + block.length()); QTextFrame *frame = d->document->frameAt(block.position()); -- cgit v0.12 From cd786ac3223a515c57222ac78dac568601bc6d2e Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 21 Mar 2011 12:05:48 +0200 Subject: Add missing bitmap locking to QVGPixmapData::fromNativeType. Reviewed-by: Jani Hautakangas --- src/openvg/qvg_symbian.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 2924d41..24b31a2 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -195,14 +195,16 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) if (!conversionLessFormat(source.format())) { // Here we may need to copy if the formats do not match. // (e.g. for display modes other than EColor16MAP and EColor16MU) - source.ensureFormat(idealFormat(&source.imageRef(), Qt::AutoColor)); + source.beginDataAccess(); + QImage::Format format = idealFormat(&source.imageRef(), Qt::AutoColor); + source.endDataAccess(true); + source.ensureFormat(format); } recreate = true; } else if (type == QPixmapData::VolatileImage && pixmap) { QVolatileImage *img = static_cast<QVolatileImage *>(pixmap); resize(img->width(), img->height()); source = *img; - source.ensureFormat(idealFormat(&source.imageRef(), Qt::AutoColor)); recreate = true; } else if (type == QPixmapData::NativeImageHandleProvider && pixmap) { destroyImages(); -- cgit v0.12 From 589fb7812ac81192a7013c0b186354f121118398 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 21 Mar 2011 12:41:06 +0200 Subject: Changed s60 style not to rely on QPixmapData::toNativeType(). Forcing VG (and GL) pixmapdata to support toNativeType() with type VolatileImage is unnecessary. It is cleaner to try doing a fromNativeType() with bitmap+mask and fall back if that results in a null pixmapdata. Reviewed-by: Jani Hautakangas --- src/gui/styles/qs60style_s60.cpp | 11 ++++++----- src/openvg/qvg_symbian.cpp | 2 -- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 1ff195d..e46c826 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -639,13 +639,14 @@ QPixmap QS60StyleModeSpecifics::fromFbsBitmap(CFbsBitmap *icon, CFbsBitmap *mask QPixmap pixmap; QScopedPointer<QPixmapData> pd(QPixmapData::create(0, 0, QPixmapData::PixmapType)); - bool nativeMaskSupported = (pd->toNativeType(QPixmapData::VolatileImage) != 0); - if (mask && nativeMaskSupported) { - // Efficient path, less copying and conversion. + if (mask) { + // Try the efficient path with less copying and conversion. QVolatileImage img(icon, mask); pd->fromNativeType(&img, QPixmapData::VolatileImage); - pixmap = QPixmap(pd.take()); - } else { + if (!pd->isNull()) + pixmap = QPixmap(pd.take()); + } + if (pixmap.isNull()) { // Potentially more expensive path. pd->fromNativeType(icon, QPixmapData::FbsBitmap); pixmap = QPixmap(pd.take()); diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 24b31a2..0d2ed9e 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -284,8 +284,6 @@ void* QVGPixmapData::toNativeType(NativeType type) } // Just duplicate the bitmap handle, no data copying happens. return source.duplicateNativeImage(); - } else if (type == QPixmapData::VolatileImage) { - return &source; } return 0; } -- cgit v0.12 From 312a46e052dd596d620437f1f5dde0ed5b173c28 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Mon, 21 Mar 2011 12:18:16 +0100 Subject: remove redundand validateModes() call i added another one a few lines above ... --- qmake/project.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/qmake/project.cpp b/qmake/project.cpp index 9c99c44..e985401 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -1654,7 +1654,6 @@ QMakeProject::doProjectInclude(QString file, uchar flags, QMap<QString, QStringL if(file.indexOf(Option::dir_sep) == -1 || !QFile::exists(file)) { static QStringList *feature_roots = 0; if(!feature_roots) { - validateModes(); feature_roots = new QStringList(qmake_feature_paths(prop)); qmakeAddCacheClear(qmakeDeleteCacheClear_QStringList, (void**)&feature_roots); } -- cgit v0.12 From e6b61b98f46918d2770a0147a42d10f0a0e18ca8 Mon Sep 17 00:00:00 2001 From: Bernhard Rosenkraenzer <bero@arklinux.ch> Date: Mon, 21 Mar 2011 12:19:36 +0100 Subject: Fix endianness detection with gcc 4.6 -flto -fwhole-program Trying to build Qt with gcc 4.6 and the -flto optimization enabled fails at ./configure state because the endianness can't be detected. With -flto in QMAKE_CFLAGS and -fwhole-program in QMAKE_LFLAGS_APP, gcc 4.6 manages to compute msb_bigendian[1] == lsb_littleendian[1] at build time and reduces main() to "return 1;", throwing away the bits being looked for. Treating the short[] arrays as "code" and trying to actually run them prevents even the -fwhole-program optimizer from kicking them out, and since the endian test isn't actually run, doesn't break anything. Merge-request: 1130 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- config.tests/unix/endian/endiantest.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config.tests/unix/endian/endiantest.cpp b/config.tests/unix/endian/endiantest.cpp index 296f890..40b2c38 100644 --- a/config.tests/unix/endian/endiantest.cpp +++ b/config.tests/unix/endian/endiantest.cpp @@ -48,9 +48,9 @@ short lsb_littleendian[] = { 0x0000, 0x654c, 0x7361, 0x5374, 0x6769, 0x696e, 0x6 int main(int, char **) { // make sure the linker doesn't throw away the arrays - char *msb_bigendian_string = (char *) msb_bigendian; - char *lsb_littleendian_string = (char *) lsb_littleendian; - (void) msb_bigendian_string; - (void) lsb_littleendian_string; + void (*msb_bigendian_string)() = (void (*)())msb_bigendian; + void (*lsb_littleendian_string)() = (void (*)())lsb_littleendian; + (void)msb_bigendian_string(); + (void)lsb_littleendian_string(); return msb_bigendian[1] == lsb_littleendian[1]; } -- cgit v0.12 From 8450b461cfa6acf03865f0e0de0c08d3f0be5313 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Mon, 21 Mar 2011 13:31:35 +0200 Subject: Started changes-4.7.4 file Placeholder file created to allow package creation Reviewed-by: TrustMe --- dist/changes-4.7.4 | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 dist/changes-4.7.4 diff --git a/dist/changes-4.7.4 b/dist/changes-4.7.4 new file mode 100644 index 0000000..a37e66a --- /dev/null +++ b/dist/changes-4.7.4 @@ -0,0 +1,31 @@ +Qt 4.7.4 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 4.7.0. For more details, +refer to the online documentation included in this distribution. The +documentation is also available online: + + http://qt.nokia.com/doc/4.7 + +The Qt version 4.7 series is binary compatible with the 4.6.x series. +Applications compiled for 4.6 will continue to run with 4.7. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker or the Merge Request queue +of the public source repository. + +Qt Bug Tracker: http://bugreports.qt.nokia.com +Merge Request: http://qt.gitorious.org + +**************************************************************************** +* Library * +**************************************************************************** + + +**************************************************************************** +* Platform Specific Changes * +**************************************************************************** + + +**************************************************************************** +* Tools * +**************************************************************************** + -- cgit v0.12 From 9204b29b05cba62d64bf189d30b72b93f1693bbf Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 21 Mar 2011 13:33:08 +0200 Subject: Change the pooled QGLPixmapData to be backed by QVolatileImage. This change currently affects QGLPixmapData on Symbian only. Similarly to the OpenVG engine, using QVolatileImage allows more efficient handling of to- and fromSymbianCFbsBitmap, reduces local heap usage, and improves s60 style performance. Task-number: QTBUG-15252 Reviewed-by: Jani Hautakangas --- src/opengl/qgl_symbian.cpp | 140 +++++++++++------------------------- src/opengl/qpixmapdata_gl_p.h | 9 +++ src/opengl/qpixmapdata_poolgl.cpp | 118 +++++++++++++++++++----------- src/s60installs/bwins/QtOpenGLu.def | 1 + src/s60installs/eabi/QtOpenGLu.def | 1 + 5 files changed, 128 insertions(+), 141 deletions(-) diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp index 2978514..78624a2 100644 --- a/src/opengl/qgl_symbian.cpp +++ b/src/opengl/qgl_symbian.cpp @@ -41,9 +41,7 @@ #include "qgl.h" -#include <coemain.h> -#include <coecntrl.h> -#include <w32std.h> +#include <fbs.h> #include <private/qt_s60_p.h> #include <private/qpixmap_s60_p.h> #include <private/qimagepixmapcleanuphooks_p.h> @@ -72,6 +70,8 @@ QT_BEGIN_NAMESPACE #endif #endif +extern int qt_gl_pixmap_serial; + /* QGLTemporaryContext implementation */ @@ -361,117 +361,61 @@ void QGLWidgetPrivate::recreateEglSurface() eglSurfaceWindowId = currentId; } -/* - * Symbian specific QGLPixmapData functions - */ - -static CFbsBitmap* createBlitCopy(CFbsBitmap* bitmap) +static inline bool knownGoodFormat(QImage::Format format) { - CFbsBitmap *copy = q_check_ptr(new CFbsBitmap); - if (!copy) - return 0; - - if (copy->Create(bitmap->SizeInPixels(), bitmap->DisplayMode()) != KErrNone) { - delete copy; - copy = 0; - - return 0; + switch (format) { + case QImage::Format_RGB16: // EColor64K + case QImage::Format_RGB32: // EColor16MU + case QImage::Format_ARGB32_Premultiplied: // EColor16MAP + return true; + default: + return false; } - - CFbsBitmapDevice* bitmapDevice = 0; - CFbsBitGc *bitmapGc = 0; - QT_TRAP_THROWING(bitmapDevice = CFbsBitmapDevice::NewL(copy)); - QT_TRAP_THROWING(bitmapGc = CFbsBitGc::NewL()); - bitmapGc->Activate(bitmapDevice); - - bitmapGc->BitBlt(TPoint(), bitmap); - - delete bitmapGc; - delete bitmapDevice; - - return copy; } void QGLPixmapData::fromNativeType(void* pixmap, NativeType type) { if (type == QPixmapData::FbsBitmap) { - CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap*>(pixmap); - - bool deleteSourceBitmap = false; -#ifdef Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE - - // Rasterize extended bitmaps - - TUid extendedBitmapType = bitmap->ExtendedBitmapType(); - if (extendedBitmapType != KNullUid) { - bitmap = createBlitCopy(bitmap); - deleteSourceBitmap = true; - } -#endif - - if (bitmap->IsCompressedInRAM()) { - bitmap = createBlitCopy(bitmap); - deleteSourceBitmap = true; + CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap *>(pixmap); + QSize size(bitmap->SizeInPixels().iWidth, bitmap->SizeInPixels().iHeight); + if (size.width() == w && size.height() == h) + setSerialNumber(++qt_gl_pixmap_serial); + resize(size.width(), size.height()); + m_source = QVolatileImage(bitmap); + if (pixelType() == BitmapType) { + m_source.ensureFormat(QImage::Format_MonoLSB); + } else if (!knownGoodFormat(m_source.format())) { + m_source.beginDataAccess(); + QImage::Format format = idealFormat(m_source.imageRef(), Qt::AutoColor); + m_source.endDataAccess(true); + m_source.ensureFormat(format); } - - TDisplayMode displayMode = bitmap->DisplayMode(); - QImage::Format format = qt_TDisplayMode2Format(displayMode); - - TSize size = bitmap->SizeInPixels(); - int bytesPerLine = bitmap->ScanLineLength(size.iWidth, displayMode); - - bitmap->BeginDataAccess(); - uchar *bytes = (uchar*)bitmap->DataAddress(); - QImage img = QImage(bytes, size.iWidth, size.iHeight, bytesPerLine, format); - img = img.copy(); - bitmap->EndDataAccess(); - - if (displayMode == EGray2) { - //Symbian thinks set pixels are white/transparent, Qt thinks they are foreground/solid - //So invert mono bitmaps so that masks work correctly. - img.invertPixels(); - } else if (displayMode == EColor16M) { - img = img.rgbSwapped(); // EColor16M is BGR - } - - fromImage(img, Qt::AutoColor); - - if (deleteSourceBitmap) - delete bitmap; + m_hasAlpha = m_source.hasAlphaChannel(); + m_hasFillColor = false; + m_dirty = true; + + } else if (type == QPixmapData::VolatileImage && pixmap) { + // Support QS60Style in more efficient skin graphics retrieval. + QVolatileImage *img = static_cast<QVolatileImage *>(pixmap); + if (img->width() == w && img->height() == h) + setSerialNumber(++qt_gl_pixmap_serial); + resize(img->width(), img->height()); + m_source = *img; + m_hasAlpha = m_source.hasAlphaChannel(); + m_hasFillColor = false; + m_dirty = true; } } void* QGLPixmapData::toNativeType(NativeType type) { if (type == QPixmapData::FbsBitmap) { - CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap); - - if (bitmap) { - QImage image = toImage(); - - TDisplayMode displayMode(EColor16MU); - if (image.format()==QImage::Format_ARGB32_Premultiplied) - displayMode = EColor16MAP; - - if (bitmap->Create(TSize(image.width(), image.height()), - displayMode) == KErrNone) { - const uchar *sptr = const_cast<const QImage&>(image).bits(); - bitmap->BeginDataAccess(); - - uchar *dptr = (uchar*)bitmap->DataAddress(); - Mem::Copy(dptr, sptr, image.byteCount()); - - bitmap->EndDataAccess(); - } else { - delete bitmap; - bitmap = 0; - } - } - - return reinterpret_cast<void*>(bitmap); + if (m_source.isNull()) + m_source = QVolatileImage(w, h, QImage::Format_ARGB32_Premultiplied); + return m_source.duplicateNativeImage(); } + return 0; } QT_END_NAMESPACE - diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index 55cc29d..41740dd 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -59,6 +59,10 @@ #include "private/qpixmapdata_p.h" #include "private/qglpaintdevice_p.h" +#ifdef Q_OS_SYMBIAN +#include "private/qvolatileimage_p.h" +#endif + QT_BEGIN_NAMESPACE class QPaintEngine; @@ -153,6 +157,7 @@ public: #endif #ifdef Q_OS_SYMBIAN + QImage::Format idealFormat(QImage &image, Qt::ImageConversionFlags flags); void* toNativeType(NativeType type); void fromNativeType(void* pixmap, NativeType type); #endif @@ -184,7 +189,11 @@ private: mutable QGLFramebufferObject *m_renderFbo; mutable QPaintEngine *m_engine; mutable QGLContext *m_ctx; +#ifdef Q_OS_SYMBIAN + mutable QVolatileImage m_source; +#else mutable QImage m_source; +#endif mutable QGLTexture m_texture; // the texture is not in sync with the source image diff --git a/src/opengl/qpixmapdata_poolgl.cpp b/src/opengl/qpixmapdata_poolgl.cpp index f1220b1..64de29e 100644 --- a/src/opengl/qpixmapdata_poolgl.cpp +++ b/src/opengl/qpixmapdata_poolgl.cpp @@ -247,7 +247,7 @@ void QGLPixmapGLPaintDevice::setPixmapData(QGLPixmapData* d) data = d; } -static int qt_gl_pixmap_serial = 0; +int qt_gl_pixmap_serial = 0; QGLPixmapData::QGLPixmapData(PixelType type) : QPixmapData(type, OpenGLClass) @@ -330,7 +330,7 @@ void QGLPixmapData::resize(int width, int height) destroyTexture(); - m_source = QImage(); + m_source = QVolatileImage(); m_dirty = isValid(); setSerialNumber(++qt_gl_pixmap_serial); } @@ -353,6 +353,11 @@ void QGLPixmapData::ensureCreated() const #endif const GLenum target = GL_TEXTURE_2D; + GLenum type = GL_UNSIGNED_BYTE; + // Avoid conversion when pixmap is created from CFbsBitmap of EColor64K. + if (!m_source.isNull() && m_source.format() == QImage::Format_RGB16) + type = GL_UNSIGNED_SHORT_5_6_5; + m_texture.options &= ~QGLContext::MemoryManagedBindOption; if (!m_texture.id) { @@ -361,7 +366,7 @@ void QGLPixmapData::ensureCreated() const 0, internal_format, w, h, external_format, - GL_UNSIGNED_BYTE, + type, const_cast<QGLPixmapData*>(this)); if (!m_texture.id) { failedToAlloc = true; @@ -378,21 +383,35 @@ void QGLPixmapData::ensureCreated() const if (!m_source.isNull() && m_texture.id) { if (external_format == GL_RGB) { - const QImage tx = m_source.convertToFormat(QImage::Format_RGB888).mirrored(false, true); + m_source.beginDataAccess(); + QImage tx; + if (type == GL_UNSIGNED_BYTE) + tx = m_source.imageRef().convertToFormat(QImage::Format_RGB888).mirrored(false, true); + else if (type == GL_UNSIGNED_SHORT_5_6_5) + tx = m_source.imageRef().mirrored(false, true); + m_source.endDataAccess(true); glBindTexture(target, m_texture.id); - glTexSubImage2D(target, 0, 0, 0, w, h, external_format, - GL_UNSIGNED_BYTE, tx.bits()); + if (!tx.isNull()) + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + type, tx.constBits()); + else + qWarning("QGLPixmapData: Failed to create GL_RGB image of size %dx%d", w, h); } else { // do byte swizzling ARGB -> RGBA - const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, external_format); + m_source.beginDataAccess(); + const QImage tx = ctx->d_func()->convertToGLFormat(m_source.imageRef(), true, external_format); + m_source.endDataAccess(true); glBindTexture(target, m_texture.id); - glTexSubImage2D(target, 0, 0, 0, w, h, external_format, - GL_UNSIGNED_BYTE, tx.bits()); + if (!tx.isNull()) + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + type, tx.constBits()); + else + qWarning("QGLPixmapData: Failed to create GL_RGBA image of size %dx%d", w, h); } if (useFramebufferObjects()) - m_source = QImage(); + m_source = QVolatileImage(); } } @@ -437,7 +456,7 @@ bool QGLPixmapData::fromFile(const QString &filename, const char *format, is_null = false; d = 32; m_hasAlpha = alpha; - m_source = QImage(); + m_source = QVolatileImage(); m_dirty = isValid(); return true; } @@ -469,7 +488,7 @@ bool QGLPixmapData::fromData(const uchar *buffer, uint len, const char *format, is_null = false; d = 32; m_hasAlpha = alpha; - m_source = QImage(); + m_source = QVolatileImage(); m_dirty = isValid(); return true; } @@ -487,9 +506,20 @@ bool QGLPixmapData::fromData(const uchar *buffer, uint len, const char *format, return !isNull(); } -/*! - out-of-place conversion (inPlace == false) will always detach() - */ +QImage::Format QGLPixmapData::idealFormat(QImage &image, Qt::ImageConversionFlags flags) +{ + QImage::Format format = QImage::Format_RGB32; + if (qApp->desktop()->depth() == 16) + format = QImage::Format_RGB16; + + if (image.hasAlphaChannel() + && ((flags & Qt::NoOpaqueDetection) + || const_cast<QImage &>(image).data_ptr()->checkForAlphaPixels())) + format = QImage::Format_ARGB32_Premultiplied; + + return format; +} + void QGLPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags flags, bool inPlace) { if (image.size() == QSize(w, h)) @@ -498,26 +528,25 @@ void QGLPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags resize(image.width(), image.height()); if (pixelType() == BitmapType) { - m_source = image.convertToFormat(QImage::Format_MonoLSB); + QImage convertedImage = image.convertToFormat(QImage::Format_MonoLSB); + if (image.format() == QImage::Format_MonoLSB) + convertedImage.detach(); - } else { - QImage::Format format = QImage::Format_RGB32; - if (qApp->desktop()->depth() == 16) - format = QImage::Format_RGB16; + m_source = QVolatileImage(convertedImage); - if (image.hasAlphaChannel() - && ((flags & Qt::NoOpaqueDetection) - || const_cast<QImage &>(image).data_ptr()->checkForAlphaPixels())) - format = QImage::Format_ARGB32_Premultiplied; + } else { + QImage::Format format = idealFormat(image, flags); if (inPlace && image.data_ptr()->convertInPlace(format, flags)) { - m_source = image; + m_source = QVolatileImage(image); } else { - m_source = image.convertToFormat(format); + QImage convertedImage = image.convertToFormat(format); // convertToFormat won't detach the image if format stays the same. if (image.format() == format) - m_source.detach(); + convertedImage.detach(); + + m_source = QVolatileImage(convertedImage); } } @@ -596,16 +625,13 @@ void QGLPixmapData::fill(const QColor &color) } if (useFramebufferObjects()) { - m_source = QImage(); + m_source = QVolatileImage(); m_hasFillColor = true; m_fillColor = color; } else { + forceToImage(); - if (m_source.isNull()) { - m_fillColor = color; - m_hasFillColor = true; - - } else if (m_source.depth() == 32) { + if (m_source.depth() == 32) { m_source.fill(PREMUL(color.rgba())); } else if (m_source.depth() == 1) { @@ -656,13 +682,15 @@ QImage QGLPixmapData::toImage() const if (m_renderFbo) { copyBackFromRenderFbo(true); } else if (!m_source.isNull()) { - QImageData *data = const_cast<QImage &>(m_source).data_ptr(); - if (data->paintEngine && data->paintEngine->isActive() - && data->paintEngine->paintDevice() == &m_source) - { - return m_source.copy(); + // QVolatileImage::toImage() will make a copy always so no check + // for active painting is needed. + QImage img = m_source.toImage(); + if (img.format() == QImage::Format_MonoLSB) { + img.setColorCount(2); + img.setColor(0, QColor(Qt::color0).rgba()); + img.setColor(1, QColor(Qt::color1).rgba()); } - return m_source; + return img; } else if (m_dirty || m_hasFillColor) { return fillImage(m_fillColor); } else { @@ -802,7 +830,7 @@ GLuint QGLPixmapData::bind(bool copyBack) const if (m_hasFillColor) { if (!useFramebufferObjects()) { - m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + m_source = QVolatileImage(w, h, QImage::Format_ARGB32_Premultiplied); m_source.fill(PREMUL(m_fillColor.rgba())); } @@ -811,7 +839,7 @@ GLuint QGLPixmapData::bind(bool copyBack) const GLenum format = qt_gl_preferredTextureFormat(); QImage tx(w, h, QImage::Format_ARGB32_Premultiplied); tx.fill(qt_gl_convertToGLFormat(m_fillColor.rgba(), format)); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, format, GL_UNSIGNED_BYTE, tx.bits()); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, format, GL_UNSIGNED_BYTE, tx.constBits()); } return id; @@ -888,8 +916,12 @@ void QGLPixmapData::forceToImage() if (!isValid()) return; - if (m_source.isNull()) - m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + if (m_source.isNull()) { + QImage::Format format = QImage::Format_ARGB32_Premultiplied; + if (pixelType() == BitmapType) + format = QImage::Format_MonoLSB; + m_source = QVolatileImage(w, h, format); + } m_dirty = true; } diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 87d1b56..f52932c 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -718,4 +718,5 @@ EXPORTS ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ; void QGLGraphicsSystem::releaseCachedResources(void) ?serialNumber@QGLTextureGlyphCache@@QBEHXZ @ 718 NONAME ; int QGLTextureGlyphCache::serialNumber(void) const ?forceToImage@QGLPixmapData@@QAEXXZ @ 719 NONAME ; void QGLPixmapData::forceToImage(void) + ?idealFormat@QGLPixmapData@@QAE?AW4Format@QImage@@AAV3@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 720 NONAME ; enum QImage::Format QGLPixmapData::idealFormat(class QImage &, class QFlags<enum Qt::ImageConversionFlag>) diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 4c5dca9..f7a7f71 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -720,4 +720,5 @@ EXPORTS _ZN13QGLPixmapData21detachTextureFromPoolEv @ 719 NONAME _ZN13QGLPixmapData9hibernateEv @ 720 NONAME _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME + _ZN13QGLPixmapData11idealFormatER6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 722 NONAME -- cgit v0.12 From 599a8f5b86bdf389e0edd2f42f0bd4ea050e24f1 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Mon, 21 Mar 2011 14:21:23 +0200 Subject: Remove incorrect check in qpixmap autotest. The test assumed that pixmaps do not have an alpha channel. This is not true on some platforms, e.g. Symbian with OpenVG, there pixmaps are often backed by some image data in ARGB32_Premultiplied format, which means that QPixmap::mask() will return a valid QBitmap. Task-number: QTBUG-18247 Reviewed-by: Jani Hautakangas --- tests/auto/qpixmap/tst_qpixmap.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 464cd3b..0b5c30b 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -641,9 +641,12 @@ void tst_QPixmap::mask() QVERIFY(!pm.isNull()); QVERIFY(!bm.isNull()); - // hw: todo: this will fail if the default pixmap format is - // argb32_premultiplied. The mask will be all 1's - QVERIFY(pm.mask().isNull()); + if (!pm.hasAlphaChannel()) { + // This would fail if the default pixmap format is + // argb32_premultiplied. The mask will be all 1's. + // Therefore this is skipped when the alpha channel is present. + QVERIFY(pm.mask().isNull()); + } QImage img = bm.toImage(); QVERIFY(img.format() == QImage::Format_MonoLSB -- cgit v0.12 From ce61e3c3c6ff7f00d9b756c99e8fc031a69e68db Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen <miikka.heikkinen@digia.com> Date: Mon, 21 Mar 2011 14:12:39 +0200 Subject: Return SV_S60_5_2 / SV_SF_3 for next gen Symbian platform. Previously version resolved to unknown if Symbian or S60 version was queried and Series60v5.3.sis was found. Note that proper detection and enumerations for the new platform will come when they are agreed upon. Until then, this fix will make the new platform more usable. Task-number: QT-4593 Reviewed-by: Sami Merila --- src/corelib/global/qglobal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 62d83cc..25ddd24 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1862,7 +1862,7 @@ QSysInfo::SymbianVersion QSysInfo::symbianVersion() else if (minor == 1) { return cachedSymbianVersion = SV_SF_2; } - else if (minor == 2) { + else if (minor >= 2) { return cachedSymbianVersion = SV_SF_3; } } -- cgit v0.12 From f92501a82f5bca1ccac07ed17850c84b281a1fb1 Mon Sep 17 00:00:00 2001 From: Timo Turunen <timo.p.turunen@nokia.com> Date: Mon, 21 Mar 2011 16:04:35 +0200 Subject: Bump Qt version to 4.7.4 Reviewed-by: Trust Me --- dist/changes-4.7.4 | 16 ++++++++++++++++ src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri | 4 ++-- src/corelib/global/qglobal.h | 4 ++-- src/plugins/qpluginbase.pri | 2 +- src/qbase.pri | 2 +- tests/auto/mediaobject/dummy/dummy.pro | 2 +- tests/auto/selftests/expected_cmptest.txt | 2 +- tests/auto/selftests/expected_crashes_3.txt | 2 +- tests/auto/selftests/expected_longstring.txt | 2 +- tests/auto/selftests/expected_maxwarnings.txt | 2 +- tests/auto/selftests/expected_skip.txt | 2 +- tools/assistant/tools/assistant/doc/assistant.qdocconf | 2 +- tools/qdoc3/doc/files/qt.qdocconf | 8 ++++---- tools/qdoc3/test/assistant.qdocconf | 4 ++-- tools/qdoc3/test/designer.qdocconf | 4 ++-- tools/qdoc3/test/linguist.qdocconf | 4 ++-- tools/qdoc3/test/qdeclarative.qdocconf | 8 ++++---- tools/qdoc3/test/qmake.qdocconf | 4 ++-- tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf | 8 ++++---- tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 8 ++++---- tools/qdoc3/test/qt-project.qdocconf | 8 ++++---- 21 files changed, 57 insertions(+), 41 deletions(-) create mode 100644 dist/changes-4.7.4 diff --git a/dist/changes-4.7.4 b/dist/changes-4.7.4 new file mode 100644 index 0000000..bc9eb2b --- /dev/null +++ b/dist/changes-4.7.4 @@ -0,0 +1,16 @@ +Qt 4.7.4 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 4.7.0. For more details, +refer to the online documentation included in this distribution. The +documentation is also available online: + + http://qt.nokia.com/doc/4.7 + +The Qt version 4.7 series is binary compatible with the 4.6.x series. +Applications compiled for 4.6 will continue to run with 4.7. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker or the Merge Request queue +of the public source repository. + +Qt Bug Tracker: http://bugreports.qt.nokia.com +Merge Request: http://qt.gitorious.org diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri index 07754a7..3ec3e97 100644 --- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -1,5 +1,5 @@ -QT_WEBKIT_VERSION = 4.7.3 +QT_WEBKIT_VERSION = 4.7.4 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 -QT_WEBKIT_PATCH_VERSION = 3 +QT_WEBKIT_PATCH_VERSION = 4 QT_CONFIG += webkit diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index ca63ebd..55c96c6 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -44,11 +44,11 @@ #include <stddef.h> -#define QT_VERSION_STR "4.7.3" +#define QT_VERSION_STR "4.7.4" /* QT_VERSION is (major << 16) + (minor << 8) + patch. */ -#define QT_VERSION 0x040703 +#define QT_VERSION 0x040704 /* can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) */ diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri index 3de5fdf..6c33e92 100644 --- a/src/plugins/qpluginbase.pri +++ b/src/plugins/qpluginbase.pri @@ -1,6 +1,6 @@ TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.3 + VERSION=4.7.4 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/src/qbase.pri b/src/qbase.pri index babea56..5d78336 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700 TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.3 + VERSION=4.7.4 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/tests/auto/mediaobject/dummy/dummy.pro b/tests/auto/mediaobject/dummy/dummy.pro index c81411c..9797500 100644 --- a/tests/auto/mediaobject/dummy/dummy.pro +++ b/tests/auto/mediaobject/dummy/dummy.pro @@ -1,7 +1,7 @@ TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.3 + VERSION=4.7.4 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt index d70815d..a0d3485 100644 --- a/tests/auto/selftests/expected_cmptest.txt +++ b/tests/auto/selftests/expected_cmptest.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Cmptest ********* -Config: Using QTest library 4.7.3, Qt 4.7.3 +Config: Using QTest library 4.7.4, Qt 4.7.4 PASS : tst_Cmptest::initTestCase() PASS : tst_Cmptest::compare_boolfuncs() PASS : tst_Cmptest::compare_pointerfuncs() diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt index 2aea62c..88ba69f 100644 --- a/tests/auto/selftests/expected_crashes_3.txt +++ b/tests/auto/selftests/expected_crashes_3.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Crashes ********* -Config: Using QTest library 4.7.3, Qt 4.7.3 +Config: Using QTest library 4.7.4, Qt 4.7.4 PASS : tst_Crashes::initTestCase() QFATAL : tst_Crashes::crash() Received signal 11 FAIL! : tst_Crashes::crash() Received a fatal error. diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt index 1fe012f..7f50020 100644 --- a/tests/auto/selftests/expected_longstring.txt +++ b/tests/auto/selftests/expected_longstring.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_LongString ********* -Config: Using QTest library 4.7.3, Qt 4.7.3 +Config: Using QTest library 4.7.4, Qt 4.7.4 PASS : tst_LongString::initTestCase() FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt index cdd6ee8..cd80a04 100644 --- a/tests/auto/selftests/expected_maxwarnings.txt +++ b/tests/auto/selftests/expected_maxwarnings.txt @@ -1,5 +1,5 @@ ********* Start testing of MaxWarnings ********* -Config: Using QTest library 4.7.3, Qt 4.7.3 +Config: Using QTest library 4.7.4, Qt 4.7.4 PASS : MaxWarnings::initTestCase() QWARN : MaxWarnings::warn() 0 QWARN : MaxWarnings::warn() 1 diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt index 490c140..c259c68 100644 --- a/tests/auto/selftests/expected_skip.txt +++ b/tests/auto/selftests/expected_skip.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Skip ********* -Config: Using QTest library 4.7.3, Qt 4.7.3 +Config: Using QTest library 4.7.4, Qt 4.7.4 PASS : tst_Skip::initTestCase() SKIP : tst_Skip::test() skipping all Loc: [/home/user/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)] diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf index 575b1e5..45ad76a 100644 --- a/tools/assistant/tools/assistant/doc/assistant.qdocconf +++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf @@ -12,5 +12,5 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ "<td width=\"30%\" align=\"left\">Copyright © 2011 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ "<td width=\"40%\" align=\"center\">Trademarks</td>\n" \ - "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.3</div></td>\n" \ + "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.4</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf index 9b16233..377f0f1 100644 --- a/tools/qdoc3/doc/files/qt.qdocconf +++ b/tools/qdoc3/doc/files/qt.qdocconf @@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.473 +qhp.Qt.namespace = com.trolltech.qt.474 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \ images/dynamiclayouts-example.png \ images/stylesheet-coffee-plastique.png -qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.3 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 +qhp.Qt.filterAttributes = qt 4.7.4 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.4 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.4 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 74ab67b..4141a03 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Assistant qhp.Assistant.file = assistant.qhp -qhp.Assistant.namespace = com.trolltech.assistant.473 +qhp.Assistant.namespace = com.trolltech.assistant.474 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual qhp.Assistant.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Assistant.filterAttributes = qt 4.7.3 tools assistant +qhp.Assistant.filterAttributes = qt 4.7.4 tools assistant qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant qhp.Assistant.subprojects = manual examples diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index 42dbc20..6c98ddf 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Designer qhp.Designer.file = designer.qhp -qhp.Designer.namespace = com.trolltech.designer.473 +qhp.Designer.namespace = com.trolltech.designer.474 qhp.Designer.virtualFolder = qdoc qhp.Designer.indexTitle = Qt Designer Manual qhp.Designer.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Designer.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Designer.filterAttributes = qt 4.7.3 tools designer +qhp.Designer.filterAttributes = qt 4.7.4 tools designer qhp.Designer.customFilters.Designer.name = Qt Designer Manual qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer qhp.Designer.subprojects = manual examples diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 7c01023..c9d6751 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Linguist qhp.Linguist.file = linguist.qhp -qhp.Linguist.namespace = com.trolltech.linguist.473 +qhp.Linguist.namespace = com.trolltech.linguist.474 qhp.Linguist.virtualFolder = qdoc qhp.Linguist.indexTitle = Qt Linguist Manual qhp.Linguist.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Linguist.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Linguist.filterAttributes = qt 4.7.3 tools linguist +qhp.Linguist.filterAttributes = qt 4.7.4 tools linguist qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist qhp.Linguist.subprojects = manual examples diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 12c939c..8fe9034 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -21,7 +21,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qml qhp.Qml.file = qml.qhp -qhp.Qml.namespace = com.trolltech.qml.473 +qhp.Qml.namespace = com.trolltech.qml.474 qhp.Qml.virtualFolder = qdoc qhp.Qml.indexTitle = Qml Reference @@ -61,9 +61,9 @@ qhp.Qml.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Qml.filterAttributes = qt 4.7.3 qtrefdoc -qhp.Qml.customFilters.Qt.name = Qt 4.7.3 -qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.3 +qhp.Qml.filterAttributes = qt 4.7.4 qtrefdoc +qhp.Qml.customFilters.Qt.name = Qt 4.7.4 +qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.4 qhp.Qml.subprojects = classes qhp.Qml.subprojects.classes.title = Elements qhp.Qml.subprojects.classes.indexTitle = Qml Elements diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index b7d1299..c5a0f40 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = qmake qhp.qmake.file = qmake.qhp -qhp.qmake.namespace = com.trolltech.qmake.473 +qhp.qmake.namespace = com.trolltech.qmake.474 qhp.qmake.virtualFolder = qdoc qhp.qmake.indexTitle = QMake Manual qhp.qmake.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.qmake.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.qmake.filterAttributes = qt 4.7.3 tools qmake +qhp.qmake.filterAttributes = qt 4.7.4 tools qmake qhp.qmake.customFilters.qmake.name = qmake Manual qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake qhp.qmake.subprojects = manual diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf index a4d0653..ef3f78b 100644 --- a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.473 +qhp.Qt.namespace = com.trolltech.qt.474 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = Qt qhp.Qt.indexTitle = Qt qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc ja_JP -qhp.Qt.customFilters.Qt.name = Qt 4.7.3 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 +qhp.Qt.filterAttributes = qt 4.7.4 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.4 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.4 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index 818b5c5..3eef92c 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.473 +qhp.Qt.namespace = com.trolltech.qt.474 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = 教程 qhp.Qt.indexTitle = 教程 qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc zh_CN -qhp.Qt.customFilters.Qt.name = Qt 4.7.3 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 +qhp.Qt.filterAttributes = qt 4.7.4 qtrefdoc zh_CN +qhp.Qt.customFilters.Qt.name = Qt 4.7.4 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.4 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt-project.qdocconf b/tools/qdoc3/test/qt-project.qdocconf index 2da0e90..3091cf8 100644 --- a/tools/qdoc3/test/qt-project.qdocconf +++ b/tools/qdoc3/test/qt-project.qdocconf @@ -15,14 +15,14 @@ naturallanguage = en_US qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.473 +qhp.Qt.namespace = com.trolltech.qt.474 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = -qhp.Qt.filterAttributes = qt 4.7.3 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.3 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.3 +qhp.Qt.filterAttributes = qt 4.7.4 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.4 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.4 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes -- cgit v0.12 From 84a342eea111f0a1da8fd0c417362aae2b851e56 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki <tasuku.suzuki@nokia.com> Date: Mon, 21 Mar 2011 15:13:16 +0100 Subject: Fix compilation with QT_NO_ Merge-request: 1132 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> --- src/corelib/plugin/qelfparser_p.cpp | 2 + src/corelib/plugin/qelfparser_p.h | 2 + src/declarative/qml/qdeclarativeimport.cpp | 8 ++++ src/declarative/qml/qdeclarativesqldatabase.cpp | 6 +++ src/gui/image/qpnghandler.cpp | 2 + src/gui/itemviews/qabstractitemview.cpp | 5 +++ src/gui/itemviews/qabstractitemview.h | 2 + src/gui/kernel/qwidget.cpp | 5 ++- src/gui/util/qflickgesture.cpp | 44 ++++++++++++++++++++-- src/gui/util/qscroller.cpp | 33 +++++++++++++++- src/gui/util/qscroller.h | 6 +++ src/gui/util/qscroller_p.h | 9 ++++- src/gui/widgets/qabstractscrollarea.cpp | 2 + src/gui/widgets/qcombobox.cpp | 2 + src/gui/widgets/qmainwindowlayout.cpp | 4 ++ src/gui/widgets/qmainwindowlayout_p.h | 4 +- src/network/socket/qabstractsocketengine_p.h | 6 ++- src/network/socket/qhttpsocketengine.cpp | 2 + src/network/socket/qhttpsocketengine_p.h | 2 + src/network/socket/qnativesocketengine.cpp | 5 ++- src/network/socket/qnativesocketengine_p.h | 6 +++ src/network/socket/qnativesocketengine_unix.cpp | 3 ++ src/network/socket/qsocks5socketengine.cpp | 2 + src/network/socket/qsocks5socketengine_p.h | 2 + src/network/socket/qudpsocket.cpp | 4 ++ src/network/socket/qudpsocket.h | 2 + src/plugins/bearer/connman/qofonoservice_linux.cpp | 5 +++ src/plugins/bearer/connman/qofonoservice_linux_p.h | 6 +++ src/script/api/qscriptengine.cpp | 6 +++ 29 files changed, 176 insertions(+), 11 deletions(-) diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp index fc5b0d9..198c6d7 100644 --- a/src/corelib/plugin/qelfparser_p.cpp +++ b/src/corelib/plugin/qelfparser_p.cpp @@ -41,6 +41,7 @@ #include "qelfparser_p.h" +#ifndef QT_NO_LIBRARY #if defined (Q_OF_ELF) && defined(Q_CC_GNU) #include "qlibrary_p.h" @@ -236,3 +237,4 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library QT_END_NAMESPACE #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) +#endif // QT_NO_LIBRARY diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h index 163d2c1..3ccce10 100644 --- a/src/corelib/plugin/qelfparser_p.h +++ b/src/corelib/plugin/qelfparser_p.h @@ -56,6 +56,7 @@ #include <qendian.h> #include <qglobal.h> +#ifndef QT_NO_LIBRARY #if defined (Q_OF_ELF) && defined(Q_CC_GNU) QT_BEGIN_NAMESPACE @@ -102,5 +103,6 @@ public: QT_END_NAMESPACE #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) +#endif // QT_NO_LIBRARY #endif // QELFPARSER_P_H diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 7a1234d..e8d593f 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -722,6 +722,7 @@ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) // Search order is applicationDirPath(), $QML_IMPORT_PATH, QLibraryInfo::ImportsPath +#ifndef QT_NO_SETTINGS QString installImportsPath = QLibraryInfo::location(QLibraryInfo::ImportsPath); #if defined(Q_OS_SYMBIAN) @@ -748,6 +749,9 @@ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) #else addImportPath(installImportsPath); #endif + +#endif // QT_NO_SETTINGS + // env import paths QByteArray envImportPath = qgetenv("QML_IMPORT_PATH"); if (!envImportPath.isEmpty()) { @@ -1014,6 +1018,7 @@ bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QSt if (qmlImportTrace()) qDebug().nospace() << "QDeclarativeImportDatabase::importPlugin: " << uri << " from " << filePath; +#ifndef QT_NO_LIBRARY QFileInfo fileInfo(filePath); const QString absoluteFilePath = fileInfo.absoluteFilePath(); @@ -1065,6 +1070,9 @@ bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QSt } return true; +#else + return false; +#endif } diff --git a/src/declarative/qml/qdeclarativesqldatabase.cpp b/src/declarative/qml/qdeclarativesqldatabase.cpp index 207fb57..4ed2bba 100644 --- a/src/declarative/qml/qdeclarativesqldatabase.cpp +++ b/src/declarative/qml/qdeclarativesqldatabase.cpp @@ -309,8 +309,10 @@ static QScriptValue qmlsqldatabase_change_version(QScriptContext *context, QScri if (ok) { context->thisObject().setProperty(QLatin1String("version"), to_version, QScriptValue::ReadOnly); +#ifndef QT_NO_SETTINGS QSettings ini(qmlsqldatabase_databaseFile(db.connectionName(),engine) + QLatin1String(".ini"), QSettings::IniFormat); ini.setValue(QLatin1String("Version"), to_version); +#endif } return engine->undefinedValue(); @@ -355,6 +357,7 @@ static QScriptValue qmlsqldatabase_read_transaction(QScriptContext *context, QSc */ static QScriptValue qmlsqldatabase_open_sync(QScriptContext *context, QScriptEngine *engine) { +#ifndef QT_NO_SETTINGS qmlsqldatabase_initDatabasesPath(engine); QSqlDatabase database; @@ -418,6 +421,9 @@ static QScriptValue qmlsqldatabase_open_sync(QScriptContext *context, QScriptEng } return result; +#else + return engine->undefinedValue(); +#endif // QT_NO_SETTINGS } void qt_add_qmlsqldatabase(QScriptEngine *engine) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index a9aad51..7e0355a 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -492,8 +492,10 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) outImage->setDotsPerMeterX(png_get_x_pixels_per_meter(png_ptr,info_ptr)); outImage->setDotsPerMeterY(png_get_y_pixels_per_meter(png_ptr,info_ptr)); +#ifndef QT_NO_IMAGE_TEXT for (int i = 0; i < readTexts.size()-1; i+=2) outImage->setText(readTexts.at(i), readTexts.at(i+1)); +#endif state = ReadingEnd; png_read_end(png_ptr, end_info); diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 291ec6e..d671496 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -194,6 +194,8 @@ void QAbstractItemViewPrivate::checkMouseMove(const QPersistentModelIndex &index } } +#ifndef QT_NO_GESTURES + // stores and restores the selection and current item when flicking void QAbstractItemViewPrivate::_q_scrollerStateChanged() { @@ -225,6 +227,7 @@ void QAbstractItemViewPrivate::_q_scrollerStateChanged() } } +#endif // QT_NO_GESTURES /*! \class QAbstractItemView @@ -1661,7 +1664,9 @@ bool QAbstractItemView::viewportEvent(QEvent *event) break; case QEvent::ScrollPrepare: executeDelayedItemsLayout(); +#ifndef QT_NO_GESTURES connect(QScroller::scroller(d->viewport), SIGNAL(stateChanged(QScroller::State)), this, SLOT(_q_scrollerStateChanged()), Qt::UniqueConnection); +#endif break; default: diff --git a/src/gui/itemviews/qabstractitemview.h b/src/gui/itemviews/qabstractitemview.h index 20cfb87..f11f209 100644 --- a/src/gui/itemviews/qabstractitemview.h +++ b/src/gui/itemviews/qabstractitemview.h @@ -359,7 +359,9 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed()) Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged()) Q_PRIVATE_SLOT(d_func(), void _q_headerDataChanged()) +#ifndef QT_NO_GESTURES Q_PRIVATE_SLOT(d_func(), void _q_scrollerStateChanged()) +#endif friend class QTreeViewPrivate; // needed to compile with MSVC friend class QAccessibleItemRow; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index adb5fe1..159a2ad 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -366,9 +366,12 @@ QWindowSurface *QWidgetPrivate::createDefaultWindowSurface() Q_Q(QWidget); QWindowSurface *surface; +#ifndef QT_NO_PROPERTIES if (q->property("_q_DummyWindowSurface").toBool()) { surface = new QDummyWindowSurface(q); - } else { + } else +#endif + { if (QApplicationPrivate::graphicsSystem()) surface = QApplicationPrivate::graphicsSystem()->createWindowSurface(q); else diff --git a/src/gui/util/qflickgesture.cpp b/src/gui/util/qflickgesture.cpp index 8baca07..fdd2a95 100644 --- a/src/gui/util/qflickgesture.cpp +++ b/src/gui/util/qflickgesture.cpp @@ -75,6 +75,7 @@ static QMouseEvent *copyMouseEvent(QEvent *e) QMouseEvent *me = static_cast<QMouseEvent *>(e); return new QMouseEvent(me->type(), QPoint(0, 0), me->globalPos(), me->button(), me->buttons(), me->modifiers()); } +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMousePress: case QEvent::GraphicsSceneMouseRelease: case QEvent::GraphicsSceneMouseMove: { @@ -103,6 +104,7 @@ static QMouseEvent *copyMouseEvent(QEvent *e) return copy; #endif } +#endif // QT_NO_GRAPHICSVIEW default: return 0; } @@ -265,6 +267,7 @@ protected: if (mouseTarget) { sendingEvent = true; +#ifndef QT_NO_GRAPHICSVIEW QGraphicsItem *grabber = 0; if (mouseTarget->parentWidget()) { if (QGraphicsView *gv = qobject_cast<QGraphicsView *>(mouseTarget->parentWidget())) { @@ -281,12 +284,14 @@ protected: qFGDebug() << "QFG: ungrabbing" << grabber; grabber->ungrabMouse(); } +#endif // QT_NO_GRAPHICSVIEW if (me) { QMouseEvent copy(me->type(), mouseTarget->mapFromGlobal(me->globalPos()), me->globalPos(), me->button(), me->buttons(), me->modifiers()); qt_sendSpontaneousEvent(mouseTarget, ©); } +#ifndef QT_NO_GRAPHICSVIEW if (grabber && (flags & RegrabMouseAfterwards)) { // GraphicsView Mouse Handling Workaround #2: // we need to re-grab the mouse after sending a faked mouse @@ -296,6 +301,7 @@ protected: qFGDebug() << "QFG: re-grabbing" << grabber; grabber->grabMouse(); } +#endif sendingEvent = false; } } @@ -357,10 +363,12 @@ QFlickGestureRecognizer::QFlickGestureRecognizer(Qt::MouseButton button) */ QGesture *QFlickGestureRecognizer::create(QObject *target) { +#ifndef QT_NO_GRAPHICSVIEW QGraphicsObject *go = qobject_cast<QGraphicsObject*>(target); if (go && button == Qt::NoButton) { go->setAcceptTouchEvents(true); } +#endif return new QFlickGesture(target, button); } @@ -389,7 +397,9 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, return Ignore; // nothing to do without a scroller? QWidget *receiverWidget = qobject_cast<QWidget *>(d->receiver); +#ifndef QT_NO_GRAPHICSVIEW QGraphicsObject *receiverGraphicsObject = qobject_cast<QGraphicsObject *>(d->receiver); +#endif // this is only set for events that we inject into the event loop via sendEvent() if (PressDelayHandler::instance()->shouldEventBeIgnored(event)) { @@ -398,7 +408,9 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, } const QMouseEvent *me = 0; +#ifndef QT_NO_GRAPHICSVIEW const QGraphicsSceneMouseEvent *gsme = 0; +#endif const QTouchEvent *te = 0; QPoint globalPos; @@ -415,6 +427,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, globalPos = me->globalPos(); } break; +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMousePress: case QEvent::GraphicsSceneMouseRelease: case QEvent::GraphicsSceneMouseMove: @@ -425,6 +438,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, globalPos = gsme->screenPos(); } break; +#endif case QEvent::TouchBegin: case QEvent::TouchEnd: case QEvent::TouchUpdate: @@ -466,7 +480,11 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, break; } - if (!me && !gsme && !te) // Neither mouse nor touch + if (!me +#ifndef QT_NO_GRAPHICSVIEW + && !gsme +#endif + && !te) // Neither mouse nor touch return Ignore; // get the current pointer position in local coordinates. @@ -502,6 +520,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, } break; +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMousePress: if (gsme && gsme->button() == button && gsme->buttons() == button) { point = gsme->scenePos(); @@ -529,6 +548,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, inputType = QScroller::InputMove; } break; +#endif case QEvent::TouchBegin: inputType = QScroller::InputPress; @@ -568,12 +588,14 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, if (QWidget *w = qobject_cast<QWidget *>(as->target())) { scrollerRegion = QRect(w->mapToGlobal(QPoint(0, 0)), w->size()); +#ifndef QT_NO_GRAPHICSVIEW } else if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(as->target())) { if (go->scene() && !go->scene()->views().isEmpty()) { foreach (QGraphicsView *gv, go->scene()->views()) scrollerRegion |= gv->mapFromScene(go->mapToScene(go->boundingRect())) .translated(gv->mapToGlobal(QPoint(0, 0))); } +#endif } // active scrollers always have priority if (scrollerRegion.contains(globalPos)) @@ -588,8 +610,10 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, if (inputType) { if (QWidget *w = qobject_cast<QWidget *>(d->receiver)) point = w->mapFromGlobal(point.toPoint()); +#ifndef QT_NO_GRAPHICSVIEW else if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(d->receiver)) point = go->mapFromScene(point); +#endif // inform the scroller about the new event scroller->handleInput(inputType, point, monotonicTimer.elapsed()); @@ -602,7 +626,11 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, // Consume all mouse events while dragging or scrolling to avoid nasty // side effects with Qt's standard widgets. - if ((me || gsme) && scrollerIsActive) + if ((me +#ifndef QT_NO_GRAPHICSVIEW + || gsme +#endif + ) && scrollerIsActive) result |= ConsumeEventHint; // The only problem with this approach is that we consume the @@ -610,7 +638,11 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, // have to fake a MouseRelease "somewhere" to not mess with the internal // states of Qt's widgets (a QPushButton would stay in 'pressed' state // forever, if it doesn't receive a MouseRelease). - if (me || gsme) { + if (me +#ifndef QT_NO_GRAPHICSVIEW + || gsme +#endif + ) { if (!scrollerWasDragging && !scrollerWasScrolling && scrollerIsActive) PressDelayHandler::instance()->scrollerBecameActive(); else if (scrollerWasScrolling && (scroller->state() == QScroller::Dragging || scroller->state() == QScroller::Inactive)) @@ -622,7 +654,9 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, } else { switch (event->type()) { case QEvent::MouseButtonPress: +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMousePress: +#endif if (scroller->state() == QScroller::Pressed) { int pressDelay = int(1000 * scroller->scrollerProperties().scrollMetric(QScrollerProperties::MousePressEventDelay).toReal()); if (pressDelay > 0) { @@ -639,7 +673,9 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, break; case QEvent::MouseMove: +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMouseMove: +#endif if (PressDelayHandler::instance()->isDelaying()) result |= ConsumeEventHint; // fall through @@ -647,7 +683,9 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, result |= scrollerIsActive ? TriggerGesture : Ignore; break; +#ifndef QT_NO_GRAPHICSVIEW case QEvent::GraphicsSceneMouseRelease: +#endif case QEvent::MouseButtonRelease: if (PressDelayHandler::instance()->released(event, scrollerWasDragging || scrollerWasScrolling, scrollerIsActive)) result |= ConsumeEventHint; diff --git a/src/gui/util/qscroller.cpp b/src/gui/util/qscroller.cpp index ac5607c..9c2d24d 100644 --- a/src/gui/util/qscroller.cpp +++ b/src/gui/util/qscroller.cpp @@ -192,6 +192,7 @@ static qreal progressForValue(const QEasingCurve &curve, qreal value) } +#ifndef QT_NO_ANIMATION class QScrollTimer : public QAbstractAnimation { public: @@ -230,6 +231,7 @@ private: bool ignoreUpdate; int skip; }; +#endif // QT_NO_ANIMATION /*! \class QScroller @@ -376,6 +378,7 @@ void QScroller::setScrollerProperties(const QScrollerProperties &sp) } } +#ifndef QT_NO_GESTURES /*! Registers a custom scroll gesture recognizer, grabs it for the \a @@ -426,11 +429,12 @@ Qt::GestureType QScroller::grabGesture(QObject *target, ScrollerGestureType scro widget->grabGesture(sp->recognizerType); if (scrollGestureType == TouchGesture) widget->setAttribute(Qt::WA_AcceptTouchEvents); - +#ifndef QT_NO_GRAPHICSVIEW } else if (QGraphicsObject *go = qobject_cast<QGraphicsObject*>(target)) { if (scrollGestureType == TouchGesture) go->setAcceptTouchEvents(true); go->grabGesture(sp->recognizerType); +#endif // QT_NO_GRAPHICSVIEW } return sp->recognizerType; } @@ -469,9 +473,10 @@ void QScroller::ungrabGesture(QObject *target) if (target->isWidgetType()) { QWidget *widget = static_cast<QWidget *>(target); widget->ungrabGesture(sp->recognizerType); - +#ifndef QT_NO_GRAPHICSVIEW } else if (QGraphicsObject *go = qobject_cast<QGraphicsObject*>(target)) { go->ungrabGesture(sp->recognizerType); +#endif } QGestureRecognizer::unregisterRecognizer(sp->recognizerType); @@ -479,6 +484,8 @@ void QScroller::ungrabGesture(QObject *target) sp->recognizer = 0; } +#endif // QT_NO_GESTURES + /*! \internal */ @@ -496,9 +503,11 @@ QScroller::QScroller(QObject *target) QScroller::~QScroller() { Q_D(QScroller); +#ifndef QT_NO_GESTURES QGestureRecognizer::unregisterRecognizer(d->recognizerType); // do not delete the recognizer. The QGestureManager is doing this. d->recognizer = 0; +#endif QScrollerPrivate::allScrollers.remove(d->target); QScrollerPrivate::activeScrollers.remove(this); @@ -562,6 +571,7 @@ QPointF QScroller::pixelPerMeter() const Q_D(const QScroller); QPointF ppm = d->pixelPerMeter; +#ifndef QT_NO_GRAPHICSVIEW if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(d->target)) { QTransform viewtr; //TODO: the first view isn't really correct - maybe use an additional field in the prepare event? @@ -576,6 +586,7 @@ QPointF QScroller::pixelPerMeter() const ppm.ry() /= QLineF(p0, py).length(); } } +#endif // QT_NO_GRAPHICSVIEW return ppm; } @@ -869,8 +880,10 @@ void QScroller::setSnapPositionsY(qreal first, qreal interval) QScrollerPrivate::QScrollerPrivate(QScroller *q, QObject *_target) : target(_target) +#ifndef QT_NO_GESTURES , recognizer(0) , recognizerType(Qt::CustomGesture) +#endif , state(QScroller::Inactive) , firstScroll(true) , pressTimestamp(0) @@ -879,7 +892,9 @@ QScrollerPrivate::QScrollerPrivate(QScroller *q, QObject *_target) , snapIntervalX(0.0) , snapFirstY(-1.0) , snapIntervalY(0.0) +#ifndef QT_NO_ANIMATION , scrollTimer(new QScrollTimer(this)) +#endif , q_ptr(q) { connect(target, SIGNAL(destroyed(QObject*)), this, SLOT(targetDestroyed())); @@ -919,7 +934,9 @@ const char *QScrollerPrivate::inputName(QScroller::Input input) void QScrollerPrivate::targetDestroyed() { +#ifndef QT_NO_ANIMATION scrollTimer->stop(); +#endif delete q_ptr; } @@ -945,7 +962,9 @@ void QScrollerPrivate::timerTick() } } +#ifndef QT_NO_ANIMATION scrollTimer->stop(); +#endif } /*! @@ -1436,11 +1455,13 @@ bool QScrollerPrivate::prepareScrolling(const QPointF &position) if (QWidget *w = qobject_cast<QWidget *>(target)) setDpiFromWidget(w); +#ifndef QT_NO_GRAPHICSVIEW if (QGraphicsObject *go = qobject_cast<QGraphicsObject *>(target)) { //TODO: the first view isn't really correct - maybe use an additional field in the prepare event? if (go->scene() && !go->scene()->views().isEmpty()) setDpiFromWidget(go->scene()->views().first()); } +#endif if (state == QScroller::Scrolling) { recalcScrollingSegments(); @@ -1690,7 +1711,9 @@ void QScrollerPrivate::setState(QScroller::State newstate) switch (newstate) { case QScroller::Inactive: +#ifndef QT_NO_ANIMATION scrollTimer->stop(); +#endif // send the last scroll event (but only after the current state change was finished) if (!firstScroll) @@ -1700,7 +1723,9 @@ void QScrollerPrivate::setState(QScroller::State newstate) break; case QScroller::Pressed: +#ifndef QT_NO_ANIMATION scrollTimer->stop(); +#endif oldVelocity = releaseVelocity; releaseVelocity = QPointF(0, 0); @@ -1708,12 +1733,16 @@ void QScrollerPrivate::setState(QScroller::State newstate) case QScroller::Dragging: dragDistance = QPointF(0, 0); +#ifndef QT_NO_ANIMATION if (state == QScroller::Pressed) scrollTimer->start(); +#endif break; case QScroller::Scrolling: +#ifndef QT_NO_ANIMATION scrollTimer->start(); +#endif break; } diff --git a/src/gui/util/qscroller.h b/src/gui/util/qscroller.h index a026be4..1599c7d 100644 --- a/src/gui/util/qscroller.h +++ b/src/gui/util/qscroller.h @@ -55,8 +55,10 @@ QT_MODULE(Gui) class QWidget; class QScrollerPrivate; class QScrollerProperties; +#ifndef QT_NO_GESTURES class QFlickGestureRecognizer; class QMouseFlickGestureRecognizer; +#endif class Q_GUI_EXPORT QScroller : public QObject { @@ -94,9 +96,11 @@ public: static QScroller *scroller(QObject *target); static const QScroller *scroller(const QObject *target); +#ifndef QT_NO_GESTURES static Qt::GestureType grabGesture(QObject *target, ScrollerGestureType gestureType = TouchGesture); static Qt::GestureType grabbedGesture(QObject *target); static void ungrabGesture(QObject *target); +#endif static QList<QScroller *> activeScrollers(); @@ -139,7 +143,9 @@ private: Q_DISABLE_COPY(QScroller) Q_DECLARE_PRIVATE(QScroller) +#ifndef QT_NO_GESTURES friend class QFlickGestureRecognizer; +#endif }; QT_END_NAMESPACE diff --git a/src/gui/util/qscroller_p.h b/src/gui/util/qscroller_p.h index fb2b257..8c5f2e7 100644 --- a/src/gui/util/qscroller_p.h +++ b/src/gui/util/qscroller_p.h @@ -69,10 +69,13 @@ QT_BEGIN_NAMESPACE +#ifndef QT_NO_GESTURES class QFlickGestureRecognizer; +#endif +#ifndef QT_NO_ANIMATION class QScrollTimer; - +#endif class QScrollerPrivate : public QObject { Q_OBJECT @@ -152,8 +155,10 @@ public: // non static QObject *target; QScrollerProperties properties; +#ifndef QT_NO_GESTURES QFlickGestureRecognizer *recognizer; Qt::GestureType recognizerType; +#endif // scroller state: @@ -194,7 +199,9 @@ public: QElapsedTimer monotonicTimer; QPointF releaseVelocity; // the starting velocity of the scrolling state +#ifndef QT_NO_ANIMATION QScrollTimer *scrollTimer; +#endif QScroller *q_ptr; }; diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index 7460f32..f948af9 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -1386,6 +1386,7 @@ bool QAbstractScrollAreaPrivate::canStartScrollingAt( const QPoint &startPos ) { Q_Q(QAbstractScrollArea); +#ifndef QT_NO_GRAPHICSVIEW // don't start scrolling when a drag mode has been set. // don't start scrolling on a movable item. if (QGraphicsView *view = qobject_cast<QGraphicsView *>(q)) { @@ -1397,6 +1398,7 @@ bool QAbstractScrollAreaPrivate::canStartScrollingAt( const QPoint &startPos ) if (childItem && (childItem->flags() & QGraphicsItem::ItemIsMovable)) return false; } +#endif // don't start scrolling on a QAbstractSlider if (qobject_cast<QAbstractSlider *>(q->viewport()->childAt(startPos))) { diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index b5dda5a..d63ccfb 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -705,11 +705,13 @@ void QComboBoxPrivateContainer::hideEvent(QHideEvent *) { emit resetButton(); combo->update(); +#ifndef QT_NO_GRAPHICSVIEW // QGraphicsScenePrivate::removePopup closes the combo box popup, it hides it non-explicitly. // Hiding/showing the QComboBox after this will unexpectedly show the popup as well. // Re-hiding the popup container makes sure it is explicitly hidden. if (QGraphicsProxyWidget *proxy = graphicsProxyWidget()) proxy->hide(); +#endif } void QComboBoxPrivateContainer::mousePressEvent(QMouseEvent *e) diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp index 6bc07e1..d4afe07 100644 --- a/src/gui/widgets/qmainwindowlayout.cpp +++ b/src/gui/widgets/qmainwindowlayout.cpp @@ -73,6 +73,10 @@ # include <private/qt_cocoa_helpers_mac_p.h> #endif +#ifdef QT_NO_DOCKWIDGET +extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window); +#endif + #ifdef Q_DEBUG_MAINWINDOW_LAYOUT # include <QTextStream> #endif diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h index 2a44432..20aca61 100644 --- a/src/gui/widgets/qmainwindowlayout_p.h +++ b/src/gui/widgets/qmainwindowlayout_p.h @@ -70,12 +70,12 @@ //#define Q_DEBUG_MAINWINDOW_LAYOUT -#ifdef Q_DEBUG_MAINWINDOW_LAYOUT +#if defined(Q_DEBUG_MAINWINDOW_LAYOUT) && !defined(QT_NO_DOCKWIDGET) QT_BEGIN_NAMESPACE class QTextStream; Q_GUI_EXPORT void qt_dumpLayout(QTextStream &qout, QMainWindow *window); QT_END_NAMESPACE -#endif // Q_DEBUG_MAINWINDOW_LAYOUT +#endif // Q_DEBUG_MAINWINDOW_LAYOUT && !QT_NO_DOCKWIDGET #ifdef Q_WS_MAC // Forward defs to make avoid including Carbon.h (faster compile you know ;). diff --git a/src/network/socket/qabstractsocketengine_p.h b/src/network/socket/qabstractsocketengine_p.h index c00b6d7..ee6dad6 100644 --- a/src/network/socket/qabstractsocketengine_p.h +++ b/src/network/socket/qabstractsocketengine_p.h @@ -61,7 +61,9 @@ QT_BEGIN_NAMESPACE class QAuthenticator; class QAbstractSocketEnginePrivate; +#ifndef QT_NO_NETWORKINTERFACE class QNetworkInterface; +#endif class QNetworkProxy; class QAbstractSocketEngineReceiver { @@ -121,12 +123,14 @@ public: virtual qint64 write(const char *data, qint64 len) = 0; #ifndef QT_NO_UDPSOCKET +#ifndef QT_NO_NETWORKINTERFACE virtual bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface) = 0; virtual bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface) = 0; virtual QNetworkInterface multicastInterface() const = 0; virtual bool setMulticastInterface(const QNetworkInterface &iface) = 0; +#endif // QT_NO_NETWORKINTERFACE virtual qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0, quint16 *port = 0) = 0; @@ -134,7 +138,7 @@ public: quint16 port) = 0; virtual bool hasPendingDatagrams() const = 0; virtual qint64 pendingDatagramSize() const = 0; -#endif +#endif // QT_NO_UDPSOCKET virtual qint64 bytesToWrite() const = 0; diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 6a025f2..df06a46 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -240,6 +240,7 @@ qint64 QHttpSocketEngine::write(const char *data, qint64 len) } #ifndef QT_NO_UDPSOCKET +#ifndef QT_NO_NETWORKINTERFACE bool QHttpSocketEngine::joinMulticastGroup(const QHostAddress &, const QNetworkInterface &) { @@ -267,6 +268,7 @@ bool QHttpSocketEngine::setMulticastInterface(const QNetworkInterface &) QLatin1String("Operation on socket is not supported")); return false; } +#endif // QT_NO_NETWORKINTERFACE qint64 QHttpSocketEngine::readDatagram(char *, qint64, QHostAddress *, quint16 *) diff --git a/src/network/socket/qhttpsocketengine_p.h b/src/network/socket/qhttpsocketengine_p.h index 2ecd708..361ef5c 100644 --- a/src/network/socket/qhttpsocketengine_p.h +++ b/src/network/socket/qhttpsocketengine_p.h @@ -102,12 +102,14 @@ public: qint64 write(const char *data, qint64 len); #ifndef QT_NO_UDPSOCKET +#ifndef QT_NO_NETWORKINTERFACE bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &interface); bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &interface); QNetworkInterface multicastInterface() const; bool setMulticastInterface(const QNetworkInterface &iface); +#endif // QT_NO_NETWORKINTERFACE qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0, quint16 *port = 0); diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 56c1716..7c9911a 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -647,6 +647,8 @@ int QNativeSocketEngine::accept() return d->nativeAccept(); } +#ifndef QT_NO_NETWORKINTERFACE + /*! \since 4.8 */ @@ -682,7 +684,6 @@ QNetworkInterface QNativeSocketEngine::multicastInterface() const return d->nativeMulticastInterface(); } - /*! \since 4.8 */ bool QNativeSocketEngine::setMulticastInterface(const QNetworkInterface &iface) { @@ -692,6 +693,8 @@ bool QNativeSocketEngine::setMulticastInterface(const QNetworkInterface &iface) return d->nativeSetMulticastInterface(iface); } +#endif // QT_NO_NETWORKINTERFACE + /*! Returns the number of bytes that are currently available for reading. On error, -1 is returned. diff --git a/src/network/socket/qnativesocketengine_p.h b/src/network/socket/qnativesocketengine_p.h index 074dd1a..d2ccb21 100644 --- a/src/network/socket/qnativesocketengine_p.h +++ b/src/network/socket/qnativesocketengine_p.h @@ -101,7 +101,9 @@ union qt_sockaddr { }; class QNativeSocketEnginePrivate; +#ifndef QT_NO_NETWORKINTERFACE class QNetworkInterface; +#endif class Q_AUTOTEST_EXPORT QNativeSocketEngine : public QAbstractSocketEngine { @@ -124,12 +126,14 @@ public: int accept(); void close(); +#ifndef QT_NO_NETWORKINTERFACE bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); QNetworkInterface multicastInterface() const; bool setMulticastInterface(const QNetworkInterface &iface); +#endif qint64 bytesAvailable() const; @@ -245,12 +249,14 @@ public: bool nativeBind(const QHostAddress &address, quint16 port); bool nativeListen(int backlog); int nativeAccept(); +#ifndef QT_NO_NETWORKINTERFACE bool nativeJoinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); bool nativeLeaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); QNetworkInterface nativeMulticastInterface() const; bool nativeSetMulticastInterface(const QNetworkInterface &iface); +#endif qint64 nativeBytesAvailable() const; bool nativeHasPendingDatagrams() const; diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp index c819659..091b285 100644 --- a/src/network/socket/qnativesocketengine_unix.cpp +++ b/src/network/socket/qnativesocketengine_unix.cpp @@ -615,6 +615,7 @@ int QNativeSocketEnginePrivate::nativeAccept() return acceptedDescriptor; } +#ifndef QT_NO_NETWORKINTERFACE static bool multicastMembershipHelper(QNativeSocketEnginePrivate *d, int how6, @@ -780,6 +781,8 @@ bool QNativeSocketEnginePrivate::nativeSetMulticastInterface(const QNetworkInter return (::setsockopt(socketDescriptor, IPPROTO_IP, IP_MULTICAST_IF, &v, sizeof(v)) != -1); } +#endif // QT_NO_NETWORKINTERFACE + qint64 QNativeSocketEnginePrivate::nativeBytesAvailable() const { int nbytes = 0; diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index ab3d260..10a2695 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1545,6 +1545,7 @@ qint64 QSocks5SocketEngine::write(const char *data, qint64 len) } #ifndef QT_NO_UDPSOCKET +#ifndef QT_NO_NETWORKINTERFACE bool QSocks5SocketEngine::joinMulticastGroup(const QHostAddress &, const QNetworkInterface &) { @@ -1573,6 +1574,7 @@ bool QSocks5SocketEngine::setMulticastInterface(const QNetworkInterface &) QLatin1String("Operation on socket is not supported")); return false; } +#endif // QT_NO_NETWORKINTERFACE qint64 QSocks5SocketEngine::readDatagram(char *data, qint64 maxlen, QHostAddress *addr, quint16 *port) diff --git a/src/network/socket/qsocks5socketengine_p.h b/src/network/socket/qsocks5socketengine_p.h index b85fd62..9492d45 100644 --- a/src/network/socket/qsocks5socketengine_p.h +++ b/src/network/socket/qsocks5socketengine_p.h @@ -92,12 +92,14 @@ public: qint64 write(const char *data, qint64 len); #ifndef QT_NO_UDPSOCKET +#ifndef QT_NO_NETWORKINTERFACE bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &interface); bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &interface); QNetworkInterface multicastInterface() const; bool setMulticastInterface(const QNetworkInterface &iface); +#endif // QT_NO_NETWORKINTERFACE qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0, quint16 *port = 0); diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 6a62b12..97a5466 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -338,6 +338,8 @@ bool QUdpSocket::bind(quint16 port, BindMode mode) return bind(QHostAddress::Any, port, mode); } +#ifndef QT_NO_NETWORKINTERFACE + /*! \since 4.8 @@ -444,6 +446,8 @@ void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface) d->socketEngine->setMulticastInterface(iface); } +#endif // QT_NO_NETWORKINTERFACE + /*! Returns true if at least one datagram is waiting to be read; otherwise returns false. diff --git a/src/network/socket/qudpsocket.h b/src/network/socket/qudpsocket.h index 82266cb..7502349 100644 --- a/src/network/socket/qudpsocket.h +++ b/src/network/socket/qudpsocket.h @@ -77,6 +77,7 @@ public: bool bind(quint16 port, BindMode mode); // ### Qt 5: Merge the bind functions +#ifndef QT_NO_NETWORKINTERFACE bool joinMulticastGroup(const QHostAddress &groupAddress); bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface); @@ -86,6 +87,7 @@ public: QNetworkInterface multicastInterface() const; void setMulticastInterface(const QNetworkInterface &iface); +#endif bool hasPendingDatagrams() const; qint64 pendingDatagramSize() const; diff --git a/src/plugins/bearer/connman/qofonoservice_linux.cpp b/src/plugins/bearer/connman/qofonoservice_linux.cpp index 2a22280..e3fb2c6 100644 --- a/src/plugins/bearer/connman/qofonoservice_linux.cpp +++ b/src/plugins/bearer/connman/qofonoservice_linux.cpp @@ -53,6 +53,8 @@ #include "qofonoservice_linux_p.h" +#ifndef QT_NO_BEARERMANAGEMENT +#ifndef QT_NO_DBUS QT_BEGIN_NAMESPACE static QDBusConnection dbusConnection = QDBusConnection::systemBus(); @@ -938,3 +940,6 @@ void QOfonoSmsInterface::sendMessage(const QString &to, const QString &message) } QT_END_NAMESPACE + +#endif // QT_NO_DBUS +#endif // QT_NO_BEARERMANAGEMENT diff --git a/src/plugins/bearer/connman/qofonoservice_linux_p.h b/src/plugins/bearer/connman/qofonoservice_linux_p.h index 4db08f5..af54ba0 100644 --- a/src/plugins/bearer/connman/qofonoservice_linux_p.h +++ b/src/plugins/bearer/connman/qofonoservice_linux_p.h @@ -65,6 +65,9 @@ #include <QtDBus/QDBusContext> #include <QMap> +#ifndef QT_NO_BEARERMANAGEMENT +#ifndef QT_NO_DBUS + #define OFONO_SERVICE "org.ofono" #define OFONO_MANAGER_INTERFACE "org.ofono.Manager" #define OFONO_MANAGER_PATH "/" @@ -331,4 +334,7 @@ Q_SIGNALS: QT_END_NAMESPACE +#endif // QT_NO_DBUS +#endif // QT_NO_BEARERMANAGEMENT + #endif //QOFONOSERVICE_H diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index ceb1b03..a3a965e 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -779,6 +779,8 @@ JSC::JSValue JSC_HOST_CALL functionVersion(JSC::ExecState *exec, JSC::JSObject*, return JSC::JSValue(exec, 1); } +#ifndef QT_NO_TRANSLATION + static JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); static JSC::JSValue JSC_HOST_CALL functionQsTranslateNoOp(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); static JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); @@ -917,6 +919,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTrIdNoOp(JSC::ExecState *, JSC::JSObject*, return JSC::jsUndefined(); return args.at(0); } +#endif // QT_NO_TRANSLATION static JSC::JSValue JSC_HOST_CALL stringProtoFuncArg(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); @@ -3486,12 +3489,15 @@ void QScriptEngine::installTranslatorFunctions(const QScriptValue &object) if (!jscObject || !jscObject.isObject()) jscObject = d->globalObject(); // unsigned attribs = JSC::DontEnum; + +#ifndef QT_NO_TRANSLATION JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 5, JSC::Identifier(exec, "qsTranslate"), QScript::functionQsTranslate)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 2, JSC::Identifier(exec, "QT_TRANSLATE_NOOP"), QScript::functionQsTranslateNoOp)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TR_NOOP"), QScript::functionQsTrNoOp)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "qsTrId"), QScript::functionQsTrId)); JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TRID_NOOP"), QScript::functionQsTrIdNoOp)); +#endif glob->stringPrototype()->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "arg"), QScript::stringProtoFuncArg)); } -- cgit v0.12 From 8a9dd3f463a312963dc420ee83ca75fd52e24463 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 21 Mar 2011 15:54:49 +0100 Subject: Designer: Remember default of main container's object name. as a default property value. Users can then safely reset it to its original value. The default-generated name previously led to the uic-generated file names to be different, causing build errors in IDE's. Task-number: QTBUG-18256 --- .../src/components/formeditor/qdesigner_resource.cpp | 5 ++++- tools/designer/src/lib/shared/qdesigner_propertysheet.cpp | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp index 714a556..005459b 100644 --- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp +++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp @@ -741,7 +741,10 @@ QWidget *QDesignerResource::load(QIODevice *dev, QWidget *parentWidget) case LoadPreCheckOk: break; } - return QEditorFormBuilder::load(dev, parentWidget); + QWidget *w = QEditorFormBuilder::load(dev, parentWidget); + if (w) // Store the class name as 'reset' value for the main container's object name. + w->setProperty("_q_classname", w->objectName()); + return w; } bool QDesignerResource::saveRelative() const diff --git a/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp b/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp index babe20e..27527da 100644 --- a/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp +++ b/tools/designer/src/lib/shared/qdesigner_propertysheet.cpp @@ -1195,8 +1195,17 @@ bool QDesignerPropertySheet::reset(int index) { if (d->invalidIndex(Q_FUNC_INFO, index)) return false; - if (d->isStringProperty(index)) - setProperty(index, QVariant::fromValue(qdesigner_internal::PropertySheetStringValue())); + if (d->isStringProperty(index)) { + qdesigner_internal::PropertySheetStringValue value; + // Main container: Reset to stored class name as not to change the file names generated by uic. + if (propertyName(index) == QLatin1String("objectName")) { + const QVariant classNameDefaultV = d->m_object->property("_q_classname"); + if (classNameDefaultV.isValid()) + value.setValue(classNameDefaultV.toString()); + } + setProperty(index, QVariant::fromValue(value)); + return true; + } if (d->isKeySequenceProperty(index)) setProperty(index, QVariant::fromValue(qdesigner_internal::PropertySheetKeySequenceValue())); if (d->isResourceProperty(index)) { -- cgit v0.12 From b888c9cca5ba2994344533c7602d22e1bc8e5db3 Mon Sep 17 00:00:00 2001 From: Martin Jones <martin.jones@nokia.com> Date: Mon, 21 Mar 2011 16:27:45 +1000 Subject: Text bounding rect calculated incorrectly if non-top aligned. QRect::setY() affects the size of the rectangle, so the height of the bounding rect was too small. Use moveTop() instead, which does not affect the size of the rectangle. Change-Id: If41ba6a28c9a7370f054dab20995a198f822ae2b Task-number: QTBUG-18194 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativetext.cpp | 4 ++-- .../qdeclarativetext/tst_qdeclarativetext.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index fdc1a71..720692c 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -1416,10 +1416,10 @@ QRectF QDeclarativeText::boundingRect() const case AlignTop: break; case AlignBottom: - rect.setY(h - rect.height()); + rect.moveTop(h - rect.height()); break; case AlignVCenter: - rect.setY((h - rect.height()) / 2); + rect.moveTop((h - rect.height()) / 2); break; } diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index 581b58c..ca6e87a 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -658,6 +658,24 @@ void tst_qdeclarativetext::verticalAlignment() } } + //confirm that bounding rect is correctly positioned. + QString componentStr = "import QtQuick 1.0\nText { height: 80; text: \"Hello\" }"; + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create()); + QVERIFY(textObject != 0); + QRectF br = textObject->boundingRect(); + QVERIFY(br.y() == 0); + + textObject->setVAlign(QDeclarativeText::AlignVCenter); + br = textObject->boundingRect(); + QCOMPARE(qFloor(br.y()), qFloor((80.0 - br.height())/2)); + + textObject->setVAlign(QDeclarativeText::AlignBottom); + br = textObject->boundingRect(); + QCOMPARE(qFloor(br.y()), qFloor(80.0 - br.height())); + + delete textObject; } void tst_qdeclarativetext::font() -- cgit v0.12 From 6733b02876d0f305691e6fc8060502bb3d783c36 Mon Sep 17 00:00:00 2001 From: Sami Merila <sami.merila@nokia.com> Date: Tue, 22 Mar 2011 10:10:13 +0200 Subject: QS60Style: Update placeholder texture to real one Once the background texture has been created, update it to all widgets. This corrects most cases where texture is used outside of QS60Style. It is still possible to access the placeholder texture and draw it, if: a) QPalette::Window is accessed before drawing even one widget b) Painting the texture happens without using QS60Style Task-number: QTBUG-14910 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style.cpp | 12 +++++++++--- src/gui/styles/qs60style_p.h | 6 +++--- src/gui/styles/qs60style_s60.cpp | 23 +++++++++++++++++++---- src/gui/styles/qs60style_simulated.cpp | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index c100330..a9e10a3 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -667,7 +667,7 @@ void QS60StylePrivate::setFont(QWidget *widget) const } } -void QS60StylePrivate::setThemePalette(QWidget *widget) const +void QS60StylePrivate::setThemePalette(QWidget *widget) { if(!widget) return; @@ -752,7 +752,7 @@ void QS60StylePrivate::storeThemePalette(QPalette *palette) } // set widget specific palettes -void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const +void QS60StylePrivate::setThemePaletteHash(QPalette *palette) { if (!palette) return; @@ -3539,8 +3539,14 @@ extern QPoint qt_s60_fill_background_offset(const QWidget *targetWidget); bool qt_s60_fill_background(QPainter *painter, const QRegion &rgn, const QBrush &brush) { + // Check if the widget's palette matches placeholder or actual background texture. + // When accessing backgroundTexture, use parameter value 'true' to avoid creating + // the texture, if it is not already created. + const QPixmap placeHolder(QS60StylePrivate::placeHolderTexture()); - if (placeHolder.cacheKey() != brush.texture().cacheKey()) + const QPixmap bg(QS60StylePrivate::backgroundTexture(true)); + if (placeHolder.cacheKey() != brush.texture().cacheKey() + && bg.cacheKey() != brush.texture().cacheKey()) return false; const QPixmap backgroundTexture(QS60StylePrivate::backgroundTexture()); diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 8c023bf..3628b27 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -554,7 +554,7 @@ public: static QPixmap frame(SkinFrameElements frame, const QSize &size, SkinElementFlags flags = KDefaultSkinElementFlags); - static QPixmap backgroundTexture(); + static QPixmap backgroundTexture(bool skipCreation = false); static QPixmap placeHolderTexture(); #ifdef Q_WS_S60 @@ -595,9 +595,9 @@ private: // set S60 font for widget void setFont(QWidget *widget) const; - void setThemePalette(QWidget *widget) const; + static void setThemePalette(QWidget *widget); void setThemePalette(QPalette *palette) const; - void setThemePaletteHash(QPalette *palette) const; + static void setThemePaletteHash(QPalette *palette); static void storeThemePalette(QPalette *palette); static void deleteThemePalette(); static bool equalToThemePalette(QColor color, QPalette::ColorRole role); diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index e46c826..c5149a3 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1391,7 +1391,7 @@ QPixmap QS60StylePrivate::frame(SkinFrameElements frame, const QSize &size, Skin return result; } -QPixmap QS60StylePrivate::backgroundTexture() +QPixmap QS60StylePrivate::backgroundTexture(bool skipCreation) { bool createNewBackground = false; TRect applicationRect = (static_cast<CEikAppUi*>(S60->appUi())->ApplicationRect()); @@ -1406,21 +1406,36 @@ QPixmap QS60StylePrivate::backgroundTexture() } } - if (createNewBackground) { + if (createNewBackground && !skipCreation) { QPixmap background = part(QS60StyleEnums::SP_QsnBgScreen, QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); m_background = new QPixmap(background); + + // Notify all widgets that palette is updated with the actual background texture. + QPalette pal = QApplication::palette(); + pal.setBrush(QPalette::Window, *m_background); + QApplication::setPalette(pal); + setThemePaletteHash(&pal); + storeThemePalette(&pal); + foreach (QWidget *widget, QApplication::allWidgets()){ + QEvent e(QEvent::PaletteChange); + QApplication::sendEvent(widget, &e); + setThemePalette(widget); + widget->ensurePolished(); + } } + if (!m_background) + return QPixmap(); return *m_background; } -// Generates 1*1 red pixmap as a placeholder for real texture. +// Generates 1*1 white pixmap as a placeholder for real texture. // The actual theme texture is drawn in qt_s60_fill_background(). QPixmap QS60StylePrivate::placeHolderTexture() { if (!m_placeHolderTexture) { m_placeHolderTexture = new QPixmap(1,1); - m_placeHolderTexture->fill(Qt::red); + m_placeHolderTexture->fill(Qt::white); } return *m_placeHolderTexture; } diff --git a/src/gui/styles/qs60style_simulated.cpp b/src/gui/styles/qs60style_simulated.cpp index 77e0d0e..7223c6b 100644 --- a/src/gui/styles/qs60style_simulated.cpp +++ b/src/gui/styles/qs60style_simulated.cpp @@ -308,7 +308,7 @@ QPixmap QS60StylePrivate::frame(SkinFrameElements frame, const QSize &size, return result; } -QPixmap QS60StylePrivate::backgroundTexture() +QPixmap QS60StylePrivate::backgroundTexture(bool /*skipCreation*/) { if (!m_background) { const QSize size = QApplication::desktop()->screen()->size(); -- cgit v0.12 From dfa9643193134612f3e5d25c5fa4f2a9d1fd6837 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs <laszlo.p.agocs@nokia.com> Date: Tue, 22 Mar 2011 10:42:39 +0200 Subject: Fixed drawImage() not to attempt drawing null images on openvg. QVGPaintEngine did not have proper checks for null QImage in the drawImage functions so it went on trying to create a VGImage of size 0x0 which is bound to fail always. This resulted in confusing warnings about not being able to reclaim space for 0x0 images. Reviewed-by: Jani Hautakangas --- src/openvg/qpaintengine_vg.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 3d50558..44dceea 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -3181,6 +3181,8 @@ void QVGPaintEngine::drawImage Qt::ImageConversionFlags flags) { Q_D(QVGPaintEngine); + if (image.isNull()) + return; VGImage vgImg; if (d->simpleTransform || d->opacity == 1.0f) vgImg = toVGImageSubRect(image, sr.toRect(), flags); @@ -3226,6 +3228,8 @@ void QVGPaintEngine::drawImage void QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image) { Q_D(QVGPaintEngine); + if (image.isNull()) + return; VGImage vgImg; if (canVgWritePixels(image)) { // Optimization for straight blits, no blending -- cgit v0.12 From 6a5431fac659799496df5da3991c1a487d30b476 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Tue, 22 Mar 2011 10:56:04 +0200 Subject: Updated DEF files for Symbian Added new functions to the exports Reviewed-by: TrustMe --- src/s60installs/bwins/QtNetworku.def | 2 ++ src/s60installs/eabi/QtNetworku.def | 2 ++ src/s60installs/eabi/QtOpenGLu.def | 18 ++++++++++++++++++ src/s60installs/eabi/QtOpenVGu.def | 5 +++++ 4 files changed, 27 insertions(+) diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def index b01324c..633c8ef 100644 --- a/src/s60installs/bwins/QtNetworku.def +++ b/src/s60installs/bwins/QtNetworku.def @@ -1159,4 +1159,6 @@ EXPORTS ?engines@QNetworkConfigurationManagerPrivate@@QBE?AV?$QList@PAVQBearerEngine@@@@XZ @ 1158 NONAME ; class QList<class QBearerEngine *> QNetworkConfigurationManagerPrivate::engines(void) const ?isOnline@QNetworkConfigurationManagerPrivate@@QBE_NXZ @ 1159 NONAME ; bool QNetworkConfigurationManagerPrivate::isOnline(void) const ?startPolling@QNetworkConfigurationManagerPrivate@@AAEXXZ @ 1160 NONAME ; void QNetworkConfigurationManagerPrivate::startPolling(void) + ?setPeerVerifyName@QSslSocket@@QAEXABVQString@@@Z @ 1161 NONAME ; void QSslSocket::setPeerVerifyName(class QString const &) + ?peerVerifyName@QSslSocket@@QBE?AVQString@@XZ @ 1162 NONAME ; class QString QSslSocket::peerVerifyName(void) const diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 9b989a7..658b82d 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1181,4 +1181,6 @@ EXPORTS _ZNK35QNetworkConfigurationManagerPrivate27configurationFromIdentifierERK7QString @ 1180 NONAME _ZNK35QNetworkConfigurationManagerPrivate7enginesEv @ 1181 NONAME _ZNK35QNetworkConfigurationManagerPrivate8isOnlineEv @ 1182 NONAME + _ZN10QSslSocket17setPeerVerifyNameERK7QString @ 1183 NONAME + _ZNK10QSslSocket14peerVerifyNameEv @ 1184 NONAME diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 4977959..251521a 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -739,4 +739,22 @@ EXPORTS _ZTV27QGLContextGroupResourceBase @ 738 NONAME _ZThn104_N20QGLTextureGlyphCacheD0Ev @ 739 NONAME _ZThn104_N20QGLTextureGlyphCacheD1Ev @ 740 NONAME + _ZN13QGLPixmapData12forceToImageEv @ 741 NONAME + _ZN13QGLPixmapData14destroyTextureEv @ 742 NONAME + _ZN13QGLPixmapData14reclaimTextureEv @ 743 NONAME + _ZN13QGLPixmapData21detachTextureFromPoolEv @ 744 NONAME + _ZN13QGLPixmapData9hibernateEv @ 745 NONAME + _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 746 NONAME + _ZN22QGLEngineSharedShaders15qShaderSnippetsE @ 747 NONAME DATA 216 + _ZN22QGLEngineSharedShaders16staticMetaObjectE @ 748 NONAME DATA 16 + _ZN22QGLEngineSharedShaders17shadersForContextEPK10QGLContext @ 749 NONAME + _ZN22QGLEngineSharedShaders18cleanupCustomStageEP20QGLCustomShaderStage @ 750 NONAME + _ZN22QGLEngineSharedShaders18findProgramInCacheERK19QGLEngineShaderProg @ 751 NONAME + _ZN22QGLEngineSharedShaders19getStaticMetaObjectEv @ 752 NONAME + _ZN22QGLEngineSharedShadersC1EPK10QGLContext @ 753 NONAME + _ZN22QGLEngineSharedShadersC2EPK10QGLContext @ 754 NONAME + _ZN22QGLEngineSharedShadersD1Ev @ 755 NONAME + _ZN22QGLEngineSharedShadersD2Ev @ 756 NONAME + _ZNK16QGLWindowSurface23hasPartialUpdateSupportEv @ 757 NONAME + _ZThn8_NK16QGLWindowSurface23hasPartialUpdateSupportEv @ 758 NONAME diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def index e05cc79..7e91b83 100644 --- a/src/s60installs/eabi/QtOpenVGu.def +++ b/src/s60installs/eabi/QtOpenVGu.def @@ -209,4 +209,9 @@ EXPORTS _ZN13QVGPixmapData12updateSerialEv @ 208 NONAME ABSENT _ZN13QVGPixmapData4copyEPK11QPixmapDataRK5QRect @ 209 NONAME ABSENT _ZNK13QVGPixmapData11idealFormatEP6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 210 NONAME ABSENT + _ZN13QVGPixmapData24releaseNativeImageHandleEv @ 211 NONAME + _ZN13QVGPixmapData25initFromNativeImageHandleEPvRK7QString @ 212 NONAME + _ZN13QVGPixmapData35createFromNativeImageHandleProviderEv @ 213 NONAME + _ZNK13QVGPixmapData14ensureReadbackEb @ 214 NONAME + _ZNK16QVGWindowSurface24hasStaticContentsSupportEv @ 215 NONAME -- cgit v0.12 From af617c319772a34115d0c4d802f25a807cb43065 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 22 Mar 2011 10:27:47 +0100 Subject: Designer: Avoid nested QDialog's in item widget content dialogs. Refactor the AbstractItemEditor to be a QWidget instead of a dialog as it is used for the Rows/Columns of trees, tables as well, creating a hierarchy of nested QDialogs. The nested QDialogs cause some of the crashes observed with transparent styles using event filters accessing QWidget::window() in QEvent::Hide event filters. Task-number: QTBUG-18222 --- .../src/components/taskmenu/itemlisteditor.cpp | 29 +++------ .../src/components/taskmenu/itemlisteditor.h | 10 +-- .../src/components/taskmenu/listwidgeteditor.h | 2 +- .../components/taskmenu/tablewidget_taskmenu.cpp | 2 +- .../src/components/taskmenu/tablewidgeteditor.cpp | 73 ++++++++++++++++++---- .../src/components/taskmenu/tablewidgeteditor.h | 18 +++++- .../components/taskmenu/treewidget_taskmenu.cpp | 2 +- .../src/components/taskmenu/treewidgeteditor.cpp | 63 +++++++++++++++---- .../src/components/taskmenu/treewidgeteditor.h | 18 +++++- 9 files changed, 163 insertions(+), 54 deletions(-) diff --git a/tools/designer/src/components/taskmenu/itemlisteditor.cpp b/tools/designer/src/components/taskmenu/itemlisteditor.cpp index 8d317f5..a04246d 100644 --- a/tools/designer/src/components/taskmenu/itemlisteditor.cpp +++ b/tools/designer/src/components/taskmenu/itemlisteditor.cpp @@ -80,7 +80,7 @@ private: ////////////////// Item editor /////////////// AbstractItemEditor::AbstractItemEditor(QDesignerFormWindowInterface *form, QWidget *parent) - : QDialog(parent), + : QWidget(parent), m_iconCache(qobject_cast<FormWindowBase *>(form)->iconCache()), m_updatingBrowser(false) { @@ -104,15 +104,6 @@ AbstractItemEditor::~AbstractItemEditor() m_propertyBrowser->unsetFactoryForManager(m_propertyManager); } -void AbstractItemEditor::keyPressEvent(QKeyEvent *e) -{ - // Avoid that embedded dialogs react to enter and escape keys. - if (this == window()) - QDialog::keyPressEvent(e); - else - QWidget::keyPressEvent(e); -} - static const char * const itemFlagNames[] = { QT_TRANSLATE_NOOP("AbstractItemEditor", "Selectable"), QT_TRANSLATE_NOOP("AbstractItemEditor", "Editable"), @@ -304,7 +295,7 @@ ItemListEditor::ItemListEditor(QDesignerFormWindowInterface *form, QWidget *pare injectPropertyBrowser(this, ui.widget); connect(ui.showPropertiesButton, SIGNAL(clicked()), this, SLOT(togglePropertyBrowser())); - togglePropertyBrowser(); + setPropertyBrowserVisible(false); QIcon upIcon = createIconSet(QString::fromUtf8("up.png")); QIcon downIcon = createIconSet(QString::fromUtf8("down.png")); @@ -417,15 +408,13 @@ void ItemListEditor::on_listWidget_itemChanged(QListWidgetItem *item) void ItemListEditor::togglePropertyBrowser() { - // Always hide in case parent widget is not visible -> on startup - const bool isVisible = - !this->isVisible() ? true : m_propertyBrowser->isVisible(); - if (isVisible) - ui.showPropertiesButton->setText(tr("Properties &<<")); - else - ui.showPropertiesButton->setText(tr("Properties &>>")); + setPropertyBrowserVisible(!m_propertyBrowser->isVisible()); +} - m_propertyBrowser->setVisible(!isVisible); +void ItemListEditor::setPropertyBrowserVisible(bool v) +{ + ui.showPropertiesButton->setText(v ? tr("Properties &>>") : tr("Properties &<<")); + m_propertyBrowser->setVisible(v); } void ItemListEditor::setItemData(int role, const QVariant &v) @@ -484,6 +473,6 @@ void ItemListEditor::updateEditor() else m_propertyBrowser->clear(); } -} +} // namespace qdesigner_internal QT_END_NAMESPACE diff --git a/tools/designer/src/components/taskmenu/itemlisteditor.h b/tools/designer/src/components/taskmenu/itemlisteditor.h index 2059620..ffacad2 100644 --- a/tools/designer/src/components/taskmenu/itemlisteditor.h +++ b/tools/designer/src/components/taskmenu/itemlisteditor.h @@ -53,6 +53,7 @@ class QtProperty; class QtVariantProperty; class QtTreePropertyBrowser; class QSplitter; +class QVBoxLayout; namespace qdesigner_internal { @@ -72,12 +73,12 @@ private: bool reset; }; -class AbstractItemEditor: public QDialog +class AbstractItemEditor: public QWidget { Q_OBJECT public: - AbstractItemEditor(QDesignerFormWindowInterface *form, QWidget *parent); + explicit AbstractItemEditor(QDesignerFormWindowInterface *form, QWidget *parent); ~AbstractItemEditor(); DesignerIconCache *iconCache() const { return m_iconCache; } @@ -95,7 +96,6 @@ private slots: void cacheReloaded(); protected: - void keyPressEvent(QKeyEvent *e); void setupProperties(PropertyDefinition *propDefs); void setupObject(QWidget *object); void setupEditor(QWidget *object, PropertyDefinition *propDefs); @@ -120,7 +120,7 @@ class ItemListEditor: public AbstractItemEditor Q_OBJECT public: - ItemListEditor(QDesignerFormWindowInterface *form, QWidget *parent); + explicit ItemListEditor(QDesignerFormWindowInterface *form, QWidget *parent); void setupEditor(QWidget *object, PropertyDefinition *propDefs); QListWidget *listWidget() const { return ui.listWidget; } @@ -150,6 +150,8 @@ protected: virtual void setItemData(int role, const QVariant &v); virtual QVariant getItemData(int role) const; +private: + void setPropertyBrowserVisible(bool v); void updateEditor(); Ui::ItemListEditor ui; bool m_updating; diff --git a/tools/designer/src/components/taskmenu/listwidgeteditor.h b/tools/designer/src/components/taskmenu/listwidgeteditor.h index 7719451..12d0591 100644 --- a/tools/designer/src/components/taskmenu/listwidgeteditor.h +++ b/tools/designer/src/components/taskmenu/listwidgeteditor.h @@ -45,7 +45,7 @@ #include "itemlisteditor.h" #include <qdesigner_command_p.h> -#include <QtGui/QDialog> +#include <QtGui/QWidget> QT_BEGIN_NAMESPACE diff --git a/tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp b/tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp index e3170bd..e98714f 100644 --- a/tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp +++ b/tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp @@ -94,7 +94,7 @@ void TableWidgetTaskMenu::editItems() Q_ASSERT(m_tableWidget != 0); - TableWidgetEditor dlg(m_formWindow, m_tableWidget->window()); + TableWidgetEditorDialog dlg(m_formWindow, m_tableWidget->window()); TableWidgetContents oldCont = dlg.fillContentsFromTableWidget(m_tableWidget); if (dlg.exec() == QDialog::Accepted) { TableWidgetContents newCont = dlg.contents(); diff --git a/tools/designer/src/components/taskmenu/tablewidgeteditor.cpp b/tools/designer/src/components/taskmenu/tablewidgeteditor.cpp index 4455ff1..35f1a0e 100644 --- a/tools/designer/src/components/taskmenu/tablewidgeteditor.cpp +++ b/tools/designer/src/components/taskmenu/tablewidgeteditor.cpp @@ -57,10 +57,10 @@ QT_BEGIN_NAMESPACE -using namespace qdesigner_internal; +namespace qdesigner_internal { -TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QWidget *parent) - : AbstractItemEditor(form, parent), m_updatingBrowser(false) +TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog) + : AbstractItemEditor(form, 0), m_updatingBrowser(false) { m_columnEditor = new ItemListEditor(form, this); m_columnEditor->setObjectName(QLatin1String("columnEditor")); @@ -68,12 +68,12 @@ TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QWidget m_rowEditor = new ItemListEditor(form, this); m_rowEditor->setObjectName(QLatin1String("rowEditor")); m_rowEditor->setNewItemText(tr("New Row")); - ui.setupUi(this); + ui.setupUi(dialog); injectPropertyBrowser(ui.itemsTab, ui.widget); connect(ui.showPropertiesButton, SIGNAL(clicked()), this, SLOT(togglePropertyBrowser())); - togglePropertyBrowser(); + setPropertyBrowserVisible(false); ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns")); ui.tabWidget->insertTab(1, m_rowEditor, tr("&Rows")); @@ -83,6 +83,36 @@ TableWidgetEditor::TableWidgetEditor(QDesignerFormWindowInterface *form, QWidget ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); connect(iconCache(), SIGNAL(reloaded()), this, SLOT(cacheReloaded())); + + connect(ui.tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), + this, SLOT(on_tableWidget_currentCellChanged(int,int,int,int))); + connect(ui.tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), + this, SLOT(on_tableWidget_itemChanged(QTableWidgetItem*))); + connect(m_columnEditor, SIGNAL(indexChanged(int)), + this, SLOT(on_columnEditor_indexChanged(int))); + connect(m_columnEditor, SIGNAL(itemChanged(int,int,QVariant)), + this, SLOT(on_columnEditor_itemChanged(int,int,QVariant))); + connect(m_columnEditor, SIGNAL(itemInserted(int)), + this, SLOT(on_columnEditor_itemInserted(int))); + connect(m_columnEditor, SIGNAL(itemDeleted(int)), + this, SLOT(on_columnEditor_itemDeleted(int))); + connect(m_columnEditor, SIGNAL(itemMovedUp(int)), + this, SLOT(on_columnEditor_itemMovedUp(int))); + connect(m_columnEditor, SIGNAL(itemMovedDown(int)), + this, SLOT(on_columnEditor_itemMovedDown(int))); + + connect(m_rowEditor, SIGNAL(indexChanged(int)), + this, SLOT(on_rowEditor_indexChanged(int))); + connect(m_rowEditor, SIGNAL(itemChanged(int,int,QVariant)), + this, SLOT(on_rowEditor_itemChanged(int,int,QVariant))); + connect(m_rowEditor, SIGNAL(itemInserted(int)), + this, SLOT(on_rowEditor_itemInserted(int))); + connect(m_rowEditor, SIGNAL(itemDeleted(int)), + this, SLOT(on_rowEditor_itemDeleted(int))); + connect(m_rowEditor, SIGNAL(itemMovedUp(int)), + this, SLOT(on_rowEditor_itemMovedUp(int))); + connect(m_rowEditor, SIGNAL(itemMovedDown(int)), + this, SLOT(on_rowEditor_itemMovedDown(int))); } static AbstractItemEditor::PropertyDefinition tableHeaderPropList[] = { @@ -207,16 +237,15 @@ void TableWidgetEditor::on_rowEditor_itemChanged(int idx, int role, const QVaria ui.tableWidget->verticalHeaderItem(idx)->setData(role, v); } +void TableWidgetEditor::setPropertyBrowserVisible(bool v) +{ + ui.showPropertiesButton->setText(v ? tr("Properties &>>") : tr("Properties &<<")); + m_propertyBrowser->setVisible(v); +} + void TableWidgetEditor::togglePropertyBrowser() { - // Always hide in case parent widget is not visible -> on startup - const bool isVisible = - !this->isVisible() ? true : m_propertyBrowser->isVisible(); - if (isVisible) - ui.showPropertiesButton->setText(tr("Properties &<<")); - else - ui.showPropertiesButton->setText(tr("Properties &>>")); - m_propertyBrowser->setVisible(!isVisible); + setPropertyBrowserVisible(!m_propertyBrowser->isVisible()); } void TableWidgetEditor::updateEditor() @@ -400,4 +429,22 @@ void TableWidgetEditor::cacheReloaded() reloadIconResources(iconCache(), ui.tableWidget); } +TableWidgetEditorDialog::TableWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) : + QDialog(parent), m_editor(form, this) +{ + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +} + +TableWidgetContents TableWidgetEditorDialog::fillContentsFromTableWidget(QTableWidget *tableWidget) +{ + return m_editor.fillContentsFromTableWidget(tableWidget); +} + +TableWidgetContents TableWidgetEditorDialog::contents() const +{ + return m_editor.contents(); +} + +} // namespace qdesigner_internal + QT_END_NAMESPACE diff --git a/tools/designer/src/components/taskmenu/tablewidgeteditor.h b/tools/designer/src/components/taskmenu/tablewidgeteditor.h index cea2e2f..1d5ad1f 100644 --- a/tools/designer/src/components/taskmenu/tablewidgeteditor.h +++ b/tools/designer/src/components/taskmenu/tablewidgeteditor.h @@ -46,6 +46,8 @@ #include "listwidgeteditor.h" +#include <QtGui/QDialog> + QT_BEGIN_NAMESPACE class QTableWidget; @@ -60,7 +62,7 @@ class TableWidgetEditor: public AbstractItemEditor { Q_OBJECT public: - TableWidgetEditor(QDesignerFormWindowInterface *form, QWidget *parent); + explicit TableWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog); TableWidgetContents fillContentsFromTableWidget(QTableWidget *tableWidget); TableWidgetContents contents() const; @@ -95,6 +97,7 @@ protected: virtual QVariant getItemData(int role) const; private: + void setPropertyBrowserVisible(bool v); void updateEditor(); void moveColumnsLeft(int fromColumn, int toColumn); void moveColumnsRight(int fromColumn, int toColumn); @@ -107,6 +110,19 @@ private: bool m_updatingBrowser; }; +class TableWidgetEditorDialog : public QDialog +{ + Q_OBJECT +public: + explicit TableWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent); + + TableWidgetContents fillContentsFromTableWidget(QTableWidget *tableWidget); + TableWidgetContents contents() const; + +private: + TableWidgetEditor m_editor; +}; + } // namespace qdesigner_internal QT_END_NAMESPACE diff --git a/tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp b/tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp index 882c656..96210dc 100644 --- a/tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp +++ b/tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp @@ -93,7 +93,7 @@ void TreeWidgetTaskMenu::editItems() Q_ASSERT(m_treeWidget != 0); - TreeWidgetEditor dlg(m_formWindow, m_treeWidget->window()); + TreeWidgetEditorDialog dlg(m_formWindow, m_treeWidget->window()); TreeWidgetContents oldCont = dlg.fillContentsFromTreeWidget(m_treeWidget); if (dlg.exec() == QDialog::Accepted) { TreeWidgetContents newCont = dlg.contents(); diff --git a/tools/designer/src/components/taskmenu/treewidgeteditor.cpp b/tools/designer/src/components/taskmenu/treewidgeteditor.cpp index 50fc86a..f5f6035 100644 --- a/tools/designer/src/components/taskmenu/treewidgeteditor.cpp +++ b/tools/designer/src/components/taskmenu/treewidgeteditor.cpp @@ -60,18 +60,18 @@ QT_BEGIN_NAMESPACE namespace qdesigner_internal { -TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QWidget *parent) - : AbstractItemEditor(form, parent), m_updatingBrowser(false) +TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog) + : AbstractItemEditor(form, 0), m_updatingBrowser(false) { m_columnEditor = new ItemListEditor(form, this); m_columnEditor->setObjectName(QLatin1String("columnEditor")); m_columnEditor->setNewItemText(tr("New Column")); - ui.setupUi(this); + ui.setupUi(dialog); injectPropertyBrowser(ui.itemsTab, ui.widget); connect(ui.showPropertiesButton, SIGNAL(clicked()), this, SLOT(togglePropertyBrowser())); - togglePropertyBrowser(); + setPropertyBrowserVisible(false); ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns")); ui.tabWidget->setCurrentIndex(0); @@ -87,6 +87,30 @@ TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QWidget * ui.treeWidget->header()->setMovable(false); + connect(ui.newItemButton, SIGNAL(clicked()), this, SLOT(on_newItemButton_clicked())); + connect(ui.newSubItemButton, SIGNAL(clicked()), this, SLOT(on_newSubItemButton_clicked())); + connect(ui.moveItemUpButton, SIGNAL(clicked()), this, SLOT(on_moveItemUpButton_clicked())); + connect(ui.moveItemDownButton, SIGNAL(clicked()), this, SLOT(on_moveItemDownButton_clicked())); + connect(ui.moveItemRightButton, SIGNAL(clicked()), this, SLOT(on_moveItemRightButton_clicked())); + connect(ui.moveItemLeftButton, SIGNAL(clicked()), this, SLOT(on_moveItemLeftButton_clicked())); + connect(ui.treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(on_treeWidget_currentItemChanged())); + connect(ui.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), + this, SLOT(on_treeWidget_itemChanged(QTreeWidgetItem*,int))); + + connect(m_columnEditor, SIGNAL(indexChanged(int)), + this, SLOT(on_columnEditor_indexChanged(int))); + connect(m_columnEditor, SIGNAL(itemChanged(int,int,QVariant)), + this, SLOT(on_columnEditor_itemChanged(int,int,QVariant))); + connect(m_columnEditor, SIGNAL(itemInserted(int)), + this, SLOT(on_columnEditor_itemInserted(int))); + connect(m_columnEditor, SIGNAL(itemDeleted(int)), + this, SLOT(on_columnEditor_itemDeleted(int))); + connect(m_columnEditor, SIGNAL(itemMovedUp(int)), + this, SLOT(on_columnEditor_itemMovedUp(int))); + connect(m_columnEditor, SIGNAL(itemMovedDown(int)), + this, SLOT(on_columnEditor_itemMovedDown(int))); + connect(iconCache(), SIGNAL(reloaded()), this, SLOT(cacheReloaded())); } @@ -386,15 +410,13 @@ void TreeWidgetEditor::on_moveItemRightButton_clicked() void TreeWidgetEditor::togglePropertyBrowser() { - // Always hide in case parent widget is not visible -> on startup - const bool isVisible = - !this->isVisible() ? true : m_propertyBrowser->isVisible(); - if (isVisible) - ui.showPropertiesButton->setText(tr("Properties &<<")); - else - ui.showPropertiesButton->setText(tr("Properties &>>")); + setPropertyBrowserVisible(!m_propertyBrowser->isVisible()); +} - m_propertyBrowser->setVisible(!isVisible); +void TreeWidgetEditor::setPropertyBrowserVisible(bool v) +{ + ui.showPropertiesButton->setText(v ? tr("Properties &>>") : tr("Properties &<<")); + m_propertyBrowser->setVisible(v); } void TreeWidgetEditor::on_treeWidget_currentItemChanged() @@ -599,5 +621,22 @@ void TreeWidgetEditor::cacheReloaded() reloadIconResources(iconCache(), ui.treeWidget); } +TreeWidgetEditorDialog::TreeWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) : + QDialog(parent), m_editor(form, this) +{ + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +} + +TreeWidgetContents TreeWidgetEditorDialog::fillContentsFromTreeWidget(QTreeWidget *treeWidget) +{ + return m_editor.fillContentsFromTreeWidget(treeWidget); } + +TreeWidgetContents TreeWidgetEditorDialog::contents() const +{ + return m_editor.contents(); +} + +} // namespace qdesigner_internal + QT_END_NAMESPACE diff --git a/tools/designer/src/components/taskmenu/treewidgeteditor.h b/tools/designer/src/components/taskmenu/treewidgeteditor.h index 461b20f..f502bf3 100644 --- a/tools/designer/src/components/taskmenu/treewidgeteditor.h +++ b/tools/designer/src/components/taskmenu/treewidgeteditor.h @@ -46,6 +46,8 @@ #include "listwidgeteditor.h" +#include <QtGui/QDialog> + QT_BEGIN_NAMESPACE class QTreeWidget; @@ -60,7 +62,7 @@ class TreeWidgetEditor: public AbstractItemEditor { Q_OBJECT public: - TreeWidgetEditor(QDesignerFormWindowInterface *form, QWidget *parent); + explicit TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog); TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget); TreeWidgetContents contents() const; @@ -93,6 +95,7 @@ protected: virtual QVariant getItemData(int role) const; private: + void setPropertyBrowserVisible(bool v); QtVariantProperty *setupPropertyGroup(const QString &title, PropertyDefinition *propDefs); void updateEditor(); void moveColumnItems(const PropertyDefinition *propList, QTreeWidgetItem *item, int fromColumn, int toColumn, int step); @@ -106,6 +109,19 @@ private: bool m_updatingBrowser; }; +class TreeWidgetEditorDialog : public QDialog +{ + Q_OBJECT +public: + explicit TreeWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent); + + TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget); + TreeWidgetContents contents() const; + +private: + TreeWidgetEditor m_editor; +}; + } // namespace qdesigner_internal QT_END_NAMESPACE -- cgit v0.12 From 34032980f1ba337262ffe23a228aa70aa5894c47 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Tue, 22 Mar 2011 12:08:35 +0100 Subject: desinger: Add keyboard accellerator to 'Edit' menu Reviewed-by: Friedemann Kleint --- tools/designer/src/designer/qdesigner_workbench.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/designer/src/designer/qdesigner_workbench.cpp b/tools/designer/src/designer/qdesigner_workbench.cpp index 840667a..ffc4b8c 100644 --- a/tools/designer/src/designer/qdesigner_workbench.cpp +++ b/tools/designer/src/designer/qdesigner_workbench.cpp @@ -198,7 +198,7 @@ QDesignerWorkbench::QDesignerWorkbench() : // Build main menu bar addMenu(m_globalMenuBar, tr("&File"), m_actionManager->fileActions()->actions()); - QMenu *editMenu = addMenu(m_globalMenuBar, tr("Edit"), m_actionManager->editActions()->actions()); + QMenu *editMenu = addMenu(m_globalMenuBar, tr("&Edit"), m_actionManager->editActions()->actions()); editMenu->addSeparator(); addActionsToMenu(editMenu, m_actionManager->toolActions()->actions()); -- cgit v0.12 From c8df7acf91576e9fd517ac843ba76ca195fdbbd0 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Tue, 22 Mar 2011 13:57:57 +0200 Subject: Handle removal of setter for partialUpdateSupport MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The setter was removed as part of merge request 1136. This commit fixes the Symbian build where Q_NO_EGL is undefined. Reviewed-by: Samuel Rødal --- src/opengl/qwindowsurface_gl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 4ac7b22..2ccbc50 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -494,7 +494,7 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) bool swapBehaviourPreserved = (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED) || (ctx->d_func()->eglContext->configAttrib(EGL_SURFACE_TYPE)&EGL_SWAP_BEHAVIOR_PRESERVED_BIT); if (!swapBehaviourPreserved && !haveNOKSwapRegion) - setPartialUpdateSupport(false); // Force full-screen updates + d_ptr->partialUpdateSupport = false; // Force full-screen updates else d_ptr->partialUpdateSupport = true; #else -- cgit v0.12 From 778b480d2cf51abfe9fdd75ce1fbba51e3cae696 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@nokia.com> Date: Mon, 21 Mar 2011 18:19:03 +0100 Subject: QSharedNetworkSession: Fix compile on AIX. Reviewed-by: Markus Goetz --- src/network/bearer/qsharednetworksession_p.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network/bearer/qsharednetworksession_p.h b/src/network/bearer/qsharednetworksession_p.h index 57b3a49..25b4ec2 100644 --- a/src/network/bearer/qsharednetworksession_p.h +++ b/src/network/bearer/qsharednetworksession_p.h @@ -64,6 +64,8 @@ QT_BEGIN_NAMESPACE +uint qHash(const QNetworkConfiguration& config); + class QSharedNetworkSessionManager { public: -- cgit v0.12 From 5d7388030d0ea5386fc2333dcb5598aa5208e7a9 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Tue, 22 Mar 2011 15:35:02 +0200 Subject: Updated QtGUI DEF files for WINSCW Absented missing functions Reviewed-by: TrustMe --- src/s60installs/bwins/QtGuiu.def | 240 +++++++++++++++++++-------------------- 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 38bd760..8f56e20 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12984,12 +12984,12 @@ EXPORTS ?clipEnabledChanged@QBlitterPaintEngine@@UAEXXZ @ 12983 NONAME ; void QBlitterPaintEngine::clipEnabledChanged(void) ?supportsSubPixelPositions@QFontEngine@@UBE_NXZ @ 12984 NONAME ; bool QFontEngine::supportsSubPixelPositions(void) const ??_EQScrollerProperties@@UAE@I@Z @ 12985 NONAME ; QScrollerProperties::~QScrollerProperties(unsigned int) - ??_EQFontPrivate@@QAE@I@Z @ 12986 NONAME ; QFontPrivate::~QFontPrivate(unsigned int) - ??0QMimeSource@@QAE@XZ @ 12987 NONAME ; QMimeSource::QMimeSource(void) - ??0QStyleFactoryInterface@@QAE@XZ @ 12988 NONAME ; QStyleFactoryInterface::QStyleFactoryInterface(void) + ??_EQFontPrivate@@QAE@I@Z @ 12986 NONAME ABSENT ; QFontPrivate::~QFontPrivate(unsigned int) + ??0QMimeSource@@QAE@XZ @ 12987 NONAME ABSENT ; QMimeSource::QMimeSource(void) + ??0QStyleFactoryInterface@@QAE@XZ @ 12988 NONAME ABSENT ; QStyleFactoryInterface::QStyleFactoryInterface(void) ?d_func@QScrollEvent@@AAEPAVQScrollEventPrivate@@XZ @ 12989 NONAME ; class QScrollEventPrivate * QScrollEvent::d_func(void) - ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12990 NONAME ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &) - ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12991 NONAME ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &) + ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12990 NONAME ABSENT ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &) + ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12991 NONAME ABSENT ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &) ?heightForWidth@QTabWidget@@UBEHH@Z @ 12992 NONAME ; int QTabWidget::heightForWidth(int) const ??1QFlickGesture@@UAE@XZ @ 12993 NONAME ; QFlickGesture::~QFlickGesture(void) ??0QRasterWindowSurface@@QAE@PAVQWidget@@_N@Z @ 12994 NONAME ; QRasterWindowSurface::QRasterWindowSurface(class QWidget *, bool) @@ -12997,14 +12997,14 @@ EXPORTS ?clip@QBlitterPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 12996 NONAME ; void QBlitterPaintEngine::clip(class QRect const &, enum Qt::ClipOperation) ?detach@QGlyphs@@AAEXXZ @ 12997 NONAME ; void QGlyphs::detach(void) ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 12998 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *) - ??0QShowEvent@@QAE@ABV0@@Z @ 12999 NONAME ; QShowEvent::QShowEvent(class QShowEvent const &) - ??0QMouseEvent@@QAE@ABV0@@Z @ 13000 NONAME ; QMouseEvent::QMouseEvent(class QMouseEvent const &) + ??0QShowEvent@@QAE@ABV0@@Z @ 12999 NONAME ABSENT ; QShowEvent::QShowEvent(class QShowEvent const &) + ??0QMouseEvent@@QAE@ABV0@@Z @ 13000 NONAME ABSENT ; QMouseEvent::QMouseEvent(class QMouseEvent const &) ?setHintingPreference@QFont@@QAEXW4HintingPreference@1@@Z @ 13001 NONAME ; void QFont::setHintingPreference(enum QFont::HintingPreference) - ??0QActionEvent@@QAE@ABV0@@Z @ 13002 NONAME ; QActionEvent::QActionEvent(class QActionEvent const &) - ??0QTouchEvent@@QAE@ABV0@@Z @ 13003 NONAME ; QTouchEvent::QTouchEvent(class QTouchEvent const &) + ??0QActionEvent@@QAE@ABV0@@Z @ 13002 NONAME ABSENT ; QActionEvent::QActionEvent(class QActionEvent const &) + ??0QTouchEvent@@QAE@ABV0@@Z @ 13003 NONAME ABSENT ; QTouchEvent::QTouchEvent(class QTouchEvent const &) ?capabilities@QBlittable@@QBE?AV?$QFlags@W4Capability@QBlittable@@@@XZ @ 13004 NONAME ; class QFlags<enum QBlittable::Capability> QBlittable::capabilities(void) const ?setContentPosRange@QScrollPrepareEvent@@QAEXABVQRectF@@@Z @ 13005 NONAME ; void QScrollPrepareEvent::setContentPosRange(class QRectF const &) - ??_EQImageData@@QAE@I@Z @ 13006 NONAME ; QImageData::~QImageData(unsigned int) + ??_EQImageData@@QAE@I@Z @ 13006 NONAME ABSENT ; QImageData::~QImageData(unsigned int) ?swap@QBrush@@QAEXAAV1@@Z @ 13007 NONAME ; void QBrush::swap(class QBrush &) ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13008 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *, int) ?fontHintingPreference@QTextCharFormat@@QBE?AW4HintingPreference@QFont@@XZ @ 13009 NONAME ; enum QFont::HintingPreference QTextCharFormat::fontHintingPreference(void) const @@ -13015,30 +13015,30 @@ EXPORTS ?scroller@QScroller@@SAPBV1@PBVQObject@@@Z @ 13014 NONAME ; class QScroller const * QScroller::scroller(class QObject const *) ?qt_metacall@QScroller@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13015 NONAME ; int QScroller::qt_metacall(enum QMetaObject::Call, int, void * *) ?tr@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13016 NONAME ; class QString QFlickGesture::tr(char const *, char const *) - ??4QBezier@@QAEAAV0@ABV0@@Z @ 13017 NONAME ; class QBezier & QBezier::operator=(class QBezier const &) + ??4QBezier@@QAEAAV0@ABV0@@Z @ 13017 NONAME ABSENT ; class QBezier & QBezier::operator=(class QBezier const &) ?setScrollerProperties@QScroller@@QAEXABVQScrollerProperties@@@Z @ 13018 NONAME ; void QScroller::setScrollerProperties(class QScrollerProperties const &) - ??0QIconEngineV2@@QAE@XZ @ 13019 NONAME ; QIconEngineV2::QIconEngineV2(void) - ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 13020 NONAME ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &) + ??0QIconEngineV2@@QAE@XZ @ 13019 NONAME ABSENT ; QIconEngineV2::QIconEngineV2(void) + ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 13020 NONAME ABSENT ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &) ??MQItemSelectionRange@@QBE_NABV0@@Z @ 13021 NONAME ; bool QItemSelectionRange::operator<(class QItemSelectionRange const &) const ?setWidthForHeight@QSizePolicy@@QAEX_N@Z @ 13022 NONAME ; void QSizePolicy::setWidthForHeight(bool) ?qt_fontdata_from_index@@YA?AVQByteArray@@H@Z @ 13023 NONAME ; class QByteArray qt_fontdata_from_index(int) - ??0QIconEngineV2@@QAE@ABV0@@Z @ 13024 NONAME ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &) + ??0QIconEngineV2@@QAE@ABV0@@Z @ 13024 NONAME ABSENT ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &) ?swap@QImage@@QAEXAAV1@@Z @ 13025 NONAME ; void QImage::swap(class QImage &) - ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 13026 NONAME ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void) + ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 13026 NONAME ABSENT ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void) ??0QScroller@@AAE@PAVQObject@@@Z @ 13027 NONAME ; QScroller::QScroller(class QObject *) ?compositionModeChanged@QBlitterPaintEngine@@UAEXXZ @ 13028 NONAME ; void QBlitterPaintEngine::compositionModeChanged(void) ?contentPosRange@QScrollPrepareEvent@@QBE?AVQRectF@@XZ @ 13029 NONAME ; class QRectF QScrollPrepareEvent::contentPosRange(void) const ?grabGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@W4ScrollerGestureType@1@@Z @ 13030 NONAME ; enum Qt::GestureType QScroller::grabGesture(class QObject *, enum QScroller::ScrollerGestureType) ??_EQFlickGesture@@UAE@I@Z @ 13031 NONAME ; QFlickGesture::~QFlickGesture(unsigned int) ?drawRects@QBlitterPaintEngine@@UAEXPBVQRectF@@H@Z @ 13032 NONAME ; void QBlitterPaintEngine::drawRects(class QRectF const *, int) - ??4QTextLine@@QAEAAV0@ABV0@@Z @ 13033 NONAME ; class QTextLine & QTextLine::operator=(class QTextLine const &) - ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13034 NONAME ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &) + ??4QTextLine@@QAEAAV0@ABV0@@Z @ 13033 NONAME ABSENT ; class QTextLine & QTextLine::operator=(class QTextLine const &) + ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13034 NONAME ABSENT ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &) ??1QBlitterPaintEngine@@UAE@XZ @ 13035 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(void) ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRectF@@H@Z @ 13036 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const *, int) - ??0QResizeEvent@@QAE@ABV0@@Z @ 13037 NONAME ; QResizeEvent::QResizeEvent(class QResizeEvent const &) - ??0QIconEngineFactoryInterface@@QAE@XZ @ 13038 NONAME ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void) + ??0QResizeEvent@@QAE@ABV0@@Z @ 13037 NONAME ABSENT ; QResizeEvent::QResizeEvent(class QResizeEvent const &) + ??0QIconEngineFactoryInterface@@QAE@XZ @ 13038 NONAME ABSENT ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void) ?drawTextItem@QBlitterPaintEngine@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 13039 NONAME ; void QBlitterPaintEngine::drawTextItem(class QPointF const &, class QTextItem const &) - ??0QPictureFormatInterface@@QAE@XZ @ 13040 NONAME ; QPictureFormatInterface::QPictureFormatInterface(void) + ??0QPictureFormatInterface@@QAE@XZ @ 13040 NONAME ABSENT ; QPictureFormatInterface::QPictureFormatInterface(void) ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13041 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *) ?stop@QScroller@@QAEXXZ @ 13042 NONAME ; void QScroller::stop(void) ?retrieveData@QInternalMimeData@@MBE?AVQVariant@@ABVQString@@W4Type@2@@Z @ 13043 NONAME ; class QVariant QInternalMimeData::retrieveData(class QString const &, enum QVariant::Type) const @@ -13055,18 +13055,18 @@ EXPORTS ?sort@QAbstractProxyModel@@UAEXHW4SortOrder@Qt@@@Z @ 13054 NONAME ; void QAbstractProxyModel::sort(int, enum Qt::SortOrder) ?d_func@QBlittable@@AAEPAVQBlittablePrivate@@XZ @ 13055 NONAME ; class QBlittablePrivate * QBlittable::d_func(void) ?setDefaultScrollerProperties@QScrollerProperties@@SAXABV1@@Z @ 13056 NONAME ; void QScrollerProperties::setDefaultScrollerProperties(class QScrollerProperties const &) - ??_EQPolygon@@QAE@I@Z @ 13057 NONAME ; QPolygon::~QPolygon(unsigned int) + ??_EQPolygon@@QAE@I@Z @ 13057 NONAME ABSENT ; QPolygon::~QPolygon(unsigned int) ?type@QBlitterPaintEngine@@UBE?AW4Type@QPaintEngine@@XZ @ 13058 NONAME ; enum QPaintEngine::Type QBlitterPaintEngine::type(void) const ?qt_metacast@QScroller@@UAEPAXPBD@Z @ 13059 NONAME ; void * QScroller::qt_metacast(char const *) - ??_EQImageReader@@QAE@I@Z @ 13060 NONAME ; QImageReader::~QImageReader(unsigned int) + ??_EQImageReader@@QAE@I@Z @ 13060 NONAME ABSENT ; QImageReader::~QImageReader(unsigned int) ?buddy@QAbstractProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 13061 NONAME ; class QModelIndex QAbstractProxyModel::buddy(class QModelIndex const &) const ?tr@QScroller@@SA?AVQString@@PBD0H@Z @ 13062 NONAME ; class QString QScroller::tr(char const *, char const *, int) ?fill@QImage@@QAEXABVQColor@@@Z @ 13063 NONAME ; void QImage::fill(class QColor const &) ?scrollMetric@QScrollerProperties@@QBE?AVQVariant@@W4ScrollMetric@1@@Z @ 13064 NONAME ; class QVariant QScrollerProperties::scrollMetric(enum QScrollerProperties::ScrollMetric) const ?fill@QImage@@QAEXW4GlobalColor@Qt@@@Z @ 13065 NONAME ; void QImage::fill(enum Qt::GlobalColor) - ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13066 NONAME ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &) + ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13066 NONAME ABSENT ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &) ?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13067 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const - ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13068 NONAME ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &) + ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13068 NONAME ABSENT ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &) ??1QScroller@@EAE@XZ @ 13069 NONAME ; QScroller::~QScroller(void) ?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 13070 NONAME ; void QGlyphs::setFont(class QFont const &) ?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13071 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const @@ -13076,16 +13076,16 @@ EXPORTS ?getText@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1W4EchoMode@QLineEdit@@1PA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13075 NONAME ; class QString QInputDialog::getText(class QWidget *, class QString const &, class QString const &, enum QLineEdit::EchoMode, class QString const &, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) ?hasWidthForHeight@QSizePolicy@@QBE_NXZ @ 13076 NONAME ; bool QSizePolicy::hasWidthForHeight(void) const ?transformChanged@QBlitterPaintEngine@@UAEXXZ @ 13077 NONAME ; void QBlitterPaintEngine::transformChanged(void) - ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13078 NONAME ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &) + ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13078 NONAME ABSENT ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &) ??0QBlittablePixmapData@@QAE@XZ @ 13079 NONAME ; QBlittablePixmapData::QBlittablePixmapData(void) - ??_EKey@QPixmapCache@@QAE@I@Z @ 13080 NONAME ; QPixmapCache::Key::~Key(unsigned int) - ??_EQCursor@@QAE@I@Z @ 13081 NONAME ; QCursor::~QCursor(unsigned int) + ??_EKey@QPixmapCache@@QAE@I@Z @ 13080 NONAME ABSENT ; QPixmapCache::Key::~Key(unsigned int) + ??_EQCursor@@QAE@I@Z @ 13081 NONAME ABSENT ; QCursor::~QCursor(unsigned int) ?size@QBlittable@@QBE?AVQSize@@XZ @ 13082 NONAME ; class QSize QBlittable::size(void) const - ??0QShortcutEvent@@QAE@ABV0@@Z @ 13083 NONAME ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &) + ??0QShortcutEvent@@QAE@ABV0@@Z @ 13083 NONAME ABSENT ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &) ?setBlittable@QBlittablePixmapData@@QAEXPAVQBlittable@@@Z @ 13084 NONAME ; void QBlittablePixmapData::setBlittable(class QBlittable *) ?opacityChanged@QBlitterPaintEngine@@UAEXXZ @ 13085 NONAME ; void QBlitterPaintEngine::opacityChanged(void) ?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13086 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int) - ??_EQTextCursor@@QAE@I@Z @ 13087 NONAME ; QTextCursor::~QTextCursor(unsigned int) + ??_EQTextCursor@@QAE@I@Z @ 13087 NONAME ABSENT ; QTextCursor::~QTextCursor(unsigned int) ?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 13088 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const ?setState@QBlitterPaintEngine@@UAEXPAVQPainterState@@@Z @ 13089 NONAME ; void QBlitterPaintEngine::setState(class QPainterState *) ?clip@QBlitterPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 13090 NONAME ; void QBlitterPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation) @@ -13094,9 +13094,9 @@ EXPORTS ?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13093 NONAME ; void QScroller::setSnapPositionsX(class QList<float> const &) ?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 13094 NONAME ; class QString QTextListFormat::numberSuffix(void) const ??HQGlyphs@@ABE?AV0@ABV0@@Z @ 13095 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const - ??0QGradient@@QAE@ABV0@@Z @ 13096 NONAME ; QGradient::QGradient(class QGradient const &) + ??0QGradient@@QAE@ABV0@@Z @ 13096 NONAME ABSENT ; QGradient::QGradient(class QGradient const &) ?tabsMovable@QMdiArea@@QBE_NXZ @ 13097 NONAME ; bool QMdiArea::tabsMovable(void) const - ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13098 NONAME ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &) + ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13098 NONAME ABSENT ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &) ?contentPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13099 NONAME ; class QPointF QScrollPrepareEvent::contentPos(void) const ?getStaticMetaObject@QScroller@@SAABUQMetaObject@@XZ @ 13100 NONAME ; struct QMetaObject const & QScroller::getStaticMetaObject(void) ?end@QBlitterPaintEngine@@UAE_NXZ @ 13101 NONAME ; bool QBlitterPaintEngine::end(void) @@ -13104,62 +13104,62 @@ EXPORTS ??0QFlickGesture@@QAE@PAVQObject@@W4MouseButton@Qt@@0@Z @ 13103 NONAME ; QFlickGesture::QFlickGesture(class QObject *, enum Qt::MouseButton, class QObject *) ?fill@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 13104 NONAME ; void QBlitterPaintEngine::fill(class QVectorPath const &, class QBrush const &) ?drawPixmap@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 13105 NONAME ; void QBlitterPaintEngine::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &) - ??0QVector2D@@QAE@ABV0@@Z @ 13106 NONAME ; QVector2D::QVector2D(class QVector2D const &) + ??0QVector2D@@QAE@ABV0@@Z @ 13106 NONAME ABSENT ; QVector2D::QVector2D(class QVector2D const &) ?setSnapPositionsY@QScroller@@QAEXABV?$QList@M@@@Z @ 13107 NONAME ; void QScroller::setSnapPositionsY(class QList<float> const &) - ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13108 NONAME ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &) - ??_EQPen@@QAE@I@Z @ 13109 NONAME ; QPen::~QPen(unsigned int) - ??_EQKeySequence@@QAE@I@Z @ 13110 NONAME ; QKeySequence::~QKeySequence(unsigned int) + ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13108 NONAME ABSENT ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &) + ??_EQPen@@QAE@I@Z @ 13109 NONAME ABSENT ; QPen::~QPen(unsigned int) + ??_EQKeySequence@@QAE@I@Z @ 13110 NONAME ABSENT ; QKeySequence::~QKeySequence(unsigned int) ?tr@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13111 NONAME ; class QString QInternalMimeData::tr(char const *, char const *, int) ?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13112 NONAME ; class QPointF QScroller::velocity(void) const ?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 13113 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const ?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 13114 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &) ?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13115 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &) - ??4QGradient@@QAEAAV0@ABV0@@Z @ 13116 NONAME ; class QGradient & QGradient::operator=(class QGradient const &) + ??4QGradient@@QAEAAV0@ABV0@@Z @ 13116 NONAME ABSENT ; class QGradient & QGradient::operator=(class QGradient const &) ??0QScrollEvent@@QAE@ABVQPointF@@0W4ScrollState@0@@Z @ 13117 NONAME ; QScrollEvent::QScrollEvent(class QPointF const &, class QPointF const &, enum QScrollEvent::ScrollState) ?d_func@QFlickGesture@@AAEPAVQFlickGesturePrivate@@XZ @ 13118 NONAME ; class QFlickGesturePrivate * QFlickGesture::d_func(void) ?scrollState@QScrollEvent@@QBE?AW4ScrollState@1@XZ @ 13119 NONAME ; enum QScrollEvent::ScrollState QScrollEvent::scrollState(void) const - ??0QTextTableFormat@@QAE@ABV0@@Z @ 13120 NONAME ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &) - ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13121 NONAME ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int) + ??0QTextTableFormat@@QAE@ABV0@@Z @ 13120 NONAME ABSENT ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &) + ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13121 NONAME ABSENT ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int) ?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 13122 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &) ?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 13123 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const ?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13124 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void) ?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13125 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &) - ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13126 NONAME ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &) - ??0Value@QCss@@QAE@ABU01@@Z @ 13127 NONAME ; QCss::Value::Value(struct QCss::Value const &) + ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13126 NONAME ABSENT ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &) + ??0Value@QCss@@QAE@ABU01@@Z @ 13127 NONAME ABSENT ; QCss::Value::Value(struct QCss::Value const &) ?d_func@QScrollPrepareEvent@@AAEPAVQScrollPrepareEventPrivate@@XZ @ 13128 NONAME ; class QScrollPrepareEventPrivate * QScrollPrepareEvent::d_func(void) ?overshootDistance@QScrollEvent@@QBE?AVQPointF@@XZ @ 13129 NONAME ; class QPointF QScrollEvent::overshootDistance(void) const ?resolveFontFamilyAlias@QFontDatabase@@CA?AVQString@@ABV2@@Z @ 13130 NONAME ; class QString QFontDatabase::resolveFontFamilyAlias(class QString const &) ?alphaRGBMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@HABVQTransform@@@Z @ 13131 NONAME ; class QImage QFontEngine::alphaRGBMapForGlyph(unsigned int, struct QFixed, int, class QTransform const &) - ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13132 NONAME ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &) + ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13132 NONAME ABSENT ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &) ?swap@QBitmap@@QAEXAAV1@@Z @ 13133 NONAME ; void QBitmap::swap(class QBitmap &) ?hasFormat@QInternalMimeData@@UBE_NABVQString@@@Z @ 13134 NONAME ; bool QInternalMimeData::hasFormat(class QString const &) const ?renderDataHelper@QInternalMimeData@@SA?AVQByteArray@@ABVQString@@PBVQMimeData@@@Z @ 13135 NONAME ; class QByteArray QInternalMimeData::renderDataHelper(class QString const &, class QMimeData const *) - ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13136 NONAME ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int) + ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13136 NONAME ABSENT ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int) ??0QWindowSurface@@QAE@PAVQWidget@@_N@Z @ 13137 NONAME ; QWindowSurface::QWindowSurface(class QWidget *, bool) ?fill@QBlittablePixmapData@@UAEXABVQColor@@@Z @ 13138 NONAME ; void QBlittablePixmapData::fill(class QColor const &) ?metric@QBlittablePixmapData@@UBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 13139 NONAME ; int QBlittablePixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const - ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13140 NONAME ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &) + ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13140 NONAME ABSENT ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &) ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQColor@@@Z @ 13141 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QColor const &) - ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13142 NONAME ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &) + ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13142 NONAME ABSENT ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &) ??6@YA?AVQDebug@@V0@PBVQSymbianEvent@@@Z @ 13143 NONAME ; class QDebug operator<<(class QDebug, class QSymbianEvent const *) - ??0QSizePolicy@@QAE@ABV0@@Z @ 13144 NONAME ; QSizePolicy::QSizePolicy(class QSizePolicy const &) + ??0QSizePolicy@@QAE@ABV0@@Z @ 13144 NONAME ABSENT ; QSizePolicy::QSizePolicy(class QSizePolicy const &) ?ProcessCommandParametersL@QS60MainAppUi@@UAEHW4TApaCommand@@AAV?$TBuf@$0BAA@@@ABVTDesC8@@@Z @ 13145 NONAME ; int QS60MainAppUi::ProcessCommandParametersL(enum TApaCommand, class TBuf<256> &, class TDesC8 const &) ?scrollerProperties@QScroller@@QBE?AVQScrollerProperties@@XZ @ 13146 NONAME ; class QScrollerProperties QScroller::scrollerProperties(void) const ??_EQBlittablePixmapData@@UAE@I@Z @ 13147 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(unsigned int) ?mimeData@QAbstractProxyModel@@UBEPAVQMimeData@@ABV?$QList@VQModelIndex@@@@@Z @ 13148 NONAME ; class QMimeData * QAbstractProxyModel::mimeData(class QList<class QModelIndex> const &) const - ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13149 NONAME ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &) + ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13149 NONAME ABSENT ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &) ??_EQScroller@@UAE@I@Z @ 13150 NONAME ; QScroller::~QScroller(unsigned int) ??1QScrollPrepareEvent@@UAE@XZ @ 13151 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(void) - ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13152 NONAME ; class QVector3D & QVector3D::operator=(class QVector3D const &) + ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13152 NONAME ABSENT ; class QVector3D & QVector3D::operator=(class QVector3D const &) ?setTabsMovable@QMdiArea@@QAEX_N@Z @ 13153 NONAME ; void QMdiArea::setTabsMovable(bool) ?minimumSizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 13154 NONAME ; class QSize QRadioButton::minimumSizeHint(void) const - ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13155 NONAME ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &) + ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13155 NONAME ABSENT ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &) ?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13156 NONAME ; void * QFlickGesture::qt_metacast(char const *) - ??_EQFont@@QAE@I@Z @ 13157 NONAME ; QFont::~QFont(unsigned int) + ??_EQFont@@QAE@I@Z @ 13157 NONAME ABSENT ; QFont::~QFont(unsigned int) ?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 13158 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &) - ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13159 NONAME ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &) - ??0QPainterState@@QAE@ABV0@@Z @ 13160 NONAME ; QPainterState::QPainterState(class QPainterState const &) - ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13161 NONAME ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &) + ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13159 NONAME ABSENT ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &) + ??0QPainterState@@QAE@ABV0@@Z @ 13160 NONAME ABSENT ; QPainterState::QPainterState(class QPainterState const &) + ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13161 NONAME ABSENT ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &) ?drawRects@QBlitterPaintEngine@@UAEXPBVQRect@@H@Z @ 13162 NONAME ; void QBlitterPaintEngine::drawRects(class QRect const *, int) ?fillInPendingGlyphs@QTextureGlyphCache@@QAEXXZ @ 13163 NONAME ; void QTextureGlyphCache::fillInPendingGlyphs(void) ?metaObject@QFlickGesture@@UBEPBUQMetaObject@@XZ @ 13164 NONAME ; struct QMetaObject const * QFlickGesture::metaObject(void) const @@ -13170,20 +13170,20 @@ EXPORTS ?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 13169 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &) ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IABVQTransform@@W4GlyphFormat@1@@Z @ 13170 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, class QTransform const &, enum QFontEngine::GlyphFormat) ?resendPrepareEvent@QScroller@@QAEXXZ @ 13171 NONAME ; void QScroller::resendPrepareEvent(void) - ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13172 NONAME ; class QTextLength & QTextLength::operator=(class QTextLength const &) - ??0QHelpEvent@@QAE@ABV0@@Z @ 13173 NONAME ; QHelpEvent::QHelpEvent(class QHelpEvent const &) - ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13174 NONAME ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &) + ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13172 NONAME ABSENT ; class QTextLength & QTextLength::operator=(class QTextLength const &) + ??0QHelpEvent@@QAE@ABV0@@Z @ 13173 NONAME ABSENT ; QHelpEvent::QHelpEvent(class QHelpEvent const &) + ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13174 NONAME ABSENT ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &) ?d_func@QBlittable@@ABEPBVQBlittablePrivate@@XZ @ 13175 NONAME ; class QBlittablePrivate const * QBlittable::d_func(void) const ?state@QBlitterPaintEngine@@QBEPBVQPainterState@@XZ @ 13176 NONAME ; class QPainterState const * QBlitterPaintEngine::state(void) const ??0QScrollPrepareEvent@@QAE@ABVQPointF@@@Z @ 13177 NONAME ; QScrollPrepareEvent::QScrollPrepareEvent(class QPointF const &) - ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13178 NONAME ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &) - ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13179 NONAME ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &) - ??0QTabletEvent@@QAE@ABV0@@Z @ 13180 NONAME ; QTabletEvent::QTabletEvent(class QTabletEvent const &) + ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13178 NONAME ABSENT ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &) + ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13179 NONAME ABSENT ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &) + ??0QTabletEvent@@QAE@ABV0@@Z @ 13180 NONAME ABSENT ; QTabletEvent::QTabletEvent(class QTabletEvent const &) ?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13181 NONAME ; void QScroller::scrollTo(class QPointF const &, int) ?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13182 NONAME ; void QScroller::ungrabGesture(class QObject *) - ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13183 NONAME ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &) + ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13183 NONAME ABSENT ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &) ?clear@QGlyphs@@QAEXXZ @ 13184 NONAME ; void QGlyphs::clear(void) - ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13185 NONAME ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int) + ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13185 NONAME ABSENT ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int) ??1QBlittablePixmapData@@UAE@XZ @ 13186 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(void) ?formatsHelper@QInternalMimeData@@SA?AVQStringList@@PBVQMimeData@@@Z @ 13187 NONAME ; class QStringList QInternalMimeData::formatsHelper(class QMimeData const *) ?qt_metacast@QInternalMimeData@@UAEPAXPBD@Z @ 13188 NONAME ; void * QInternalMimeData::qt_metacast(char const *) @@ -13193,22 +13193,22 @@ EXPORTS ?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13192 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const ?swap@QPen@@QAEXAAV1@@Z @ 13193 NONAME ; void QPen::swap(class QPen &) ?span@QAbstractProxyModel@@UBE?AVQSize@@ABVQModelIndex@@@Z @ 13194 NONAME ; class QSize QAbstractProxyModel::span(class QModelIndex const &) const - ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13195 NONAME ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &) - ??0QHoverEvent@@QAE@ABV0@@Z @ 13196 NONAME ; QHoverEvent::QHoverEvent(class QHoverEvent const &) - ??0QPaintEngineState@@QAE@XZ @ 13197 NONAME ; QPaintEngineState::QPaintEngineState(void) + ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13195 NONAME ABSENT ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &) + ??0QHoverEvent@@QAE@ABV0@@Z @ 13196 NONAME ABSENT ; QHoverEvent::QHoverEvent(class QHoverEvent const &) + ??0QPaintEngineState@@QAE@XZ @ 13197 NONAME ABSENT ; QPaintEngineState::QPaintEngineState(void) ?setSnapPositionsY@QScroller@@QAEXMM@Z @ 13198 NONAME ; void QScroller::setSnapPositionsY(float, float) ?d_func@QScrollPrepareEvent@@ABEPBVQScrollPrepareEventPrivate@@XZ @ 13199 NONAME ; class QScrollPrepareEventPrivate const * QScrollPrepareEvent::d_func(void) const ?textureMapForGlyph@QTextureGlyphCache@@QBE?AVQImage@@IUQFixed@@@Z @ 13200 NONAME ; class QImage QTextureGlyphCache::textureMapForGlyph(unsigned int, struct QFixed) const - ??0QKeyEvent@@QAE@ABV0@@Z @ 13201 NONAME ; QKeyEvent::QKeyEvent(class QKeyEvent const &) - ??0QIconEngine@@QAE@ABV0@@Z @ 13202 NONAME ; QIconEngine::QIconEngine(class QIconEngine const &) - ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13203 NONAME ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &) + ??0QKeyEvent@@QAE@ABV0@@Z @ 13201 NONAME ABSENT ; QKeyEvent::QKeyEvent(class QKeyEvent const &) + ??0QIconEngine@@QAE@ABV0@@Z @ 13202 NONAME ABSENT ; QIconEngine::QIconEngine(class QIconEngine const &) + ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13203 NONAME ABSENT ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &) ?qt_metacall@QInternalMimeData@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13204 NONAME ; int QInternalMimeData::qt_metacall(enum QMetaObject::Call, int, void * *) ?lineHeightType@QTextBlockFormat@@QBEHXZ @ 13205 NONAME ; int QTextBlockFormat::lineHeightType(void) const ?hintingPreference@QFont@@QBE?AW4HintingPreference@1@XZ @ 13206 NONAME ; enum QFont::HintingPreference QFont::hintingPreference(void) const ??0QGlyphs@@QAE@XZ @ 13207 NONAME ; QGlyphs::QGlyphs(void) ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13208 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *, int) - ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13209 NONAME ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void) - ??_EQRegion@@QAE@I@Z @ 13210 NONAME ; QRegion::~QRegion(unsigned int) + ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13209 NONAME ABSENT ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void) + ??_EQRegion@@QAE@I@Z @ 13210 NONAME ABSENT ; QRegion::~QRegion(unsigned int) ?begin@QBlitterPaintEngine@@UAE_NPAVQPaintDevice@@@Z @ 13211 NONAME ; bool QBlitterPaintEngine::begin(class QPaintDevice *) ?inFontUcs4@QFontMetricsF@@QBE_NI@Z @ 13212 NONAME ; bool QFontMetricsF::inFontUcs4(unsigned int) const ?viewportSize@QScrollPrepareEvent@@QBE?AVQSizeF@@XZ @ 13213 NONAME ; class QSizeF QScrollPrepareEvent::viewportSize(void) const @@ -13216,11 +13216,11 @@ EXPORTS ?d_func@QBlitterPaintEngine@@AAEPAVQBlitterPaintEnginePrivate@@XZ @ 13215 NONAME ; class QBlitterPaintEnginePrivate * QBlitterPaintEngine::d_func(void) ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 13216 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &) ?lineHeight@QTextBlockFormat@@QBEMMM@Z @ 13217 NONAME ; float QTextBlockFormat::lineHeight(float, float) const - ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13218 NONAME ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &) + ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13218 NONAME ABSENT ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &) ?getItem@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1ABVQStringList@@H_NPA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13219 NONAME ; class QString QInputDialog::getItem(class QWidget *, class QString const &, class QString const &, class QStringList const &, int, bool, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) - ??_EFileInfo@QZipReader@@QAE@I@Z @ 13220 NONAME ; QZipReader::FileInfo::~FileInfo(unsigned int) + ??_EFileInfo@QZipReader@@QAE@I@Z @ 13220 NONAME ABSENT ; QZipReader::FileInfo::~FileInfo(unsigned int) ?qGamma_correct_back_to_linear_cs@@YAXPAVQImage@@@Z @ 13221 NONAME ; void qGamma_correct_back_to_linear_cs(class QImage *) - ??0QBitmap@@QAE@ABV0@@Z @ 13222 NONAME ; QBitmap::QBitmap(class QBitmap const &) + ??0QBitmap@@QAE@ABV0@@Z @ 13222 NONAME ABSENT ; QBitmap::QBitmap(class QBitmap const &) ?clip@QBlitterPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 13223 NONAME ; void QBlitterPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation) ??1QScrollEvent@@UAE@XZ @ 13224 NONAME ; QScrollEvent::~QScrollEvent(void) ?state@QScroller@@QBE?AW4State@1@XZ @ 13225 NONAME ; enum QScroller::State QScroller::state(void) const @@ -13228,26 +13228,26 @@ EXPORTS ?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13227 NONAME ; class QString QScroller::tr(char const *, char const *) ?canReadData@QInternalMimeData@@SA_NABVQString@@@Z @ 13228 NONAME ; bool QInternalMimeData::canReadData(class QString const &) ?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13229 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const - ??_EQTextFormat@@QAE@I@Z @ 13230 NONAME ; QTextFormat::~QTextFormat(unsigned int) - ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13231 NONAME ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &) + ??_EQTextFormat@@QAE@I@Z @ 13230 NONAME ABSENT ; QTextFormat::~QTextFormat(unsigned int) + ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13231 NONAME ABSENT ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &) ?trUtf8@QScroller@@SA?AVQString@@PBD0H@Z @ 13232 NONAME ; class QString QScroller::trUtf8(char const *, char const *, int) ?d_func@QFlickGesture@@ABEPBVQFlickGesturePrivate@@XZ @ 13233 NONAME ; class QFlickGesturePrivate const * QFlickGesture::d_func(void) const - ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13234 NONAME ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &) - ??_EQPainter@@QAE@I@Z @ 13235 NONAME ; QPainter::~QPainter(unsigned int) - ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13236 NONAME ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &) - ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13237 NONAME ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &) + ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13234 NONAME ABSENT ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &) + ??_EQPainter@@QAE@I@Z @ 13235 NONAME ABSENT ; QPainter::~QPainter(unsigned int) + ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13236 NONAME ABSENT ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &) + ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13237 NONAME ABSENT ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &) ?hasScroller@QScroller@@SA_NPAVQObject@@@Z @ 13238 NONAME ; bool QScroller::hasScroller(class QObject *) ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@ABVQTransform@@@Z @ 13239 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed, class QTransform const &) - ??_EQPainterPath@@QAE@I@Z @ 13240 NONAME ; QPainterPath::~QPainterPath(unsigned int) - ??_EQGlyphs@@QAE@I@Z @ 13241 NONAME ; QGlyphs::~QGlyphs(unsigned int) + ??_EQPainterPath@@QAE@I@Z @ 13240 NONAME ABSENT ; QPainterPath::~QPainterPath(unsigned int) + ??_EQGlyphs@@QAE@I@Z @ 13241 NONAME ABSENT ; QGlyphs::~QGlyphs(unsigned int) ?fromImage@QBlittablePixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13242 NONAME ; void QBlittablePixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>) ??0QInternalMimeData@@QAE@XZ @ 13243 NONAME ; QInternalMimeData::QInternalMimeData(void) ??_EQScrollEvent@@UAE@I@Z @ 13244 NONAME ; QScrollEvent::~QScrollEvent(unsigned int) ??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13245 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &) - ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13246 NONAME ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &) - ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13247 NONAME ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &) + ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13246 NONAME ABSENT ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &) + ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13247 NONAME ABSENT ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &) ??0QBlittable@@QAE@ABVQSize@@V?$QFlags@W4Capability@QBlittable@@@@@Z @ 13248 NONAME ; QBlittable::QBlittable(class QSize const &, class QFlags<enum QBlittable::Capability>) - ??0QIconDragEvent@@QAE@ABV0@@Z @ 13249 NONAME ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &) + ??0QIconDragEvent@@QAE@ABV0@@Z @ 13249 NONAME ABSENT ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &) ?scroller@QScroller@@SAPAV1@PAVQObject@@@Z @ 13250 NONAME ; class QScroller * QScroller::scroller(class QObject *) ??4QScrollerProperties@@QAEAAV0@ABV0@@Z @ 13251 NONAME ; class QScrollerProperties & QScrollerProperties::operator=(class QScrollerProperties const &) ?d_func@QScroller@@AAEPAVQScrollerPrivate@@XZ @ 13252 NONAME ; class QScrollerPrivate * QScroller::d_func(void) @@ -13258,48 +13258,48 @@ EXPORTS ??0QScrollerProperties@@QAE@XZ @ 13257 NONAME ; QScrollerProperties::QScrollerProperties(void) ?setLineHeight@QTextBlockFormat@@QAEXMH@Z @ 13258 NONAME ; void QTextBlockFormat::setLineHeight(float, int) ?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 13259 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const - ??0QTextImageFormat@@QAE@ABV0@@Z @ 13260 NONAME ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &) - ??0QMoveEvent@@QAE@ABV0@@Z @ 13261 NONAME ; QMoveEvent::QMoveEvent(class QMoveEvent const &) + ??0QTextImageFormat@@QAE@ABV0@@Z @ 13260 NONAME ABSENT ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &) + ??0QMoveEvent@@QAE@ABV0@@Z @ 13261 NONAME ABSENT ; QMoveEvent::QMoveEvent(class QMoveEvent const &) ?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13262 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const - ??0QInputContextFactoryInterface@@QAE@XZ @ 13263 NONAME ; QInputContextFactoryInterface::QInputContextFactoryInterface(void) - ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13264 NONAME ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &) + ??0QInputContextFactoryInterface@@QAE@XZ @ 13263 NONAME ABSENT ; QInputContextFactoryInterface::QInputContextFactoryInterface(void) + ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13264 NONAME ABSENT ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &) ?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13265 NONAME ; void QAbstractProxyModel::resetInternalData(void) - ??0Symbol@QCss@@QAE@ABU01@@Z @ 13266 NONAME ; QCss::Symbol::Symbol(struct QCss::Symbol const &) + ??0Symbol@QCss@@QAE@ABU01@@Z @ 13266 NONAME ABSENT ; QCss::Symbol::Symbol(struct QCss::Symbol const &) ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQVectorPath@@@Z @ 13267 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QVectorPath const &) - ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13268 NONAME ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &) + ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13268 NONAME ABSENT ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &) ?scrollTo@QScroller@@QAEXABVQPointF@@@Z @ 13269 NONAME ; void QScroller::scrollTo(class QPointF const &) - ??0QGraphicsSystem@@QAE@XZ @ 13270 NONAME ; QGraphicsSystem::QGraphicsSystem(void) - ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13271 NONAME ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &) - ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13272 NONAME ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &) + ??0QGraphicsSystem@@QAE@XZ @ 13270 NONAME ABSENT ; QGraphicsSystem::QGraphicsSystem(void) + ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13271 NONAME ABSENT ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &) + ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13272 NONAME ABSENT ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &) ?clip@QBlitterPaintEngine@@QAEPBVQClipData@@XZ @ 13273 NONAME ; class QClipData const * QBlitterPaintEngine::clip(void) ?d_func@QScroller@@ABEPBVQScrollerPrivate@@XZ @ 13274 NONAME ; class QScrollerPrivate const * QScroller::d_func(void) const ?setNumberSuffix@QTextListFormat@@QAEXABVQString@@@Z @ 13275 NONAME ; void QTextListFormat::setNumberSuffix(class QString const &) ?swap@QPicture@@QAEXAAV1@@Z @ 13276 NONAME ; void QPicture::swap(class QPicture &) ?swap@QPainterPath@@QAEXAAV1@@Z @ 13277 NONAME ; void QPainterPath::swap(class QPainterPath &) - ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13278 NONAME ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &) + ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13278 NONAME ABSENT ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &) ?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 13279 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const ?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13280 NONAME ; class QFont QFontEngine::createExplicitFont(void) const ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@@Z @ 13281 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed) ?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 13282 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) ?swap@QIcon@@QAEXAAV1@@Z @ 13283 NONAME ; void QIcon::swap(class QIcon &) ?unmarkRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13284 NONAME ; void QBlittablePixmapData::unmarkRasterOverlay(class QRectF const &) - ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13285 NONAME ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &) - ??0QIconEngine@@QAE@XZ @ 13286 NONAME ; QIconEngine::QIconEngine(void) + ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13285 NONAME ABSENT ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &) + ??0QIconEngine@@QAE@XZ @ 13286 NONAME ABSENT ; QIconEngine::QIconEngine(void) ?brushOriginChanged@QBlitterPaintEngine@@UAEXXZ @ 13287 NONAME ; void QBlitterPaintEngine::brushOriginChanged(void) ?openFile@QFileOpenEvent@@QBE_NAAVQFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13288 NONAME ; bool QFileOpenEvent::openFile(class QFile &, class QFlags<enum QIODevice::OpenModeFlag>) const - ??_EQBrush@@QAE@I@Z @ 13289 NONAME ; QBrush::~QBrush(unsigned int) + ??_EQBrush@@QAE@I@Z @ 13289 NONAME ABSENT ; QBrush::~QBrush(unsigned int) ??0QApplicationPrivate@@QAE@AAHPAPADW4Type@QApplication@@H@Z @ 13290 NONAME ; QApplicationPrivate::QApplicationPrivate(int &, char * *, enum QApplication::Type, int) ?handleInput@QScroller@@QAE_NW4Input@1@ABVQPointF@@_J@Z @ 13291 NONAME ; bool QScroller::handleInput(enum QScroller::Input, class QPointF const &, long long) ??8QScrollerProperties@@QBE_NABV0@@Z @ 13292 NONAME ; bool QScrollerProperties::operator==(class QScrollerProperties const &) const ?inFontUcs4@QFontMetrics@@QBE_NI@Z @ 13293 NONAME ; bool QFontMetrics::inFontUcs4(unsigned int) const - ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13294 NONAME ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int) - ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13295 NONAME ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &) - ??0QTextObjectInterface@@QAE@XZ @ 13296 NONAME ; QTextObjectInterface::QTextObjectInterface(void) + ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13294 NONAME ABSENT ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int) + ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13295 NONAME ABSENT ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &) + ??0QTextObjectInterface@@QAE@XZ @ 13296 NONAME ABSENT ; QTextObjectInterface::QTextObjectInterface(void) ?unlock@QBlittable@@QAEXXZ @ 13297 NONAME ; void QBlittable::unlock(void) ?metaObject@QScroller@@UBEPBUQMetaObject@@XZ @ 13298 NONAME ; struct QMetaObject const * QScroller::metaObject(void) const ?d_func@QScrollEvent@@ABEPBVQScrollEventPrivate@@XZ @ 13299 NONAME ; class QScrollEventPrivate const * QScrollEvent::d_func(void) const ?swap@QRegion@@QAEXAAV1@@Z @ 13300 NONAME ; void QRegion::swap(class QRegion &) - ??0QHideEvent@@QAE@ABV0@@Z @ 13301 NONAME ; QHideEvent::QHideEvent(class QHideEvent const &) + ??0QHideEvent@@QAE@ABV0@@Z @ 13301 NONAME ABSENT ; QHideEvent::QHideEvent(class QHideEvent const &) ?ensureVisible@QScroller@@QAEXABVQRectF@@MMH@Z @ 13302 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float, int) ?qt_metacall@QFlickGesture@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13303 NONAME ; int QFlickGesture::qt_metacall(enum QMetaObject::Call, int, void * *) ?setItemData@QAbstractProxyModel@@UAE_NABVQModelIndex@@ABV?$QMap@HVQVariant@@@@@Z @ 13304 NONAME ; bool QAbstractProxyModel::setItemData(class QModelIndex const &, class QMap<int, class QVariant> const &) @@ -13318,57 +13318,57 @@ EXPORTS ??9QGlyphs@@QBE_NABV0@@Z @ 13317 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const ??1QBlittable@@UAE@XZ @ 13318 NONAME ; QBlittable::~QBlittable(void) ??_EQBlitterPaintEngine@@UAE@I@Z @ 13319 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(unsigned int) - ??0QCloseEvent@@QAE@ABV0@@Z @ 13320 NONAME ; QCloseEvent::QCloseEvent(class QCloseEvent const &) + ??0QCloseEvent@@QAE@ABV0@@Z @ 13320 NONAME ABSENT ; QCloseEvent::QCloseEvent(class QCloseEvent const &) ?grabbedGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@@Z @ 13321 NONAME ; enum Qt::GestureType QScroller::grabbedGesture(class QObject *) ?buffer@QBlittablePixmapData@@UAEPAVQImage@@XZ @ 13322 NONAME ; class QImage * QBlittablePixmapData::buffer(void) - ??0QTextFrameLayoutData@@QAE@XZ @ 13323 NONAME ; QTextFrameLayoutData::QTextFrameLayoutData(void) + ??0QTextFrameLayoutData@@QAE@XZ @ 13323 NONAME ABSENT ; QTextFrameLayoutData::QTextFrameLayoutData(void) ?staticMetaObject@QFlickGesture@@2UQMetaObject@@B @ 13324 NONAME ; struct QMetaObject const QFlickGesture::staticMetaObject ?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13325 NONAME ; class QPointF QScroller::finalPosition(void) const - ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13326 NONAME ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &) + ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13326 NONAME ABSENT ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &) ?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13327 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *) ??0QGlyphs@@QAE@ABV0@@Z @ 13328 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &) ?lock@QBlittable@@QAEPAVQImage@@XZ @ 13329 NONAME ; class QImage * QBlittable::lock(void) ?setFontHintingPreference@QTextCharFormat@@QAEXW4HintingPreference@QFont@@@Z @ 13330 NONAME ; void QTextCharFormat::setFontHintingPreference(enum QFont::HintingPreference) - ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13331 NONAME ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &) + ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13331 NONAME ABSENT ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &) ??_EQInternalMimeData@@UAE@I@Z @ 13332 NONAME ; QInternalMimeData::~QInternalMimeData(unsigned int) - ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13333 NONAME ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &) - ??_EQPalette@@QAE@I@Z @ 13334 NONAME ; QPalette::~QPalette(unsigned int) - ??0QFocusEvent@@QAE@ABV0@@Z @ 13335 NONAME ; QFocusEvent::QFocusEvent(class QFocusEvent const &) - ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13336 NONAME ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &) + ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13333 NONAME ABSENT ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &) + ??_EQPalette@@QAE@I@Z @ 13334 NONAME ABSENT ; QPalette::~QPalette(unsigned int) + ??0QFocusEvent@@QAE@ABV0@@Z @ 13335 NONAME ABSENT ; QFocusEvent::QFocusEvent(class QFocusEvent const &) + ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13336 NONAME ABSENT ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &) ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQPointF@@ABVQTextItem@@@Z @ 13337 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QPointF const &, class QTextItem const &) ?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13338 NONAME ; class QString QScroller::trUtf8(char const *, char const *) - ??_EQIcon@@QAE@I@Z @ 13339 NONAME ; QIcon::~QIcon(unsigned int) + ??_EQIcon@@QAE@I@Z @ 13339 NONAME ABSENT ; QIcon::~QIcon(unsigned int) ??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13340 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &) ??9QScrollerProperties@@QBE_NABV0@@Z @ 13341 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const - ??0QTextListFormat@@QAE@ABV0@@Z @ 13342 NONAME ; QTextListFormat::QTextListFormat(class QTextListFormat const &) + ??0QTextListFormat@@QAE@ABV0@@Z @ 13342 NONAME ABSENT ; QTextListFormat::QTextListFormat(class QTextListFormat const &) ?drawEllipse@QBlitterPaintEngine@@UAEXABVQRectF@@@Z @ 13343 NONAME ; void QBlitterPaintEngine::drawEllipse(class QRectF const &) - ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13344 NONAME ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void) - ??_EQTextLayout@@QAE@I@Z @ 13345 NONAME ; QTextLayout::~QTextLayout(unsigned int) - ??0QWheelEvent@@QAE@ABV0@@Z @ 13346 NONAME ; QWheelEvent::QWheelEvent(class QWheelEvent const &) + ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13344 NONAME ABSENT ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void) + ??_EQTextLayout@@QAE@I@Z @ 13345 NONAME ABSENT ; QTextLayout::~QTextLayout(unsigned int) + ??0QWheelEvent@@QAE@ABV0@@Z @ 13346 NONAME ABSENT ; QWheelEvent::QWheelEvent(class QWheelEvent const &) ?blittable@QBlittablePixmapData@@QBEPAVQBlittable@@XZ @ 13347 NONAME ; class QBlittable * QBlittablePixmapData::blittable(void) const ?resizeCache@QTextureGlyphCache@@QAEXHH@Z @ 13348 NONAME ; void QTextureGlyphCache::resizeCache(int, int) ??0QScrollerProperties@@QAE@ABV0@@Z @ 13349 NONAME ; QScrollerProperties::QScrollerProperties(class QScrollerProperties const &) - ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13350 NONAME ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &) + ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13350 NONAME ABSENT ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &) ?metaObject@QInternalMimeData@@UBEPBUQMetaObject@@XZ @ 13351 NONAME ; struct QMetaObject const * QInternalMimeData::metaObject(void) const ?setContentPos@QScrollPrepareEvent@@QAEXABVQPointF@@@Z @ 13352 NONAME ; void QScrollPrepareEvent::setContentPos(class QPointF const &) - ??_EQTextEngine@@QAE@I@Z @ 13353 NONAME ; QTextEngine::~QTextEngine(unsigned int) - ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13354 NONAME ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &) - ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13355 NONAME ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &) + ??_EQTextEngine@@QAE@I@Z @ 13353 NONAME ABSENT ; QTextEngine::~QTextEngine(unsigned int) + ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13354 NONAME ABSENT ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &) + ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13355 NONAME ABSENT ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &) ?staticMetaObject@QScroller@@2UQMetaObject@@B @ 13356 NONAME ; struct QMetaObject const QScroller::staticMetaObject ?hasFormatHelper@QInternalMimeData@@SA_NABVQString@@PBVQMimeData@@@Z @ 13357 NONAME ; bool QInternalMimeData::hasFormatHelper(class QString const &, class QMimeData const *) ?state@QBlitterPaintEngine@@QAEPAVQPainterState@@XZ @ 13358 NONAME ; class QPainterState * QBlitterPaintEngine::state(void) ?penChanged@QBlitterPaintEngine@@UAEXXZ @ 13359 NONAME ; void QBlitterPaintEngine::penChanged(void) ??0QFileOpenEvent@@QAE@ABVRFile@@@Z @ 13360 NONAME ; QFileOpenEvent::QFileOpenEvent(class RFile const &) ?hasHeightForWidth@QWidgetPrivate@@UBE_NXZ @ 13361 NONAME ; bool QWidgetPrivate::hasHeightForWidth(void) const - ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13362 NONAME ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &) + ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13362 NONAME ABSENT ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &) ?toImage@QBlittablePixmapData@@UBE?AVQImage@@XZ @ 13363 NONAME ; class QImage QBlittablePixmapData::toImage(void) const ??_EQBlittable@@UAE@I@Z @ 13364 NONAME ; QBlittable::~QBlittable(unsigned int) - ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13365 NONAME ; class QBitmap & QBitmap::operator=(class QBitmap const &) + ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13365 NONAME ABSENT ; class QBitmap & QBitmap::operator=(class QBitmap const &) ??1QInternalMimeData@@UAE@XZ @ 13366 NONAME ; QInternalMimeData::~QInternalMimeData(void) - ??0QItemSelection@@QAE@ABV0@@Z @ 13367 NONAME ; QItemSelection::QItemSelection(class QItemSelection const &) + ??0QItemSelection@@QAE@ABV0@@Z @ 13367 NONAME ABSENT ; QItemSelection::QItemSelection(class QItemSelection const &) ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13368 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) ?staticMetaObject@QInternalMimeData@@2UQMetaObject@@B @ 13369 NONAME ; struct QMetaObject const QInternalMimeData::staticMetaObject ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13370 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void) ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13371 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) - ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13372 NONAME ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) + ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13372 NONAME ABSENT ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) -- cgit v0.12 From b56f6ba0662a636e71301ef6dd56c0f8b3737d5b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 11:19:15 +0100 Subject: Fix declaration: it's QT_DECL_ALIGN, not QT_DECL_ALIGNED --- src/corelib/global/qglobal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 06e19dc..8dd8850 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -755,7 +755,7 @@ namespace QT_NAMESPACE {} # define Q_DECL_IMPORT __declspec(dllimport) # endif # if __HP_aCC-0 >= 061200 -# define Q_DECL_ALIGNED(n) __attribute__((aligned(n))) +# define Q_DECL_ALIGN(n) __attribute__((aligned(n))) # endif # if __HP_aCC-0 >= 062000 # define Q_DECL_EXPORT __attribute__((visibility("default"))) -- cgit v0.12 From ec21b536dfcc439b255e8f4ba342df723ff4ca63 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 21 Mar 2011 15:32:05 +0100 Subject: Fix warning about "data" being unused. Reviewed-by: Trust Me --- src/corelib/io/qfilesystemengine_unix.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 1becea5..c9ebaa4 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -176,6 +176,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry, #if !defined(Q_OS_MAC) && _POSIX_VERSION < 200809L // realpath(X,0) is not supported + Q_UNUSED(data); return QFileSystemEntry(slowCanonicalized(absoluteName(entry).filePath())); #else char *ret = 0; -- cgit v0.12 From 26737dcd4296dce49e5f562439de3a0d13127e63 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 21 Mar 2011 15:18:14 +0100 Subject: Compile in C++0x mode --- tests/benchmarks/corelib/io/qfile/main.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/benchmarks/corelib/io/qfile/main.cpp b/tests/benchmarks/corelib/io/qfile/main.cpp index 14d8ea4..9c8684d 100644 --- a/tests/benchmarks/corelib/io/qfile/main.cpp +++ b/tests/benchmarks/corelib/io/qfile/main.cpp @@ -60,16 +60,16 @@ // 10 predefined (but random() seek positions // hardcoded to be comparable over several runs -const int seekpos[] = {TF_SIZE*0.52, - TF_SIZE*0.23, - TF_SIZE*0.73, - TF_SIZE*0.77, - TF_SIZE*0.80, - TF_SIZE*0.12, - TF_SIZE*0.53, - TF_SIZE*0.21, - TF_SIZE*0.27, - TF_SIZE*0.78}; +const int seekpos[] = {int(TF_SIZE*0.52), + int(TF_SIZE*0.23), + int(TF_SIZE*0.73), + int(TF_SIZE*0.77), + int(TF_SIZE*0.80), + int(TF_SIZE*0.12), + int(TF_SIZE*0.53), + int(TF_SIZE*0.21), + int(TF_SIZE*0.27), + int(TF_SIZE*0.78)}; const int sp_size = sizeof(seekpos)/sizeof(int); -- cgit v0.12 From 7e36013828de19bcb3256c38ac29bcf9abdcc05a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 21 Mar 2011 15:32:33 +0100 Subject: Examples: Make the download example also print the SSL errors --- examples/network/download/main.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/examples/network/download/main.cpp b/examples/network/download/main.cpp index 5980ecd..1b7e54b 100644 --- a/examples/network/download/main.cpp +++ b/examples/network/download/main.cpp @@ -45,12 +45,19 @@ #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> +#include <QSslError> #include <QStringList> #include <QTimer> #include <QUrl> #include <stdio.h> +QT_BEGIN_NAMESPACE +class QSslError; +QT_END_NAMESPACE + +QT_USE_NAMESPACE + class DownloadManager: public QObject { Q_OBJECT @@ -66,6 +73,7 @@ public: public slots: void execute(); void downloadFinished(QNetworkReply *reply); + void sslErrors(const QList<QSslError> &errors); }; DownloadManager::DownloadManager() @@ -78,6 +86,7 @@ void DownloadManager::doDownload(const QUrl &url) { QNetworkRequest request(url); QNetworkReply *reply = manager.get(request); + connect(reply, SIGNAL(sslErrors(QList<QSslError>)), SLOT(sslErrors(QList<QSslError>))); currentDownloads.append(reply); } @@ -140,6 +149,14 @@ void DownloadManager::execute() } } +void DownloadManager::sslErrors(const QList<QSslError> &sslErrors) +{ +#ifndef QT_NO_OPENSSL + foreach (const QSslError &error, sslErrors) + fprintf(stderr, "SSL error: %s\n", qPrintable(error.errorString())); +#endif +} + void DownloadManager::downloadFinished(QNetworkReply *reply) { QUrl url = reply->url(); -- cgit v0.12 From d6a3821f9e04e08c227136c17c29d2684458d846 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 16 Mar 2011 13:59:46 +0100 Subject: Fix warning about copy constructor not initialising base explicitly --- src/gui/image/qvolatileimagedata.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/image/qvolatileimagedata.cpp b/src/gui/image/qvolatileimagedata.cpp index 51b5995..d7b964c 100644 --- a/src/gui/image/qvolatileimagedata.cpp +++ b/src/gui/image/qvolatileimagedata.cpp @@ -68,6 +68,7 @@ QVolatileImageData::QVolatileImageData(void *, void *) } QVolatileImageData::QVolatileImageData(const QVolatileImageData &other) + : QSharedData() { image = other.image; // The detach is not mandatory here but we do it nonetheless in order to -- cgit v0.12 From 342d2ad8b4b6d92e7ae9ba2aa0beb94d5bc970b1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 16 Mar 2011 14:04:04 +0100 Subject: Fix warning about comparing Qt::Orientation to QDeclarativeView::Orientation --- src/declarative/graphicsitems/qdeclarativelistview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6ae1ddc..39bb429 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2801,7 +2801,7 @@ void QDeclarativeListView::geometryChanged(const QRectF &newGeometry, Q_D(QDeclarativeListView); d->maxExtentDirty = true; d->minExtentDirty = true; - if (d->isRightToLeft() && d->orient == Qt::Horizontal) { + if (d->isRightToLeft() && d->orient == QDeclarativeListView::Horizontal) { // maintain position relative to the right edge int dx = newGeometry.width() - oldGeometry.width(); setContentX(contentX() - dx); -- cgit v0.12 From bef9fe90beb33e10bcfa03ecee4062b8d9f642ff Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 16 Mar 2011 14:05:14 +0100 Subject: Fix warning about maybe-uninitialised use of variable --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index c0cbed0..0cbe1ac 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2237,6 +2237,7 @@ qreal QDeclarativeGridView::maxXExtent() const } else { highlightStart = d->highlightRangeStart; highlightEnd = d->highlightRangeEnd; + lastItemPosition = 0; if (d->model && d->model->count()) lastItemPosition = d->rowPosAt(d->model->count()-1); } -- cgit v0.12 From e4b41ca2f9aec1be1136decbac323e024f64a176 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 21 Mar 2011 10:39:49 +0100 Subject: Add a feature to QTestLib to correct benchmark results. Two special values are added to the measurement of benchmarks: a zero and a comparison. The "zero" value is to be used when the test incurs a non-negligible overhead just to run. The benchmark author should add an "empty" run that measures basically the overhead and set it to attribute QTest::Zero. The "zero" value will be subtracted from any benchmark measurements before reporting (currently the plain logger only). Note that all benchmark types don't make sense, notably those already measurement some kind of rate, like frames per second and bytes per second. The "baseline" value is the comparison (with the "zero" subtracted"). When the baseline is set, the library will instead report the ratio between the benchmark and the baseline, in percentage or a multiple (e.g. "75%" [of the time] or "10.0x" [faster]). Adding measurements in "robes" left for future improvement. This feature is not reviewed and will be reverted later. --- src/testlib/qabstracttestlogger_p.h | 2 +- src/testlib/qbenchmark.cpp | 6 +++++ src/testlib/qbenchmark_p.h | 2 ++ src/testlib/qbenchmarkmetric.cpp | 3 +++ src/testlib/qbenchmarkmetric.h | 3 ++- src/testlib/qplaintestlogger.cpp | 45 ++++++++++++++++++++++++------------- src/testlib/qplaintestlogger_p.h | 2 +- src/testlib/qtest_global.h | 9 ++++++++ src/testlib/qtestcase.cpp | 22 +++++++++++++++--- src/testlib/qtestcase.h | 2 +- src/testlib/qtestdata.cpp | 20 ++++++++++++++++- src/testlib/qtestdata.h | 2 ++ src/testlib/qtestlog.cpp | 33 +++++++++++++++++++++++++-- src/testlib/qtestlog_p.h | 2 +- src/testlib/qtestlogger.cpp | 2 +- src/testlib/qtestlogger_p.h | 2 +- src/testlib/qtesttable.cpp | 4 ++-- src/testlib/qtesttable_p.h | 2 +- src/testlib/qxmltestlogger.cpp | 2 +- src/testlib/qxmltestlogger_p.h | 2 +- 20 files changed, 134 insertions(+), 33 deletions(-) diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h index d116a6e..50f651a 100644 --- a/src/testlib/qabstracttestlogger_p.h +++ b/src/testlib/qabstracttestlogger_p.h @@ -90,7 +90,7 @@ public: virtual void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0) = 0; - virtual void addBenchmarkResult(const QBenchmarkResult &result) = 0; + virtual void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &correctedResult) = 0; virtual void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0) = 0; diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index d933fb1..cb56154 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -181,6 +181,12 @@ void QBenchmarkTestMethodData::setResult( QBenchmarkGlobalData::current->context, value, iterationCount, metric, setByMacro); } +void QBenchmarkTestMethodData::clearSpecialResults() +{ + for (int i = 0; i < QTest::BenchmarkSpecialCount; ++i) + specialResults[i] = QBenchmarkResult(); +} + /*! \class QTest::QBenchmarkIterationController \internal diff --git a/src/testlib/qbenchmark_p.h b/src/testlib/qbenchmark_p.h index ace17db..387ad8b 100644 --- a/src/testlib/qbenchmark_p.h +++ b/src/testlib/qbenchmark_p.h @@ -177,8 +177,10 @@ public: bool resultsAccepted() const { return resultAccepted; } int adjustIterationCount(int suggestion); void setResult(qreal value, QTest::QBenchmarkMetric metric, bool setByMacro = true); + void clearSpecialResults(); QBenchmarkResult result; + QBenchmarkResult specialResults[QTest::BenchmarkSpecialCount]; bool resultAccepted; bool runOnce; int iterationCount; diff --git a/src/testlib/qbenchmarkmetric.cpp b/src/testlib/qbenchmarkmetric.cpp index 025bf46..1631e98 100644 --- a/src/testlib/qbenchmarkmetric.cpp +++ b/src/testlib/qbenchmarkmetric.cpp @@ -81,6 +81,8 @@ const char * QTest::benchmarkMetricName(QBenchmarkMetric metric) return "InstructionReads"; case Events: return "Events"; + case Percentage: + return "Percentage"; default: return ""; } @@ -108,6 +110,7 @@ const char * QTest::benchmarkMetricUnit(QBenchmarkMetric metric) return "instruction reads"; case Events: return "events"; + case Percentage: default: return ""; } diff --git a/src/testlib/qbenchmarkmetric.h b/src/testlib/qbenchmarkmetric.h index c8ab2fd..a413108 100644 --- a/src/testlib/qbenchmarkmetric.h +++ b/src/testlib/qbenchmarkmetric.h @@ -59,7 +59,8 @@ enum QBenchmarkMetric { WalltimeMilliseconds, CPUTicks, InstructionReads, - Events + Events, + Percentage }; } diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index e1ae534..c5c6fd6 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -315,7 +315,7 @@ namespace QTest { } // static void printBenchmarkResult(const char *bmtag, int value, int iterations) - static void printBenchmarkResult(const QBenchmarkResult &result) + static void printBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected) { const char *bmtag = QTest::benchmarkResult2String(); @@ -333,7 +333,6 @@ namespace QTest { QTest::qt_snprintf(bufTag, sizeof(bufTag), ":\"%s\"", tag.data()); } - char fillFormat[8]; int fillLength = 5; QTest::qt_snprintf( @@ -341,6 +340,30 @@ namespace QTest { char fill[1024]; QTest::qt_snprintf(fill, sizeof(fill), fillFormat, ""); + char buf1_[1024]; + buf1_[0] = 0; + if (corrected.valid) { + if (corrected.metric == QTest::Percentage) { + if (corrected.value <= 3 && corrected.value >= -1) + QTest::qt_snprintf( + buf1_, sizeof(buf1_), "%.1f%% (of baseline), actual: ", corrected.value * 100); + else + QTest::qt_snprintf( + buf1_, sizeof(buf1_), "%.2fx (of baseline), actual: ", corrected.value); + } else { + const char * unitText = QTest::benchmarkMetricUnit(corrected.metric); + + qreal valuePerIteration = qreal(corrected.value) / qreal(corrected.iterations); + char resultBuffer[100] = ""; + formatResult(resultBuffer, 100, valuePerIteration, countSignificantDigits(corrected.value)); + + QTest::qt_snprintf( + buf1_, sizeof(buf1_), "%s %s (corrected), actual: ", + resultBuffer, + unitText); + } + } + const char * unitText = QTest::benchmarkMetricUnit(result.metric); qreal valuePerIteration = qreal(result.value) / qreal(result.iterations); @@ -349,18 +372,10 @@ namespace QTest { char buf2[1024]; QTest::qt_snprintf( - buf2, sizeof(buf2), "%s %s", + buf2, sizeof(buf2), "%s %s per iteration", resultBuffer, unitText); - char buf2_[1024]; - QByteArray iterationText = " per iteration"; - Q_ASSERT(result.iterations > 0); - QTest::qt_snprintf( - buf2_, - sizeof(buf2_), "%s", - iterationText.data()); - char buf3[1024]; Q_ASSERT(result.iterations > 0); formatResult(resultBuffer, 100, result.value, countSignificantDigits(result.value)); @@ -373,9 +388,9 @@ namespace QTest { if (result.setByMacro) { QTest::qt_snprintf( - buf, sizeof(buf), "%s%s%s%s%s%s\n", buf1, bufTag, fill, buf2, buf2_, buf3); + buf, sizeof(buf), "%s%s%s%s%s%s\n", buf1, bufTag, fill, buf1_, buf2, buf3); } else { - QTest::qt_snprintf(buf, sizeof(buf), "%s%s%s%s\n", buf1, bufTag, fill, buf2); + QTest::qt_snprintf(buf, sizeof(buf), "%s%s%s%s%s\n", buf1, bufTag, fill, buf1_, buf2); } memcpy(buf, bmtag, strlen(bmtag)); @@ -471,10 +486,10 @@ void QPlainTestLogger::addIncident(IncidentTypes type, const char *description, QTest::printMessage(QTest::incidentType2String(type), description, file, line); } -void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result) +void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected) { // QTest::printBenchmarkResult(QTest::benchmarkResult2String(), value, iterations); - QTest::printBenchmarkResult(result); + QTest::printBenchmarkResult(result, corrected); } void QPlainTestLogger::addMessage(MessageTypes type, const char *message, diff --git a/src/testlib/qplaintestlogger_p.h b/src/testlib/qplaintestlogger_p.h index 054ec1e..c5165dd 100644 --- a/src/testlib/qplaintestlogger_p.h +++ b/src/testlib/qplaintestlogger_p.h @@ -71,7 +71,7 @@ public: void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected); void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0); diff --git a/src/testlib/qtest_global.h b/src/testlib/qtest_global.h index 28c8617..2e7217c 100644 --- a/src/testlib/qtest_global.h +++ b/src/testlib/qtest_global.h @@ -81,6 +81,15 @@ namespace QTest { enum SkipMode { SkipSingle = 1, SkipAll = 2 }; enum TestFailMode { Abort = 1, Continue = 2 }; + enum BenchmarkDataMode { + Normal = -1, + Zero = 0, + Subtract = Zero, + Baseline, + Divide = Baseline, + + BenchmarkSpecialCount = 2 + }; int Q_TESTLIB_EXPORT qt_snprintf(char *str, int size, const char *format, ...); } diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 287d8e6..698d9b5 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1384,8 +1384,17 @@ static void qInvokeTestMethodDataEntry(char *slot) && (++i < QBenchmarkGlobalData::current->adjustMedianIterationCount())); if (QBenchmarkTestMethodData::current->isBenchmark() - && QBenchmarkTestMethodData::current->resultsAccepted()) - QTestLog::addBenchmarkResult(qMedian(results)); + && QBenchmarkTestMethodData::current->resultsAccepted()) { + QBenchmarkResult result = qMedian(results); + + QBenchmarkResult *specialResults = QBenchmarkTestMethodData::current->specialResults; + if (QTestResult::currentTestData()) { + QTest::BenchmarkDataMode benchMode = QTestResult::currentTestData()->benchmarkSpecialData(); + if (benchMode > QTest::Normal && benchMode < QTest::BenchmarkSpecialCount) + specialResults[benchMode] = result; + } + QTestLog::addBenchmarkResult(result, specialResults); + } } /*! @@ -1453,6 +1462,8 @@ static bool qInvokeTestMethod(const char *slotName, const char *data=0) } } + benchmarkData.clearSpecialResults(); + /* For each entry in the data table, do: */ do { if (!data || !qstrcmp(data, table.testData(curDataIndex)->dataTag())) { @@ -2038,10 +2049,15 @@ void QTest::addColumnInternal(int id, const char *name) */ QTestData &QTest::newRow(const char *dataTag) { + return newRow(dataTag, Normal); +} + +QTestData &QTest::newRow(const char *dataTag, BenchmarkDataMode mode) +{ QTestTable *tbl = QTestTable::currentTestTable(); QTEST_ASSERT_X(tbl, "QTest::addColumn()", "Cannot add testdata outside of a _data slot."); - return *tbl->newData(dataTag); + return *tbl->newData(dataTag, mode); } /*! \fn void QTest::addColumn(const char *name, T *dummy = 0) diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index a2cc26d..c0787a8 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -125,7 +125,6 @@ namespace QTest return 0; } - Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length); Q_TESTLIB_EXPORT char *toString(const char *); Q_TESTLIB_EXPORT char *toString(const void *); @@ -168,6 +167,7 @@ namespace QTest addColumnInternal(qMetaTypeId<T>(), name); } Q_TESTLIB_EXPORT QTestData &newRow(const char *dataTag); + Q_TESTLIB_EXPORT QTestData &newRow(const char *dataTag, BenchmarkDataMode mode); template <typename T> inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected, diff --git a/src/testlib/qtestdata.cpp b/src/testlib/qtestdata.cpp index 588ad64..c22dbe2 100644 --- a/src/testlib/qtestdata.cpp +++ b/src/testlib/qtestdata.cpp @@ -53,12 +53,13 @@ QT_BEGIN_NAMESPACE class QTestDataPrivate { public: - QTestDataPrivate(): tag(0), parent(0), data(0), dataCount(0) {} + QTestDataPrivate(): tag(0), parent(0), data(0), dataCount(0), benchmarkDataMode(QTest::Normal) {} char *tag; QTestTable *parent; void **data; int dataCount; + QTest::BenchmarkDataMode benchmarkDataMode; }; QTestData::QTestData(const char *tag, QTestTable *parent) @@ -72,6 +73,18 @@ QTestData::QTestData(const char *tag, QTestTable *parent) memset(d->data, 0, parent->elementCount() * sizeof(void*)); } +QTestData::QTestData(const char *tag, QTest::BenchmarkDataMode benchMode, QTestTable *parent) +{ + QTEST_ASSERT(tag); + QTEST_ASSERT(parent); + d = new QTestDataPrivate; + d->tag = qstrdup(tag); + d->parent = parent; + d->data = new void *[parent->elementCount()]; + d->benchmarkDataMode = benchMode; + memset(d->data, 0, parent->elementCount() * sizeof(void*)); +} + QTestData::~QTestData() { for (int i = 0; i < d->dataCount; ++i) { @@ -119,4 +132,9 @@ int QTestData::dataCount() const return d->dataCount; } +QTest::BenchmarkDataMode QTestData::benchmarkSpecialData() const +{ + return d->benchmarkDataMode; +} + QT_END_NAMESPACE diff --git a/src/testlib/qtestdata.h b/src/testlib/qtestdata.h index b39bce2..f154b8f 100644 --- a/src/testlib/qtestdata.h +++ b/src/testlib/qtestdata.h @@ -66,10 +66,12 @@ public: const char *dataTag() const; QTestTable *parent() const; int dataCount() const; + QTest::BenchmarkDataMode benchmarkSpecialData() const; private: friend class QTestTable; QTestData(const char *tag = 0, QTestTable *parent = 0); + QTestData(const char *tag, QTest::BenchmarkDataMode mode, QTestTable *parent = 0); Q_DISABLE_COPY(QTestData) diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp index ed9a005..28358be 100644 --- a/src/testlib/qtestlog.cpp +++ b/src/testlib/qtestlog.cpp @@ -46,6 +46,7 @@ #include "QtTest/private/qabstracttestlogger_p.h" #include "QtTest/private/qplaintestlogger_p.h" #include "QtTest/private/qxmltestlogger_p.h" +#include "QtTest/private/qbenchmark_p.h" #include <QtCore/qatomic.h> #include <QtCore/qbytearray.h> @@ -285,10 +286,38 @@ void QTestLog::addSkip(const char *msg, QTest::SkipMode /*mode*/, QTest::testLogger->addMessage(QAbstractTestLogger::Skip, msg, file, line); } -void QTestLog::addBenchmarkResult(const QBenchmarkResult &result) +void QTestLog::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult *specialResults) { QTEST_ASSERT(QTest::testLogger); - QTest::testLogger->addBenchmarkResult(result); + QTEST_ASSERT(specialResults); + + QBenchmarkResult corrected; + const QBenchmarkResult &zero = specialResults[QTest::Zero]; + if (zero.valid && zero.metric == result.metric) { + // subtract the zero result + corrected = result; + if (zero.iterations == corrected.iterations) + corrected.value -= zero.value; + else + corrected.value -= zero.value / zero.iterations * corrected.iterations; + } + + const QBenchmarkResult &baseline = specialResults[QTest::Baseline]; + if (baseline.valid && baseline.metric == result.metric) { + // divide by the baseline + if (!corrected.valid) + corrected = result; + corrected.value /= corrected.iterations; + corrected.iterations = 1; + corrected.metric = QTest::Percentage; + + qreal subtract = 0; + if (zero.valid && zero.metric == baseline.metric) + subtract = zero.value / zero.iterations; + corrected.value /= baseline.value / baseline.iterations - subtract; + } + + QTest::testLogger->addBenchmarkResult(result, corrected); } void QTestLog::startLogging(unsigned int randomSeed) diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h index a892d3d..02c0dd9 100644 --- a/src/testlib/qtestlog_p.h +++ b/src/testlib/qtestlog_p.h @@ -74,7 +74,7 @@ public: static void addXPass(const char *msg, const char *file, int line); static void addSkip(const char *msg, QTest::SkipMode mode, const char *file, int line); - static void addBenchmarkResult(const QBenchmarkResult &result); + static void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult *specialResults); static void addIgnoreMessage(QtMsgType type, const char *msg); static int unhandledIgnoreMessages(); static void printUnhandledIgnoreMessages(); diff --git a/src/testlib/qtestlogger.cpp b/src/testlib/qtestlogger.cpp index 86826f8..3962b09 100644 --- a/src/testlib/qtestlogger.cpp +++ b/src/testlib/qtestlogger.cpp @@ -268,7 +268,7 @@ void QTestLogger::addIncident(IncidentTypes type, const char *description, } } -void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result) +void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &) { QTestElement *benchmarkElement = new QTestElement(QTest::LET_Benchmark); // printf("element %i", benchmarkElement->elementType()); diff --git a/src/testlib/qtestlogger_p.h b/src/testlib/qtestlogger_p.h index d8867de..3dc8640 100644 --- a/src/testlib/qtestlogger_p.h +++ b/src/testlib/qtestlogger_p.h @@ -82,7 +82,7 @@ class QTestLogger : public QAbstractTestLogger void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &correctedResult); void addTag(QTestElement* element); void addMessage(MessageTypes type, const char *message, diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp index df10462..7c5acce 100644 --- a/src/testlib/qtesttable.cpp +++ b/src/testlib/qtesttable.cpp @@ -190,9 +190,9 @@ bool QTestTable::isEmpty() const return !d->list; } -QTestData *QTestTable::newData(const char *tag) +QTestData *QTestTable::newData(const char *tag, QTest::BenchmarkDataMode benchMode) { - QTestData *dt = new QTestData(tag, this); + QTestData *dt = new QTestData(tag, benchMode, this); d->append(dt); return dt; } diff --git a/src/testlib/qtesttable_p.h b/src/testlib/qtesttable_p.h index f835506..b85e9aa 100644 --- a/src/testlib/qtesttable_p.h +++ b/src/testlib/qtesttable_p.h @@ -67,7 +67,7 @@ public: ~QTestTable(); void addColumn(int elementType, const char *elementName); - QTestData *newData(const char *tag); + QTestData *newData(const char *tag, QTest::BenchmarkDataMode benchMode); int elementCount() const; int dataCount() const; diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp index 827b0ad..3edd687 100644 --- a/src/testlib/qxmltestlogger.cpp +++ b/src/testlib/qxmltestlogger.cpp @@ -246,7 +246,7 @@ void QXmlTestLogger::addIncident(IncidentTypes type, const char *description, outputString(buf.constData()); } -void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result) +void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &) { QTestCharBuffer buf; QTestCharBuffer quotedMetric; diff --git a/src/testlib/qxmltestlogger_p.h b/src/testlib/qxmltestlogger_p.h index f815103..adfe98b 100644 --- a/src/testlib/qxmltestlogger_p.h +++ b/src/testlib/qxmltestlogger_p.h @@ -74,7 +74,7 @@ public: void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result); + void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected); void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0); -- cgit v0.12 From f9370b13165a3919c1beafca5334284ccdd0526a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Wed, 16 Mar 2011 13:44:49 +0100 Subject: Add a benchmark for QString::fromLatin1 --- tests/benchmarks/corelib/tools/qstring/main.cpp | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index a6412a8..cd036e7 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -70,6 +70,8 @@ private slots: void ucstrncmp_data() const; void ucstrncmp() const; void fromUtf8() const; + void fromLatin1_data() const; + void fromLatin1() const; }; void tst_QString::equals() const @@ -1404,6 +1406,40 @@ void tst_QString::fromUtf8() const } } +void tst_QString::fromLatin1_data() const +{ + QTest::addColumn<QByteArray>("latin1"); + + // make all the strings have the same length + QTest::newRow("ascii-only") << QByteArray("HelloWorld"); + QTest::newRow("ascii+control") << QByteArray("Hello\1\r\n\x7f\t"); + QTest::newRow("ascii+nul") << QByteArray("a\0zbc\0defg", 10); + QTest::newRow("non-ascii") << QByteArray("\x80\xc0\xff\x81\xc1\xfe\x90\xd0\xef\xa0"); +} + +void tst_QString::fromLatin1() const +{ + QFETCH(QByteArray, latin1); + + while (latin1.length() < 128) { + latin1 += latin1; + } + + QByteArray copy1 = latin1, copy2 = latin1, copy3 = latin1; + copy1.chop(1); + copy2.detach(); + copy3 += latin1; // longer length + copy2.clear(); + + QBENCHMARK { + QString s1 = QString::fromLatin1(latin1); + QString s2 = QString::fromLatin1(latin1); + QString s3 = QString::fromLatin1(copy1); + QString s4 = QString::fromLatin1(copy3); + s3 = QString::fromLatin1(copy3); + } +} + QTEST_MAIN(tst_QString) #include "main.moc" -- cgit v0.12 From 5c948050da09120f8d4a1d90b069c2308949330d Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 15:00:58 +0100 Subject: Add a script that generates a string table of 8-bits --- .../corelib/tools/qstring/generatelist_char.pl | 203 +++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100755 tests/benchmarks/corelib/tools/qstring/generatelist_char.pl diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl b/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl new file mode 100755 index 0000000..1c7003a --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl @@ -0,0 +1,203 @@ +#!/usr/bin/perl +# -*- mode: utf-8; tabs: nil -*- +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is part of the QtCore module of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +# +# Parses a file (passed as argument) that contains a dump of pairs of +# strings and generates C source code including said data. +# +# The format of the file is: +# LEN = <len> <keyword> <align1> <align2>\n<data1><data2>\n +# where: +# LEN the literal string "LEN" +# <len> the length of the data, in 16-bit words +# <keyword> the literal string "SAME" or "DIFF" +# <align1> the alignment or pointer value of the first data +# <align2> the alignment or pointer value of the second data +# <data1> the first data +# <data2> the second data +# \n newline +# +# The code to write this data would be: +# fprintf(out, "LEN = %d %s %d %d\n", len, +# (p1 == p2) ? "SAME" : "DIFF", +# uint(quintptr(p1)) & 0xfff, uint(quintptr(p2)) & 0xfff); +# fwrite(p1, 2, len, out); +# fwrite(p2, 2, len, out); +# fwrite("\n", 1, 1, out); + +sub printCharArray($$$) { + $str = $_[0]; + $align = $_[1] & 0x3f; + $offset = $_[2]; + + $headpadding = $align & 0xf; + $tailpadding = 16 - (($len + $headpadding) & 0xf); + $multiplecachelines = ($align + $len) > 0x40; + + if ($multiplecachelines) { + # if this string crosses into a new cacheline, then + # replicate the result + $headpadding |= ($offset & ~0x3f); + $headpadding += 0x40 + if ($headpadding < $offset); + $headpadding -= $offset; + ++$cachelinecrosses; + } + + if ($headpadding > 0) { + print " \""; + for $i (1..$headpadding) { + printf "\\%o", 256-$i; + } + print "\"\n"; + } + + print " \""; + for ($i = 0; $i < $len; $i++) { + $c = substr($str, $i, 1); + if (ord($c) >= 0x20 && ord($c) <= 0x7f) { + print $c; + } else { + printf "\\%o\"\"", ord($c); + } + } + + if ($tailpadding > 0) { + print "\"\n \""; + for $i (1..$tailpadding) { + printf "\\%o", 256-$i; + } + } + print "\" // ", $offset + $headpadding + $len + $tailpadding; + print "+" if $multiplecachelines; + print "\n"; + + return ($offset + $headpadding, $offset + $headpadding + $len + $tailpadding); +} + +print "// This is a generated file - DO NOT EDIT\n\n"; + +print "#include \"data.h\"\n\n"; + +$varname = shift @ARGV; +print "const char " . $varname . "Data[] __attribute__((aligned(64))) = {\n"; +$count = 0; +$offset = 0; +$totalsize = 0; +$maxlen = 0; +$cachelinecrosses = 0; + +open IN, "<" . $ARGV[0]; +while (1) { + $line = readline(*IN); + last unless defined($line); + $line =~ /LEN = (\d+) (\w+) (\d+) (\d+)/; + $len = $1; + $data[$count]->{len} = $len; + $sameptr = $2; + $data[$count]->{align1} = $3 - 0; + $data[$count]->{align2} = $4 - 0; + + # statistics + $alignhistogram{$3 & 0xf}++; + $alignhistogram{$4 & 0xf}++; + $samealignments{$3 & 0xf}++ if ($3 & 0xf) == ($4 & 0xf); + + read IN, $a, $len; + read IN, $b, $len; + + <IN>; # Eat the newline + + if ($len == 0) { + $data[$count]->{offset1} = $offset; + $data[$count]->{offset2} = $data[$count]->{offset1}; + ++$data[$count]->{offset2} if ($sameptr eq "DIFF"); + } else { + print " // #$count\n"; + ($data[$count]->{offset1}, $offset) = + printCharArray($a, $data[$count]->{align1}, $offset); + die if ($offset & 0xf) != 0; + + if ($sameptr eq "DIFF") { + ($data[$count]->{offset2}, $offset) = + printCharArray($b, $data[$count]->{align2}, $offset); + } else { + $data[$count]->{offset2} = $data[$count]->{offset1}; + } + print "\n"; + } + ++$count; + + $totalsize += $len; + $maxlen = $len if $len > $maxlen; +} +print "};\n"; +close IN; + +print "const struct StringCollection " . $varname . "[] = {\n"; +for $i (0..$count-1) { + print " {", + $data[$i]->{len}, ", ", + $data[$i]->{offset1}, ", ", + $data[$i]->{offset2}, ", ", + $data[$i]->{align1}, ", ", + $data[$i]->{align2}, + "}, // #$i\n"; + next if $data[$i]->{len} == 0; + die if (($data[$i]->{offset1} & 0xf) != ($data[$i]->{align1} & 0xf)); + die if (($data[$i]->{offset2} & 0xf) != ($data[$i]->{align2} & 0xf)); +} +print "};\n"; + +print "const int " . $varname . "Count = $count;\n"; +print "const int " . $varname . "MaxLen = $maxlen;\n"; +printf "// average comparison length: %.4f\n", ($totalsize * 1.0 / $count); +printf "// cache-line crosses: %d (%.1f%%)\n", + $cachelinecrosses, ($cachelinecrosses * 100.0 / $count / 2); + +print "// alignment histogram:\n"; +for $key (sort { $a <=> $b } keys(%alignhistogram)) { + $value = $alignhistogram{$key}; + $samealigned = $samealignments{$key}; + printf "// 0xXXX%x = %d (%.1f%%) strings, %d (%.1f%%) of which same-aligned\n", + $key, $value, $value * 100.0 / ($count*2), + $samealigned, $samealigned * 100.0 / $value; + $samealignedtotal += $samealigned; +} +printf "// total = %d (100%) strings, %d (%.1f%%) of which same-aligned\n", + $count * 2, $samealignedtotal, $samealignedtotal * 100 / $count / 2; -- cgit v0.12 From c1e48f28114d8fb5aaaf2b05afa9e0795ade476a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 15:24:19 +0100 Subject: Remove the __attribute__((optimize)) marks --- tests/benchmarks/corelib/tools/qstring/main.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index cd036e7..c70b4c0 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -284,7 +284,7 @@ static bool equals2_sse2_aligned(const ushort *p1, const ushort *p2, int len) return equals2_short_tail(p1, p2, len); } -static bool __attribute__((optimize("no-unroll-loops"))) equals2_sse2(const ushort *p1, const ushort *p2, int len) +static bool equals2_sse2(const ushort *p1, const ushort *p2, int len) { if (p1 == p2 || !len) return true; @@ -391,7 +391,7 @@ static bool equals2_sse2_aligning(const ushort *p1, const ushort *p2, int len) } #ifdef __SSE3__ -static bool __attribute__((optimize("no-unroll-loops"))) equals2_sse3(const ushort *p1, const ushort *p2, int len) +static bool equals2_sse3(const ushort *p1, const ushort *p2, int len) { if (p1 == p2 || !len) return true; @@ -416,7 +416,7 @@ static bool __attribute__((optimize("no-unroll-loops"))) equals2_sse3(const usho } #ifdef __SSSE3__ -template<int N> static __attribute__((optimize("unroll-loops"))) inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2, int len) +template<int N> static inline bool equals2_ssse3_alignr(__m128i *m1, __m128i *m2, int len) { __m128i lower = _mm_load_si128(m1); while (len >= 8) { @@ -439,7 +439,7 @@ template<int N> static __attribute__((optimize("unroll-loops"))) inline bool equ return len == 0 || equals2_short_tail((const ushort *)m1 + N / 2, (const ushort*)m2, len); } -static inline __attribute__((optimize("unroll-loops"))) bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) +static inline bool equals2_ssse3_aligned(__m128i *m1, __m128i *m2, int len) { while (len >= 8) { __m128i q2 = _mm_lddqu_si128(m2); @@ -930,7 +930,7 @@ static inline int bsf_nonzero(register long val) # endif } -static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2(const ushort *a, const ushort *b, int len) +static int ucstrncmp_sse2(const ushort *a, const ushort *b, int len) { qptrdiff counter = 0; while (len >= 8) { @@ -950,7 +950,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2(const ush return ucstrncmp_short_tail(a + counter, b + counter, len); } -static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning(const ushort *a, const ushort *b, int len) +static int ucstrncmp_sse2_aligning(const ushort *a, const ushort *b, int len) { if (len >= 8) { __m128i m1 = _mm_loadu_si128((__m128i *)a); @@ -989,7 +989,7 @@ static __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligning( return ucstrncmp_short_tail(a + counter, b + counter, len); } -static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) +static inline int ucstrncmp_sse2_aligned(const ushort *a, const ushort *b, int len) { quintptr counter = 0; while (len >= 8) { @@ -1010,7 +1010,7 @@ static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_sse2_al } #ifdef __SSSE3__ -static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr_aligned(const ushort *a, const ushort *b, int len) +static inline int ucstrncmp_ssse3_alignr_aligned(const ushort *a, const ushort *b, int len) { quintptr counter = 0; while (len >= 8) { @@ -1033,7 +1033,7 @@ static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_a typedef __m128i (* MMLoadFunction)(const __m128i *); template<int N, MMLoadFunction LoadFunction> -static inline __attribute__((optimize("no-unroll-loops"))) int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) +static inline int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int len) { qptrdiff counter = 0; __m128i lower, upper; @@ -1138,7 +1138,7 @@ static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) } } -static inline __attribute__((optimize("no-unroll-loops"))) +static inline int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len, int garbage) { // len >= 8 @@ -1158,7 +1158,7 @@ int ucstrncmp_ssse3_aligning2_aligned(const ushort *a, const ushort *b, int len, return ucstrncmp_sse2_aligned(a + 8, b + 8, len); } -template<int N> static inline __attribute__((optimize("no-unroll-loops"),always_inline)) +template<int N> static inline int ucstrncmp_ssse3_aligning2_alignr(const ushort *a, const ushort *b, int len, int garbage) { // len >= 8 -- cgit v0.12 From 68ad53407d8feefbfb2a1282d69da4ae9007766b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 16:24:52 +0100 Subject: Add a test for QString::fromLatin1 performace alternatives --- tests/benchmarks/corelib/tools/qstring/data.h | 12 + .../corelib/tools/qstring/fromlatin1.cpp | 334 +++++++++++++++++++++ .../corelib/tools/qstring/generatelist_char.pl | 25 +- tests/benchmarks/corelib/tools/qstring/main.cpp | 52 ++++ tests/benchmarks/corelib/tools/qstring/qstring.pro | 2 +- 5 files changed, 414 insertions(+), 11 deletions(-) create mode 100644 tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp mode change 100755 => 100644 tests/benchmarks/corelib/tools/qstring/generatelist_char.pl diff --git a/tests/benchmarks/corelib/tools/qstring/data.h b/tests/benchmarks/corelib/tools/qstring/data.h index 390d0d6..bd4ff55 100644 --- a/tests/benchmarks/corelib/tools/qstring/data.h +++ b/tests/benchmarks/corelib/tools/qstring/data.h @@ -55,4 +55,16 @@ extern const ushort stringCollectionData[]; extern const StringCollection stringCollection[]; extern const int stringCollectionCount; +struct StringData +{ + const int *entries; + union { + const char *charData; + const ushort *ushortData; + }; + + int entryCount; + int maxLength; +}; + #endif // DATA_H diff --git a/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp b/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp new file mode 100644 index 0000000..63fcc01 --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp @@ -0,0 +1,334 @@ +// This is a generated file - DO NOT EDIT + +#include "data.h" + +static const char charData[] __attribute__((aligned(64))) = { + // #0 + "\377\376\375\374\373\372\371\370" + ":/qt/etc/qt.conf" + "\377\376\375\374\373\372\371\370" // 32 + + // #1 + "\377\376\375\374\373\372\371\370" + "nb_NO.UTF-8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64 + + // #2 + "\377\376\375\374\373\372\371\370" + "/proc/%1/exe" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 96+ + + // #3 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 112 + + // #4 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "qt.conf" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 144 + + // #5 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 160 + + // #6 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 176 + + // #7 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "/usr/lib/qt4/plugins:/home/tmacieir/.kde/lib/kde4/plugins/:/home/tmacieir/KDE4/lib/kde4/plugins/:/usr/lib/kde4/plugins/" + "\377\376\375\374\373\372\371\370\367" // 320+ + + // #8 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 336 + + // #9 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 352 + + // #10 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 368 + + // #11 + "\377\376\375\374" + "*" + "\377\376\375\374\373\372\371\370\367\366\365" // 384 + + // #12 + "\377\376\375\374\373" + "trolltech.com" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 416+ + + // #13 + "\377\376\375" + "Trolltech" + "\377\376\375\374" // 432 + + // #14 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "TeamBuilder Client" + "\377" // 464 + + // #15 + "\377\376\375\374\373\372\371" + "0.0.0.0" + "\377\376" // 480 + + // #16 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 496 + + // #17 + "\377\376\375\374\373\372\371\370" + "Unknown error" + "\377\376\375\374\373\372\371\370\367\366\365" // 528 + + // #18 + "\377\376\375\374\373\372\371\370\367" + "127.0.0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 560 + + // #19 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 576 + + // #20 + "\377\376\375" + "::1" + "\377\376\375\374\373\372\371\370\367\366" // 592 + + // #21 + "\377\376\375\374\373\372\371" + ":" + "\377\376\375\374\373\372\371\370" // 608 + + // #22 + "\377\376\375\374\373\372\371\370\367" + "::" + "\377\376\375\374\373" // 624 + + // #23 + "lo" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 640 + + // #24 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "eth0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 672 + + // #25 + "\377\376\375\374\373\372\371\370" + "eth1" + "\377\376\375\374" // 688 + + // #26 + "\377\376\375\374" + "vboxnet0" + "\377\376\375\374" // 704 + + // #27 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 720 + + // #28 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "." + "\377\376" // 736 + + // #29 + "." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 752 + + // #30 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 768 + + // #31 + "\377\376\375\374\373\372\371\370\367" + "127.0.0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 800 + + // #32 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 816 + + // #33 + "\377\376\375" + "::1" + "\377\376\375\374\373\372\371\370\367\366" // 832 + + // #34 + "\377\376\375\374\373\372\371" + ":" + "\377\376\375\374\373\372\371\370" // 848 + + // #35 + "\377\376\375\374\373\372\371\370\367" + "::" + "\377\376\375\374\373" // 864 + + // #36 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 880 + + // #37 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "Unknown error" + "\377\376\375\374\373\372\371" // 928+ + + // #38 + "\377\376\375\374\373\372\371\370" + "Unknown error" + "\377\376\375\374\373\372\371\370\367\366\365" // 960 + + // #39 + "\377\376\375\374\373\372\371\370\367" + "127.0.0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 992 + + // #40 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 1008 + + // #41 + "\377\376\375" + "::1" + "\377\376\375\374\373\372\371\370\367\366" // 1024 + + // #42 + "\377\376\375\374\373\372\371" + ":" + "\377\376\375\374\373\372\371\370" // 1040 + + // #43 + "\377\376\375\374\373\372\371\370\367" + "::" + "\377\376\375\374\373" // 1056 + + // #44 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Invalid socket descriptor" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 1136+ + + // #45 + "\377\376\375\374\373\372\371\370\367" + "127.0.0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 1168 + + // #46 + "\377\376\375\374\373" + "." + "\377\376\375\374\373\372\371\370\367\366" // 1184 + + // #47 + "\377\376\375" + "::1" + "\377\376\375\374\373\372\371\370\367\366" // 1200 + + // #48 + "\377\376\375\374\373\372\371" + ":" + "\377\376\375\374\373\372\371\370" // 1216 + + // #49 + "\377\376\375\374\373\372\371\370\367" + "::" + "\377\376\375\374\373" // 1232 + + // #50 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304" + "The remote host closed the connection" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 1344+ + +}; +static const int intData[] = { + 16, 8, 8, 2760, 2760, // #0 + 11, 40, 40, 3080, 3080, // #1 + 12, 72, 72, 2232, 2232, // #2 + 1, 100, 100, 2164, 2164, // #3 + 7, 124, 124, 2780, 2780, // #4 + 1, 148, 148, 2164, 2164, // #5 + 1, 164, 164, 2164, 2164, // #6 + 119, 192, 192, 3280, 3280, // #7 + 1, 324, 324, 2164, 2164, // #8 + 1, 340, 340, 2164, 2164, // #9 + 1, 356, 356, 2164, 2164, // #10 + 1, 372, 372, 2164, 2164, // #11 + 13, 389, 389, 2229, 2229, // #12 + 9, 419, 419, 2243, 2243, // #13 + 18, 445, 445, 2253, 2253, // #14 + 7, 471, 471, 2391, 2391, // #15 + 1, 485, 485, 2261, 2261, // #16 + 13, 504, 504, 2200, 2200, // #17 + 9, 537, 537, 2377, 2377, // #18 + 1, 565, 565, 2261, 2261, // #19 + 3, 579, 579, 2387, 2387, // #20 + 1, 599, 599, 2263, 2263, // #21 + 2, 617, 617, 2265, 2265, // #22 + 2, 624, 624, 3088, 3088, // #23 + 4, 652, 652, 3244, 3244, // #24 + 4, 680, 680, 3400, 3400, // #25 + 8, 692, 692, 3556, 3556, // #26 + 1, 714, 714, 2426, 2426, // #27 + 1, 733, 733, 2429, 2429, // #28 + 1, 736, 736, 2432, 2432, // #29 + 1, 757, 757, 2261, 2261, // #30 + 9, 777, 777, 2377, 2377, // #31 + 1, 805, 805, 2261, 2261, // #32 + 3, 819, 819, 2387, 2387, // #33 + 1, 839, 839, 2263, 2263, // #34 + 2, 857, 857, 2265, 2265, // #35 + 1, 869, 869, 2261, 2261, // #36 + 13, 908, 908, 3004, 3004, // #37 + 13, 936, 936, 2200, 2200, // #38 + 9, 969, 969, 2377, 2377, // #39 + 1, 997, 997, 2261, 2261, // #40 + 3, 1011, 1011, 2387, 2387, // #41 + 1, 1031, 1031, 2263, 2263, // #42 + 2, 1049, 1049, 2265, 2265, // #43 + 25, 1096, 1096, 2744, 2744, // #44 + 9, 1145, 1145, 2377, 2377, // #45 + 1, 1173, 1173, 2261, 2261, // #46 + 3, 1187, 1187, 2387, 2387, // #47 + 1, 1207, 1207, 2263, 2263, // #48 + 2, 1225, 1225, 2265, 2265, // #49 + 37, 1292, 1292, 2604, 2604, // #50 +}; + +struct StringData fromLatin1Data = { + intData, + { charData }, + 51, /* entryCount */ + 119 /* maxLength */ +}; + +// average comparison length: 8.0000 +// cache-line crosses: 6 (5.9%) +// alignment histogram: +// 0xXXX0 = 6 (5.9%) strings, 3 (50.0%) of which same-aligned +// 0xXXX3 = 10 (9.8%) strings, 5 (50.0%) of which same-aligned +// 0xXXX4 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned +// 0xXXX5 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned +// 0xXXX7 = 10 (9.8%) strings, 5 (50.0%) of which same-aligned +// 0xXXX8 = 14 (13.7%) strings, 7 (50.0%) of which same-aligned +// 0xXXX9 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned +// 0xXXXa = 2 (2.0%) strings, 1 (50.0%) of which same-aligned +// 0xXXXc = 8 (7.8%) strings, 4 (50.0%) of which same-aligned +// 0xXXXd = 4 (3.9%) strings, 2 (50.0%) of which same-aligned +// total = 102 (100%) strings, 51 (50.0%) of which same-aligned diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl b/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl old mode 100755 new mode 100644 index 1c7003a..077174d --- a/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl +++ b/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl @@ -90,10 +90,10 @@ sub printCharArray($$$) { print " \""; for ($i = 0; $i < $len; $i++) { $c = substr($str, $i, 1); - if (ord($c) >= 0x20 && ord($c) <= 0x7f) { - print $c; - } else { + if (ord($c) < 0x20 || ord($c) > 0x7f || $c eq '"' || $c eq '\\') { printf "\\%o\"\"", ord($c); + } else { + print $c; } } @@ -115,7 +115,7 @@ print "// This is a generated file - DO NOT EDIT\n\n"; print "#include \"data.h\"\n\n"; $varname = shift @ARGV; -print "const char " . $varname . "Data[] __attribute__((aligned(64))) = {\n"; +print "static const char charData[] __attribute__((aligned(64))) = {\n"; $count = 0; $offset = 0; $totalsize = 0; @@ -169,23 +169,28 @@ while (1) { print "};\n"; close IN; -print "const struct StringCollection " . $varname . "[] = {\n"; +print "static const int intData[] = {\n"; for $i (0..$count-1) { - print " {", + print " ", $data[$i]->{len}, ", ", $data[$i]->{offset1}, ", ", $data[$i]->{offset2}, ", ", $data[$i]->{align1}, ", ", $data[$i]->{align2}, - "}, // #$i\n"; + ", // #$i\n"; next if $data[$i]->{len} == 0; die if (($data[$i]->{offset1} & 0xf) != ($data[$i]->{align1} & 0xf)); die if (($data[$i]->{offset2} & 0xf) != ($data[$i]->{align2} & 0xf)); } -print "};\n"; +print "};\n\n"; + +print "struct StringData $varname = {\n" . + " intData,\n" . + " { charData },\n" . + " $count, /* entryCount */\n" . + " $maxlen /* maxLength */\n" . + "};\n\n"; -print "const int " . $varname . "Count = $count;\n"; -print "const int " . $varname . "MaxLen = $maxlen;\n"; printf "// average comparison length: %.4f\n", ($totalsize * 1.0 / $count); printf "// cache-line crosses: %d (%.1f%%)\n", $cachelinecrosses, ($cachelinecrosses * 100.0 / $count / 2); diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c70b4c0..f957eee 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -72,6 +72,8 @@ private slots: void fromUtf8() const; void fromLatin1_data() const; void fromLatin1() const; + void fromLatin1Alternatives_data() const; + void fromLatin1Alternatives() const; }; void tst_QString::equals() const @@ -1440,6 +1442,56 @@ void tst_QString::fromLatin1() const } } +void fromLatin1_regular(QChar *dst, const char *str, int size) +{ + // from qstring.cpp: + while (size--) + *dst++ = (uchar)*str++; +} + +typedef void (* FromLatin1Function)(QChar *, const char *, int); +Q_DECLARE_METATYPE(FromLatin1Function) + +void tst_QString::fromLatin1Alternatives_data() const +{ + QTest::addColumn<FromLatin1Function>("function"); + QTest::newRow("regular") << &fromLatin1_regular; +} + +static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) +{ + extern StringData fromLatin1Data; + struct Entry + { + int len; + int offset1, offset2; + int align1, align2; + }; + const Entry *entries = reinterpret_cast<const Entry *>(fromLatin1Data.entries); + + for (int i = 0; i < fromLatin1Data.entryCount; ++i) { + int len = entries[i].len; + const char *src = fromLatin1Data.charData + entries[i].offset1; + + QString dst; + dst.resize(len); + (function)(dst.data(), src, len); + + if (doVerify) { + QCOMPARE(dst, QString::fromLatin1(src, len)); + } + } +} + +void tst_QString::fromLatin1Alternatives() const +{ + QFETCH(FromLatin1Function, function); + fromLatin1Alternatives_internal(function, true); + QBENCHMARK { + fromLatin1Alternatives_internal(function, false); + } +} + QTEST_MAIN(tst_QString) #include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index e43e400..e7ba04f 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -1,7 +1,7 @@ load(qttest_p4) TARGET = tst_bench_qstring QT -= gui -SOURCES += main.cpp data.cpp +SOURCES += main.cpp data.cpp fromlatin1.cpp wince*:{ DEFINES += SRCDIR=\\\"\\\" -- cgit v0.12 From dcb2ea1344a08c397dbdd125c2787d33ebfd4fc7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 16:29:27 +0100 Subject: Add the SSE2 code we have in Qt 4.7 to the benchmark --- tests/benchmarks/corelib/tools/qstring/main.cpp | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index f957eee..5513724 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1449,6 +1449,31 @@ void fromLatin1_regular(QChar *dst, const char *str, int size) *dst++ = (uchar)*str++; } +void fromLatin1_sse2_qt47(QChar *dst, const char *str, int size) +{ + if (size >= 16) { + int chunkCount = size >> 4; // divided by 16 + const __m128i nullMask = _mm_set1_epi32(0); + for (int i = 0; i < chunkCount; ++i) { + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + str += 16; + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, firstHalf); // store + dst += 8; + + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, secondHalf); // store + dst += 8; + } + size = size % 16; + } + while (size--) + *dst++ = (uchar)*str++; +} + typedef void (* FromLatin1Function)(QChar *, const char *, int); Q_DECLARE_METATYPE(FromLatin1Function) @@ -1456,6 +1481,7 @@ void tst_QString::fromLatin1Alternatives_data() const { QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("regular") << &fromLatin1_regular; + QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; } static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) -- cgit v0.12 From 168d7f8b7620756d07b96c04848ae497a213b523 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 16:35:58 +0100 Subject: Correct the code: use ushorts, not QChar --- tests/benchmarks/corelib/tools/qstring/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 5513724..b3ab175 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1442,14 +1442,14 @@ void tst_QString::fromLatin1() const } } -void fromLatin1_regular(QChar *dst, const char *str, int size) +void fromLatin1_regular(ushort *dst, const char *str, int size) { // from qstring.cpp: while (size--) *dst++ = (uchar)*str++; } -void fromLatin1_sse2_qt47(QChar *dst, const char *str, int size) +void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) { if (size >= 16) { int chunkCount = size >> 4; // divided by 16 @@ -1474,7 +1474,7 @@ void fromLatin1_sse2_qt47(QChar *dst, const char *str, int size) *dst++ = (uchar)*str++; } -typedef void (* FromLatin1Function)(QChar *, const char *, int); +typedef void (* FromLatin1Function)(ushort *, const char *, int); Q_DECLARE_METATYPE(FromLatin1Function) void tst_QString::fromLatin1Alternatives_data() const @@ -1501,7 +1501,7 @@ static void fromLatin1Alternatives_internal(FromLatin1Function function, bool do QString dst; dst.resize(len); - (function)(dst.data(), src, len); + (function)(&dst.data()->unicode(), src, len); if (doVerify) { QCOMPARE(dst, QString::fromLatin1(src, len)); -- cgit v0.12 From d2db4085bedf7c10791960bcbaf2da03d9860c5a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 16:51:05 +0100 Subject: Add some boundary/spill protection --- tests/benchmarks/corelib/tools/qstring/main.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index b3ab175..c8d9de2 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1499,12 +1499,16 @@ static void fromLatin1Alternatives_internal(FromLatin1Function function, bool do int len = entries[i].len; const char *src = fromLatin1Data.charData + entries[i].offset1; - QString dst; - dst.resize(len); - (function)(&dst.data()->unicode(), src, len); + QString dst(len + 16, QChar('x')); + (function)(&dst.data()->unicode() + 8, src, len); if (doVerify) { - QCOMPARE(dst, QString::fromLatin1(src, len)); + QString zeroes(8, QChar('x')); + QString final = dst.mid(8); + final.chop(8); + QCOMPARE(final, QString::fromLatin1(src, len)); + QCOMPARE(dst.left(8), zeroes); + QCOMPARE(dst.right(8), zeroes); } } } -- cgit v0.12 From 8f85657308ae7ba4196713ef57f0c918d5d4f64a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:05:35 +0100 Subject: Add an SSE2 alternative with prolog --- tests/benchmarks/corelib/tools/qstring/main.cpp | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c8d9de2..6f5082e 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1474,6 +1474,53 @@ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) *dst++ = (uchar)*str++; } +static inline void fromLatin1_prolog(ushort *dst, const char *str, uint size) +{ + while (size--) { + *dst++ = (uchar)*str++; + } +} + +void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) +{ + // same as the Qt 4.7 code, but we attempt to align at the prolog + // therefore, we issue aligned stores + + if (size >= 16) { + uint misalignment = uint(quintptr(dst) & 0xf); + uint prologCount = (16 - misalignment) / 2; + + fromLatin1_prolog(dst, str, prologCount); + + size -= prologCount; + dst += prologCount; + str += prologCount; + } + + if (size >= 16) { + int chunkCount = size >> 4; // divided by 16 + const __m128i nullMask = _mm_set1_epi32(0); + for (int i = 0; i < chunkCount; ++i) { + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + str += 16; + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_store_si128((__m128i*)dst, firstHalf); // store + dst += 8; + + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_store_si128((__m128i*)dst, secondHalf); // store + dst += 8; + } + size = size % 16; + } + while (size--) + *dst++ = (uchar)*str++; + +} + typedef void (* FromLatin1Function)(ushort *, const char *, int); Q_DECLARE_METATYPE(FromLatin1Function) @@ -1482,6 +1529,7 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("regular") << &fromLatin1_regular; QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; + QTest::newRow("sse2-with-prolog") << &fromLatin1_sse2_withprolog; } static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) -- cgit v0.12 From fc87ff3d793a4b87d9d08f84a7cc3c632cf78a09 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:14:16 +0100 Subject: Make the prolog function more generic --- tests/benchmarks/corelib/tools/qstring/main.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 6f5082e..dfe3015 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1442,6 +1442,9 @@ void tst_QString::fromLatin1() const } } +typedef void (* FromLatin1Function)(ushort *, const char *, int); +Q_DECLARE_METATYPE(FromLatin1Function) + void fromLatin1_regular(ushort *dst, const char *str, int size) { // from qstring.cpp: @@ -1474,13 +1477,7 @@ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) *dst++ = (uchar)*str++; } -static inline void fromLatin1_prolog(ushort *dst, const char *str, uint size) -{ - while (size--) { - *dst++ = (uchar)*str++; - } -} - +template<FromLatin1Function prologFunction> void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) { // same as the Qt 4.7 code, but we attempt to align at the prolog @@ -1490,7 +1487,7 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) uint misalignment = uint(quintptr(dst) & 0xf); uint prologCount = (16 - misalignment) / 2; - fromLatin1_prolog(dst, str, prologCount); + prologFunction(dst, str, prologCount); size -= prologCount; dst += prologCount; @@ -1521,15 +1518,12 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) } -typedef void (* FromLatin1Function)(ushort *, const char *, int); -Q_DECLARE_METATYPE(FromLatin1Function) - void tst_QString::fromLatin1Alternatives_data() const { QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("regular") << &fromLatin1_regular; QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; - QTest::newRow("sse2-with-prolog") << &fromLatin1_sse2_withprolog; + QTest::newRow("sse2-with-prolog") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; } static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) -- cgit v0.12 From da88d5889a6b60b64403342b5bfbae54462d3111 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:17:34 +0100 Subject: Add an unrolled prolog --- tests/benchmarks/corelib/tools/qstring/main.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index dfe3015..35e1939 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1477,6 +1477,26 @@ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) *dst++ = (uchar)*str++; } +void fromLatin1_prolog_unrolled(ushort *dst, const char *str, int size) +{ + switch (size) { + case 7: + *dst++ = (uchar)*str++; + case 6: + *dst++ = (uchar)*str++; + case 5: + *dst++ = (uchar)*str++; + case 4: + *dst++ = (uchar)*str++; + case 3: + *dst++ = (uchar)*str++; + case 2: + *dst++ = (uchar)*str++; + case 1: + *dst++ = (uchar)*str++; + } +} + template<FromLatin1Function prologFunction> void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) { @@ -1523,7 +1543,8 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("regular") << &fromLatin1_regular; QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; - QTest::newRow("sse2-with-prolog") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; + QTest::newRow("sse2-with-prolog-regular") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; + QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; } static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) -- cgit v0.12 From d21a4d60394a4372c6a440d3a7b6606e0b209e70 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:21:16 +0100 Subject: Try to improve the prolog by doing less operations --- tests/benchmarks/corelib/tools/qstring/main.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 35e1939..0aff77c 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1481,19 +1481,19 @@ void fromLatin1_prolog_unrolled(ushort *dst, const char *str, int size) { switch (size) { case 7: - *dst++ = (uchar)*str++; + dst[6] = (uchar)str[6]; case 6: - *dst++ = (uchar)*str++; + dst[5] = (uchar)str[5]; case 5: - *dst++ = (uchar)*str++; + dst[4] = (uchar)str[4]; case 4: - *dst++ = (uchar)*str++; + dst[3] = (uchar)str[3]; case 3: - *dst++ = (uchar)*str++; + dst[2] = (uchar)str[2]; case 2: - *dst++ = (uchar)*str++; + dst[1] = (uchar)str[1]; case 1: - *dst++ = (uchar)*str++; + dst[0] = (uchar)str[0]; } } -- cgit v0.12 From c4cd963007b957c247cecb35137b0c814202af0f Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:29:55 +0100 Subject: Optimise the prolog even further --- tests/benchmarks/corelib/tools/qstring/main.cpp | 49 +++++++++++++++++-------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 0aff77c..4d2c8fa 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1479,22 +1479,39 @@ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) void fromLatin1_prolog_unrolled(ushort *dst, const char *str, int size) { - switch (size) { - case 7: - dst[6] = (uchar)str[6]; - case 6: - dst[5] = (uchar)str[5]; - case 5: - dst[4] = (uchar)str[4]; - case 4: - dst[3] = (uchar)str[3]; - case 3: - dst[2] = (uchar)str[2]; - case 2: - dst[1] = (uchar)str[1]; - case 1: - dst[0] = (uchar)str[0]; - } + // QString's data pointer is most often ending in 0x2 or 0xa + // that means the two most common values for size are (8-1)=7 and (8-5)=3 + if (size == 7) + goto copy_7; + if (size == 3) + goto copy_3; + + if (size == 6) + goto copy_6; + if (size == 5) + goto copy_5; + if (size == 4) + goto copy_4; + if (size == 2) + goto copy_2; + if (size == 1) + goto copy_1; + return; + +copy_7: + dst[6] = (uchar)str[6]; +copy_6: + dst[5] = (uchar)str[5]; +copy_5: + dst[4] = (uchar)str[4]; +copy_4: + dst[3] = (uchar)str[3]; +copy_3: + dst[2] = (uchar)str[2]; +copy_2: + dst[1] = (uchar)str[1]; +copy_1: + dst[0] = (uchar)str[0]; } template<FromLatin1Function prologFunction> -- cgit v0.12 From 3f6c5227861f67bde9d4c925f593dea85004ddb2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:31:28 +0100 Subject: Try to remove the non-determinism by moving the malloc() away --- tests/benchmarks/corelib/tools/qstring/main.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4d2c8fa..2861228 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1564,9 +1564,9 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; } -static void fromLatin1Alternatives_internal(FromLatin1Function function, bool doVerify) +extern StringData fromLatin1Data; +static void fromLatin1Alternatives_internal(FromLatin1Function function, QString &dst, bool doVerify) { - extern StringData fromLatin1Data; struct Entry { int len; @@ -1579,16 +1579,18 @@ static void fromLatin1Alternatives_internal(FromLatin1Function function, bool do int len = entries[i].len; const char *src = fromLatin1Data.charData + entries[i].offset1; - QString dst(len + 16, QChar('x')); - (function)(&dst.data()->unicode() + 8, src, len); + if (!doVerify) { + (function)(&dst.data()->unicode(), src, len); + } else { + dst.fill(QChar('x'), dst.length()); + + (function)(&dst.data()->unicode() + 8, src, len); - if (doVerify) { QString zeroes(8, QChar('x')); - QString final = dst.mid(8); - final.chop(8); + QString final = dst.mid(8, len); QCOMPARE(final, QString::fromLatin1(src, len)); QCOMPARE(dst.left(8), zeroes); - QCOMPARE(dst.right(8), zeroes); + QCOMPARE(dst.mid(len + 8, 8), zeroes); } } } @@ -1596,9 +1598,12 @@ static void fromLatin1Alternatives_internal(FromLatin1Function function, bool do void tst_QString::fromLatin1Alternatives() const { QFETCH(FromLatin1Function, function); - fromLatin1Alternatives_internal(function, true); + + QString dst(fromLatin1Data.maxLength + 16, QChar('x')); + fromLatin1Alternatives_internal(function, dst, true); + QBENCHMARK { - fromLatin1Alternatives_internal(function, false); + fromLatin1Alternatives_internal(function, dst, false); } } -- cgit v0.12 From cf2a87c8286694d1f52741666a7040bbd88f9c59 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:44:36 +0100 Subject: Add two SIMD overcommit prologs --- tests/benchmarks/corelib/tools/qstring/main.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 2861228..a5f234e 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1514,6 +1514,17 @@ copy_1: dst[0] = (uchar)str[0]; } +void fromLatin1_prolog_sse2_overcommit(ushort *dst, const char *str, int) +{ + // do one iteration of conversion + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + + // unpack only the first 8 bytes, padding with zeros + const __m128i nullMask = _mm_set1_epi32(0); + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, firstHalf); // store +} + template<FromLatin1Function prologFunction> void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) { @@ -1555,6 +1566,14 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) } +void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) +{ + // load 8 bytes and zero-extend them to 16 + const __m128i chunk = _mm_cvtepu8_epi16(*(__m128i*)str); // load + _mm_storeu_si128((__m128i*)dst, chunk); // store +} + + void tst_QString::fromLatin1Alternatives_data() const { QTest::addColumn<FromLatin1Function>("function"); @@ -1562,6 +1581,8 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; QTest::newRow("sse2-with-prolog-regular") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; + QTest::newRow("sse2-with-prolog-sse2-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse2_overcommit>; + QTest::newRow("sse2-with-prolog-sse4-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse4_overcommit>; } extern StringData fromLatin1Data; -- cgit v0.12 From aa7543e735c5c0fe61049c432b264ad1f2cfd598 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 17:55:52 +0100 Subject: Attempt to improve the epilog code --- tests/benchmarks/corelib/tools/qstring/main.cpp | 91 +++++++++++++++++++------ 1 file changed, 72 insertions(+), 19 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index a5f234e..c365e5a 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1477,6 +1477,63 @@ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) *dst++ = (uchar)*str++; } +static inline void fromLatin1_epilog(ushort *dst, const char *str, int size) +{ + if (!size) return; + dst[0] = (uchar)str[0]; + if (!--size) return; + dst[1] = (uchar)str[1]; + if (!--size) return; + dst[2] = (uchar)str[2]; + if (!--size) return; + dst[3] = (uchar)str[3]; + if (!--size) return; + dst[4] = (uchar)str[4]; + if (!--size) return; + dst[5] = (uchar)str[5]; + if (!--size) return; + dst[6] = (uchar)str[6]; + if (!--size) return; + dst[7] = (uchar)str[7]; + if (!--size) return; + dst[8] = (uchar)str[8]; + if (!--size) return; + dst[9] = (uchar)str[9]; + if (!--size) return; + dst[10] = (uchar)str[10]; + if (!--size) return; + dst[11] = (uchar)str[11]; + if (!--size) return; + dst[12] = (uchar)str[12]; + if (!--size) return; + dst[13] = (uchar)str[13]; + if (!--size) return; + dst[14] = (uchar)str[14]; + if (!--size) return; + dst[15] = (uchar)str[15]; +} + +void fromLatin1_sse2_improved(ushort *dst, const char *str, int size) +{ + const __m128i nullMask = _mm_set1_epi32(0); + while (size >= 16) { + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)dst, firstHalf); // store + + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + 8), secondHalf); // store + + str += 16; + dst += 16; + size -= 16; + } + fromLatin1_epilog(dst, str, size); +} + void fromLatin1_prolog_unrolled(ushort *dst, const char *str, int size) { // QString's data pointer is most often ending in 0x2 or 0xa @@ -1542,28 +1599,23 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) str += prologCount; } - if (size >= 16) { - int chunkCount = size >> 4; // divided by 16 - const __m128i nullMask = _mm_set1_epi32(0); - for (int i = 0; i < chunkCount; ++i) { - const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load - str += 16; + const __m128i nullMask = _mm_set1_epi32(0); + while (size >= 16) { + const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load - // unpack the first 8 bytes, padding with zeros - const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); - _mm_store_si128((__m128i*)dst, firstHalf); // store - dst += 8; + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_store_si128((__m128i*)dst, firstHalf); // store - // unpack the last 8 bytes, padding with zeros - const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); - _mm_store_si128((__m128i*)dst, secondHalf); // store - dst += 8; - } - size = size % 16; - } - while (size--) - *dst++ = (uchar)*str++; + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_store_si128((__m128i*)(dst + 8), secondHalf); // store + str += 16; + dst += 16; + size -= 16; + } + fromLatin1_epilog(dst, str, size); } void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) @@ -1579,6 +1631,7 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("regular") << &fromLatin1_regular; QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; + QTest::newRow("sse2-improved") << &fromLatin1_sse2_improved; QTest::newRow("sse2-with-prolog-regular") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; QTest::newRow("sse2-with-prolog-sse2-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse2_overcommit>; -- cgit v0.12 From 152f40fa41bae551dffd7b0ed72ed2008d7ff642 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Fri, 18 Mar 2011 18:02:08 +0100 Subject: Add an SSE4 version using PMOVZXBW and PSRLDQ --- tests/benchmarks/corelib/tools/qstring/main.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c365e5a..4e73f14 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1618,6 +1618,27 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) fromLatin1_epilog(dst, str, size); } +void fromLatin1_sse4_pmovzxbw(ushort *dst, const char *str, int size) +{ + while (size >= 16) { + __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_cvtepu8_epi16(chunk); + _mm_storeu_si128((__m128i*)dst, firstHalf); // store + + // unpack the last 8 bytes, padding with zeros + chunk = _mm_srli_si128(chunk, 8); + const __m128i secondHalf = _mm_cvtepu8_epi16(chunk); + _mm_storeu_si128((__m128i*)(dst + 8), secondHalf); // store + + str += 16; + dst += 16; + size -= 16; + } + fromLatin1_epilog(dst, str, size); +} + void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) { // load 8 bytes and zero-extend them to 16 @@ -1636,6 +1657,7 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; QTest::newRow("sse2-with-prolog-sse2-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse2_overcommit>; QTest::newRow("sse2-with-prolog-sse4-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse4_overcommit>; + QTest::newRow("sse4-pmovzxbw") << &fromLatin1_sse4_pmovzxbw; } extern StringData fromLatin1Data; -- cgit v0.12 From cd0518deb6cf07571f1331ca83d1b5a97b3ca47e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 10:47:14 +0100 Subject: Reduce the number of operations in the main loop The more operations there are, the more time it takes. More importantly, the more variables we touch, the more the compiler may want to use the stack instead of registers. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4e73f14..4a03e5a 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1516,22 +1516,21 @@ static inline void fromLatin1_epilog(ushort *dst, const char *str, int size) void fromLatin1_sse2_improved(ushort *dst, const char *str, int size) { const __m128i nullMask = _mm_set1_epi32(0); - while (size >= 16) { - const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + qptrdiff counter = 0; + while (size - counter >= 16) { + const __m128i chunk = _mm_loadu_si128((__m128i*)(str + counter)); // load // unpack the first 8 bytes, padding with zeros const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); - _mm_storeu_si128((__m128i*)dst, firstHalf); // store + _mm_storeu_si128((__m128i*)(dst + counter), firstHalf); // store // unpack the last 8 bytes, padding with zeros const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); - _mm_storeu_si128((__m128i*)(dst + 8), secondHalf); // store + _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store - str += 16; - dst += 16; - size -= 16; + counter += 16; } - fromLatin1_epilog(dst, str, size); + fromLatin1_epilog(dst + counter, str + counter, size - counter); } void fromLatin1_prolog_unrolled(ushort *dst, const char *str, int size) -- cgit v0.12 From 86ee899d3d01463c55ee9ba753ee3d47f87ad07d Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 11:03:50 +0100 Subject: Improve a little more the core loop and propagate to the other code Currently are that the "improved SSE2" version and the SSE4.1 version are yielding the best results, within 1% of each other. These results are around 20% better than the Qt 4.7 code. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 40 ++++++++++++++----------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4a03e5a..f2d6de7 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1517,7 +1517,8 @@ void fromLatin1_sse2_improved(ushort *dst, const char *str, int size) { const __m128i nullMask = _mm_set1_epi32(0); qptrdiff counter = 0; - while (size - counter >= 16) { + size -= 16; + while (size >= counter) { const __m128i chunk = _mm_loadu_si128((__m128i*)(str + counter)); // load // unpack the first 8 bytes, padding with zeros @@ -1530,6 +1531,7 @@ void fromLatin1_sse2_improved(ushort *dst, const char *str, int size) counter += 16; } + size += 16; fromLatin1_epilog(dst + counter, str + counter, size - counter); } @@ -1584,7 +1586,7 @@ void fromLatin1_prolog_sse2_overcommit(ushort *dst, const char *str, int) template<FromLatin1Function prologFunction> void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) { - // same as the Qt 4.7 code, but we attempt to align at the prolog + // same as the improved code, but we attempt to align at the prolog // therefore, we issue aligned stores if (size >= 16) { @@ -1599,43 +1601,45 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) } const __m128i nullMask = _mm_set1_epi32(0); - while (size >= 16) { - const __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + qptrdiff counter = 0; + size -= 16; + while (size >= counter) { + const __m128i chunk = _mm_loadu_si128((__m128i*)(str + counter)); // load // unpack the first 8 bytes, padding with zeros const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); - _mm_store_si128((__m128i*)dst, firstHalf); // store + _mm_store_si128((__m128i*)(dst + counter), firstHalf); // store // unpack the last 8 bytes, padding with zeros const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); - _mm_store_si128((__m128i*)(dst + 8), secondHalf); // store + _mm_store_si128((__m128i*)(dst + counter + 8), secondHalf); // store - str += 16; - dst += 16; - size -= 16; + counter += 16; } - fromLatin1_epilog(dst, str, size); + size += 16; + fromLatin1_epilog(dst + counter, str + counter, size - counter); } void fromLatin1_sse4_pmovzxbw(ushort *dst, const char *str, int size) { - while (size >= 16) { - __m128i chunk = _mm_loadu_si128((__m128i*)str); // load + qptrdiff counter = 0; + size -= 16; + while (size >= counter) { + __m128i chunk = _mm_loadu_si128((__m128i*)(str + counter)); // load // unpack the first 8 bytes, padding with zeros const __m128i firstHalf = _mm_cvtepu8_epi16(chunk); - _mm_storeu_si128((__m128i*)dst, firstHalf); // store + _mm_storeu_si128((__m128i*)(dst + counter), firstHalf); // store // unpack the last 8 bytes, padding with zeros chunk = _mm_srli_si128(chunk, 8); const __m128i secondHalf = _mm_cvtepu8_epi16(chunk); - _mm_storeu_si128((__m128i*)(dst + 8), secondHalf); // store + _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store - str += 16; - dst += 16; - size -= 16; + counter += 16; } - fromLatin1_epilog(dst, str, size); + size += 16; + fromLatin1_epilog(dst + counter, str + counter, size - counter); } void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) -- cgit v0.12 From dfadfaebe1e8a99230d511645bb1fa24bdf9e033 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 14:09:41 +0100 Subject: Add UTF-8 code benchmarks Also compare to the Latin1 functions. The UTF-8 algorithm in Qt 4.7 right now is 109% slower than the unoptimised Latin-1 algo, 120% than the Qt 4.7 SSE2 code --- tests/benchmarks/corelib/tools/qstring/main.cpp | 223 ++++++++++++++++++++++++ 1 file changed, 223 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index f2d6de7..f505151 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -74,6 +74,8 @@ private slots: void fromLatin1() const; void fromLatin1Alternatives_data() const; void fromLatin1Alternatives() const; + void fromUtf8Alternatives_data() const; + void fromUtf8Alternatives() const; }; void tst_QString::equals() const @@ -1706,6 +1708,227 @@ void tst_QString::fromLatin1Alternatives() const } } +typedef int (* FromUtf8Function)(ushort *, const char *, int); +Q_DECLARE_METATYPE(FromUtf8Function) + +extern QTextCodec::ConverterState *state; +QTextCodec::ConverterState *state = 0; // just because the code in qutfcodec.cpp uses a state + +int fromUtf8_latin1_regular(ushort *dst, const char *chars, int len) +{ + fromLatin1_regular(dst, chars, len); + return len; +} + +int fromUtf8_latin1_qt47(ushort *dst, const char *chars, int len) +{ + fromLatin1_sse2_qt47(dst, chars, len); + return len; +} + +int fromUtf8_latin1best(ushort *dst, const char *chars, int len) +{ + fromLatin1_sse2_improved(dst, chars, len); + return len; +} + +static inline bool isUnicodeNonCharacter(uint ucs4) +{ + // Unicode has a couple of "non-characters" that one can use internally, + // but are not allowed to be used for text interchange. + // + // Those are the last two entries each Unicode Plane (U+FFFE, U+FFFF, + // U+1FFFE, U+1FFFF, etc.) as well as the entries between U+FDD0 and + // U+FDEF (inclusive) + + return (ucs4 & 0xfffe) == 0xfffe + || (ucs4 - 0xfdd0U) < 16; +} + +int fromUtf8_qt47(ushort *dst, const char *chars, int len) +{ + // this is almost the code found in Qt 4.7's qutfcodec.cpp QUtf8Codec::convertToUnicode + // That function returns a QString, this one returns the number of characters converted + // That's to avoid doing malloc() inside the benchmark test + // Any differences between this code and the original are just because of that, I promise + + bool headerdone = false; + ushort replacement = QChar::ReplacementCharacter; + int need = 0; + int error = -1; + uint uc = 0; + uint min_uc = 0; + if (state) { + if (state->flags & QTextCodec::IgnoreHeader) + headerdone = true; + if (state->flags & QTextCodec::ConvertInvalidToNull) + replacement = QChar::Null; + need = state->remainingChars; + if (need) { + uc = state->state_data[0]; + min_uc = state->state_data[1]; + } + } + if (!headerdone && len > 3 + && (uchar)chars[0] == 0xef && (uchar)chars[1] == 0xbb && (uchar)chars[2] == 0xbf) { + // starts with a byte order mark + chars += 3; + len -= 3; + headerdone = true; + } + + // QString result(need + len + 1, Qt::Uninitialized); // worst case + // ushort *qch = (ushort *)result.unicode(); + ushort *qch = dst; + uchar ch; + int invalid = 0; + + for (int i = 0; i < len; ++i) { + ch = chars[i]; + if (need) { + if ((ch&0xc0) == 0x80) { + uc = (uc << 6) | (ch & 0x3f); + --need; + if (!need) { + // utf-8 bom composes into 0xfeff code point + bool nonCharacter; + if (!headerdone && uc == 0xfeff) { + // don't do anything, just skip the BOM + } else if (!(nonCharacter = isUnicodeNonCharacter(uc)) && uc > 0xffff && uc < 0x110000) { + // surrogate pair + //Q_ASSERT((qch - (ushort*)result.unicode()) + 2 < result.length()); + *qch++ = QChar::highSurrogate(uc); + *qch++ = QChar::lowSurrogate(uc); + } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || nonCharacter || uc >= 0x110000) { + // error: overlong sequence, UTF16 surrogate or non-character + *qch++ = replacement; + ++invalid; + } else { + *qch++ = uc; + } + headerdone = true; + } + } else { + // error + i = error; + *qch++ = replacement; + ++invalid; + need = 0; + headerdone = true; + } + } else { + if (ch < 128) { + *qch++ = ushort(ch); + headerdone = true; + } else if ((ch & 0xe0) == 0xc0) { + uc = ch & 0x1f; + need = 1; + error = i; + min_uc = 0x80; + headerdone = true; + } else if ((ch & 0xf0) == 0xe0) { + uc = ch & 0x0f; + need = 2; + error = i; + min_uc = 0x800; + } else if ((ch&0xf8) == 0xf0) { + uc = ch & 0x07; + need = 3; + error = i; + min_uc = 0x10000; + headerdone = true; + } else { + // error + *qch++ = replacement; + ++invalid; + headerdone = true; + } + } + } + if (!state && need > 0) { + // unterminated UTF sequence + for (int i = error; i < len; ++i) { + *qch++ = replacement; + ++invalid; + } + } + //result.truncate(qch - (ushort *)result.unicode()); + if (state) { + state->invalidChars += invalid; + state->remainingChars = need; + if (headerdone) + state->flags |= QTextCodec::IgnoreHeader; + state->state_data[0] = need ? uc : 0; + state->state_data[1] = need ? min_uc : 0; + } + //return result; + return qch - dst; +} + +void tst_QString::fromUtf8Alternatives_data() const +{ + QTest::addColumn<FromUtf8Function>("function"); + QTest::newRow("latin1-regular") << &fromUtf8_latin1_regular; + QTest::newRow("latin1-best") << &fromUtf8_latin1best; + QTest::newRow("latin1-qt4.7") << &fromUtf8_latin1_qt47; + QTest::newRow("qt-4.7") << &fromUtf8_qt47; +} + +extern StringData fromUtf8Data; +static void fromUtf8Alternatives_internal(FromUtf8Function function, QString &dst, bool doVerify) +{ + if (!doVerify) { + // NOTE: this only works because the Latin1 data is ASCII-only + fromLatin1Alternatives_internal(reinterpret_cast<FromLatin1Function>(function), dst, doVerify); + } else { + if (strncmp(QTest::currentDataTag(), "latin1-", 7) == 0) + return; + } + + struct Entry + { + int len; + int offset1, offset2; + int align1, align2; + }; + const Entry *entries = reinterpret_cast<const Entry *>(fromUtf8Data.entries); + + for (int i = 0; i < fromUtf8Data.entryCount; ++i) { + int len = entries[i].len; + const char *src = fromUtf8Data.charData + entries[i].offset1; + + if (!doVerify) { + (function)(&dst.data()->unicode(), src, len); + } else { + dst.fill(QChar('x'), dst.length()); + + int utf8len = (function)(&dst.data()->unicode() + 8, src, len); + + QString expected = QString::fromUtf8(src, len); + QCOMPARE(utf8len, expected.length()); + + QString final = dst.mid(8, utf8len); + QCOMPARE(final, expected); + + QString zeroes(8, QChar('x')); + QCOMPARE(dst.left(8), zeroes); + QCOMPARE(dst.mid(len + 8, 8), zeroes); + } + } +} + +void tst_QString::fromUtf8Alternatives() const +{ + QFETCH(FromUtf8Function, function); + + QString dst(fromUtf8Data.maxLength + 16, QChar('x')); + fromUtf8Alternatives_internal(function, dst, true); + + QBENCHMARK { + fromUtf8Alternatives_internal(function, dst, false); + } +} + QTEST_MAIN(tst_QString) #include "main.moc" -- cgit v0.12 From 6934b9b7be067d1c61c8796f8a49d40b3b206a3e Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 14:24:34 +0100 Subject: Add a stateless copy of the Qt 4.7 UTF-8 codec. For whatever reason, this code is worse than the stateful code... --- tests/benchmarks/corelib/tools/qstring/main.cpp | 99 +++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index f505151..c7a5096 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1865,6 +1865,104 @@ int fromUtf8_qt47(ushort *dst, const char *chars, int len) return qch - dst; } +int fromUtf8_qt47_stateless(ushort *dst, const char *chars, int len) +{ + // This is the same code as above, but for stateless UTF-8 conversion + // no other improvements + bool headerdone = false; + const ushort replacement = QChar::ReplacementCharacter; + int need = 0; + int error = -1; + uint uc = 0; + uint min_uc = 0; + + if (len > 3 + && (uchar)chars[0] == 0xef && (uchar)chars[1] == 0xbb && (uchar)chars[2] == 0xbf) { + // starts with a byte order mark + chars += 3; + len -= 3; + } + + // QString result(need + len + 1, Qt::Uninitialized); // worst case + // ushort *qch = (ushort *)result.unicode(); + ushort *qch = dst; + uchar ch; + int invalid = 0; + + for (int i = 0; i < len; ++i) { + ch = chars[i]; + if (need) { + if ((ch&0xc0) == 0x80) { + uc = (uc << 6) | (ch & 0x3f); + --need; + if (!need) { + // utf-8 bom composes into 0xfeff code point + bool nonCharacter; + if (!headerdone && uc == 0xfeff) { + // don't do anything, just skip the BOM + } else if (!(nonCharacter = isUnicodeNonCharacter(uc)) && uc > 0xffff && uc < 0x110000) { + // surrogate pair + //Q_ASSERT((qch - (ushort*)result.unicode()) + 2 < result.length()); + *qch++ = QChar::highSurrogate(uc); + *qch++ = QChar::lowSurrogate(uc); + } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || nonCharacter || uc >= 0x110000) { + // error: overlong sequence, UTF16 surrogate or non-character + *qch++ = replacement; + ++invalid; + } else { + *qch++ = uc; + } + headerdone = true; + } + } else { + // error + i = error; + *qch++ = replacement; + ++invalid; + need = 0; + headerdone = true; + } + } else { + if (ch < 128) { + *qch++ = ushort(ch); + headerdone = true; + } else if ((ch & 0xe0) == 0xc0) { + uc = ch & 0x1f; + need = 1; + error = i; + min_uc = 0x80; + headerdone = true; + } else if ((ch & 0xf0) == 0xe0) { + uc = ch & 0x0f; + need = 2; + error = i; + min_uc = 0x800; + } else if ((ch&0xf8) == 0xf0) { + uc = ch & 0x07; + need = 3; + error = i; + min_uc = 0x10000; + headerdone = true; + } else { + // error + *qch++ = replacement; + ++invalid; + headerdone = true; + } + } + } + if (need > 0) { + // unterminated UTF sequence + for (int i = error; i < len; ++i) { + *qch++ = replacement; + ++invalid; + } + } + //result.truncate(qch - (ushort *)result.unicode()); + //return result; + return qch - dst; +} + void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); @@ -1872,6 +1970,7 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("latin1-best") << &fromUtf8_latin1best; QTest::newRow("latin1-qt4.7") << &fromUtf8_latin1_qt47; QTest::newRow("qt-4.7") << &fromUtf8_qt47; + QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; } extern StringData fromUtf8Data; -- cgit v0.12 From 56ac27bd620768e0b130a3ce8de93c1a8524c6c6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 16:06:58 +0100 Subject: Add an UTF-8 conversion code that is optimised for ASCII This code is ~1.5x faster than the original UTF-8 code --- tests/benchmarks/corelib/tools/qstring/main.cpp | 96 ++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c7a5096..27d4dff 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1963,6 +1963,95 @@ int fromUtf8_qt47_stateless(ushort *dst, const char *chars, int len) return qch - dst; } +static inline uint utf8_multibyte_to_ucs4(const char *&chars, qptrdiff &counter, int &len) +{ + uchar ch = chars[counter]; + + // is it a leading or a continuation one? + if ((ch & 0xc0) == 0x80) { + // continuation character found without the leading + return QChar::ReplacementCharacter; + } + + if ((ch & 0xe0) == 0xc0) { + // two-byte UTF-8 sequence + if (counter + 1 == len) + return QChar::ReplacementCharacter; + + uchar ch2 = chars[counter + 1]; + if ((ch2 & 0xc0) != 0x80) + return QChar::ReplacementCharacter; + + ushort ucs = (ch & 0x1f); + ucs <<= 6; + ucs |= (ch2 & 0x3f); + + // dst[counter] will correspond to chars[counter..counter+1], so adjust + ++chars; + --len; + return ucs >= 0x80 ? ucs : QChar::ReplacementCharacter; + } + + if ((ch & 0xf0) == 0xe0) { + // three-byte UTF-8 sequence + if (counter + 2 >= len) + return QChar::ReplacementCharacter; + + uchar ch2 = chars[counter + 1]; + uchar ch3 = chars[counter + 2]; + if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80) + return QChar::ReplacementCharacter; + + ushort ucs = (ch & 0x1f) << 12 | (ch2 & 0x3f) << 6 | (ch3 & 0x3f); + + // dst[counter] will correspond to chars[counter..counter+2], so adjust + chars += 2; + len -= 2; + return ucs >= 0x800 ? ucs : QChar::ReplacementCharacter; + } + + ++counter; + return QChar::ReplacementCharacter; +} + +static inline void extract_utf8_multibyte(ushort *&dst, const char *&chars, qptrdiff &counter, int &len) +{ + uint ucs4 = utf8_multibyte_to_ucs4(chars, counter, len); + if (uint(ushort(ucs4)) != ucs4) { + // needs surrogate pair + dst[counter] = QChar::highSurrogate(ucs4); + dst[++counter] = QChar::lowSurrogate(ucs4); + } else { + dst[counter] = ucs4; + } + ++counter; +} + +int fromUtf8_optimised_for_ascii(ushort *qch, const char *chars, int len) +{ + if (len > 3 + && (uchar)chars[0] == 0xef && (uchar)chars[1] == 0xbb && (uchar)chars[2] == 0xbf) { + // starts with a byte order mark + chars += 3; + len -= 3; + } + + qptrdiff counter = 0; + ushort *dst = qch; + while (counter < len) { + uchar ch = chars[counter]; + if ((ch & 0x80) == 0) { + dst[counter] = ch; + ++counter; + continue; + } + + // UTF-8 character found + extract_utf8_multibyte(dst, chars, counter, len); + } + return dst + counter - qch; +} + void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); @@ -1971,6 +2060,7 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("latin1-qt4.7") << &fromUtf8_latin1_qt47; QTest::newRow("qt-4.7") << &fromUtf8_qt47; QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; + QTest::newRow("optimised-for-ascii") << &fromUtf8_optimised_for_ascii; } extern StringData fromUtf8Data; @@ -2004,10 +2094,12 @@ static void fromUtf8Alternatives_internal(FromUtf8Function function, QString &ds int utf8len = (function)(&dst.data()->unicode() + 8, src, len); QString expected = QString::fromUtf8(src, len); - QCOMPARE(utf8len, expected.length()); + QString final = dst.mid(8, expected.length()); + if (final != expected || utf8len != expected.length()) + qDebug() << i << entries[i].offset1 << final << expected; - QString final = dst.mid(8, utf8len); QCOMPARE(final, expected); + QCOMPARE(utf8len, expected.length()); QString zeroes(8, QChar('x')); QCOMPARE(dst.left(8), zeroes); -- cgit v0.12 From adbb2aed4e2fcbc506e3d497001530e1a177aafc Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 16:25:12 +0100 Subject: Add an UTF-8 conversion optimised for ASCII using SSE2 This code is 2x faster than the original UTF-8 code and within 35% of the pure Latin1 code --- tests/benchmarks/corelib/tools/qstring/main.cpp | 55 ++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 27d4dff..e05915d 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2052,6 +2052,58 @@ int fromUtf8_optimised_for_ascii(ushort *qch, const char *chars, int len) return dst + counter - qch; } +int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) +{ + if (len > 3 + && (uchar)chars[0] == 0xef && (uchar)chars[1] == 0xbb && (uchar)chars[2] == 0xbf) { + // starts with a byte order mark + chars += 3; + len -= 3; + } + + qptrdiff counter = 0; + ushort *dst = qch; + + len -= 16; + const __m128i nullMask = _mm_set1_epi32(0); + while (counter < len) { + const __m128i chunk = _mm_loadu_si128((__m128i*)(chars + counter)); // load + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + counter), firstHalf); // store + + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store + + ushort highbytes = _mm_movemask_epi8(chunk); + if (!highbytes) { + counter += 16; + continue; + } + + // UTF-8 character found + // which one? + counter += bsf_nonzero(highbytes); + extract_utf8_multibyte(dst, chars, counter, len); + } + len += 16; + + while (counter < len) { + uchar ch = chars[counter]; + if ((ch & 0x80) == 0) { + dst[counter] = ch; + ++counter; + continue; + } + + // UTF-8 character found + extract_utf8_multibyte(dst, chars, counter, len); + } + return dst + counter - qch; +} + void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); @@ -2060,7 +2112,8 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("latin1-qt4.7") << &fromUtf8_latin1_qt47; QTest::newRow("qt-4.7") << &fromUtf8_qt47; QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; - QTest::newRow("optimised-for-ascii") << &fromUtf8_optimised_for_ascii; + QTest::newRow("optimized-for-ascii") << &fromUtf8_optimised_for_ascii; + QTest::newRow("sse2-optimized-for-ascii") << &fromUtf8_sse2_optimised_for_ascii; } extern StringData fromUtf8Data; -- cgit v0.12 From 543aa4bf21b169a48e5c3164ddd453e99e83d4ee Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 16:40:23 +0100 Subject: Improve the code and avoid unnecessary stores If there's an UTF-8 high byte in the first 8 bytes, don't try to save the latter 8 characters --- tests/benchmarks/corelib/tools/qstring/main.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index e05915d..39c9739 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2068,19 +2068,21 @@ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) const __m128i nullMask = _mm_set1_epi32(0); while (counter < len) { const __m128i chunk = _mm_loadu_si128((__m128i*)(chars + counter)); // load + ushort highbytes = _mm_movemask_epi8(chunk); // unpack the first 8 bytes, padding with zeros const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); _mm_storeu_si128((__m128i*)(dst + counter), firstHalf); // store - // unpack the last 8 bytes, padding with zeros - const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); - _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store + if (!uchar(highbytes)) { + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store - ushort highbytes = _mm_movemask_epi8(chunk); - if (!highbytes) { - counter += 16; - continue; + if (!highbytes) { + counter += 16; + continue; + } } // UTF-8 character found -- cgit v0.12 From 639522c147ddeb841e25d74b5e1f42bde756ac84 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 17:41:09 +0100 Subject: Add the missing tests and 4-byte UTF-8 sequences --- tests/benchmarks/corelib/tools/qstring/main.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 39c9739..c993f9e 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2007,7 +2007,29 @@ static inline uint utf8_multibyte_to_ucs4(const char *&chars, qptrdiff &counter, // dst[counter] will correspond to chars[counter..counter+2], so adjust chars += 2; len -= 2; - return ucs >= 0x800 ? ucs : QChar::ReplacementCharacter; + return ucs < 0x800 || isUnicodeNonCharacter(ucs) || (ucs >= 0xd800 && ucs <= 0xdfff) ? + QChar::ReplacementCharacter : ucs; + } + + if ((ch & 0xf8) == 0xf0) { + // four-byte UTF-8 sequence + // will require an UTF-16 surrogate pair + if (counter + 3 >= len) + return QChar::ReplacementCharacter; + + uchar ch2 = chars[counter + 1]; + uchar ch3 = chars[counter + 2]; + uchar ch4 = chars[counter + 3]; + if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80 || (ch4 & 0xc0) != 0x80) + return QChar::ReplacementCharacter; + + ushort ucs = (ch & 0x1f) << 18 | (ch2 & 0x3f) << 12 + | (ch3 & 0x3f) << 6 | (ch4 & 0x3f); + + // dst[counter] will correspond to chars[counter..counter+2], so adjust + chars += 3; + len -= 3; + return ucs >= 0x10000 && ucs < 0x110000 && !isUnicodeNonCharacter(ucs) ? ucs : QChar::ReplacementCharacter; } ++counter; -- cgit v0.12 From 0552c0f64146a18f021e36bcbff106cb815e6fbb Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 22:05:00 +0100 Subject: Make it easier to write a UTF-8 conversion on trusted data --- tests/benchmarks/corelib/tools/qstring/main.cpp | 96 +++++++++++++++---------- 1 file changed, 58 insertions(+), 38 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c993f9e..4b1ab57 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1963,24 +1963,31 @@ int fromUtf8_qt47_stateless(ushort *dst, const char *chars, int len) return qch - dst; } -static inline uint utf8_multibyte_to_ucs4(const char *&chars, qptrdiff &counter, int &len) +template <bool trusted> +static inline void extract_utf8_multibyte(ushort *&dst, const char *&chars, qptrdiff &counter, int &len) { uchar ch = chars[counter]; // is it a leading or a continuation one? - if ((ch & 0xc0) == 0x80) { + if (!trusted && (ch & 0xc0) == 0x80) { // continuation character found without the leading - return QChar::ReplacementCharacter; + dst[counter++] = QChar::ReplacementCharacter; + return; } if ((ch & 0xe0) == 0xc0) { // two-byte UTF-8 sequence - if (counter + 1 == len) - return QChar::ReplacementCharacter; + if (!trusted && counter + 1 == len) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } uchar ch2 = chars[counter + 1]; - if ((ch2 & 0xc0) != 0x80) - return QChar::ReplacementCharacter; + if (!trusted) + if ((ch2 & 0xc0) != 0x80) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } ushort ucs = (ch & 0x1f); ucs <<= 6; @@ -1989,64 +1996,77 @@ static inline uint utf8_multibyte_to_ucs4(const char *&chars, qptrdiff &counter, // dst[counter] will correspond to chars[counter..counter+1], so adjust ++chars; --len; - return ucs >= 0x80 ? ucs : QChar::ReplacementCharacter; + if (trusted || ucs >= 0x80) + dst[counter] = ucs; + else + dst[counter] = QChar::ReplacementCharacter; + ++counter; + return; } if ((ch & 0xf0) == 0xe0) { // three-byte UTF-8 sequence - if (counter + 2 >= len) - return QChar::ReplacementCharacter; + if (!trusted && counter + 2 >= len) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } uchar ch2 = chars[counter + 1]; uchar ch3 = chars[counter + 2]; - if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80) - return QChar::ReplacementCharacter; + if (!trusted) + if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } ushort ucs = (ch & 0x1f) << 12 | (ch2 & 0x3f) << 6 | (ch3 & 0x3f); // dst[counter] will correspond to chars[counter..counter+2], so adjust chars += 2; len -= 2; - return ucs < 0x800 || isUnicodeNonCharacter(ucs) || (ucs >= 0xd800 && ucs <= 0xdfff) ? - QChar::ReplacementCharacter : ucs; + if (!trusted && + (ucs < 0x800 || isUnicodeNonCharacter(ucs) || (ucs >= 0xd800 && ucs <= 0xdfff))) + dst[counter] = QChar::ReplacementCharacter; + else + dst[counter] = ucs; + ++counter; + return; } if ((ch & 0xf8) == 0xf0) { // four-byte UTF-8 sequence // will require an UTF-16 surrogate pair - if (counter + 3 >= len) - return QChar::ReplacementCharacter; + if (!trusted && counter + 3 >= len) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } uchar ch2 = chars[counter + 1]; uchar ch3 = chars[counter + 2]; uchar ch4 = chars[counter + 3]; - if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80 || (ch4 & 0xc0) != 0x80) - return QChar::ReplacementCharacter; + if (!trusted) + if ((ch2 & 0xc0) != 0x80 || (ch3 & 0xc0) != 0x80 || (ch4 & 0xc0) != 0x80) { + dst[counter++] = QChar::ReplacementCharacter; + return; + } - ushort ucs = (ch & 0x1f) << 18 | (ch2 & 0x3f) << 12 - | (ch3 & 0x3f) << 6 | (ch4 & 0x3f); + uint ucs = (ch & 0x1f) << 18 | (ch2 & 0x3f) << 12 + | (ch3 & 0x3f) << 6 | (ch4 & 0x3f); // dst[counter] will correspond to chars[counter..counter+2], so adjust chars += 3; len -= 3; - return ucs >= 0x10000 && ucs < 0x110000 && !isUnicodeNonCharacter(ucs) ? ucs : QChar::ReplacementCharacter; + if (trusted || (ucs >= 0x10000 && ucs < 0x110000 && !isUnicodeNonCharacter(ucs))) { + dst[counter + 0] = QChar::highSurrogate(ucs); + dst[counter + 1] = QChar::lowSurrogate(ucs); + counter += 2; + } else { + dst[counter++] = QChar::ReplacementCharacter; + } + return; } ++counter; - return QChar::ReplacementCharacter; -} - -static inline void extract_utf8_multibyte(ushort *&dst, const char *&chars, qptrdiff &counter, int &len) -{ - uint ucs4 = utf8_multibyte_to_ucs4(chars, counter, len); - if (uint(ushort(ucs4)) != ucs4) { - // needs surrogate pair - dst[counter] = QChar::highSurrogate(ucs4); - dst[++counter] = QChar::lowSurrogate(ucs4); - } else { - dst[counter] = ucs4; - } - ++counter; } int fromUtf8_optimised_for_ascii(ushort *qch, const char *chars, int len) @@ -2069,7 +2089,7 @@ int fromUtf8_optimised_for_ascii(ushort *qch, const char *chars, int len) } // UTF-8 character found - extract_utf8_multibyte(dst, chars, counter, len); + extract_utf8_multibyte<false>(dst, chars, counter, len); } return dst + counter - qch; } @@ -2110,7 +2130,7 @@ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) // UTF-8 character found // which one? counter += bsf_nonzero(highbytes); - extract_utf8_multibyte(dst, chars, counter, len); + extract_utf8_multibyte<false>(dst, chars, counter, len); } len += 16; @@ -2123,7 +2143,7 @@ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) } // UTF-8 character found - extract_utf8_multibyte(dst, chars, counter, len); + extract_utf8_multibyte<false>(dst, chars, counter, len); } return dst + counter - qch; } -- cgit v0.12 From 3110ab6391971fb7b914ed1f797a0ff9e403501f Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Sat, 19 Mar 2011 22:07:11 +0100 Subject: Add an UTF-8 conversion on trusted data and no BOM. This assumes that there are no overlong sequences, no continuation characters without the leading, no missing continuations and no BOM. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4b1ab57..d926aa5 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2148,6 +2148,53 @@ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) return dst + counter - qch; } +int fromUtf8_sse2_trusted_no_bom(ushort *qch, const char *chars, int len) +{ + qptrdiff counter = 0; + ushort *dst = qch; + + len -= 16; + const __m128i nullMask = _mm_set1_epi32(0); + while (counter < len) { + const __m128i chunk = _mm_loadu_si128((__m128i*)(chars + counter)); // load + ushort highbytes = _mm_movemask_epi8(chunk); + + // unpack the first 8 bytes, padding with zeros + const __m128i firstHalf = _mm_unpacklo_epi8(chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + counter), firstHalf); // store + + if (!uchar(highbytes)) { + // unpack the last 8 bytes, padding with zeros + const __m128i secondHalf = _mm_unpackhi_epi8 (chunk, nullMask); + _mm_storeu_si128((__m128i*)(dst + counter + 8), secondHalf); // store + + if (!highbytes) { + counter += 16; + continue; + } + } + + // UTF-8 character found + // which one? + counter += bsf_nonzero(highbytes); + extract_utf8_multibyte<true>(dst, chars, counter, len); + } + len += 16; + + while (counter < len) { + uchar ch = chars[counter]; + if ((ch & 0x80) == 0) { + dst[counter] = ch; + ++counter; + continue; + } + + // UTF-8 character found + extract_utf8_multibyte<true>(dst, chars, counter, len); + } + return dst + counter - qch; +} + void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); @@ -2158,6 +2205,7 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; QTest::newRow("optimized-for-ascii") << &fromUtf8_optimised_for_ascii; QTest::newRow("sse2-optimized-for-ascii") << &fromUtf8_sse2_optimised_for_ascii; + QTest::newRow("sse2-trusted-no-bom") << &fromUtf8_sse2_trusted_no_bom; } extern StringData fromUtf8Data; -- cgit v0.12 From 6431c08d2f0352b2a74a2fc053eaec4566e4a6eb Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Mon, 21 Mar 2011 10:45:46 +0100 Subject: Add baselines and zeros to the benchmarks. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index d926aa5..c35f4d1 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1655,7 +1655,8 @@ void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) void tst_QString::fromLatin1Alternatives_data() const { QTest::addColumn<FromLatin1Function>("function"); - QTest::newRow("regular") << &fromLatin1_regular; + QTest::newRow("empty", QTest::Zero) << FromLatin1Function(0); + QTest::newRow("regular", QTest::Baseline) << &fromLatin1_regular; QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; QTest::newRow("sse2-improved") << &fromLatin1_sse2_improved; QTest::newRow("sse2-with-prolog-regular") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; @@ -1680,6 +1681,8 @@ static void fromLatin1Alternatives_internal(FromLatin1Function function, QString int len = entries[i].len; const char *src = fromLatin1Data.charData + entries[i].offset1; + if (!function) + continue; if (!doVerify) { (function)(&dst.data()->unicode(), src, len); } else { @@ -1726,7 +1729,7 @@ int fromUtf8_latin1_qt47(ushort *dst, const char *chars, int len) return len; } -int fromUtf8_latin1best(ushort *dst, const char *chars, int len) +int fromUtf8_latin1_sse2_improved(ushort *dst, const char *chars, int len) { fromLatin1_sse2_improved(dst, chars, len); return len; @@ -2198,14 +2201,16 @@ int fromUtf8_sse2_trusted_no_bom(ushort *qch, const char *chars, int len) void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); - QTest::newRow("latin1-regular") << &fromUtf8_latin1_regular; - QTest::newRow("latin1-best") << &fromUtf8_latin1best; - QTest::newRow("latin1-qt4.7") << &fromUtf8_latin1_qt47; - QTest::newRow("qt-4.7") << &fromUtf8_qt47; + QTest::newRow("empty", QTest::Zero) << FromUtf8Function(0); + QTest::newRow("qt-4.7", QTest::Baseline) << &fromUtf8_qt47; QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; QTest::newRow("optimized-for-ascii") << &fromUtf8_optimised_for_ascii; QTest::newRow("sse2-optimized-for-ascii") << &fromUtf8_sse2_optimised_for_ascii; QTest::newRow("sse2-trusted-no-bom") << &fromUtf8_sse2_trusted_no_bom; + + QTest::newRow("latin1-generic") << &fromUtf8_latin1_regular; + QTest::newRow("latin1-sse2-qt4.7") << &fromUtf8_latin1_qt47; + QTest::newRow("latin1-sse2-improved") << &fromUtf8_latin1_sse2_improved; } extern StringData fromUtf8Data; @@ -2231,6 +2236,8 @@ static void fromUtf8Alternatives_internal(FromUtf8Function function, QString &ds int len = entries[i].len; const char *src = fromUtf8Data.charData + entries[i].offset1; + if (!function) + continue; if (!doVerify) { (function)(&dst.data()->unicode(), src, len); } else { -- cgit v0.12 From 220658198238ccdede7fb933c16c7119dcb6863b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 14:14:23 +0100 Subject: Make this compile on Atom/Core2 (no SSE4) and on ARM (no SSE) --- tests/benchmarks/corelib/tools/qstring/main.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index c35f4d1..0e34fd7 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1454,6 +1454,7 @@ void fromLatin1_regular(ushort *dst, const char *str, int size) *dst++ = (uchar)*str++; } +#ifdef __SSE2__ void fromLatin1_sse2_qt47(ushort *dst, const char *str, int size) { if (size >= 16) { @@ -1622,6 +1623,7 @@ void fromLatin1_sse2_withprolog(ushort *dst, const char *str, int size) fromLatin1_epilog(dst + counter, str + counter, size - counter); } +#ifdef __SSE4_1__ void fromLatin1_sse4_pmovzxbw(ushort *dst, const char *str, int size) { qptrdiff counter = 0; @@ -1650,6 +1652,8 @@ void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) const __m128i chunk = _mm_cvtepu8_epi16(*(__m128i*)str); // load _mm_storeu_si128((__m128i*)dst, chunk); // store } +#endif +#endif void tst_QString::fromLatin1Alternatives_data() const @@ -1657,13 +1661,17 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::addColumn<FromLatin1Function>("function"); QTest::newRow("empty", QTest::Zero) << FromLatin1Function(0); QTest::newRow("regular", QTest::Baseline) << &fromLatin1_regular; +#ifdef __SSE2__ QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; QTest::newRow("sse2-improved") << &fromLatin1_sse2_improved; QTest::newRow("sse2-with-prolog-regular") << &fromLatin1_sse2_withprolog<&fromLatin1_regular>; QTest::newRow("sse2-with-prolog-unrolled") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_unrolled>; QTest::newRow("sse2-with-prolog-sse2-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse2_overcommit>; +#ifdef __SSE4_1__ QTest::newRow("sse2-with-prolog-sse4-overcommit") << &fromLatin1_sse2_withprolog<&fromLatin1_prolog_sse4_overcommit>; QTest::newRow("sse4-pmovzxbw") << &fromLatin1_sse4_pmovzxbw; +#endif +#endif } extern StringData fromLatin1Data; @@ -1723,6 +1731,7 @@ int fromUtf8_latin1_regular(ushort *dst, const char *chars, int len) return len; } +#ifdef __SSE2__ int fromUtf8_latin1_qt47(ushort *dst, const char *chars, int len) { fromLatin1_sse2_qt47(dst, chars, len); @@ -1734,6 +1743,7 @@ int fromUtf8_latin1_sse2_improved(ushort *dst, const char *chars, int len) fromLatin1_sse2_improved(dst, chars, len); return len; } +#endif static inline bool isUnicodeNonCharacter(uint ucs4) { @@ -2097,6 +2107,7 @@ int fromUtf8_optimised_for_ascii(ushort *qch, const char *chars, int len) return dst + counter - qch; } +#ifdef __SSE2__ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) { if (len > 3 @@ -2197,6 +2208,8 @@ int fromUtf8_sse2_trusted_no_bom(ushort *qch, const char *chars, int len) } return dst + counter - qch; } +#endif + void tst_QString::fromUtf8Alternatives_data() const { @@ -2205,12 +2218,16 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("qt-4.7", QTest::Baseline) << &fromUtf8_qt47; QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; QTest::newRow("optimized-for-ascii") << &fromUtf8_optimised_for_ascii; +#ifdef __SSE2__ QTest::newRow("sse2-optimized-for-ascii") << &fromUtf8_sse2_optimised_for_ascii; QTest::newRow("sse2-trusted-no-bom") << &fromUtf8_sse2_trusted_no_bom; +#endif QTest::newRow("latin1-generic") << &fromUtf8_latin1_regular; +#ifdef __SSE2__ QTest::newRow("latin1-sse2-qt4.7") << &fromUtf8_latin1_qt47; QTest::newRow("latin1-sse2-improved") << &fromUtf8_latin1_sse2_improved; +#endif } extern StringData fromUtf8Data; @@ -2248,7 +2265,7 @@ static void fromUtf8Alternatives_internal(FromUtf8Function function, QString &ds QString expected = QString::fromUtf8(src, len); QString final = dst.mid(8, expected.length()); if (final != expected || utf8len != expected.length()) - qDebug() << i << entries[i].offset1 << final << expected; + qDebug() << i << entries[i].offset1 << utf8len << final << expected.length() << expected; QCOMPARE(final, expected); QCOMPARE(utf8len, expected.length()); -- cgit v0.12 From 835108c44c0f5263856cb96c257e11600ffbf9e6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 14:14:58 +0100 Subject: Add ARM Neon versions of fromLatin1 and fromUtf8 The fromLatin1 code is very simple, yet the handwritten assembly performs better due to the use of post-increments. The fromUtf8 code has two alternatives. Neon lacks an instruction similar to SSE2's _mm_movemask_epi8 (PMOVMSKB) which extracts one bit from each byte and stores it in a register. We used that in the UTF-8 code to detect bytes with the highest bit set. To compensate, we used two alternatives: 1) AND the comparison result with a vector containing {128, 64, ...,1 } Do 3 parallel-adds (VPADD.I8), which will make the mask propagate to the lowest component in the vector. Trick found in: http://hilbert-space.de/?p=22 (comment 16-17) 2) Extract the two words from the doubleword Neon register and do the work in ARM assembly. It looks like the latter version is performing better. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 192 ++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 0e34fd7..0074a2e 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1655,6 +1655,63 @@ void fromLatin1_prolog_sse4_overcommit(ushort *dst, const char *str, int) #endif #endif +#ifdef __ARM_NEON__ +static inline void fromLatin1_epilog(ushort *dst, const char *str, int size) +{ + if (!size) return; + dst[0] = (uchar)str[0]; + if (!--size) return; + dst[1] = (uchar)str[1]; + if (!--size) return; + dst[2] = (uchar)str[2]; + if (!--size) return; + dst[3] = (uchar)str[3]; + if (!--size) return; + dst[4] = (uchar)str[4]; + if (!--size) return; + dst[5] = (uchar)str[5]; + if (!--size) return; + dst[6] = (uchar)str[6]; + if (!--size) return; + dst[7] = (uchar)str[7]; + if (!--size) return; +} + +void fromLatin1_neon_improved(ushort *dst, const char *str, int len) +{ + while (len >= 8) { + // load 8 bytes into one doubleword Neon register + const uint8x8_t chunk = vld1_u8((uint8_t *)str); + str += 8; + + // expand 8 bytes into 16 bytes in a quadword register + const uint16x8_t expanded = vmovl_u8(chunk); + vst1q_u16(dst, expanded); // store + dst += 8; + + len -= 8; + } + fromLatin1_epilog(dst, str, len); +} + +void fromLatin1_neon_handwritten(ushort *dst, const char *str, int len) +{ + // same as above, but handwritten Neon + while (len >= 8) { + uint16x8_t chunk; + asm ( + "vld1.8 %[chunk], [%[str]]!\n" + "vmovl.u8 %q[chunk], %[chunk]\n" + "vst1.16 %h[chunk], [%[dst]]!\n" + : [dst] "+r" (dst), + [str] "+r" (str), + [chunk] "=w" (chunk)); + len -= 8; + } + + fromLatin1_epilog(dst, str, len); +} +#endif void tst_QString::fromLatin1Alternatives_data() const { @@ -1672,6 +1729,10 @@ void tst_QString::fromLatin1Alternatives_data() const QTest::newRow("sse4-pmovzxbw") << &fromLatin1_sse4_pmovzxbw; #endif #endif +#ifdef __ARM_NEON__ + QTest::newRow("neon-improved") << &fromLatin1_neon_improved; + QTest::newRow("neon-handwritten") << &fromLatin1_neon_handwritten; +#endif } extern StringData fromLatin1Data; @@ -2210,6 +2271,130 @@ int fromUtf8_sse2_trusted_no_bom(ushort *qch, const char *chars, int len) } #endif +#ifdef __ARM_NEON__ +int fromUtf8_latin1_neon(ushort *dst, const char *chars, int len) +{ + fromLatin1_neon_improved(dst, chars, len); + return len; +} + +int fromUtf8_neon(ushort *qch, const char *chars, int len) +{ + if (len > 3 + && (uchar)chars[0] == 0xef && (uchar)chars[1] == 0xbb && (uchar)chars[2] == 0xbf) { + // starts with a byte order mark + chars += 3; + len -= 3; + } + + ushort *dst = qch; + const uint8x8_t highBit = vdup_n_u8(0x80); + const uint8x8_t bitMask = { 128, 64, 32, 16, 8, 4, 2, 1 }; + while (len >= 8) { + // load 8 bytes into one doubleword Neon register + const uint8x8_t chunk = vld1_u8((uint8_t *)chars); + const uint16x8_t expanded = vmovl_u8(chunk); + vst1q_u16(dst, expanded); + + uint8x8_t highBits = vtst_u8(chunk, highBit); + highBits = vand_u8(highBits, bitMask); + highBits = vpadd_u8(highBits, highBits); + highBits = vpadd_u8(highBits, highBits); + highBits = vpadd_u8(highBits, highBits); + + int mask = vget_lane_u8(highBits, 0); + + // find the first bit set in mask + // sets pos to 32 if no bits are found + qptrdiff pos; + asm ("rbit %0, %1\n" + "clz %0, %0" + : "=r" (pos) : "r" (mask)); + + if (__builtin_expect(pos > 8, 1)) { + chars += 8; + dst += 8; + len -= 8; + } else { + // UTF-8 character found + // which one? + + extract_utf8_multibyte<false>(dst, chars, pos, len); + chars += pos; + dst += pos; + len -= pos; + } + } + + qptrdiff counter = 0; + while (counter < len) { + uchar ch = chars[counter]; + if ((ch & 0x80) == 0) { + dst[counter] = ch; + ++counter; + continue; + } + + // UTF-8 character found + extract_utf8_multibyte<false>(dst, chars, counter, len); + } + return dst + counter - qch; +} + +int fromUtf8_neon_trusted(ushort *qch, const char *chars, int len) +{ + ushort *dst = qch; + const uint8x8_t highBit = vdup_n_u8(0x80); + while (len >= 8) { + // load 8 bytes into one doubleword Neon register + const uint8x8_t chunk = vld1_u8((uint8_t *)chars); + const uint16x8_t expanded = vmovl_u8(chunk); + vst1q_u16(dst, expanded); + + uint8x8_t highBits = vtst_u8(chunk, highBit); + // we need to find the lowest byte set + int mask_low = vget_lane_u32(vreinterpret_u32_u8(highBits), 0); + int mask_high = vget_lane_u32(vreinterpret_u32_u8(highBits), 1); + + if (__builtin_expect(mask_low == 0 && mask_high == 0, 1)) { + chars += 8; + dst += 8; + len -= 8; + } else { + // UTF-8 character found + // which one? + qptrdiff pos; + asm ("rbit %0, %1\n" + "clz %1, %1\n" + : "=r" (pos) + : "r" (mask_low ? mask_low : mask_high)); + // now mask_low contains the number of leading zeroes + // or the value 32 (0x20) if no zeroes were found + // the number of leading zeroes is 8*pos + pos /= 8; + + extract_utf8_multibyte<true>(dst, chars, pos, len); + chars += pos; + dst += pos; + len -= pos; + } + } + + qptrdiff counter = 0; + while (counter < len) { + uchar ch = chars[counter]; + if ((ch & 0x80) == 0) { + dst[counter] = ch; + ++counter; + continue; + } + + // UTF-8 character found + extract_utf8_multibyte<true>(dst, chars, counter, len); + } + return dst + counter - qch; +} +#endif void tst_QString::fromUtf8Alternatives_data() const { @@ -2222,12 +2407,19 @@ void tst_QString::fromUtf8Alternatives_data() const QTest::newRow("sse2-optimized-for-ascii") << &fromUtf8_sse2_optimised_for_ascii; QTest::newRow("sse2-trusted-no-bom") << &fromUtf8_sse2_trusted_no_bom; #endif +#ifdef __ARM_NEON__ + QTest::newRow("neon") << &fromUtf8_neon; + QTest::newRow("neon-trusted-no-bom") << &fromUtf8_neon_trusted; +#endif QTest::newRow("latin1-generic") << &fromUtf8_latin1_regular; #ifdef __SSE2__ QTest::newRow("latin1-sse2-qt4.7") << &fromUtf8_latin1_qt47; QTest::newRow("latin1-sse2-improved") << &fromUtf8_latin1_sse2_improved; #endif +#ifdef __ARM_NEON__ + QTest::newRow("latin1-neon-improved") << &fromUtf8_latin1_neon; +#endif } extern StringData fromUtf8Data; -- cgit v0.12 From 29203bbeab032b29887be1b74c788367a93a9949 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 15:20:09 +0100 Subject: Fix a bug in the SSE2 UTF-8 decoder. If the multibyte sequence crossed the end of the SSE2 area, then len would have a wrong value and the data wouldn't be read. --- tests/benchmarks/corelib/tools/qstring/main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 0074a2e..b2d9327 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2205,7 +2205,9 @@ int fromUtf8_sse2_optimised_for_ascii(ushort *qch, const char *chars, int len) // UTF-8 character found // which one? counter += bsf_nonzero(highbytes); + len += 16; extract_utf8_multibyte<false>(dst, chars, counter, len); + len -= 16; } len += 16; @@ -2252,7 +2254,9 @@ int fromUtf8_sse2_trusted_no_bom(ushort *qch, const char *chars, int len) // UTF-8 character found // which one? counter += bsf_nonzero(highbytes); + len += 16; extract_utf8_multibyte<true>(dst, chars, counter, len); + len -= 16; } len += 16; -- cgit v0.12 From 81c6166d9c92822dce40181becf27a10c89fc41c Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 15:28:03 +0100 Subject: Update the data files for the QString benchmark test Also add the Neon build flags --- .../corelib/tools/qstring/fromlatin1.cpp | 43155 ++++++++++++++++++- .../benchmarks/corelib/tools/qstring/fromutf8.cpp | 28567 ++++++++++++ tests/benchmarks/corelib/tools/qstring/qstring.pro | 3 +- 3 files changed, 71512 insertions(+), 213 deletions(-) create mode 100644 tests/benchmarks/corelib/tools/qstring/fromutf8.cpp diff --git a/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp b/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp index 63fcc01..9a44b26 100644 --- a/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp +++ b/tests/benchmarks/corelib/tools/qstring/fromlatin1.cpp @@ -4,331 +4,43062 @@ static const char charData[] __attribute__((aligned(64))) = { // #0 - "\377\376\375\374\373\372\371\370" - ":/qt/etc/qt.conf" - "\377\376\375\374\373\372\371\370" // 32 + "\377\376\375\374\373\372\371\370\367\366" + "org.kde.StatusNotifierWatcher" + "\377\376\375\374\373\372\371\370\367" // 48+ // #1 - "\377\376\375\374\373\372\371\370" - "nb_NO.UTF-8" - "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64 + "\377" + "|/|" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 64 // #2 - "\377\376\375\374\373\372\371\370" - "/proc/%1/exe" - "\377\376\375\374\373\372\371\370\367\366\365\364" // 96+ + "\377\376\375\374\373" + "$[" + "\377\376\375\374\373\372\371\370\367" // 80 // #3 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 112 + "\377\376\375\374\373" + "]" + "\377\376\375\374\373\372\371\370\367\366" // 96 // #4 - "\377\376\375\374\373\372\371\370\367\366\365\364" - "qt.conf" - "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 144 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "LC_SCRIPTS" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 160+ // #5 "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 160 + "en_US" + "\377\376\375\374\373\372\371" // 176 // #6 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 176 + "\377\376" + "http://" + "\377\376\375\374\373\372\371" // 192 // #7 - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" - "/usr/lib/qt4/plugins:/home/tmacieir/.kde/lib/kde4/plugins/:/home/tmacieir/KDE4/lib/kde4/plugins/:/usr/lib/kde4/plugins/" - "\377\376\375\374\373\372\371\370\367" // 320+ + "\377\376" + "kde.org" + "\377\376\375\374\373\372\371" // 208 // #8 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 336 + "\377\376\375\374\373\372\371\370" + "tools-report-bug" + "\377\376\375\374\373\372\371\370" // 240 // #9 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 352 + "\377" + "/.krcdirs" + "\377\376\375\374\373\372" // 256 // #10 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 368 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ".kde" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 288 // #11 - "\377\376\375\374" - "*" - "\377\376\375\374\373\372\371\370\367\366\365" // 384 + "\377" + "/.config/" + "\377\376\375\374\373\372" // 304 // #12 - "\377\376\375\374\373" - "trolltech.com" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 416+ + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 336 // #13 - "\377\376\375" - "Trolltech" - "\377\376\375\374" // 432 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 368 // #14 "\377\376\375\374\373\372\371\370\367\366\365\364\363" - "TeamBuilder Client" - "\377" // 464 + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 400 // #15 - "\377\376\375\374\373\372\371" - "0.0.0.0" - "\377\376" // 480 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 432 // #16 "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 496 + "/.local/share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 464 // #17 - "\377\376\375\374\373\372\371\370" - "Unknown error" - "\377\376\375\374\373\372\371\370\367\366\365" // 528 + "\377\376" + "lib/" + "\377\376\375\374\373\372\371\370\367\366" // 480 // #18 - "\377\376\375\374\373\372\371\370\367" - "127.0.0.1" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 560 + "\377\376\375\374\373" + "share/apps" + "\377" // 496 // #19 "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 576 + "share/doc/HTML" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 528 // #20 - "\377\376\375" - "::1" - "\377\376\375\374\373\372\371\370\367\366" // 592 + "\377\376\375\374\373\372\371\370\367" + "share/icons" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 560 // #21 - "\377\376\375\374\373\372\371" - ":" - "\377\376\375\374\373\372\371\370" // 608 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "share/config" + "\377\376\375\374\373\372\371\370" // 608+ // #22 - "\377\376\375\374\373\372\371\370\367" - "::" - "\377\376\375\374\373" // 624 + "share/pixmaps" + "\377\376\375" // 624 // #23 - "lo" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 640 + "\377\376\375" + "share/applnk" + "\377" // 640 // #24 - "\377\376\375\374\373\372\371\370\367\366\365\364" - "eth0" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 672 + "\377\376\375\374\373\372" + "share/sounds" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 672+ // #25 - "\377\376\375\374\373\372\371\370" - "eth1" - "\377\376\375\374" // 688 + "\377\376\375\374\373\372\371\370\367\366" + "share/locale" + "\377\376\375\374\373\372\371\370\367\366" // 704 // #26 - "\377\376\375\374" - "vboxnet0" - "\377\376\375\374" // 704 + "share/kde4/services" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 736 // #27 - "\377\376\375\374\373\372\371\370\367\366" - "." - "\377\376\375\374\373" // 720 + "\377" + "share/kde4/servicetypes" + "\377\376\375\374\373\372\371\370" // 768 // #28 - "\377\376\375\374\373\372\371\370\367\366\365\364\363" - "." - "\377\376" // 736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "share/mimelnk" + "\377\376\375\374\373" // 800 // #29 - "." - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 752 + "cgi-bin" + "\377\376\375\374\373\372\371\370\367" // 816 // #30 - "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 768 + "\377\376" + "share/wallpapers" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 848 // #31 - "\377\376\375\374\373\372\371\370\367" - "127.0.0.1" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 800 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/templates" + "\377\376\375\374" // 880 // #32 - "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 816 + "\377" + "bin" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 896 // #33 - "\377\376\375" - "::1" - "\377\376\375\374\373\372\371\370\367\366" // 832 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%lib/kde4" + "\377\376\375\374\373\372\371\370\367\366\365" // 928+ // #34 - "\377\376\375\374\373\372\371" - ":" - "\377\376\375\374\373\372\371\370" // 848 + "%lib/kde4/plugins" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 960 // #35 - "\377\376\375\374\373\372\371\370\367" - "::" - "\377\376\375\374\373" // 864 + "\377\376\375\374\373\372\371" + "share/config.kcfg" + "\377\376\375\374\373\372\371\370" // 992 // #36 - "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 880 + "\377\376\375" + "share/emoticons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 1024 // #37 - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" - "Unknown error" - "\377\376\375\374\373\372\371" // 928+ + "applications" + "\377\376\375\374" // 1040 // #38 - "\377\376\375\374\373\372\371\370" - "Unknown error" - "\377\376\375\374\373\372\371\370\367\366\365" // 960 + "\377\376\375\374\373\372\371\370\367\366" + "icons" + "\377" // 1056 // #39 - "\377\376\375\374\373\372\371\370\367" - "127.0.0.1" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "pixmaps" + "\377\376\375\374\373\372\371\370\367\366" // 1088 // #40 - "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 1008 + "\377\376\375\374" + "desktop-directories" + "\377\376\375\374\373\372\371\370\367" // 1120 // #41 - "\377\376\375" - "::1" - "\377\376\375\374\373\372\371\370\367\366" // 1024 + "\377\376\375\374\373\372\371\370\367" + "mime" + "\377\376\375" // 1136 // #42 - "\377\376\375\374\373\372\371" - ":" - "\377\376\375\374\373\372\371\370" // 1040 + "\377\376" + "menus" + "\377\376\375\374\373\372\371\370\367" // 1152 // #43 - "\377\376\375\374\373\372\371\370\367" - "::" - "\377\376\375\374\373" // 1056 + "\377\376\375\374\373\372\371\370\367\366" + "autostart" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 1184 // #44 - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" - "Invalid socket descriptor" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 1136+ + "\377\376\375\374" + "kde4/libexec" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 1216 // #45 - "\377\376\375\374\373\372\371\370\367" - "127.0.0.1" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 1168 + "\377\376\375\374\373\372\371\370" + "lib" + "\377\376\375\374\373" // 1232 // #46 - "\377\376\375\374\373" - "." - "\377\376\375\374\373\372\371\370\367\366" // 1184 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 1248 // #47 - "\377\376\375" - "::1" - "\377\376\375\374\373\372\371\370\367\366" // 1200 + "\377\376\375\374\373\372" + "xdgconf-autostart" + "\377\376\375\374\373\372\371\370\367" // 1280 // #48 - "\377\376\375\374\373\372\371" - ":" - "\377\376\375\374\373\372\371\370" // 1216 + "\377\376\375\374\373\372\371\370" + "share/autostart" + "\377\376\375\374\373\372\371\370\367" // 1312 // #49 - "\377\376\375\374\373\372\371\370\367" - "::" - "\377\376\375\374\373" // 1232 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "data" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 1344 // #50 - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304" - "The remote host closed the connection" - "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 1344+ + "\377\376\375\374" + "kdeglobals" + "\377\376" // 1360 + + // #51 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 1376 + + // #52 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1392 + + // #53 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 1408 + + // #54 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1424 + + // #55 + "\377" + ":/qt/etc/qt.conf" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 1456 + + // #56 + "\377\376\375\374\373\372\371\370" + "nb_NO.UTF-8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 1488 + + // #57 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1504 + + // #58 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "/usr/lib/qt4/plugins:/home/tmacieir/.kde/lib/kde4/plugins/:/home/tmacieir/KDE4/lib/kde4/plugins/:/usr/lib/kde4/plugins/" + "\377\376\375\374\373\372\371\370\367" // 1664+ + + // #59 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1680 + + // #60 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1696 + + // #61 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1712 + + // #62 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1728 + + // #63 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1744 + + // #64 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1760 + + // #65 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1776 + + // #66 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 1792 + + // #67 + "\377\376\375\374" + "rc" + "\377\376\375\374\373\372\371\370\367\366" // 1808 + + // #68 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 1824 + + // #69 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 1840 + + // #70 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 1856 + + // #71 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 1872 + + // #72 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 1904 + + // #73 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 1920 + + // #74 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 1936 + + // #75 + "\377\376\375\374\373\372\371\370" + "Directories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 1968 + + // #76 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "default" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2016+ + + // #77 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335" + "Directories-%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2080+ + + // #78 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 2112 + + // #79 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 2128 + + // #80 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 2160 + + // #81 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 2176 + + // #82 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 2192 + + // #83 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 2208 + + // #84 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 2224 + + // #85 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 2256 + + // #86 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 2272 + + // #87 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 2288 + + // #88 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 2304 + + // #89 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 2320 + + // #90 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "/proc/%1/exe" + "\377\376\375\374\373\372\371\370" // 2352 + + // #91 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 2368 + + // #92 + "imsw-multi" + "\377\376\375\374\373\372" // 2384 + + // #93 + "\377\376\375\374\373\372\371\370\367\366\365" + "/proc/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2416 + + // #94 + "\377\376\375" + "/cmdline" + "\377\376\375\374\373" // 2432 + + // #95 + "\377\376\375\374\373\372\371\370" + ":0" + "\377\376\375\374\373\372" // 2448 + + // #96 + "\377\376\375\374\373\372\371\370\367\366\365" + "Xrandr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2480 + + // #97 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 2496 + + // #98 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 2512 + + // #99 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXfixes" + "\377\376\375\374\373\372\371\370" // 2544 + + // #100 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 2560 + + // #101 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 2576 + + // #102 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315" + "Cannot load library %1: %2" + "\377\376\375" // 2656+ + + // #103 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXfixes" + "\377\376\375\374\373\372\371\370" // 2688 + + // #104 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 2704 + + // #105 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".so" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 2736 + + // #106 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXfixes" + "\377\376\375\374\373\372\371\370" // 2768 + + // #107 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXfixes" + "\377\376\375\374\373\372\371\370" // 2800 + + // #108 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXfixes" + "\377\376\375\374\373\372\371\370" // 2832 + + // #109 + "\377\376\375\374\373\372\371\370\367\366\365" + "Xcursor" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 2864 + + // #110 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 2880 + + // #111 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 2896 + + // #112 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Xinerama" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 2928 + + // #113 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 2944 + + // #114 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 2960 + + // #115 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 2992 + + // #116 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 3008 + + // #117 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 3024 + + // #118 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315" + "Cannot load library %1: %2" + "\377\376\375" // 3104+ + + // #119 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 3136 + + // #120 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 3152 + + // #121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".so" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 3184 + + // #122 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 3216 + + // #123 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 3248 + + // #124 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 3280 + + // #125 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "libXi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 3312 + + // #126 + "\377\376" + "Trolltech" + "\377\376\375\374\373" // 3328 + + // #127 + "\377\376\375\374\373\372\371\370\367" + ".conf" + "\377\376" // 3344 + + // #128 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311" + "No such file or directory" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 3440+ + + // #129 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Qt" + "\377\376" // 3456 + + // #130 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Palette/active" + "\377\376\375" // 3488 + + // #131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Palette/inactive" + "\377\376" // 3520 + + // #132 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Palette/disabled" + "\377" // 3552 + + // #133 + "\377\376\375\374\373\372\371" + "Helvetica" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 3584 + + // #134 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 3600 + + // #135 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "/.kde" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 3680+ + + // #136 + "\377\376\375" + ".kde4" + "\377\376\375\374\373\372\371\370" // 3696 + + // #137 + "\377\376\375\374\373\372\371\370\367" + "/.kde4" + "\377" // 3712 + + // #138 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".ini" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 3744 + + // #139 + "\377\376\375" + "font" + "\377\376\375\374\373\372\371\370\367" // 3760 + + // #140 + "\377\376\375\374\373\372\371\370" + "," + "\377\376\375\374\373\372\371" // 3776 + + // #141 + "\377\376\375" + "font" + "\377\376\375\374\373\372\371\370\367" // 3792 + + // #142 + "\377\376\375\374\373\372\371\370\367\366" + "%1.%2/libraryPath" + "\377\376\375\374\373" // 3824 + + // #143 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "style" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3872+ + + // #144 + "\377\376" + "doubleClickInterval" + "\377\376\375\374\373\372\371\370\367\366\365" // 3904 + + // #145 + "\377\376\375\374\373\372" + "cursorFlashTime" + "\377\376\375\374\373\372\371\370\367\366\365" // 3936 + + // #146 + "\377\376\375\374\373\372" + "wheelScrollLines" + "\377\376\375\374\373\372\371\370\367\366" // 3968 + + // #147 + "\377\376\375\374\373\372\371" + "default" + "\377\376" // 3984 + + // #148 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "colorSpec" + "\377\376\375\374\373\372\371\370" // 4064+ + + // #149 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 4096 + + // #150 + "\377" + "defaultCodec" + "\377\376\375" // 4112 + + // #151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "globalStrut/width" + "\377" // 4144 + + // #152 + "globalStrut/height" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 4176 + + // #153 + "\377\376\375" + "GUIEffects" + "\377\376\375" // 4192 + + // #154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "general" + "\377\376\375\374\373\372\371\370\367\366\365" // 4224 + + // #155 + "\377\376\375\374\373\372" + "animatemenu" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4256 + + // #156 + "\377\376" + "fademenu" + "\377\376\375\374\373\372" // 4272 + + // #157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "animatecombo" + "\377\376\375\374\373\372\371\370\367" // 4320+ + + // #158 + "\377\376\375\374\373\372\371\370" + "animatetooltip" + "\377\376\375\374\373\372\371\370\367\366" // 4352 + + // #159 + "\377\376\375\374\373\372\371" + "fadetooltip" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 4384 + + // #160 + "\377\376\375" + "animatetoolbox" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4416 + + // #161 + "\377\376\375\374\373" + "useRtlExtensions" + "\377\376\375\374\373\372\371\370\367\366\365" // 4448 + + // #162 + "\377\376\375\374\373\372" + "on the spot" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4480 + + // #163 + "\377\376" + "XIMInputStyle" + "\377" // 4496 + + // #164 + "\377" + "xim" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 4512 + + // #165 + "\377\376\375" + "/inputmethods" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 4544 + + // #166 + "Trolltech" + "\377\376\375\374\373\372\371" // 4560 + + // #167 + "\377\376\375\374\373\372\371\370\367" + ".conf" + "\377\376" // 4576 + + // #168 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 4592 + + // #169 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 4608 + + // #170 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 4624 + + // #171 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 4640 + + // #172 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 4656 + + // #173 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 4672 + + // #174 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 4704 + + // #175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "com.trolltech.Qt.QInputContextFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366" // 4800+ + + // #176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 4848 + + // #177 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4896 + + // #178 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 4912 + + // #179 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 4928 + + // #180 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 4944 + + // #181 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 4960 + + // #182 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 4976 + + // #183 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 4992 + + // #184 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 5024 + + // #185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "com.trolltech.Qt.QInputContextFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366" // 5120+ + + // #186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 5168 + + // #187 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5184 + + // #188 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5200 + + // #189 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5216 + + // #190 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5232 + + // #191 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5248 + + // #192 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5264 + + // #193 + "\377\376\375\374\373\372\371\370\367\366\365" + "xim" + "\377\376" // 5280 + + // #194 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DefaultInputMethod" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5328 + + // #195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "*Emacs*font:\11""-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1\12""" + "\377\376\375\374\373\372\371\370\367\366\365" // 5472+ + + // #196 + "\377\376\375\374" + "/styles" + "\377\376\375\374\373" // 5488 + + // #197 + "Trolltech" + "\377\376\375\374\373\372\371" // 5504 + + // #198 + "\377\376\375\374\373\372\371\370\367" + ".conf" + "\377\376" // 5520 + + // #199 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311" + "No such file or directory" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 5616+ + + // #200 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5632 + + // #201 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5648 + + // #202 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5664 + + // #203 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5680 + + // #204 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5696 + + // #205 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 5712 + + // #206 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 5728 + + // #207 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 5744 + + // #208 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 5776 + + // #209 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "com.trolltech.Qt.QStyleFactoryInterface" + "\377\376\375\374\373\372\371\370\367" // 5872+ + + // #210 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 5920 + + // #211 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 5936 + + // #212 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5952 + + // #213 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 5968 + + // #214 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 5984 + + // #215 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 6000 + + // #216 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 6016 + + // #217 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 6048 + + // #218 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QStyleFactoryInterface" + "\377\376\375\374\373\372\371\370\367" // 6128+ + + // #219 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 6176 + + // #220 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 6192 + + // #221 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 6208 + + // #222 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 6240 + + // #223 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QStyleFactoryInterface" + "\377\376\375\374\373\372\371\370\367" // 6320+ + + // #224 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 6368 + + // #225 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 6384 + + // #226 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 6400 + + // #227 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 6416 + + // #228 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 6432 + + // #229 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 6448 + + // #230 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 6464 + + // #231 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 6496 + + // #232 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QStyleFactoryInterface" + "\377\376\375\374\373\372\371\370\367" // 6576+ + + // #233 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 6624 + + // #234 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 6640 + + // #235 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 6656 + + // #236 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 6688 + + // #237 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QStyleFactoryInterface" + "\377\376\375\374\373\372\371\370\367" // 6768+ + + // #238 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 6816 + + // #239 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 6832 + + // #240 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 6848 + + // #241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6880 + + // #242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336" + "HorizontalOffset" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 6944+ + + // #243 + "\377\376\375" + "VerticalOffset" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6976 + + // #244 + "\377\376" + "InnerColor" + "\377\376\375\374" // 6992 + + // #245 + "OuterColor" + "\377\376\375\374\373\372" // 7008 + + // #246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "UseOuterColor" + "\377\376\375\374\373\372" // 7040 + + // #247 + "\377\376\375\374\373\372\371\370\367\366\365" + "AnimationsDuration" + "\377\376\375" // 7072 + + // #248 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "ShadowCacheMode" + "\377\376\375" // 7136+ + + // #249 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ShadowMode" + "\377\376\375\374\373\372\371\370" // 7168 + + // #250 + "\377\376\375\374\373\372\371\370\367" + "UseDropShadows" + "\377\376\375\374\373\372\371\370\367" // 7200 + + // #251 + "\377\376\375\374\373\372\371\370" + "UseOxygenShadows" + "\377\376\375\374\373\372\371\370" // 7232 + + // #252 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7264 + + // #253 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336" + "HorizontalOffset" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 7328+ + + // #254 + "\377\376\375" + "VerticalOffset" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7360 + + // #255 + "\377\376" + "InnerColor" + "\377\376\375\374" // 7376 + + // #256 + "OuterColor" + "\377\376\375\374\373\372" // 7392 + + // #257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "UseOuterColor" + "\377\376\375\374\373\372" // 7424 + + // #258 + "\377\376\375\374\373\372\371\370\367\366\365" + "AnimationsDuration" + "\377\376\375" // 7456 + + // #259 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "ShadowCacheMode" + "\377\376\375" // 7520+ + + // #260 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ShadowMode" + "\377\376\375\374\373\372\371\370" // 7552 + + // #261 + "\377\376\375\374\373\372\371\370\367" + "UseDropShadows" + "\377\376\375\374\373\372\371\370\367" // 7584 + + // #262 + "\377\376\375\374\373\372\371\370" + "UseOxygenShadows" + "\377\376\375\374\373\372\371\370" // 7616 + + // #263 + "\377\376" + "http://" + "\377\376\375\374\373\372\371" // 7632 + + // #264 + "\377\376" + "kde.org" + "\377\376\375\374\373\372\371" // 7648 + + // #265 + "\377" + "/.krcdirs" + "\377\376\375\374\373\372" // 7664 + + // #266 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ".kde" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7696 + + // #267 + "\377" + "/.config/" + "\377\376\375\374\373\372" // 7712 + + // #268 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7744 + + // #269 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7776 + + // #270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7808 + + // #271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7840 + + // #272 + "\377\376\375\374\373" + "/.local/share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7872 + + // #273 + "\377\376" + "lib/" + "\377\376\375\374\373\372\371\370\367\366" // 7888 + + // #274 + "\377\376\375\374\373" + "share/apps" + "\377" // 7904 + + // #275 + "\377\376\375\374\373" + "share/doc/HTML" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 7936 + + // #276 + "\377\376\375\374\373\372\371\370\367" + "share/icons" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 7968 + + // #277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324" + "share/config" + "\377\376\375\374\373\372\371\370" // 8032+ + + // #278 + "share/pixmaps" + "\377\376\375" // 8048 + + // #279 + "\377\376\375" + "share/applnk" + "\377" // 8064 + + // #280 + "\377\376\375\374\373\372" + "share/sounds" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 8096+ + + // #281 + "\377\376\375\374\373\372\371\370\367\366" + "share/locale" + "\377\376\375\374\373\372\371\370\367\366" // 8128 + + // #282 + "share/kde4/services" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 8160 + + // #283 + "\377" + "share/kde4/servicetypes" + "\377\376\375\374\373\372\371\370" // 8192 + + // #284 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "share/mimelnk" + "\377\376\375\374\373" // 8224 + + // #285 + "cgi-bin" + "\377\376\375\374\373\372\371\370\367" // 8240 + + // #286 + "\377\376" + "share/wallpapers" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 8272 + + // #287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/templates" + "\377\376\375\374" // 8304 + + // #288 + "\377" + "bin" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 8320 + + // #289 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%lib/kde4" + "\377\376\375\374\373\372\371\370\367\366\365" // 8352+ + + // #290 + "%lib/kde4/plugins" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8384 + + // #291 + "\377\376\375\374\373\372\371" + "share/config.kcfg" + "\377\376\375\374\373\372\371\370" // 8416 + + // #292 + "\377\376\375" + "share/emoticons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 8448 + + // #293 + "applications" + "\377\376\375\374" // 8464 + + // #294 + "\377\376\375\374\373\372\371\370\367\366" + "icons" + "\377" // 8480 + + // #295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "pixmaps" + "\377\376\375\374\373\372\371\370\367\366" // 8512 + + // #296 + "\377\376\375\374" + "desktop-directories" + "\377\376\375\374\373\372\371\370\367" // 8544 + + // #297 + "\377\376\375\374\373\372\371\370\367" + "mime" + "\377\376\375" // 8560 + + // #298 + "\377\376" + "menus" + "\377\376\375\374\373\372\371\370\367" // 8576 + + // #299 + "\377\376\375\374\373\372\371\370\367\366" + "autostart" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 8608 + + // #300 + "\377\376\375\374" + "kde4/libexec" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 8640 + + // #301 + "\377\376\375\374\373\372\371\370" + "lib" + "\377\376\375\374\373" // 8656 + + // #302 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 8672 + + // #303 + "\377\376\375\374\373\372" + "xdgconf-autostart" + "\377\376\375\374\373\372\371\370\367" // 8704 + + // #304 + "\377\376\375\374\373\372\371\370" + "share/autostart" + "\377\376\375\374\373\372\371\370\367" // 8736 + + // #305 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "data" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 8768 + + // #306 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 8784 + + // #307 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 8800 + + // #308 + "\377\376\375\374" + "rc" + "\377\376\375\374\373\372\371\370\367\366" // 8816 + + // #309 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 8832 + + // #310 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 8848 + + // #311 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 8864 + + // #312 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 8880 + + // #313 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 8912 + + // #314 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 8928 + + // #315 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 8944 + + // #316 + "\377\376\375\374\373\372\371\370" + "Directories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 8976 + + // #317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306" + "default" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9056+ + + // #318 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335" + "Directories-%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9120+ + + // #319 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 9152 + + // #320 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 9168 + + // #321 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 9200 + + // #322 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 9216 + + // #323 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 9232 + + // #324 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 9248 + + // #325 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 9264 + + // #326 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 9296 + + // #327 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9312 + + // #328 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9328 + + // #329 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9344 + + // #330 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9360 + + // #331 + "\377\376\375\374\373\372\371\370" + "7" + "\377\376\375\374\373\372\371" // 9376 + + // #332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9408 + + // #333 + "contrast" + "\377\376\375\374\373\372\371\370" // 9424 + + // #334 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 9520+ + + // #335 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 9600+ + + // #336 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "kdebugrc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 9632 + + // #337 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 9648 + + // #338 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 9664 + + // #339 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9680 + + // #340 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9696 + + // #341 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9712 + + // #342 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 9728 + + // #343 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 9744 + + // #344 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 9760 + + // #345 + "\377\376\375\374\373" + "DisableAll" + "\377" // 9776 + + // #346 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 9840+ + + // #347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 9920+ + + // #348 + "InfoOutput" + "\377\376\375\374\373\372" // 9936 + + // #349 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "Enter" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 10016+ + + // #350 + "\377\376\375\374\373\372\371\370\367\366" + "Leave" + "\377" // 10032 + + // #351 + "HoverMove" + "\377\376\375\374\373\372\371" // 10048 + + // #352 + "\377\376\375\374\373\372\371\370\367\366" + "HoverEnter" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 10080+ + + // #353 + "\377\376\375\374\373" + "HoverLeave" + "\377" // 10096 + + // #354 + "\377\376\375\374" + "MouseMove" + "\377\376\375" // 10112 + + // #355 + "MouseButtonPress" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 10144 + + // #356 + "\377" + "MouseButtonRelease" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 10176 + + // #357 + "FocusIn" + "\377\376\375\374\373\372\371\370\367" // 10192 + + // #358 + "\377\376\375\374\373\372\371\370" + "FocusOut" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 10224 + + // #359 + "\377\376\375" + "CE_CapacityBar" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 10256 + + // #360 + "\377\376" + "CE_" + "\377\376\375\374\373\372\371\370\367\366\365" // 10272 + + // #361 + "\377\376\375\374\373\372\371\370" + "qt_default_session_bus" + "\377\376" // 10304 + + // #362 + "\377\376\375\374" + "dbus-1" + "\377\376\375\374\373\372" // 10320 + + // #363 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 10336 + + // #364 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 10352 + + // #365 + "\377\376\375\374\373\372\371\370\367" + "org.freedesktop.DBus" + "\377\376\375" // 10384 + + // #366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304" + "NameAcquired:org.freedesktop.DBus" + "\377\376\375" // 10480+ + + // #367 + "\377" + "NameLost:org.freedesktop.DBus" + "\377\376" // 10512 + + // #368 + "\377\376\375\374\373\372\371\370\367" + "/org/freedesktop/DBus" + "\377\376" // 10544 + + // #369 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "org.freedesktop.DBus" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 10608+ + + // #370 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "org.freedesktop.DBus" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 10672+ + + // #371 + "\377\376" + "NameOwnerChanged" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 10704 + + // #372 + "\377\376\375" + "org.freedesktop.DBus" + "\377\376\375\374\373\372\371\370\367" // 10736 + + // #373 + "\377\376\375" + "org.freedesktop.DBus" + "\377\376\375\374\373\372\371\370\367" // 10768 + + // #374 + "\377" + "type='signal'," + "\377" // 10784 + + // #375 + "%1='%2'," + "\377\376\375\374\373\372\371\370" // 10800 + + // #376 + "\377\376\375\374\373\372\371\370\367" + "sender" + "\377" // 10816 + + // #377 + "\377\376\375\374\373" + "interface" + "\377\376" // 10832 + + // #378 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "member" + "\377\376\375\374\373\372\371\370\367\366\365" // 10864 + + // #379 + "\377\376\375\374\373\372" + "arg%1='%2'," + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 10896 + + // #380 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312" + "reparseConfiguration" + "\377\376\375\374\373\372" // 10976+ + + // #381 + "\377\376\375\374\373\372\371\370\367\366\365" + "org.kde.Oxygen.Style" + "\377" // 11008 + + // #382 + "/OxygenStyle" + "\377\376\375\374" // 11024 + + // #383 + "\377" + "type='signal'," + "\377" // 11040 + + // #384 + "%1='%2'," + "\377\376\375\374\373\372\371\370" // 11056 + + // #385 + "path" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 11072 + + // #386 + "\377\376\375\374\373" + "interface" + "\377\376" // 11088 + + // #387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "member" + "\377\376\375\374\373\372\371\370\367\366\365" // 11120 + + // #388 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "notifyChange" + "\377\376\375\374\373\372\371" // 11152 + + // #389 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306" + "org.kde.KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11248+ + + // #390 + "\377\376" + "/KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 11280 + + // #391 + "\377" + "type='signal'," + "\377" // 11296 + + // #392 + "%1='%2'," + "\377\376\375\374\373\372\371\370" // 11312 + + // #393 + "path" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 11328 + + // #394 + "\377\376\375\374\373" + "interface" + "\377\376" // 11344 + + // #395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "member" + "\377\376\375\374\373\372\371\370\367\366\365" // 11376 + + // #396 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 11392 + + // #397 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 11424 + + // #398 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 11440 + + // #399 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 11456 + + // #400 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 11472 + + // #401 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 11488 + + // #402 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11504 + + // #403 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11536 + + // #404 + "contrast" + "\377\376\375\374\373\372\371\370" // 11552 + + // #405 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 11632+ + + // #406 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 11712+ + + // #407 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11728 + + // #408 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11760 + + // #409 + "contrast" + "\377\376\375\374\373\372\371\370" // 11776 + + // #410 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 11824+ + + // #411 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 11904+ + + // #412 + "255,255,255" + "\377\376\375\374\373" // 11920 + + // #413 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 11936 + + // #414 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 12000+ + + // #415 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 12080+ + + // #416 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 12160+ + + // #417 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 12192+ + + // #418 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 12208 + + // #419 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 12240 + + // #420 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 12336+ + + // #421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 12416+ + + // #422 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 12432 + + // #423 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 12448 + + // #424 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12480 + + // #425 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 12528+ + + // #426 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 12608+ + + // #427 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 12640 + + // #428 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 12656 + + // #429 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 12688 + + // #430 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 12784+ + + // #431 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 12864+ + + // #432 + "255,128,224" + "\377\376\375\374\373" // 12880 + + // #433 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 12896 + + // #434 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 12960+ + + // #435 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 13040+ + + // #436 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 13120+ + + // #437 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 13152 + + // #438 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 13168 + + // #439 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 13200 + + // #440 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 13296+ + + // #441 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 13376+ + + // #442 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13408+ + + // #443 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 13424 + + // #444 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 13456 + + // #445 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 13552+ + + // #446 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 13632+ + + // #447 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 13648 + + // #448 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 13664 + + // #449 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 13696 + + // #450 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 13744+ + + // #451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 13824+ + + // #452 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13856+ + + // #453 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 13872 + + // #454 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 13920+ + + // #455 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 14000+ + + // #456 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 14080+ + + // #457 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 14112 + + // #458 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 14128 + + // #459 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 14160 + + // #460 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 14256+ + + // #461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 14336+ + + // #462 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 14368 + + // #463 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 14384 + + // #464 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 14416 + + // #465 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 14512+ + + // #466 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 14592+ + + // #467 + "43,116,199" + "\377\376\375\374\373\372" // 14608 + + // #468 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 14624 + + // #469 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 14656 + + // #470 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 14704+ + + // #471 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 14784+ + + // #472 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14800 + + // #473 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14832 + + // #474 + "contrast" + "\377\376\375\374\373\372\371\370" // 14848 + + // #475 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 14896+ + + // #476 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 14976+ + + // #477 + "255,255,255" + "\377\376\375\374\373" // 14992 + + // #478 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 15008 + + // #479 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 15072+ + + // #480 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 15152+ + + // #481 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 15232+ + + // #482 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 15264+ + + // #483 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 15280 + + // #484 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 15312 + + // #485 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 15408+ + + // #486 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 15488+ + + // #487 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 15504 + + // #488 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 15520 + + // #489 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15552 + + // #490 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 15600+ + + // #491 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 15680+ + + // #492 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 15712 + + // #493 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 15728 + + // #494 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 15760 + + // #495 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 15856+ + + // #496 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 15936+ + + // #497 + "255,128,224" + "\377\376\375\374\373" // 15952 + + // #498 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 15968 + + // #499 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 16032+ + + // #500 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 16112+ + + // #501 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 16192+ + + // #502 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 16224 + + // #503 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 16240 + + // #504 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 16272 + + // #505 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 16368+ + + // #506 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 16448+ + + // #507 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16480+ + + // #508 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 16496 + + // #509 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 16528 + + // #510 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 16624+ + + // #511 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 16704+ + + // #512 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 16720 + + // #513 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 16736 + + // #514 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 16768 + + // #515 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 16816+ + + // #516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 16896+ + + // #517 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16928+ + + // #518 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 16944 + + // #519 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 16992+ + + // #520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 17072+ + + // #521 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 17152+ + + // #522 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 17184 + + // #523 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 17200 + + // #524 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 17232 + + // #525 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 17328+ + + // #526 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 17408+ + + // #527 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 17440 + + // #528 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 17456 + + // #529 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 17488 + + // #530 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 17584+ + + // #531 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 17664+ + + // #532 + "43,116,199" + "\377\376\375\374\373\372" // 17680 + + // #533 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 17696 + + // #534 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 17728 + + // #535 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 17776+ + + // #536 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 17856+ + + // #537 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 17888 + + // #538 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17904 + + // #539 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17936 + + // #540 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 18016+ + + // #541 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 18096+ + + // #542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 18176+ + + // #543 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 18192 + + // #544 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 18224 + + // #545 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 18256 + + // #546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 18352+ + + // #547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 18432+ + + // #548 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 18448 + + // #549 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 18480 + + // #550 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 18512 + + // #551 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 18608+ + + // #552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 18688+ + + // #553 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 18704 + + // #554 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 18736 + + // #555 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 18768 + + // #556 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 18864+ + + // #557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 18944+ + + // #558 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 18960 + + // #559 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 18992 + + // #560 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 19040+ + + // #561 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 19120+ + + // #562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 19200+ + + // #563 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 19216 + + // #564 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 19248 + + // #565 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 19280 + + // #566 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 19376+ + + // #567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 19456+ + + // #568 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 19472 + + // #569 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 19504 + + // #570 + "contrast" + "\377\376\375\374\373\372\371\370" // 19520 + + // #571 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 19568+ + + // #572 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 19648+ + + // #573 + "255,255,255" + "\377\376\375\374\373" // 19664 + + // #574 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 19680 + + // #575 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 19744+ + + // #576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 19824+ + + // #577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 19904+ + + // #578 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 19936+ + + // #579 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 19952 + + // #580 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 19984 + + // #581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 20080+ + + // #582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 20160+ + + // #583 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 20176 + + // #584 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 20192 + + // #585 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20224 + + // #586 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 20272+ + + // #587 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 20352+ + + // #588 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 20384 + + // #589 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 20400 + + // #590 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 20432 + + // #591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 20528+ + + // #592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 20608+ + + // #593 + "255,128,224" + "\377\376\375\374\373" // 20624 + + // #594 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 20640 + + // #595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 20704+ + + // #596 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 20784+ + + // #597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 20864+ + + // #598 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 20896 + + // #599 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 20912 + + // #600 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 20944 + + // #601 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 21040+ + + // #602 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 21120+ + + // #603 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21152+ + + // #604 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 21168 + + // #605 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 21200 + + // #606 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 21296+ + + // #607 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 21376+ + + // #608 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 21392 + + // #609 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 21408 + + // #610 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 21440 + + // #611 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 21488+ + + // #612 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 21568+ + + // #613 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21600+ + + // #614 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 21616 + + // #615 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 21664+ + + // #616 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 21744+ + + // #617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 21824+ + + // #618 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 21856 + + // #619 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 21872 + + // #620 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 21904 + + // #621 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 22000+ + + // #622 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 22080+ + + // #623 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 22112 + + // #624 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 22128 + + // #625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 22160 + + // #626 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 22256+ + + // #627 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 22336+ + + // #628 + "43,116,199" + "\377\376\375\374\373\372" // 22352 + + // #629 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 22368 + + // #630 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 22400 + + // #631 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 22448+ + + // #632 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 22528+ + + // #633 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 22576 + + // #634 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 22592 + + // #635 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 22608 + + // #636 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 22624 + + // #637 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 22704+ + + // #638 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 22784+ + + // #639 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 22800 + + // #640 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22832 + + // #641 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 22880+ + + // #642 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 22960+ + + // #643 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 23040+ + + // #644 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23056 + + // #645 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23088 + + // #646 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 23120 + + // #647 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 23216+ + + // #648 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 23296+ + + // #649 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23312 + + // #650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23344 + + // #651 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 23376 + + // #652 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 23472+ + + // #653 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 23552+ + + // #654 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23568 + + // #655 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 23600 + + // #656 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 23632 + + // #657 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 23728+ + + // #658 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 23808+ + + // #659 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 23824 + + // #660 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 23856 + + // #661 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23904+ + + // #662 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 23984+ + + // #663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 24064+ + + // #664 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 24080 + + // #665 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 24112 + + // #666 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 24144 + + // #667 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 24240+ + + // #668 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 24320+ + + // #669 + "\377\376\375\374\373\372\371\370" + "112,111,110" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 24352 + + // #670 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 24368 + + // #671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 24400 + + // #672 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 24496+ + + // #673 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 24576+ + + // #674 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 24592 + + // #675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 24624 + + // #676 + "contrast" + "\377\376\375\374\373\372\371\370" // 24640 + + // #677 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 24688+ + + // #678 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 24768+ + + // #679 + "255,255,255" + "\377\376\375\374\373" // 24784 + + // #680 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 24800 + + // #681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 24864+ + + // #682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 24944+ + + // #683 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 25024+ + + // #684 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 25056+ + + // #685 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 25072 + + // #686 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 25104 + + // #687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 25200+ + + // #688 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 25280+ + + // #689 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 25296 + + // #690 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 25312 + + // #691 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 25344 + + // #692 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 25392+ + + // #693 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 25472+ + + // #694 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 25504 + + // #695 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 25520 + + // #696 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 25552 + + // #697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 25648+ + + // #698 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 25728+ + + // #699 + "255,128,224" + "\377\376\375\374\373" // 25744 + + // #700 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 25760 + + // #701 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 25824+ + + // #702 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 25904+ + + // #703 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 25984+ + + // #704 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 26016 + + // #705 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 26032 + + // #706 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 26064 + + // #707 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 26160+ + + // #708 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 26240+ + + // #709 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 26272+ + + // #710 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 26288 + + // #711 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 26320 + + // #712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 26416+ + + // #713 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 26496+ + + // #714 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 26512 + + // #715 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 26528 + + // #716 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 26560 + + // #717 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 26608+ + + // #718 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 26688+ + + // #719 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 26720+ + + // #720 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 26736 + + // #721 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 26784+ + + // #722 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 26864+ + + // #723 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 26944+ + + // #724 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 26976 + + // #725 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 26992 + + // #726 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 27024 + + // #727 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 27120+ + + // #728 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 27200+ + + // #729 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27232 + + // #730 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 27248 + + // #731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 27280 + + // #732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 27376+ + + // #733 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 27456+ + + // #734 + "43,116,199" + "\377\376\375\374\373\372" // 27472 + + // #735 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 27488 + + // #736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 27520 + + // #737 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 27568+ + + // #738 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 27648+ + + // #739 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 27664 + + // #740 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 27696 + + // #741 + "contrast" + "\377\376\375\374\373\372\371\370" // 27712 + + // #742 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 27760+ + + // #743 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 27840+ + + // #744 + "255,255,255" + "\377\376\375\374\373" // 27856 + + // #745 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 27872 + + // #746 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 27936+ + + // #747 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 28016+ + + // #748 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 28096+ + + // #749 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 28128+ + + // #750 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 28144 + + // #751 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 28176 + + // #752 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 28272+ + + // #753 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 28352+ + + // #754 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 28368 + + // #755 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 28384 + + // #756 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 28416 + + // #757 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 28464+ + + // #758 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 28544+ + + // #759 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 28576 + + // #760 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 28592 + + // #761 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 28624 + + // #762 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 28720+ + + // #763 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 28800+ + + // #764 + "255,128,224" + "\377\376\375\374\373" // 28816 + + // #765 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 28832 + + // #766 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 28896+ + + // #767 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 28976+ + + // #768 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 29056+ + + // #769 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 29088 + + // #770 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 29104 + + // #771 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 29136 + + // #772 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 29232+ + + // #773 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 29312+ + + // #774 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 29344+ + + // #775 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 29360 + + // #776 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 29392 + + // #777 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 29488+ + + // #778 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 29568+ + + // #779 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 29584 + + // #780 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 29600 + + // #781 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 29632 + + // #782 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 29680+ + + // #783 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 29760+ + + // #784 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 29792+ + + // #785 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 29808 + + // #786 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 29856+ + + // #787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 29936+ + + // #788 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 30016+ + + // #789 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 30048 + + // #790 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 30064 + + // #791 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 30096 + + // #792 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 30192+ + + // #793 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 30272+ + + // #794 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30304 + + // #795 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 30320 + + // #796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 30352 + + // #797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 30448+ + + // #798 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 30528+ + + // #799 + "43,116,199" + "\377\376\375\374\373\372" // 30544 + + // #800 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 30560 + + // #801 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 30592 + + // #802 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 30640+ + + // #803 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 30720+ + + // #804 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 30752 + + // #805 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30768 + + // #806 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30800 + + // #807 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 30880+ + + // #808 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 30960+ + + // #809 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 31040+ + + // #810 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 31056 + + // #811 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31088 + + // #812 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 31120 + + // #813 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 31216+ + + // #814 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 31296+ + + // #815 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 31312 + + // #816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31344 + + // #817 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 31376 + + // #818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 31472+ + + // #819 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 31552+ + + // #820 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 31568 + + // #821 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 31600 + + // #822 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 31632 + + // #823 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 31728+ + + // #824 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 31808+ + + // #825 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31824 + + // #826 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 31856 + + // #827 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31904+ + + // #828 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 31984+ + + // #829 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 32064+ + + // #830 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 32080 + + // #831 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 32112 + + // #832 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 32144 + + // #833 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 32240+ + + // #834 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 32320+ + + // #835 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 32336 + + // #836 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 32368 + + // #837 + "contrast" + "\377\376\375\374\373\372\371\370" // 32384 + + // #838 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 32432+ + + // #839 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 32512+ + + // #840 + "255,255,255" + "\377\376\375\374\373" // 32528 + + // #841 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 32544 + + // #842 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 32608+ + + // #843 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 32688+ + + // #844 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 32768+ + + // #845 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 32800+ + + // #846 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 32816 + + // #847 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 32848 + + // #848 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 32944+ + + // #849 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 33024+ + + // #850 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 33040 + + // #851 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 33056 + + // #852 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 33088 + + // #853 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 33136+ + + // #854 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 33216+ + + // #855 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 33248 + + // #856 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 33264 + + // #857 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 33296 + + // #858 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 33392+ + + // #859 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 33472+ + + // #860 + "255,128,224" + "\377\376\375\374\373" // 33488 + + // #861 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 33504 + + // #862 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 33568+ + + // #863 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 33648+ + + // #864 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 33728+ + + // #865 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 33760 + + // #866 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 33776 + + // #867 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 33808 + + // #868 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 33904+ + + // #869 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 33984+ + + // #870 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 34016+ + + // #871 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 34032 + + // #872 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 34064 + + // #873 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 34160+ + + // #874 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 34240+ + + // #875 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 34256 + + // #876 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 34272 + + // #877 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 34304 + + // #878 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 34352+ + + // #879 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 34432+ + + // #880 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 34464+ + + // #881 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 34480 + + // #882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 34528+ + + // #883 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 34608+ + + // #884 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 34688+ + + // #885 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 34720 + + // #886 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 34736 + + // #887 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 34768 + + // #888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 34864+ + + // #889 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 34944+ + + // #890 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 34976 + + // #891 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 34992 + + // #892 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 35024 + + // #893 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 35120+ + + // #894 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 35200+ + + // #895 + "43,116,199" + "\377\376\375\374\373\372" // 35216 + + // #896 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 35232 + + // #897 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 35264 + + // #898 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 35312+ + + // #899 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 35392+ + + // #900 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 35440 + + // #901 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 35456 + + // #902 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 35472 + + // #903 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 35488 + + // #904 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 35568+ + + // #905 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 35648+ + + // #906 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 35664 + + // #907 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 35696 + + // #908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 35744+ + + // #909 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 35824+ + + // #910 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 35904+ + + // #911 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 35920 + + // #912 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 35952 + + // #913 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 35984 + + // #914 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 36080+ + + // #915 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 36160+ + + // #916 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36176 + + // #917 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36208 + + // #918 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 36240 + + // #919 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 36336+ + + // #920 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 36416+ + + // #921 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36432 + + // #922 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 36464 + + // #923 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 36496 + + // #924 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 36592+ + + // #925 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 36672+ + + // #926 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 36688 + + // #927 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 36720 + + // #928 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36768+ + + // #929 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 36848+ + + // #930 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 36928+ + + // #931 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 36944 + + // #932 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 36976 + + // #933 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 37008 + + // #934 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 37104+ + + // #935 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 37184+ + + // #936 + "\377\376\375\374\373\372\371\370" + "112,111,110" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37216 + + // #937 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 37232 + + // #938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 37264 + + // #939 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 37360+ + + // #940 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 37440+ + + // #941 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 37456 + + // #942 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 37488 + + // #943 + "contrast" + "\377\376\375\374\373\372\371\370" // 37504 + + // #944 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 37552+ + + // #945 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 37632+ + + // #946 + "255,255,255" + "\377\376\375\374\373" // 37648 + + // #947 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 37664 + + // #948 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 37728+ + + // #949 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 37808+ + + // #950 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 37888+ + + // #951 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37920+ + + // #952 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 37936 + + // #953 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37968 + + // #954 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 38064+ + + // #955 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 38144+ + + // #956 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 38160 + + // #957 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 38176 + + // #958 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 38208 + + // #959 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 38256+ + + // #960 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 38336+ + + // #961 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 38368 + + // #962 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 38384 + + // #963 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 38416 + + // #964 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 38512+ + + // #965 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 38592+ + + // #966 + "255,128,224" + "\377\376\375\374\373" // 38608 + + // #967 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 38624 + + // #968 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 38688+ + + // #969 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 38768+ + + // #970 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 38848+ + + // #971 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38880 + + // #972 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 38896 + + // #973 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 38928 + + // #974 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 39024+ + + // #975 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 39104+ + + // #976 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 39136+ + + // #977 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 39152 + + // #978 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 39184 + + // #979 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 39280+ + + // #980 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 39360+ + + // #981 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 39376 + + // #982 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 39392 + + // #983 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 39424 + + // #984 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 39472+ + + // #985 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 39552+ + + // #986 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 39584+ + + // #987 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 39600 + + // #988 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 39648+ + + // #989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 39728+ + + // #990 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 39808+ + + // #991 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 39840 + + // #992 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 39856 + + // #993 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 39888 + + // #994 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 39984+ + + // #995 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 40064+ + + // #996 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40096 + + // #997 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 40112 + + // #998 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 40144 + + // #999 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 40240+ + + // #1000 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 40320+ + + // #1001 + "43,116,199" + "\377\376\375\374\373\372" // 40336 + + // #1002 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 40352 + + // #1003 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 40384 + + // #1004 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 40432+ + + // #1005 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 40512+ + + // #1006 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 40528 + + // #1007 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 40560 + + // #1008 + "contrast" + "\377\376\375\374\373\372\371\370" // 40576 + + // #1009 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 40624+ + + // #1010 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 40704+ + + // #1011 + "255,255,255" + "\377\376\375\374\373" // 40720 + + // #1012 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 40736 + + // #1013 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 40800+ + + // #1014 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 40880+ + + // #1015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 40960+ + + // #1016 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40992+ + + // #1017 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 41008 + + // #1018 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 41040 + + // #1019 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 41136+ + + // #1020 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 41216+ + + // #1021 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 41232 + + // #1022 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 41248 + + // #1023 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 41280 + + // #1024 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 41328+ + + // #1025 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 41408+ + + // #1026 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 41440 + + // #1027 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 41456 + + // #1028 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 41488 + + // #1029 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 41584+ + + // #1030 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 41664+ + + // #1031 + "255,128,224" + "\377\376\375\374\373" // 41680 + + // #1032 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 41696 + + // #1033 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 41760+ + + // #1034 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 41840+ + + // #1035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 41920+ + + // #1036 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 41952 + + // #1037 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 41968 + + // #1038 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 42000 + + // #1039 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 42096+ + + // #1040 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 42176+ + + // #1041 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 42208+ + + // #1042 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 42224 + + // #1043 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 42256 + + // #1044 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 42352+ + + // #1045 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 42432+ + + // #1046 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 42448 + + // #1047 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 42464 + + // #1048 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 42496 + + // #1049 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 42544+ + + // #1050 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 42624+ + + // #1051 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 42656+ + + // #1052 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 42672 + + // #1053 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 42720+ + + // #1054 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 42800+ + + // #1055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 42880+ + + // #1056 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 42912 + + // #1057 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 42928 + + // #1058 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 42960 + + // #1059 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 43056+ + + // #1060 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 43136+ + + // #1061 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43168 + + // #1062 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 43184 + + // #1063 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 43216 + + // #1064 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 43312+ + + // #1065 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 43392+ + + // #1066 + "43,116,199" + "\377\376\375\374\373\372" // 43408 + + // #1067 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 43424 + + // #1068 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 43456 + + // #1069 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 43504+ + + // #1070 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 43584+ + + // #1071 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 43616 + + // #1072 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 43632 + + // #1073 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 43664 + + // #1074 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 43744+ + + // #1075 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 43824+ + + // #1076 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 43904+ + + // #1077 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 43920 + + // #1078 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 43952 + + // #1079 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 43984 + + // #1080 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 44080+ + + // #1081 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 44160+ + + // #1082 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 44176 + + // #1083 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 44208 + + // #1084 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 44240 + + // #1085 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 44336+ + + // #1086 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 44416+ + + // #1087 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 44432 + + // #1088 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 44464 + + // #1089 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 44496 + + // #1090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 44592+ + + // #1091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 44672+ + + // #1092 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 44688 + + // #1093 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 44720 + + // #1094 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 44768+ + + // #1095 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 44848+ + + // #1096 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 44928+ + + // #1097 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 44944 + + // #1098 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 44976 + + // #1099 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 45008 + + // #1100 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 45104+ + + // #1101 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 45184+ + + // #1102 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 45200 + + // #1103 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 45232 + + // #1104 + "contrast" + "\377\376\375\374\373\372\371\370" // 45248 + + // #1105 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 45296+ + + // #1106 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 45376+ + + // #1107 + "255,255,255" + "\377\376\375\374\373" // 45392 + + // #1108 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 45408 + + // #1109 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 45472+ + + // #1110 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 45552+ + + // #1111 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 45632+ + + // #1112 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45664+ + + // #1113 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 45680 + + // #1114 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45712 + + // #1115 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 45808+ + + // #1116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 45888+ + + // #1117 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 45904 + + // #1118 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 45920 + + // #1119 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 45952 + + // #1120 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 46000+ + + // #1121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 46080+ + + // #1122 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46112 + + // #1123 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 46128 + + // #1124 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 46160 + + // #1125 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 46256+ + + // #1126 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 46336+ + + // #1127 + "255,128,224" + "\377\376\375\374\373" // 46352 + + // #1128 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 46368 + + // #1129 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 46432+ + + // #1130 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 46512+ + + // #1131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 46592+ + + // #1132 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 46624 + + // #1133 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 46640 + + // #1134 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 46672 + + // #1135 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 46768+ + + // #1136 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 46848+ + + // #1137 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 46880+ + + // #1138 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 46896 + + // #1139 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 46928 + + // #1140 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 47024+ + + // #1141 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 47104+ + + // #1142 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 47120 + + // #1143 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 47136 + + // #1144 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 47168 + + // #1145 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 47216+ + + // #1146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 47296+ + + // #1147 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 47328+ + + // #1148 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 47344 + + // #1149 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 47392+ + + // #1150 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 47472+ + + // #1151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 47552+ + + // #1152 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 47584 + + // #1153 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 47600 + + // #1154 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 47632 + + // #1155 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 47728+ + + // #1156 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 47808+ + + // #1157 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 47840 + + // #1158 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 47856 + + // #1159 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 47888 + + // #1160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 47984+ + + // #1161 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 48064+ + + // #1162 + "43,116,199" + "\377\376\375\374\373\372" // 48080 + + // #1163 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 48096 + + // #1164 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 48128 + + // #1165 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 48176+ + + // #1166 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 48256+ + + // #1167 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 48304 + + // #1168 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 48320 + + // #1169 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 48336 + + // #1170 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 48352 + + // #1171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 48432+ + + // #1172 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 48512+ + + // #1173 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 48528 + + // #1174 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 48560 + + // #1175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 48608+ + + // #1176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 48688+ + + // #1177 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 48768+ + + // #1178 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 48784 + + // #1179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 48816 + + // #1180 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 48848 + + // #1181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 48944+ + + // #1182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 49024+ + + // #1183 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 49040 + + // #1184 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 49072 + + // #1185 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 49104 + + // #1186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 49200+ + + // #1187 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 49280+ + + // #1188 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 49296 + + // #1189 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 49328 + + // #1190 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 49360 + + // #1191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 49456+ + + // #1192 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 49536+ + + // #1193 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 49552 + + // #1194 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 49584 + + // #1195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 49632+ + + // #1196 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 49712+ + + // #1197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 49792+ + + // #1198 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 49808 + + // #1199 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 49840 + + // #1200 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 49872 + + // #1201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 49968+ + + // #1202 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 50048+ + + // #1203 + "\377\376\375\374\373\372\371\370" + "112,111,110" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 50080 + + // #1204 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 50096 + + // #1205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 50128 + + // #1206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 50224+ + + // #1207 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 50304+ + + // #1208 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "oxygenrc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 50336 + + // #1209 + "\377\376\375\374\373\372" + "No Group" + "\377\376" // 50352 + + // #1210 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 50368 + + // #1211 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 50384 + + // #1212 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 50400 + + // #1213 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 50416 + + // #1214 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 50448 + + // #1215 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 50464 + + // #1216 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 50480 + + // #1217 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 50496 + + // #1218 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 50512 + + // #1219 + "\377\376\375\374\373\372\371\370\367\366" + "Style" + "\377" // 50528 + + // #1220 + "\377\376\375" + "CacheEnabled" + "\377" // 50544 + + // #1221 + "\377\376\375" + "CacheEnabled" + "\377" // 50560 + + // #1222 + "MaxCacheSize" + "\377\376\375\374" // 50576 + + // #1223 + "MaxCacheSize" + "\377\376\375\374" // 50592 + + // #1224 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "AnimationSteps" + "\377\376\375\374\373" // 50624 + + // #1225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "AnimationSteps" + "\377\376\375\374\373" // 50656 + + // #1226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324" + "ShowMnemonics" + "\377\376\375\374\373\372\371" // 50720+ + + // #1227 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324" + "ShowMnemonics" + "\377\376\375\374\373\372\371" // 50784+ + + // #1228 + "\377\376\375\374\373\372\371\370\367\366" + "ToolTipTransparent" + "\377\376\375\374" // 50816 + + // #1229 + "\377\376\375\374\373\372\371\370\367\366" + "ToolTipTransparent" + "\377\376\375\374" // 50848 + + // #1230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ToolTipDrawStyledFrames" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 50896 + + // #1231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ToolTipDrawStyledFrames" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 50944 + + // #1232 + "\377\376\375\374\373" + "ToolBarDrawItemSeparator" + "\377\376\375" // 50976+ + + // #1233 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ToolBarDrawItemSeparator" + "\377\376\375" // 51040+ + + // #1234 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ViewDrawTriangularExpander" + "\377\376\375\374\373\372\371\370" // 51088 + + // #1235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ViewDrawTriangularExpander" + "\377\376\375\374\373\372\371\370" // 51136 + + // #1236 + "\377\376\375\374\373\372\371\370\367" + "TE_TINY" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 51168 + + // #1237 + "\377" + "TE_SMALL" + "\377\376\375\374\373\372\371" // 51184 + + // #1238 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "TE_NORMAL" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 51232+ + + // #1239 + "\377\376\375\374" + "ViewTriangularExpanderSize" + "\377\376" // 51264 + + // #1240 + "\377\376\375\374" + "ViewTriangularExpanderSize" + "\377\376" // 51296 + + // #1241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "ViewDrawFocusIndicator" + "\377\376\375\374\373\372\371\370\367\366\365" // 51344 + + // #1242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "ViewDrawFocusIndicator" + "\377\376\375\374\373\372\371\370\367\366\365" // 51392 + + // #1243 + "\377\376\375\374\373\372" + "ViewDrawTreeBranchLines" + "\377\376\375" // 51424+ + + // #1244 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "ViewDrawTreeBranchLines" + "\377\376\375" // 51488+ + + // #1245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ScrollBarWidth" + "\377\376\375\374" // 51520 + + // #1246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ScrollBarWidth" + "\377\376\375\374" // 51552 + + // #1247 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ScrollBarAddLineButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 51600 + + // #1248 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ScrollBarAddLineButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 51648 + + // #1249 + "\377\376\375\374\373" + "ScrollBarSubLineButtons" + "\377\376\375\374" // 51680+ + + // #1250 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ScrollBarSubLineButtons" + "\377\376\375\374" // 51744+ + + // #1251 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ScrollBarColored" + "\377\376\375" // 51776 + + // #1252 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ScrollBarColored" + "\377\376\375" // 51808 + + // #1253 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ScrollBarBevel" + "\377\376\375\374" // 51840 + + // #1254 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ScrollBarBevel" + "\377\376\375\374" // 51872 + + // #1255 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "CS_CHECK" + "\377\376\375\374\373\372\371\370\367\366\365" // 51904 + + // #1256 + "\377\376\375\374\373\372" + "CS_X" + "\377\376\375\374\373\372" // 51920 + + // #1257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "CheckBoxStyle" + "\377\376\375\374\373\372\371\370" // 52000+ + + // #1258 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325" + "CheckBoxStyle" + "\377\376\375\374\373\372\371\370" // 52064+ + + // #1259 + "\377\376\375\374\373\372\371\370\367" + "ProgressBarAnimated" + "\377\376\375\374" // 52096 + + // #1260 + "\377\376\375\374\373\372\371\370\367" + "ProgressBarAnimated" + "\377\376\375\374" // 52128 + + // #1261 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "MM_DARK" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 52160 + + // #1262 + "\377\376\375\374\373" + "MM_SUBTLE" + "\377\376" // 52176 + + // #1263 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "MM_STRONG" + "\377\376\375\374\373\372\371\370" // 52208 + + // #1264 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347" + "MenuHighlightMode" + "\377\376\375\374\373\372" // 52256+ + + // #1265 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327" + "MenuHighlightMode" + "\377\376\375\374\373\372" // 52320+ + + // #1266 + "\377\376\375\374\373\372\371\370\367\366\365" + "TabSubtleShadow" + "\377\376\375\374\373\372" // 52352 + + // #1267 + "\377\376\375\374\373\372\371\370\367\366\365" + "TabSubtleShadow" + "\377\376\375\374\373\372" // 52384 + + // #1268 + "\377\376\375\374\373\372\371\370\367\366\365" + "TS_SINGLE" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 52416 + + // #1269 + "\377\376\375\374\373" + "TS_PLAIN" + "\377\376\375" // 52432 + + // #1270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "TabStyle" + "\377\376\375\374\373\372\371\370\367\366" // 52464 + + // #1271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "TabStyle" + "\377\376\375\374\373\372\371\370\367\366" // 52496 + + // #1272 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311" + "WindowDragEnabled" + "\377\376\375\374\373\372\371\370" // 52576+ + + // #1273 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331" + "WindowDragEnabled" + "\377\376\375\374\373\372\371\370" // 52640+ + + // #1274 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 52656 + + // #1275 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 52672 + + // #1276 + "WindowDragEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 52704 + + // #1277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 52784+ + + // #1278 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 52864+ + + // #1279 + "\377\376\375\374\373\372\371\370\367" + "WD_MINIMAL" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 52896 + + // #1280 + "\377\376\375\374" + "WD_FULL" + "\377\376\375\374\373" // 52912 + + // #1281 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "WindowDragMode" + "\377\376\375\374\373\372" // 52944 + + // #1282 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "WindowDragMode" + "\377\376\375\374\373\372" // 52976 + + // #1283 + "\377\376\375\374\373\372\371\370\367\366\365" + "WidgetExplorerEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53024 + + // #1284 + "\377\376\375\374\373\372\371\370\367\366\365" + "WidgetExplorerEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53072 + + // #1285 + "\377" + "DrawWidgetRects" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53104 + + // #1286 + "\377" + "DrawWidgetRects" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53136 + + // #1287 + "\377" + "WindowDragWhiteList" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 53168 + + // #1288 + "\377" + "WindowDragWhiteList" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 53200 + + // #1289 + "\377\376\375\374\373" + "WindowDragBlackList" + "\377\376\375\374\373\372\371\370" // 53232 + + // #1290 + "\377\376\375\374\373" + "WindowDragBlackList" + "\377\376\375\374\373\372\371\370" // 53264 + + // #1291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307" + "UseWMMoveResize" + "\377\376\375\374\373\372\371\370" // 53344+ + + // #1292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327" + "UseWMMoveResize" + "\377\376\375\374\373\372\371\370" // 53408+ + + // #1293 + "AnimationsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53440 + + // #1294 + "AnimationsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53472 + + // #1295 + "\377\376\375\374\373\372\371\370\367" + "GenericAnimationsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53520 + + // #1296 + "\377\376\375\374\373\372\371\370\367" + "GenericAnimationsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53568 + + // #1297 + "\377\376" + "TB_NONE" + "\377\376\375\374\373\372\371" // 53584 + + // #1298 + "\377\376\375\374\373\372\371\370\367\366" + "TB_FADE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53616 + + // #1299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356" + "TB_FOLLOW_MOUSE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53664+ + + // #1300 + "\377\376" + "ToolBarAnimationType" + "\377\376\375\374\373\372\371\370\367\366" // 53696 + + // #1301 + "\377\376" + "ToolBarAnimationType" + "\377\376\375\374\373\372\371\370\367\366" // 53728 + + // #1302 + "\377\376\375\374\373\372\371" + "MB_NONE" + "\377\376" // 53744 + + // #1303 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "MB_FADE" + "\377\376\375\374\373\372\371\370\367\366" // 53776 + + // #1304 + "\377\376\375\374\373\372\371" + "MB_FOLLOW_MOUSE" + "\377\376\375\374\373\372\371\370\367\366" // 53808 + + // #1305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351" + "MenuBarAnimationType" + "\377\376\375\374\373" // 53856+ + + // #1306 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331" + "MenuBarAnimationType" + "\377\376\375\374\373" // 53920+ + + // #1307 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ME_NONE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53952 + + // #1308 + "\377\376\375\374" + "ME_FADE" + "\377\376\375\374\373" // 53968 + + // #1309 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ME_FOLLOW_MOUSE" + "\377\376\375\374\373" // 54000 + + // #1310 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MenuAnimationType" + "\377\376\375" // 54032 + + // #1311 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MenuAnimationType" + "\377\376\375" // 54064 + + // #1312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342" + "ProgressBarAnimationsEnabled" + "\377\376\375\374\373\372" // 54128+ + + // #1313 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342" + "ProgressBarAnimationsEnabled" + "\377\376\375\374\373\372" // 54192+ + + // #1314 + "\377\376\375\374\373\372\371\370\367\366\365" + "GenericAnimationsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 54240 + + // #1315 + "\377\376\375\374\373\372\371\370\367\366\365" + "GenericAnimationsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 54288 + + // #1316 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313" + "ToolBarAnimationsDuration" + "\377\376" // 54368+ + + // #1317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ToolBarAnimationsDuration" + "\377\376" // 54432+ + + // #1318 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "MenuBarAnimationsDuration" + "\377\376\375\374\373\372\371\370" // 54480 + + // #1319 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "MenuBarAnimationsDuration" + "\377\376\375\374\373\372\371\370" // 54528 + + // #1320 + "\377\376\375\374\373\372\371\370" + "MenuBarFollowMouseAnimationsDuration" + "\377\376\375\374" // 54576 + + // #1321 + "\377\376\375\374\373\372\371\370" + "MenuBarFollowMouseAnimationsDuration" + "\377\376\375\374" // 54624 + + // #1322 + "\377\376\375\374\373\372\371\370\367" + "MenuAnimationsDuration" + "\377" // 54656 + + // #1323 + "\377\376\375\374\373\372\371\370\367" + "MenuAnimationsDuration" + "\377" // 54688 + + // #1324 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "MenuFollowMouseAnimationsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 54768+ + + // #1325 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "MenuFollowMouseAnimationsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 54832+ + + // #1326 + "ProgressBarAnimationsDuration" + "\377\376\375" // 54864 + + // #1327 + "ProgressBarAnimationsDuration" + "\377\376\375" // 54896 + + // #1328 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ProgressBarBusyStepDuration" + "\377\376\375\374\373\372\371" // 54944 + + // #1329 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ProgressBarBusyStepDuration" + "\377\376\375\374\373\372\371" // 54992 + + // #1330 + "\377\376\375\374" + "StackedWidgetTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 55040 + + // #1331 + "\377\376\375\374" + "StackedWidgetTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 55088 + + // #1332 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 55104 + + // #1333 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 55120 + + // #1334 + "\377\376\375\374\373\372\371\370" + "StackedWidgetTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 55168 + + // #1335 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 55216+ + + // #1336 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 55296+ + + // #1337 + "\377\376\375\374\373\372\371\370\367\366" + "LabelTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 55344+ + + // #1338 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "LabelTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 55408+ + + // #1339 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 55424 + + // #1340 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 55440 + + // #1341 + "\377\376\375\374\373\372\371\370" + "LabelTransitionsEnabled" + "\377" // 55472 + + // #1342 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 55536+ + + // #1343 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 55616+ + + // #1344 + "\377\376" + "ComboBoxTransitionsEnabled" + "\377\376\375\374" // 55648 + + // #1345 + "\377\376" + "ComboBoxTransitionsEnabled" + "\377\376\375\374" // 55680 + + // #1346 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 55696 + + // #1347 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 55712 + + // #1348 + "ComboBoxTransitionsEnabled" + "\377\376\375\374\373\372" // 55744 + + // #1349 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 55792+ + + // #1350 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 55872+ + + // #1351 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "LineEditTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 55920+ + + // #1352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "LineEditTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 55984+ + + // #1353 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354" + "StackedWidgetTransitionsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 56048+ + + // #1354 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354" + "StackedWidgetTransitionsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 56112+ + + // #1355 + "\377\376\375\374\373\372\371\370" + "LabelTransitionsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 56160 + + // #1356 + "\377\376\375\374\373\372\371\370" + "LabelTransitionsDuration" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 56208 + + // #1357 + "\377" + "ComboBoxTransitionsDuration" + "\377\376\375\374" // 56240 + + // #1358 + "\377" + "ComboBoxTransitionsDuration" + "\377\376\375\374" // 56272 + + // #1359 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "LineEditTransitionsDuration" + "\377\376\375\374\373\372\371\370" // 56368+ + + // #1360 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "LineEditTransitionsDuration" + "\377\376\375\374\373\372\371\370" // 56432+ + + // #1361 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 56448 + + // #1362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 56480 + + // #1363 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 56496 + + // #1364 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 56512 + + // #1365 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 56528 + + // #1366 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 56544 + + // #1367 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 56560 + + // #1368 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 56576 + + // #1369 + "WindowDragEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 56608+ + + // #1370 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 56688+ + + // #1371 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 56768+ + + // #1372 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 56784 + + // #1373 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 56800 + + // #1374 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "StackedWidgetTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 56880+ + + // #1375 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 56944+ + + // #1376 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 57024+ + + // #1377 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 57040 + + // #1378 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 57056 + + // #1379 + "LabelTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 57088 + + // #1380 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 57136+ + + // #1381 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 57216+ + + // #1382 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 57232 + + // #1383 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 57248 + + // #1384 + "ComboBoxTransitionsEnabled" + "\377\376\375\374\373\372" // 57280 + + // #1385 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 57328+ + + // #1386 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 57408+ + + // #1387 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 57424 + + // #1388 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 57456 + + // #1389 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 57472 + + // #1390 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 57488 + + // #1391 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 57504 + + // #1392 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 57520 + + // #1393 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 57536 + + // #1394 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 57552 + + // #1395 + "WindowDragEnabled" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 57584 + + // #1396 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 57648+ + + // #1397 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 57728+ + + // #1398 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 57744 + + // #1399 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 57760 + + // #1400 + "\377\376\375\374\373\372\371\370" + "StackedWidgetTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 57808 + + // #1401 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 57904+ + + // #1402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 57984+ + + // #1403 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 58000 + + // #1404 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 58016 + + // #1405 + "LabelTransitionsEnabled" + "\377\376\375\374\373\372\371\370\367" // 58048 + + // #1406 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 58096+ + + // #1407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 58176+ + + // #1408 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 58192 + + // #1409 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 58208 + + // #1410 + "ComboBoxTransitionsEnabled" + "\377\376\375\374\373\372" // 58240 + + // #1411 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 58288+ + + // #1412 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 58368+ + + // #1413 + "\377\376\375\374\373" + "MplayerWindow" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 58400 + + // #1414 + "\377\376\375\374\373\372\371\370\367" + "@" + "\377\376\375\374\373\372" // 58416 + + // #1415 + "\377\376\375" + "ViewSliders@kmix" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 58448 + + // #1416 + "\377\376\375\374\373\372\371\370\367" + "@" + "\377\376\375\374\373\372" // 58464 + + // #1417 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334" + "Sidebar_Widget@konqueror" + "\377\376\375\374" // 58528+ + + // #1418 + "\377\376\375\374\373\372\371\370\367" + "@" + "\377\376\375\374\373\372" // 58544 + + // #1419 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "CustomTrackView@kdenlive" + "\377\376\375\374\373\372\371\370" // 58592+ + + // #1420 + "\377\376\375\374\373\372\371\370\367" + "@" + "\377\376\375\374\373\372" // 58608 + + // #1421 + "\377\376\375\374\373\372\371\370\367\366\365" + "MuseScore" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 58640 + + // #1422 + "\377\376\375\374\373\372\371\370\367" + "@" + "\377\376\375\374\373\372" // 58656 + + // #1423 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "kde" + "\377" // 58672 + + // #1424 + "/gui_platform" + "\377\376\375" // 58688 + + // #1425 + "Trolltech" + "\377\376\375\374\373\372\371" // 58704 + + // #1426 + "\377\376\375\374\373\372\371\370\367" + ".conf" + "\377\376" // 58720 + + // #1427 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331" + "No such file or directory" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 58800+ + + // #1428 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 58816 + + // #1429 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 58832 + + // #1430 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 58848 + + // #1431 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 58864 + + // #1432 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 58880 + + // #1433 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 58896 + + // #1434 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 58912 + + // #1435 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 58928 + + // #1436 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 58944 + + // #1437 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 58960 + + // #1438 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 58976 + + // #1439 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 58992 + + // #1440 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 59024 + + // #1441 + "\377\376\375\374\373\372\371\370" + "com.nokia.qt.QGuiPlatformPluginInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 59088 + + // #1442 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 59136 + + // #1443 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 59152 + + // #1444 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 59168 + + // #1445 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 59184 + + // #1446 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 59200 + + // #1447 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 59216 + + // #1448 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 59232 + + // #1449 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 59264 + + // #1450 + "\377\376\375\374\373\372\371\370" + "com.nokia.qt.QGuiPlatformPluginInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 59328 + + // #1451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 59376 + + // #1452 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 59392 + + // #1453 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 59408 + + // #1454 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 59424 + + // #1455 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 59456 + + // #1456 + "contrast" + "\377\376\375\374\373\372\371\370" // 59472 + + // #1457 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 59568+ + + // #1458 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 59648+ + + // #1459 + "\377\376\375\374\373\372\371\370" + "192,218,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59680 + + // #1460 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 59696 + + // #1461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 59744+ + + // #1462 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 59824+ + + // #1463 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 59904+ + + // #1464 + "196,224,255" + "\377\376\375\374\373" // 59920 + + // #1465 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 59936 + + // #1466 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59968 + + // #1467 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 60016+ + + // #1468 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 60096+ + + // #1469 + "\377\376\375\374\373\372\371\370" + "20,19,18" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 60128 + + // #1470 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 60144 + + // #1471 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 60176 + + // #1472 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 60272+ + + // #1473 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 60352+ + + // #1474 + "\377\376\375\374\373\372\371\370" + "96,112,128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 60384 + + // #1475 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 60400 + + // #1476 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 60432 + + // #1477 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 60528+ + + // #1478 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 60608+ + + // #1479 + "255,128,224" + "\377\376\375\374\373" // 60624 + + // #1480 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 60640 + + // #1481 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 60704+ + + // #1482 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 60784+ + + // #1483 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 60864+ + + // #1484 + "0,87,174" + "\377\376\375\374\373\372\371\370" // 60880 + + // #1485 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 60896 + + // #1486 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 60928 + + // #1487 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 60976+ + + // #1488 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 61056+ + + // #1489 + "69,40,134" + "\377\376\375\374\373\372\371" // 61072 + + // #1490 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 61088 + + // #1491 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 61120 + + // #1492 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 61168+ + + // #1493 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 61248+ + + // #1494 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 61264 + + // #1495 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 61280 + + // #1496 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 61312 + + // #1497 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 61360+ + + // #1498 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 61440+ + + // #1499 + "176,128,0" + "\377\376\375\374\373\372\371" // 61456 + + // #1500 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 61472 + + // #1501 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 61536+ + + // #1502 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 61616+ + + // #1503 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 61696+ + + // #1504 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 61728 + + // #1505 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 61744 + + // #1506 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 61776 + + // #1507 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 61872+ + + // #1508 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 61952+ + + // #1509 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61984 + + // #1510 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 62000 + + // #1511 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 62032 + + // #1512 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 62128+ + + // #1513 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 62208+ + + // #1514 + "43,116,199" + "\377\376\375\374\373\372" // 62224 + + // #1515 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 62240 + + // #1516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 62272 + + // #1517 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 62320+ + + // #1518 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 62400+ + + // #1519 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 62416 + + // #1520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 62448 + + // #1521 + "contrast" + "\377\376\375\374\373\372\371\370" // 62464 + + // #1522 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 62512+ + + // #1523 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 62592+ + + // #1524 + "255,255,255" + "\377\376\375\374\373" // 62608 + + // #1525 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 62624 + + // #1526 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 62688+ + + // #1527 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 62768+ + + // #1528 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 62848+ + + // #1529 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62880+ + + // #1530 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 62896 + + // #1531 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62928 + + // #1532 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 63024+ + + // #1533 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 63104+ + + // #1534 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 63120 + + // #1535 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 63136 + + // #1536 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 63168 + + // #1537 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 63216+ + + // #1538 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 63296+ + + // #1539 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 63328 + + // #1540 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 63344 + + // #1541 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 63376 + + // #1542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 63472+ + + // #1543 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 63552+ + + // #1544 + "255,128,224" + "\377\376\375\374\373" // 63568 + + // #1545 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 63584 + + // #1546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 63648+ + + // #1547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 63728+ + + // #1548 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 63808+ + + // #1549 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 63840 + + // #1550 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 63856 + + // #1551 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 63888 + + // #1552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 63984+ + + // #1553 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 64064+ + + // #1554 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 64096+ + + // #1555 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 64112 + + // #1556 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 64144 + + // #1557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 64240+ + + // #1558 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 64320+ + + // #1559 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 64336 + + // #1560 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 64352 + + // #1561 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 64384 + + // #1562 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 64432+ + + // #1563 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 64512+ + + // #1564 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 64544+ + + // #1565 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 64560 + + // #1566 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 64608+ + + // #1567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 64688+ + + // #1568 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 64768+ + + // #1569 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 64784 + + // #1570 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 64800 + + // #1571 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 64832 + + // #1572 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 64880+ + + // #1573 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 64960+ + + // #1574 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64992 + + // #1575 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 65008 + + // #1576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 65040 + + // #1577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 65136+ + + // #1578 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 65216+ + + // #1579 + "43,116,199" + "\377\376\375\374\373\372" // 65232 + + // #1580 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 65248 + + // #1581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 65280 + + // #1582 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 65328+ + + // #1583 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 65408+ + + // #1584 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 65424 + + // #1585 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 65456 + + // #1586 + "contrast" + "\377\376\375\374\373\372\371\370" // 65472 + + // #1587 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 65520+ + + // #1588 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 65600+ + + // #1589 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65632 + + // #1590 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 65648 + + // #1591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 65696+ + + // #1592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 65776+ + + // #1593 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 65856+ + + // #1594 + "\377\376\375\374\373\372\371\370" + "218,217,216" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65888 + + // #1595 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 65904 + + // #1596 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65936 + + // #1597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 66032+ + + // #1598 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 66112+ + + // #1599 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 66128 + + // #1600 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 66144 + + // #1601 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 66176 + + // #1602 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 66224+ + + // #1603 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 66304+ + + // #1604 + "136,135,134" + "\377\376\375\374\373" // 66320 + + // #1605 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 66336 + + // #1606 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 66368 + + // #1607 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 66416+ + + // #1608 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 66496+ + + // #1609 + "255,128,224" + "\377\376\375\374\373" // 66512 + + // #1610 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 66528 + + // #1611 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 66592+ + + // #1612 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 66672+ + + // #1613 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 66752+ + + // #1614 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 66784 + + // #1615 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 66800 + + // #1616 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 66832 + + // #1617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 66928+ + + // #1618 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 67008+ + + // #1619 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 67040+ + + // #1620 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 67056 + + // #1621 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 67088 + + // #1622 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 67184+ + + // #1623 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 67264+ + + // #1624 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 67280 + + // #1625 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 67296 + + // #1626 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 67328 + + // #1627 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 67376+ + + // #1628 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 67456+ + + // #1629 + "176,128,0" + "\377\376\375\374\373\372\371" // 67472 + + // #1630 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 67488 + + // #1631 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 67552+ + + // #1632 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 67632+ + + // #1633 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 67712+ + + // #1634 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 67744 + + // #1635 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 67760 + + // #1636 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 67792 + + // #1637 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 67888+ + + // #1638 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 67968+ + + // #1639 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68000 + + // #1640 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 68016 + + // #1641 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 68048 + + // #1642 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 68144+ + + // #1643 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 68224+ + + // #1644 + "43,116,199" + "\377\376\375\374\373\372" // 68240 + + // #1645 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 68256 + + // #1646 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 68288 + + // #1647 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 68336+ + + // #1648 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 68416+ + + // #1649 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 68432 + + // #1650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 68464 + + // #1651 + "contrast" + "\377\376\375\374\373\372\371\370" // 68480 + + // #1652 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 68528+ + + // #1653 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 68608+ + + // #1654 + "232,231,230" + "\377\376\375\374\373" // 68624 + + // #1655 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 68640 + + // #1656 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 68704+ + + // #1657 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 68784+ + + // #1658 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 68864+ + + // #1659 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68896+ + + // #1660 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 68912 + + // #1661 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68944 + + // #1662 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 69040+ + + // #1663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 69120+ + + // #1664 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 69136 + + // #1665 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 69152 + + // #1666 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 69184 + + // #1667 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 69232+ + + // #1668 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 69312+ + + // #1669 + "136,135,134" + "\377\376\375\374\373" // 69328 + + // #1670 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 69344 + + // #1671 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 69376 + + // #1672 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 69424+ + + // #1673 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 69504+ + + // #1674 + "\377\376\375\374\373\372\371\370" + "255,128,224" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 69536 + + // #1675 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 69552 + + // #1676 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 69600+ + + // #1677 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 69680+ + + // #1678 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 69760+ + + // #1679 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 69792 + + // #1680 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 69808 + + // #1681 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 69840 + + // #1682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 69936+ + + // #1683 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 70016+ + + // #1684 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 70048+ + + // #1685 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 70064 + + // #1686 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 70096 + + // #1687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 70192+ + + // #1688 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 70272+ + + // #1689 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 70288 + + // #1690 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 70304 + + // #1691 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 70336 + + // #1692 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 70384+ + + // #1693 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 70464+ + + // #1694 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 70496 + + // #1695 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 70512 + + // #1696 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 70560+ + + // #1697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 70640+ + + // #1698 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 70720+ + + // #1699 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 70736 + + // #1700 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 70752 + + // #1701 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 70784 + + // #1702 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 70832+ + + // #1703 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 70912+ + + // #1704 + "119,183,255" + "\377\376\375\374\373" // 70928 + + // #1705 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 70944 + + // #1706 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 70976 + + // #1707 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 71024+ + + // #1708 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 71104+ + + // #1709 + "\377\376\375\374\373\372\371\370" + "43,116,199" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 71136 + + // #1710 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 71152 + + // #1711 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 71184 + + // #1712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 71280+ + + // #1713 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 71360+ + + // #1714 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 71376 + + // #1715 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 71392 + + // #1716 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 71408 + + // #1717 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 71472+ + + // #1718 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 71552+ + + // #1719 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 71568 + + // #1720 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 71584 + + // #1721 + "ChangeSelectionColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 71616 + + // #1722 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 71664+ + + // #1723 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 71744+ + + // #1724 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 71760 + + // #1725 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 71792 + + // #1726 + "contrast" + "\377\376\375\374\373\372\371\370" // 71808 + + // #1727 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 71856+ + + // #1728 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 71936+ + + // #1729 + "65,139,212" + "\377\376\375\374\373\372" // 71952 + + // #1730 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 71968 + + // #1731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 72032+ + + // #1732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 72112+ + + // #1733 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 72192+ + + // #1734 + "62,138,204" + "\377\376\375\374\373\372" // 72208 + + // #1735 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 72224 + + // #1736 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72256 + + // #1737 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 72304+ + + // #1738 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 72384+ + + // #1739 + "255,255,255" + "\377\376\375\374\373" // 72400 + + // #1740 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 72416 + + // #1741 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 72448 + + // #1742 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 72496+ + + // #1743 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 72576+ + + // #1744 + "165,193,228" + "\377\376\375\374\373" // 72592 + + // #1745 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 72608 + + // #1746 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 72640 + + // #1747 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 72688+ + + // #1748 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 72768+ + + // #1749 + "\377\376\375\374\373\372\371\370" + "255,128,224" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72800 + + // #1750 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 72816 + + // #1751 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 72864+ + + // #1752 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 72944+ + + // #1753 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 73024+ + + // #1754 + "\377\376\375\374\373\372\371\370" + "0,49,110" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 73056 + + // #1755 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 73072 + + // #1756 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 73104 + + // #1757 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 73200+ + + // #1758 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 73280+ + + // #1759 + "69,40,134" + "\377\376\375\374\373\372\371" // 73296 + + // #1760 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 73312 + + // #1761 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 73344 + + // #1762 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 73392+ + + // #1763 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 73472+ + + // #1764 + "156,14,14" + "\377\376\375\374\373\372\371" // 73488 + + // #1765 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 73504 + + // #1766 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 73536 + + // #1767 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 73584+ + + // #1768 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 73664+ + + // #1769 + "\377\376\375\374\373\372\371\370" + "255,221,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 73696 + + // #1770 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 73712 + + // #1771 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 73760+ + + // #1772 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 73840+ + + // #1773 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 73920+ + + // #1774 + "\377\376\375\374\373\372\371\370" + "128,255,128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 73952 + + // #1775 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 73968 + + // #1776 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 74000 + + // #1777 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 74096+ + + // #1778 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 74176+ + + // #1779 + "119,183,255" + "\377\376\375\374\373" // 74192 + + // #1780 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 74208 + + // #1781 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 74240 + + // #1782 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 74288+ + + // #1783 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 74368+ + + // #1784 + "\377\376\375\374\373\372\371\370" + "43,116,199" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 74400 + + // #1785 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 74416 + + // #1786 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 74448 + + // #1787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 74544+ + + // #1788 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 74624+ + + // #1789 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 74640 + + // #1790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 74672 + + // #1791 + "contrast" + "\377\376\375\374\373\372\371\370" // 74688 + + // #1792 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 74736+ + + // #1793 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 74816+ + + // #1794 + "255,255,255" + "\377\376\375\374\373" // 74832 + + // #1795 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 74848 + + // #1796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 74912+ + + // #1797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 74992+ + + // #1798 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 75072+ + + // #1799 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75104+ + + // #1800 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 75120 + + // #1801 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75152 + + // #1802 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 75248+ + + // #1803 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 75328+ + + // #1804 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 75344 + + // #1805 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 75360 + + // #1806 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 75392 + + // #1807 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 75440+ + + // #1808 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 75520+ + + // #1809 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75552 + + // #1810 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 75568 + + // #1811 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 75600 + + // #1812 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 75696+ + + // #1813 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 75776+ + + // #1814 + "255,128,224" + "\377\376\375\374\373" // 75792 + + // #1815 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 75808 + + // #1816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 75872+ + + // #1817 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 75952+ + + // #1818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 76032+ + + // #1819 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 76064 + + // #1820 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 76080 + + // #1821 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 76112 + + // #1822 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 76208+ + + // #1823 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 76288+ + + // #1824 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 76320+ + + // #1825 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 76336 + + // #1826 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 76368 + + // #1827 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 76464+ + + // #1828 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 76544+ + + // #1829 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 76560 + + // #1830 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 76576 + + // #1831 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 76608 + + // #1832 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 76656+ + + // #1833 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 76736+ + + // #1834 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 76768+ + + // #1835 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 76784 + + // #1836 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 76832+ + + // #1837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 76912+ + + // #1838 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 76992+ + + // #1839 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 77008 + + // #1840 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 77024 + + // #1841 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 77056 + + // #1842 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 77104+ + + // #1843 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 77184+ + + // #1844 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77216 + + // #1845 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 77232 + + // #1846 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 77264 + + // #1847 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 77360+ + + // #1848 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 77440+ + + // #1849 + "43,116,199" + "\377\376\375\374\373\372" // 77456 + + // #1850 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 77472 + + // #1851 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 77504 + + // #1852 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 77552+ + + // #1853 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 77632+ + + // #1854 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77680 + + // #1855 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 77696 + + // #1856 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 77712 + + // #1857 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 77728 + + // #1858 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 77808+ + + // #1859 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 77888+ + + // #1860 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 77904 + + // #1861 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 77936 + + // #1862 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 77984+ + + // #1863 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 78064+ + + // #1864 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 78144+ + + // #1865 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 78160 + + // #1866 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 78192 + + // #1867 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 78224 + + // #1868 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 78320+ + + // #1869 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 78400+ + + // #1870 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 78416 + + // #1871 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 78448 + + // #1872 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 78480 + + // #1873 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 78576+ + + // #1874 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 78656+ + + // #1875 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 78672 + + // #1876 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 78704 + + // #1877 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 78736 + + // #1878 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 78832+ + + // #1879 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 78912+ + + // #1880 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 78928 + + // #1881 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 78960 + + // #1882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 79008+ + + // #1883 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 79088+ + + // #1884 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 79168+ + + // #1885 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 79184 + + // #1886 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 79216 + + // #1887 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 79248 + + // #1888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 79344+ + + // #1889 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 79424+ + + // #1890 + "112,111,110" + "\377\376\375\374\373" // 79440 + + // #1891 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 79456 + + // #1892 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 79488 + + // #1893 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 79536+ + + // #1894 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 79616+ + + // #1895 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 79632 + + // #1896 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 79664 + + // #1897 + "contrast" + "\377\376\375\374\373\372\371\370" // 79680 + + // #1898 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 79728+ + + // #1899 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 79808+ + + // #1900 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79840 + + // #1901 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 79856 + + // #1902 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 79904+ + + // #1903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 79984+ + + // #1904 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 80064+ + + // #1905 + "\377\376\375\374\373\372\371\370" + "218,217,216" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80096 + + // #1906 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 80112 + + // #1907 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80144 + + // #1908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 80240+ + + // #1909 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 80320+ + + // #1910 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 80336 + + // #1911 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 80352 + + // #1912 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 80384 + + // #1913 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 80432+ + + // #1914 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 80512+ + + // #1915 + "136,135,134" + "\377\376\375\374\373" // 80528 + + // #1916 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 80544 + + // #1917 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 80576 + + // #1918 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 80624+ + + // #1919 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 80704+ + + // #1920 + "255,128,224" + "\377\376\375\374\373" // 80720 + + // #1921 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 80736 + + // #1922 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 80800+ + + // #1923 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 80880+ + + // #1924 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 80960+ + + // #1925 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 80992 + + // #1926 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 81008 + + // #1927 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 81040 + + // #1928 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 81136+ + + // #1929 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 81216+ + + // #1930 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 81248+ + + // #1931 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 81264 + + // #1932 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 81296 + + // #1933 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 81392+ + + // #1934 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 81472+ + + // #1935 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 81488 + + // #1936 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 81504 + + // #1937 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 81536 + + // #1938 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 81584+ + + // #1939 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 81664+ + + // #1940 + "176,128,0" + "\377\376\375\374\373\372\371" // 81680 + + // #1941 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 81696 + + // #1942 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 81760+ + + // #1943 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 81840+ + + // #1944 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 81920+ + + // #1945 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 81952 + + // #1946 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 81968 + + // #1947 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 82000 + + // #1948 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 82096+ + + // #1949 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 82176+ + + // #1950 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82208 + + // #1951 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 82224 + + // #1952 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 82256 + + // #1953 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 82352+ + + // #1954 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 82432+ + + // #1955 + "43,116,199" + "\377\376\375\374\373\372" // 82448 + + // #1956 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 82464 + + // #1957 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 82496 + + // #1958 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 82544+ + + // #1959 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 82624+ + + // #1960 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82672 + + // #1961 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 82688 + + // #1962 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 82704 + + // #1963 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 82720 + + // #1964 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 82800+ + + // #1965 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 82880+ + + // #1966 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 82896 + + // #1967 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 82928 + + // #1968 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 82976+ + + // #1969 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 83056+ + + // #1970 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 83136+ + + // #1971 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 83152 + + // #1972 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 83184 + + // #1973 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 83216 + + // #1974 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 83312+ + + // #1975 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 83392+ + + // #1976 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 83408 + + // #1977 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 83440 + + // #1978 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 83472 + + // #1979 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 83568+ + + // #1980 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 83648+ + + // #1981 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 83664 + + // #1982 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 83696 + + // #1983 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 83728 + + // #1984 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 83824+ + + // #1985 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 83904+ + + // #1986 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 83920 + + // #1987 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 83952 + + // #1988 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 84000+ + + // #1989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 84080+ + + // #1990 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 84160+ + + // #1991 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 84176 + + // #1992 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 84208 + + // #1993 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 84240 + + // #1994 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 84336+ + + // #1995 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 84416+ + + // #1996 + "112,111,110" + "\377\376\375\374\373" // 84432 + + // #1997 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 84448 + + // #1998 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 84480 + + // #1999 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 84528+ + + // #2000 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 84608+ + + // #2001 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 84624 + + // #2002 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 84656 + + // #2003 + "contrast" + "\377\376\375\374\373\372\371\370" // 84672 + + // #2004 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 84720+ + + // #2005 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 84800+ + + // #2006 + "232,231,230" + "\377\376\375\374\373" // 84816 + + // #2007 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 84832 + + // #2008 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 84896+ + + // #2009 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 84976+ + + // #2010 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 85056+ + + // #2011 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 85088+ + + // #2012 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 85104 + + // #2013 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 85136 + + // #2014 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 85232+ + + // #2015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 85312+ + + // #2016 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 85328 + + // #2017 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 85344 + + // #2018 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 85376 + + // #2019 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 85424+ + + // #2020 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 85504+ + + // #2021 + "136,135,134" + "\377\376\375\374\373" // 85520 + + // #2022 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 85536 + + // #2023 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 85568 + + // #2024 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 85616+ + + // #2025 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 85696+ + + // #2026 + "\377\376\375\374\373\372\371\370" + "255,128,224" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 85728 + + // #2027 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 85744 + + // #2028 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 85792+ + + // #2029 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 85872+ + + // #2030 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 85952+ + + // #2031 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 85984 + + // #2032 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 86000 + + // #2033 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 86032 + + // #2034 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 86128+ + + // #2035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 86208+ + + // #2036 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 86240+ + + // #2037 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 86256 + + // #2038 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 86288 + + // #2039 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 86384+ + + // #2040 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 86464+ + + // #2041 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 86480 + + // #2042 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 86496 + + // #2043 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 86528 + + // #2044 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 86576+ + + // #2045 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 86656+ + + // #2046 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 86688 + + // #2047 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 86704 + + // #2048 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 86752+ + + // #2049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 86832+ + + // #2050 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 86912+ + + // #2051 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 86928 + + // #2052 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 86944 + + // #2053 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 86976 + + // #2054 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 87024+ + + // #2055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 87104+ + + // #2056 + "119,183,255" + "\377\376\375\374\373" // 87120 + + // #2057 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 87136 + + // #2058 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 87168 + + // #2059 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 87216+ + + // #2060 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 87296+ + + // #2061 + "\377\376\375\374\373\372\371\370" + "43,116,199" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 87328 + + // #2062 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 87344 + + // #2063 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 87376 + + // #2064 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 87472+ + + // #2065 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 87552+ + + // #2066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 87600 + + // #2067 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 87616 + + // #2068 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 87632 + + // #2069 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 87648 + + // #2070 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 87728+ + + // #2071 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 87808+ + + // #2072 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 87824 + + // #2073 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 87856 + + // #2074 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 87904+ + + // #2075 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 87984+ + + // #2076 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 88064+ + + // #2077 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 88080 + + // #2078 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 88112 + + // #2079 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 88144 + + // #2080 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 88240+ + + // #2081 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 88320+ + + // #2082 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 88336 + + // #2083 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 88368 + + // #2084 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 88400 + + // #2085 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 88496+ + + // #2086 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 88576+ + + // #2087 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 88592 + + // #2088 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 88624 + + // #2089 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 88656 + + // #2090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 88752+ + + // #2091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 88832+ + + // #2092 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 88848 + + // #2093 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 88880 + + // #2094 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 88928+ + + // #2095 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 89008+ + + // #2096 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 89088+ + + // #2097 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 89104 + + // #2098 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 89136 + + // #2099 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 89168 + + // #2100 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 89264+ + + // #2101 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 89344+ + + // #2102 + "112,111,110" + "\377\376\375\374\373" // 89360 + + // #2103 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 89376 + + // #2104 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 89408 + + // #2105 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 89456+ + + // #2106 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 89536+ + + // #2107 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 89552 + + // #2108 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 89568 + + // #2109 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 89584 + + // #2110 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 89648+ + + // #2111 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 89728+ + + // #2112 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 89744 + + // #2113 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 89760 + + // #2114 + "ChangeSelectionColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 89792 + + // #2115 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 89840+ + + // #2116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 89920+ + + // #2117 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 89936 + + // #2118 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 89952 + + // #2119 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 89968 + + // #2120 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 90032+ + + // #2121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 90112+ + + // #2122 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 90128 + + // #2123 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 90144 + + // #2124 + "ChangeSelectionColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 90176 + + // #2125 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 90224+ + + // #2126 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 90304+ + + // #2127 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 90320 + + // #2128 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 90352 + + // #2129 + "contrast" + "\377\376\375\374\373\372\371\370" // 90368 + + // #2130 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 90416+ + + // #2131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 90496+ + + // #2132 + "65,139,212" + "\377\376\375\374\373\372" // 90512 + + // #2133 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 90528 + + // #2134 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 90592+ + + // #2135 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 90672+ + + // #2136 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 90752+ + + // #2137 + "62,138,204" + "\377\376\375\374\373\372" // 90768 + + // #2138 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 90784 + + // #2139 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 90816 + + // #2140 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 90864+ + + // #2141 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 90944+ + + // #2142 + "255,255,255" + "\377\376\375\374\373" // 90960 + + // #2143 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 90976 + + // #2144 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 91008 + + // #2145 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 91056+ + + // #2146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 91136+ + + // #2147 + "165,193,228" + "\377\376\375\374\373" // 91152 + + // #2148 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 91168 + + // #2149 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 91200 + + // #2150 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 91248+ + + // #2151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 91328+ + + // #2152 + "\377\376\375\374\373\372\371\370" + "255,128,224" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91360 + + // #2153 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 91376 + + // #2154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 91424+ + + // #2155 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 91504+ + + // #2156 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 91584+ + + // #2157 + "\377\376\375\374\373\372\371\370" + "0,49,110" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 91616 + + // #2158 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 91632 + + // #2159 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 91664 + + // #2160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 91760+ + + // #2161 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 91840+ + + // #2162 + "69,40,134" + "\377\376\375\374\373\372\371" // 91856 + + // #2163 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 91872 + + // #2164 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 91904 + + // #2165 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 91952+ + + // #2166 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 92032+ + + // #2167 + "156,14,14" + "\377\376\375\374\373\372\371" // 92048 + + // #2168 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 92064 + + // #2169 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 92096 + + // #2170 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 92144+ + + // #2171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 92224+ + + // #2172 + "\377\376\375\374\373\372\371\370" + "255,221,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 92256 + + // #2173 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 92272 + + // #2174 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 92320+ + + // #2175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 92400+ + + // #2176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 92480+ + + // #2177 + "\377\376\375\374\373\372\371\370" + "128,255,128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 92512 + + // #2178 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 92528 + + // #2179 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 92560 + + // #2180 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 92656+ + + // #2181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 92736+ + + // #2182 + "119,183,255" + "\377\376\375\374\373" // 92752 + + // #2183 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 92768 + + // #2184 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 92800 + + // #2185 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 92848+ + + // #2186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 92928+ + + // #2187 + "\377\376\375\374\373\372\371\370" + "43,116,199" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 92960 + + // #2188 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 92976 + + // #2189 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 93008 + + // #2190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 93104+ + + // #2191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 93184+ + + // #2192 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 93200 + + // #2193 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 93232 + + // #2194 + "contrast" + "\377\376\375\374\373\372\371\370" // 93248 + + // #2195 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 93296+ + + // #2196 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 93376+ + + // #2197 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93408 + + // #2198 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 93424 + + // #2199 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 93472+ + + // #2200 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 93552+ + + // #2201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 93632+ + + // #2202 + "\377\376\375\374\373\372\371\370" + "218,217,216" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93664 + + // #2203 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 93680 + + // #2204 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93712 + + // #2205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 93808+ + + // #2206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 93888+ + + // #2207 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 93904 + + // #2208 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 93920 + + // #2209 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 93952 + + // #2210 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 94000+ + + // #2211 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 94080+ + + // #2212 + "136,135,134" + "\377\376\375\374\373" // 94096 + + // #2213 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 94112 + + // #2214 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 94144 + + // #2215 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 94192+ + + // #2216 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 94272+ + + // #2217 + "255,128,224" + "\377\376\375\374\373" // 94288 + + // #2218 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 94304 + + // #2219 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 94368+ + + // #2220 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 94448+ + + // #2221 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 94528+ + + // #2222 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 94560 + + // #2223 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 94576 + + // #2224 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 94608 + + // #2225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 94704+ + + // #2226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 94784+ + + // #2227 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 94816+ + + // #2228 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 94832 + + // #2229 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 94864 + + // #2230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 94960+ + + // #2231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 95040+ + + // #2232 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 95056 + + // #2233 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 95072 + + // #2234 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 95104 + + // #2235 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 95152+ + + // #2236 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 95232+ + + // #2237 + "176,128,0" + "\377\376\375\374\373\372\371" // 95248 + + // #2238 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 95264 + + // #2239 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 95328+ + + // #2240 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 95408+ + + // #2241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 95488+ + + // #2242 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 95520 + + // #2243 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 95536 + + // #2244 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 95568 + + // #2245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 95664+ + + // #2246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 95744+ + + // #2247 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 95776 + + // #2248 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 95792 + + // #2249 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 95824 + + // #2250 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 95920+ + + // #2251 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 96000+ + + // #2252 + "43,116,199" + "\377\376\375\374\373\372" // 96016 + + // #2253 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 96032 + + // #2254 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 96064 + + // #2255 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 96112+ + + // #2256 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 96192+ + + // #2257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ColorEffects:Inactive" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 96240 + + // #2258 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 96256 + + // #2259 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 96272 + + // #2260 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 96288 + + // #2261 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 96368+ + + // #2262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 96448+ + + // #2263 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 96464 + + // #2264 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 96496 + + // #2265 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "IntensityEffect" + "\377\376\375\374\373\372" // 96544+ + + // #2266 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 96624+ + + // #2267 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 96704+ + + // #2268 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 96720 + + // #2269 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 96752 + + // #2270 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 96784 + + // #2271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 96880+ + + // #2272 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 96960+ + + // #2273 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 96976 + + // #2274 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 97008 + + // #2275 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 97040 + + // #2276 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 97136+ + + // #2277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 97216+ + + // #2278 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 97232 + + // #2279 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 97264 + + // #2280 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 97296 + + // #2281 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 97392+ + + // #2282 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 97472+ + + // #2283 + "\377\376\375\374\373\372\371\370" + "0.025" + "\377\376\375" // 97488 + + // #2284 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 97520 + + // #2285 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 97568+ + + // #2286 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 97648+ + + // #2287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 97728+ + + // #2288 + "\377\376\375\374\373\372\371\370" + "0.1" + "\377\376\375\374\373" // 97744 + + // #2289 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 97776 + + // #2290 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 97808 + + // #2291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 97904+ + + // #2292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 97984+ + + // #2293 + "112,111,110" + "\377\376\375\374\373" // 98000 + + // #2294 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 98016 + + // #2295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 98048 + + // #2296 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 98096+ + + // #2297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 98176+ + + // #2298 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 98192 + + // #2299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 98224 + + // #2300 + "contrast" + "\377\376\375\374\373\372\371\370" // 98240 + + // #2301 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 98288+ + + // #2302 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 98368+ + + // #2303 + "255,255,255" + "\377\376\375\374\373" // 98384 + + // #2304 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 98400 + + // #2305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 98464+ + + // #2306 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 98544+ + + // #2307 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 98624+ + + // #2308 + "\377\376\375\374\373\372\371\370" + "248,247,246" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98656+ + + // #2309 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 98672 + + // #2310 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98704 + + // #2311 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 98800+ + + // #2312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 98880+ + + // #2313 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 98896 + + // #2314 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 98912 + + // #2315 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 98944 + + // #2316 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 98992+ + + // #2317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 99072+ + + // #2318 + "\377\376\375\374\373\372\371\370" + "136,135,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99104 + + // #2319 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 99120 + + // #2320 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 99152 + + // #2321 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 99248+ + + // #2322 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 99328+ + + // #2323 + "255,128,224" + "\377\376\375\374\373" // 99344 + + // #2324 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 99360 + + // #2325 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 99424+ + + // #2326 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 99504+ + + // #2327 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 99584+ + + // #2328 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 99616 + + // #2329 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 99632 + + // #2330 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 99664 + + // #2331 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 99760+ + + // #2332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 99840+ + + // #2333 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 99872+ + + // #2334 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 99888 + + // #2335 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 99920 + + // #2336 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 100016+ + + // #2337 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 100096+ + + // #2338 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 100112 + + // #2339 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 100128 + + // #2340 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 100160 + + // #2341 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 100208+ + + // #2342 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 100288+ + + // #2343 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 100320+ + + // #2344 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 100336 + + // #2345 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 100384+ + + // #2346 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 100464+ + + // #2347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 100544+ + + // #2348 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 100560 + + // #2349 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 100576 + + // #2350 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 100608 + + // #2351 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 100656+ + + // #2352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 100736+ + + // #2353 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100768 + + // #2354 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 100784 + + // #2355 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 100816 + + // #2356 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 100912+ + + // #2357 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 100992+ + + // #2358 + "43,116,199" + "\377\376\375\374\373\372" // 101008 + + // #2359 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 101024 + + // #2360 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 101056 + + // #2361 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 101104+ + + // #2362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 101184+ + + // #2363 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 101216 + + // #2364 + "\377\376\375\374\373\372\371\370" + "2" + "\377\376\375\374\373\372\371" // 101232 + + // #2365 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 101264 + + // #2366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 101344+ + + // #2367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 101424+ + + // #2368 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 101504+ + + // #2369 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 101520 + + // #2370 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 101552 + + // #2371 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 101584 + + // #2372 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 101680+ + + // #2373 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 101760+ + + // #2374 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 101776 + + // #2375 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 101808 + + // #2376 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 101840 + + // #2377 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 101936+ + + // #2378 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 102016+ + + // #2379 + "0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102032 + + // #2380 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 102064 + + // #2381 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 102096 + + // #2382 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 102192+ + + // #2383 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 102272+ + + // #2384 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 102288 + + // #2385 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 102320 + + // #2386 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 102368+ + + // #2387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 102448+ + + // #2388 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 102528+ + + // #2389 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 102544 + + // #2390 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 102576 + + // #2391 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102608 + + // #2392 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 102704+ + + // #2393 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 102784+ + + // #2394 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 102800 + + // #2395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 102832 + + // #2396 + "contrast" + "\377\376\375\374\373\372\371\370" // 102848 + + // #2397 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 102896+ + + // #2398 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 102976+ + + // #2399 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103008 + + // #2400 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 103024 + + // #2401 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 103072+ + + // #2402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 103152+ + + // #2403 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 103232+ + + // #2404 + "\377\376\375\374\373\372\371\370" + "218,217,216" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103264 + + // #2405 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 103280 + + // #2406 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103312 + + // #2407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 103408+ + + // #2408 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 103488+ + + // #2409 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 103504 + + // #2410 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 103520 + + // #2411 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 103552 + + // #2412 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 103600+ + + // #2413 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 103680+ + + // #2414 + "136,135,134" + "\377\376\375\374\373" // 103696 + + // #2415 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 103712 + + // #2416 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 103744 + + // #2417 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 103792+ + + // #2418 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 103872+ + + // #2419 + "255,128,224" + "\377\376\375\374\373" // 103888 + + // #2420 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 103904 + + // #2421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 103968+ + + // #2422 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 104048+ + + // #2423 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 104128+ + + // #2424 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 104160 + + // #2425 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 104176 + + // #2426 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 104208 + + // #2427 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 104304+ + + // #2428 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 104384+ + + // #2429 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 104416+ + + // #2430 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 104432 + + // #2431 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 104464 + + // #2432 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 104560+ + + // #2433 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 104640+ + + // #2434 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 104656 + + // #2435 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 104672 + + // #2436 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 104704 + + // #2437 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 104752+ + + // #2438 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 104832+ + + // #2439 + "176,128,0" + "\377\376\375\374\373\372\371" // 104848 + + // #2440 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 104864 + + // #2441 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 104928+ + + // #2442 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 105008+ + + // #2443 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 105088+ + + // #2444 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105120 + + // #2445 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 105136 + + // #2446 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 105168 + + // #2447 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 105264+ + + // #2448 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 105344+ + + // #2449 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 105376 + + // #2450 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 105392 + + // #2451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 105424 + + // #2452 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 105520+ + + // #2453 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 105600+ + + // #2454 + "43,116,199" + "\377\376\375\374\373\372" // 105616 + + // #2455 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 105632 + + // #2456 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 105664 + + // #2457 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 105712+ + + // #2458 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 105792+ + + // #2459 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 105824 + + // #2460 + "\377\376\375\374\373\372\371\370" + "2" + "\377\376\375\374\373\372\371" // 105840 + + // #2461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 105872 + + // #2462 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 105952+ + + // #2463 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 106032+ + + // #2464 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 106112+ + + // #2465 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 106128 + + // #2466 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 106160 + + // #2467 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 106192 + + // #2468 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 106288+ + + // #2469 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 106368+ + + // #2470 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 106384 + + // #2471 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 106416 + + // #2472 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 106448 + + // #2473 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 106544+ + + // #2474 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 106624+ + + // #2475 + "0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106640 + + // #2476 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 106672 + + // #2477 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 106704 + + // #2478 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 106800+ + + // #2479 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 106880+ + + // #2480 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 106896 + + // #2481 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 106928 + + // #2482 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 106976+ + + // #2483 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 107056+ + + // #2484 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 107136+ + + // #2485 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 107152 + + // #2486 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 107184 + + // #2487 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 107216 + + // #2488 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 107312+ + + // #2489 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 107392+ + + // #2490 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 107408 + + // #2491 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 107440 + + // #2492 + "contrast" + "\377\376\375\374\373\372\371\370" // 107456 + + // #2493 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 107504+ + + // #2494 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 107584+ + + // #2495 + "232,231,230" + "\377\376\375\374\373" // 107600 + + // #2496 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 107616 + + // #2497 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "BackgroundNormal" + "\377" // 107680+ + + // #2498 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 107760+ + + // #2499 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 107840+ + + // #2500 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 107872+ + + // #2501 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 107888 + + // #2502 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 107920 + + // #2503 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 108016+ + + // #2504 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 108096+ + + // #2505 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 108112 + + // #2506 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 108128 + + // #2507 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 108160 + + // #2508 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 108208+ + + // #2509 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 108288+ + + // #2510 + "136,135,134" + "\377\376\375\374\373" // 108304 + + // #2511 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 108320 + + // #2512 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 108352 + + // #2513 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 108400+ + + // #2514 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 108480+ + + // #2515 + "\377\376\375\374\373\372\371\370" + "255,128,224" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108512 + + // #2516 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 108528 + + // #2517 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 108576+ + + // #2518 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 108656+ + + // #2519 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 108736+ + + // #2520 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108768 + + // #2521 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 108784 + + // #2522 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 108816 + + // #2523 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 108912+ + + // #2524 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 108992+ + + // #2525 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 109024+ + + // #2526 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 109040 + + // #2527 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 109072 + + // #2528 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 109168+ + + // #2529 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 109248+ + + // #2530 + "\377\376\375\374\373\372\371\370" + "191,3,3" + "\377" // 109264 + + // #2531 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 109280 + + // #2532 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 109312 + + // #2533 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 109360+ + + // #2534 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 109440+ + + // #2535 + "\377\376\375\374\373\372\371\370" + "176,128,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 109472 + + // #2536 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 109488 + + // #2537 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "ForegroundNeutral" + "\377\376\375\374\373" // 109536+ + + // #2538 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 109616+ + + // #2539 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 109696+ + + // #2540 + "0,110,40" + "\377\376\375\374\373\372\371\370" // 109712 + + // #2541 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 109728 + + // #2542 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 109760 + + // #2543 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 109808+ + + // #2544 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 109888+ + + // #2545 + "119,183,255" + "\377\376\375\374\373" // 109904 + + // #2546 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 109920 + + // #2547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 109952 + + // #2548 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 110000+ + + // #2549 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 110080+ + + // #2550 + "\377\376\375\374\373\372\371\370" + "43,116,199" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 110112 + + // #2551 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 110128 + + // #2552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 110160 + + // #2553 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 110256+ + + // #2554 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 110336+ + + // #2555 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 110368 + + // #2556 + "\377\376\375\374\373\372\371\370" + "2" + "\377\376\375\374\373\372\371" // 110384 + + // #2557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110416 + + // #2558 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 110496+ + + // #2559 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 110576+ + + // #2560 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 110656+ + + // #2561 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110672 + + // #2562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110704 + + // #2563 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 110736 + + // #2564 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 110832+ + + // #2565 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 110912+ + + // #2566 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 110928 + + // #2567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110960 + + // #2568 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 110992 + + // #2569 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 111088+ + + // #2570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 111168+ + + // #2571 + "0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 111184 + + // #2572 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 111216 + + // #2573 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 111248 + + // #2574 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 111344+ + + // #2575 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 111424+ + + // #2576 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 111440 + + // #2577 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 111472 + + // #2578 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 111520+ + + // #2579 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 111600+ + + // #2580 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 111680+ + + // #2581 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 111696 + + // #2582 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 111728 + + // #2583 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 111760 + + // #2584 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 111856+ + + // #2585 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 111936+ + + // #2586 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 111952 + + // #2587 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 111968 + + // #2588 + "\377\376\375\374" + "Enable" + "\377\376\375\374\373\372" // 111984 + + // #2589 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 112048+ + + // #2590 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 112128+ + + // #2591 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 112144 + + // #2592 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 112160 + + // #2593 + "ChangeSelectionColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 112192 + + // #2594 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 112240+ + + // #2595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 112320+ + + // #2596 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 112336 + + // #2597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 112368 + + // #2598 + "contrast" + "\377\376\375\374\373\372\371\370" // 112384 + + // #2599 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 112432+ + + // #2600 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 112512+ + + // #2601 + "\377\376\375\374\373\372\371\370" + "224,223,222" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 112544 + + // #2602 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 112560 + + // #2603 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "BackgroundNormal" + "\377" // 112608+ + + // #2604 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 112688+ + + // #2605 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 112768+ + + // #2606 + "\377\376\375\374\373\372\371\370" + "218,217,216" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 112800 + + // #2607 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 112816 + + // #2608 + "BackgroundAlternate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 112848 + + // #2609 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 112944+ + + // #2610 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 113024+ + + // #2611 + "20,19,18" + "\377\376\375\374\373\372\371\370" // 113040 + + // #2612 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 113056 + + // #2613 + "\377" + "ForegroundNormal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 113088 + + // #2614 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 113136+ + + // #2615 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 113216+ + + // #2616 + "136,135,134" + "\377\376\375\374\373" // 113232 + + // #2617 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 113248 + + // #2618 + "\377\376" + "ForegroundInactive" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 113280 + + // #2619 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 113328+ + + // #2620 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 113408+ + + // #2621 + "255,128,224" + "\377\376\375\374\373" // 113424 + + // #2622 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 113440 + + // #2623 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333" + "ForegroundActive" + "\377\376\375\374\373\372\371\370\367\366\365" // 113504+ + + // #2624 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 113584+ + + // #2625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 113664+ + + // #2626 + "\377\376\375\374\373\372\371\370" + "0,87,174" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 113696 + + // #2627 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 113712 + + // #2628 + "\377\376\375\374\373\372" + "ForegroundLink" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 113744 + + // #2629 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 113840+ + + // #2630 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 113920+ + + // #2631 + "\377\376\375\374\373\372\371\370" + "69,40,134" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 113952+ + + // #2632 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 113968 + + // #2633 + "\377\376\375\374\373" + "ForegroundVisited" + "\377\376\375\374\373\372\371\370\367\366" // 114000 + + // #2634 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 114096+ + + // #2635 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 114176+ + + // #2636 + "191,3,3" + "\377\376\375\374\373\372\371\370\367" // 114192 + + // #2637 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 114208 + + // #2638 + "\377\376\375\374\373\372\371" + "ForegroundNegative" + "\377\376\375\374\373\372\371" // 114240 + + // #2639 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 114288+ + + // #2640 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 114368+ + + // #2641 + "176,128,0" + "\377\376\375\374\373\372\371" // 114384 + + // #2642 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 114400 + + // #2643 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "ForegroundNeutral" + "\377\376\375\374\373" // 114464+ + + // #2644 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 114544+ + + // #2645 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 114624+ + + // #2646 + "\377\376\375\374\373\372\371\370" + "0,110,40" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 114656 + + // #2647 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 114672 + + // #2648 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "ForegroundPositive" + "\377\376" // 114704 + + // #2649 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 114800+ + + // #2650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 114880+ + + // #2651 + "\377\376\375\374\373\372\371\370" + "119,183,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 114912 + + // #2652 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 114928 + + // #2653 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationHover" + "\377\376" // 114960 + + // #2654 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 115056+ + + // #2655 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 115136+ + + // #2656 + "43,116,199" + "\377\376\375\374\373\372" // 115152 + + // #2657 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 115168 + + // #2658 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "DecorationFocus" + "\377\376" // 115200 + + // #2659 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 115248+ + + // #2660 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 115328+ + + // #2661 + "\377\376\375\374\373\372\371\370" + "ColorEffects:Disabled" + "\377\376\375" // 115360 + + // #2662 + "\377\376\375\374\373\372\371\370" + "2" + "\377\376\375\374\373\372\371" // 115376 + + // #2663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115408 + + // #2664 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "IntensityEffect" + "\377\376\375\374\373\372" // 115488+ + + // #2665 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 115568+ + + // #2666 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 115648+ + + // #2667 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115664 + + // #2668 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115696 + + // #2669 + "\377\376\375\374\373\372\371\370\367\366\365" + "ColorEffect" + "\377\376\375\374\373\372\371\370\367\366" // 115728 + + // #2670 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 115824+ + + // #2671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 115904+ + + // #2672 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 115920 + + // #2673 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115952 + + // #2674 + "\377\376\375\374\373\372\371" + "ContrastEffect" + "\377\376\375\374\373\372\371\370\367\366\365" // 115984 + + // #2675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 116080+ + + // #2676 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 116160+ + + // #2677 + "0.1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 116176 + + // #2678 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116208 + + // #2679 + "\377\376\375\374\373\372" + "IntensityAmount" + "\377\376\375\374\373\372\371\370\367\366\365" // 116240 + + // #2680 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 116336+ + + // #2681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 116416+ + + // #2682 + "\377\376\375\374\373\372\371\370" + "0" + "\377\376\375\374\373\372\371" // 116432 + + // #2683 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116464 + + // #2684 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "ColorAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 116512+ + + // #2685 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 116592+ + + // #2686 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 116672+ + + // #2687 + "0.65" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 116688 + + // #2688 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116720 + + // #2689 + "\377\376" + "ContrastAmount" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 116752 + + // #2690 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 116848+ + + // #2691 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 116928+ + + // #2692 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 116944 + + // #2693 + "\377\376\375\374\373\372" + "wacomcfg" + "\377\376" // 116960 + + // #2694 + "\377\376\375\374" + "lib" + "\377\376\375\374\373\372\371\370\367" // 116976 + + // #2695 + "\377\376\375\374\373\372\371\370" + ".so.%1" + "\377\376" // 116992 + + // #2696 + "\377\376\375" + "Cannot load library %1: %2" + "\377\376\375" // 117024+ + + // #2697 + "\377\376\375\374" + "Desktop" + "\377\376\375\374\373" // 117040 + + // #2698 + "\377\376" + "Toolbar" + "\377\376\375\374\373\372\371" // 117056 + + // #2699 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MainToolbar" + "\377\376\375\374\373\372\371\370\367" // 117088 + + // #2700 + "\377\376\375\374\373\372\371\370" + "Small" + "\377\376\375" // 117104 + + // #2701 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Panel" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117136 + + // #2702 + "\377\376\375" + "Dialog" + "\377\376\375\374\373\372\371" // 117152 + + // #2703 + "Default" + "\377\376\375\374\373\372\371\370\367" // 117168 + + // #2704 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "Active" + "\377\376\375\374\373\372\371\370\367\366\365" // 117216+ + + // #2705 + "\377\376\375\374\373" + "Disabled" + "\377\376\375" // 117232 + + // #2706 + "\377\376\375\374" + "togray" + "\377\376\375\374\373\372" // 117248 + + // #2707 + "\377\376\375\374\373\372\371\370\367\366\365" + "colorize" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117280+ + + // #2708 + "\377\376\375\374" + "desaturate" + "\377\376" // 117296 + + // #2709 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "togamma" + "\377\376\375\374\373\372\371\370\367\366" // 117328 + + // #2710 + "\377\376\375\374\373" + "none" + "\377\376\375\374\373\372\371" // 117344 + + // #2711 + "\377\376\375\374\373\372\371" + "tomonochrome" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117376 + + // #2712 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 117392 + + // #2713 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 117408 + + // #2714 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117472+ + + // #2715 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 117488 + + // #2716 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 117520 + + // #2717 + "DefaultValue" + "\377\376\375\374" // 117536 + + // #2718 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 117616+ + + // #2719 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 117696+ + + // #2720 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 117728 + + // #2721 + "\377\376\375\374\373\372\371\370" + "144,128,248" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117760 + + // #2722 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 117776 + + // #2723 + "\377\376\375\374\373\372\371\370" + "DefaultColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 117808 + + // #2724 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 117872+ + + // #2725 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 117952+ + + // #2726 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 117968 + + // #2727 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 117984 + + // #2728 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 118000 + + // #2729 + "\377\376\375\374\373\372\371\370" + "DefaultColor2" + "\377\376\375\374\373\372\371\370\367\366\365" // 118032 + + // #2730 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 118128+ + + // #2731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 118208+ + + // #2732 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 118240 + + // #2733 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 118256 + + // #2734 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 118272 + + // #2735 + "DefaultSemiTransparent" + "\377\376\375\374\373\372\371\370\367\366" // 118304 + + // #2736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 118384+ + + // #2737 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 118464+ + + // #2738 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 118480 + + // #2739 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 118560+ + + // #2740 + "\377\376\375\374\373\372\371\370" + "0.7" + "\377\376\375\374\373" // 118576 + + // #2741 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 118608 + + // #2742 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "ActiveValue" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 118688+ + + // #2743 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 118768+ + + // #2744 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 118848+ + + // #2745 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 118880 + + // #2746 + "169,156,255" + "\377\376\375\374\373" // 118896 + + // #2747 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 118912 + + // #2748 + "ActiveColor" + "\377\376\375\374\373" // 118928 + + // #2749 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 119024+ + + // #2750 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 119104+ + + // #2751 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 119120 + + // #2752 + "\377\376\375\374\373\372\371\370" + "0,0,0" + "\377\376\375" // 119136 + + // #2753 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 119152 + + // #2754 + "\377\376\375\374\373\372\371\370" + "ActiveColor2" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 119184 + + // #2755 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 119280+ + + // #2756 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 119360+ + + // #2757 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 119392 + + // #2758 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 119408 + + // #2759 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 119424 + + // #2760 + "ActiveSemiTransparent" + "\377\376\375\374\373\372\371\370\367\366\365" // 119456 + + // #2761 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 119536+ + + // #2762 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 119616+ + + // #2763 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 119632 + + // #2764 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 119712+ + + // #2765 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 119728 + + // #2766 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 119760 + + // #2767 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DisabledValue" + "\377\376\375\374\373\372\371\370\367\366\365" // 119840+ + + // #2768 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 119920+ + + // #2769 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 120000+ + + // #2770 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 120032 + + // #2771 + "\377\376\375\374\373\372\371\370" + "34,202,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 120064 + + // #2772 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 120080 + + // #2773 + "\377\376\375\374\373\372\371\370" + "DisabledColor" + "\377\376\375\374\373\372\371\370\367\366\365" // 120112 + + // #2774 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 120176+ + + // #2775 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 120256+ + + // #2776 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 120272 + + // #2777 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 120288 + + // #2778 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 120304 + + // #2779 + "\377\376\375\374\373\372\371\370" + "DisabledColor2" + "\377\376\375\374\373\372\371\370\367\366" // 120336 + + // #2780 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 120432+ + + // #2781 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 120512+ + + // #2782 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 120544 + + // #2783 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 120560 + + // #2784 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 120576 + + // #2785 + "DisabledSemiTransparent" + "\377\376\375\374\373\372\371\370\367" // 120608 + + // #2786 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 120688+ + + // #2787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 120768+ + + // #2788 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 120784 + + // #2789 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 120800 + + // #2790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 120864+ + + // #2791 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 120880 + + // #2792 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 120912 + + // #2793 + "DefaultValue" + "\377\376\375\374" // 120928 + + // #2794 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 121008+ + + // #2795 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 121088+ + + // #2796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 121120 + + // #2797 + "\377\376\375\374\373\372\371\370" + "144,128,248" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 121152 + + // #2798 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 121168 + + // #2799 + "DefaultColor" + "\377\376\375\374" // 121184 + + // #2800 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 121264+ + + // #2801 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 121344+ + + // #2802 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 121360 + + // #2803 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 121376 + + // #2804 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 121392 + + // #2805 + "\377\376\375\374\373\372\371\370" + "DefaultColor2" + "\377\376\375\374\373\372\371\370\367\366\365" // 121424 + + // #2806 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 121520+ + + // #2807 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 121600+ + + // #2808 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 121632 + + // #2809 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 121648 + + // #2810 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 121664 + + // #2811 + "\377\376\375\374\373\372\371\370" + "DefaultSemiTransparent" + "\377\376" // 121696 + + // #2812 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 121776+ + + // #2813 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 121856+ + + // #2814 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 121872 + + // #2815 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 121952+ + + // #2816 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 121968 + + // #2817 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 122000 + + // #2818 + "\377\376\375\374\373\372\371\370" + "ActiveValue" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 122032 + + // #2819 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 122096+ + + // #2820 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 122176+ + + // #2821 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 122208 + + // #2822 + "169,156,255" + "\377\376\375\374\373" // 122224 + + // #2823 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 122240 + + // #2824 + "\377\376\375\374\373\372\371\370" + "ActiveColor" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 122272+ + + // #2825 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 122352+ + + // #2826 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 122432+ + + // #2827 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 122448 + + // #2828 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 122464 + + // #2829 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 122480 + + // #2830 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "ActiveColor2" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 122528+ + + // #2831 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 122608+ + + // #2832 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 122688+ + + // #2833 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 122720 + + // #2834 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 122736 + + // #2835 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 122752 + + // #2836 + "\377\376\375\374\373\372\371\370" + "ActiveSemiTransparent" + "\377\376\375" // 122784 + + // #2837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 122864+ + + // #2838 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 122944+ + + // #2839 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 122960 + + // #2840 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 123040+ + + // #2841 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 123056 + + // #2842 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 123088 + + // #2843 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DisabledValue" + "\377\376\375\374\373\372\371\370\367\366\365" // 123168+ + + // #2844 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 123248+ + + // #2845 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 123328+ + + // #2846 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 123360 + + // #2847 + "\377\376\375\374\373\372\371\370" + "34,202,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 123392 + + // #2848 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 123408 + + // #2849 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DisabledColor" + "\377\376\375\374\373\372\371\370\367\366\365" // 123488+ + + // #2850 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 123568+ + + // #2851 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 123648+ + + // #2852 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 123664 + + // #2853 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 123680 + + // #2854 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 123696 + + // #2855 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "DisabledColor2" + "\377\376\375\374\373\372\371\370\367\366" // 123744+ + + // #2856 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 123824+ + + // #2857 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 123904+ + + // #2858 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 123936 + + // #2859 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 123952 + + // #2860 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 123968 + + // #2861 + "DisabledSemiTransparent" + "\377\376\375\374\373\372\371\370\367" // 124000 + + // #2862 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 124080+ + + // #2863 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 124160+ + + // #2864 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 124176 + + // #2865 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 124192 + + // #2866 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 124256+ + + // #2867 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 124272 + + // #2868 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 124304 + + // #2869 + "\377\376\375\374\373\372\371\370" + "DefaultValue" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 124336 + + // #2870 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 124400+ + + // #2871 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 124480+ + + // #2872 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 124512 + + // #2873 + "\377\376\375\374\373\372\371\370" + "144,128,248" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 124544 + + // #2874 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 124560 + + // #2875 + "\377\376\375\374\373\372\371\370" + "DefaultColor" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 124592 + + // #2876 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 124656+ + + // #2877 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 124736+ + + // #2878 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 124752 + + // #2879 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 124768 + + // #2880 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 124784 + + // #2881 + "\377\376\375\374\373\372\371\370" + "DefaultColor2" + "\377\376\375\374\373\372\371\370\367\366\365" // 124816 + + // #2882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 124912+ + + // #2883 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 124992+ + + // #2884 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 125024 + + // #2885 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 125040 + + // #2886 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 125056 + + // #2887 + "DefaultSemiTransparent" + "\377\376\375\374\373\372\371\370\367\366" // 125088+ + + // #2888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 125168+ + + // #2889 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 125248+ + + // #2890 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 125264 + + // #2891 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 125344+ + + // #2892 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 125360 + + // #2893 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 125392 + + // #2894 + "\377\376\375\374\373\372\371\370" + "ActiveValue" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 125424 + + // #2895 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 125488+ + + // #2896 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 125568+ + + // #2897 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 125600 + + // #2898 + "169,156,255" + "\377\376\375\374\373" // 125616 + + // #2899 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 125632 + + // #2900 + "ActiveColor" + "\377\376\375\374\373" // 125648 + + // #2901 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 125744+ + + // #2902 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 125824+ + + // #2903 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 125840 + + // #2904 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 125856 + + // #2905 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 125872 + + // #2906 + "ActiveColor2" + "\377\376\375\374" // 125888 + + // #2907 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 125936+ + + // #2908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 126016+ + + // #2909 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 126048 + + // #2910 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 126064 + + // #2911 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 126080 + + // #2912 + "\377\376\375\374\373\372\371\370" + "ActiveSemiTransparent" + "\377\376\375" // 126112 + + // #2913 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 126192+ + + // #2914 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 126272+ + + // #2915 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 126288 + + // #2916 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 126368+ + + // #2917 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 126384 + + // #2918 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 126416 + + // #2919 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DisabledValue" + "\377\376\375\374\373\372\371\370\367\366\365" // 126496+ + + // #2920 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 126576+ + + // #2921 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 126656+ + + // #2922 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 126688 + + // #2923 + "\377\376\375\374\373\372\371\370" + "34,202,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 126720 + + // #2924 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 126736 + + // #2925 + "\377\376\375\374\373\372\371\370" + "DisabledColor" + "\377\376\375\374\373\372\371\370\367\366\365" // 126768 + + // #2926 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 126832+ + + // #2927 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 126912+ + + // #2928 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 126928 + + // #2929 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 126944 + + // #2930 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 126960 + + // #2931 + "\377\376\375\374\373\372\371\370" + "DisabledColor2" + "\377\376\375\374\373\372\371\370\367\366" // 126992 + + // #2932 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 127088+ + + // #2933 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 127168+ + + // #2934 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 127200 + + // #2935 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 127216 + + // #2936 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 127232 + + // #2937 + "\377\376\375\374\373\372\371\370" + "DisabledSemiTransparent" + "\377" // 127264+ + + // #2938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 127344+ + + // #2939 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 127424+ + + // #2940 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 127440 + + // #2941 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 127456 + + // #2942 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 127520+ + + // #2943 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 127536 + + // #2944 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 127568 + + // #2945 + "DefaultValue" + "\377\376\375\374" // 127584 + + // #2946 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 127664+ + + // #2947 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 127744+ + + // #2948 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 127776 + + // #2949 + "\377\376\375\374\373\372\371\370" + "144,128,248" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 127808 + + // #2950 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 127824 + + // #2951 + "DefaultColor" + "\377\376\375\374" // 127840 + + // #2952 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 127920+ + + // #2953 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 128000+ + + // #2954 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 128016 + + // #2955 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 128032 + + // #2956 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 128048 + + // #2957 + "DefaultColor2" + "\377\376\375" // 128064 + + // #2958 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 128112+ + + // #2959 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 128192+ + + // #2960 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 128224 + + // #2961 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 128240 + + // #2962 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 128256 + + // #2963 + "DefaultSemiTransparent" + "\377\376\375\374\373\372\371\370\367\366" // 128288 + + // #2964 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 128368+ + + // #2965 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 128448+ + + // #2966 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 128464 + + // #2967 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 128544+ + + // #2968 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 128560 + + // #2969 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 128592 + + // #2970 + "\377\376\375\374\373\372\371\370" + "ActiveValue" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 128624 + + // #2971 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 128688+ + + // #2972 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 128768+ + + // #2973 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 128800 + + // #2974 + "169,156,255" + "\377\376\375\374\373" // 128816 + + // #2975 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 128832 + + // #2976 + "ActiveColor" + "\377\376\375\374\373" // 128848 + + // #2977 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 128944+ + + // #2978 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 129024+ + + // #2979 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 129040 + + // #2980 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 129056 + + // #2981 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 129072 + + // #2982 + "ActiveColor2" + "\377\376\375\374" // 129088 + + // #2983 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 129136+ + + // #2984 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 129216+ + + // #2985 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 129248 + + // #2986 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 129264 + + // #2987 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 129280 + + // #2988 + "\377\376\375\374\373\372\371\370" + "ActiveSemiTransparent" + "\377\376\375" // 129312 + + // #2989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 129392+ + + // #2990 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 129472+ + + // #2991 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 129488 + + // #2992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 129568+ + + // #2993 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 129584 + + // #2994 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 129616 + + // #2995 + "DisabledValue" + "\377\376\375" // 129632 + + // #2996 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 129712+ + + // #2997 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 129792+ + + // #2998 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 129824 + + // #2999 + "\377\376\375\374\373\372\371\370" + "34,202,0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 129856 + + // #3000 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 129872 + + // #3001 + "\377\376\375\374\373\372\371\370" + "DisabledColor" + "\377\376\375\374\373\372\371\370\367\366\365" // 129904 + + // #3002 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 129968+ + + // #3003 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 130048+ + + // #3004 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 130064 + + // #3005 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 130080 + + // #3006 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 130096 + + // #3007 + "\377\376\375\374\373\372\371\370" + "DisabledColor2" + "\377\376\375\374\373\372\371\370\367\366" // 130128 + + // #3008 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 130224+ + + // #3009 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 130304+ + + // #3010 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 130336 + + // #3011 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 130352 + + // #3012 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 130368 + + // #3013 + "\377\376\375\374\373\372\371\370" + "DisabledSemiTransparent" + "\377" // 130400 + + // #3014 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 130480+ + + // #3015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 130560+ + + // #3016 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 130576 + + // #3017 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 130592 + + // #3018 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 130656+ + + // #3019 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 130672 + + // #3020 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 130704 + + // #3021 + "DefaultValue" + "\377\376\375\374" // 130720 + + // #3022 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 130800+ + + // #3023 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 130880+ + + // #3024 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 130912 + + // #3025 + "\377\376\375\374\373\372\371\370" + "144,128,248" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 130944 + + // #3026 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 130960 + + // #3027 + "DefaultColor" + "\377\376\375\374" // 130976 + + // #3028 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 131056+ + + // #3029 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 131136+ + + // #3030 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 131152 + + // #3031 + "0,0,0" + "\377\376\375\374\373\372\371\370\367\366\365" // 131168 + + // #3032 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 131184 + + // #3033 + "DefaultColor2" + "\377\376\375" // 131200 + + // #3034 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 131248+ + + // #3035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 131328+ + + // #3036 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 131360 + + // #3037 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 131376 + + // #3038 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 131392 + + // #3039 + "DefaultSemiTransparent" + "\377\376\375\374\373\372\371\370\367\366" // 131424+ + + // #3040 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 131504+ + + // #3041 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 131584+ + + // #3042 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 131600 + + // #3043 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 131680+ + + // #3044 + "\377\376\375\374\373\372\371\370" + "0.7" + "\377\376\375\374\373" // 131696 + + // #3045 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 131728 + + // #3046 + "\377\376\375\374\373\372\371\370" + "ActiveValue" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 131760 + + // #3047 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 131824+ + + // #3048 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 131904+ + + // #3049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 131936 + + // #3050 + "\377\376\375\374\373\372\371\370" + "169,156,255" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 131968 + + // #3051 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 131984 + + // #3052 + "ActiveColor" + "\377\376\375\374\373" // 132000 + + // #3053 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 132080+ + + // #3054 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 132160+ + + // #3055 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 132176 + + // #3056 + "\377\376\375\374\373\372\371\370" + "0,0,0" + "\377\376\375" // 132192 + + // #3057 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 132208 + + // #3058 + "ActiveColor2" + "\377\376\375\374" // 132224 + + // #3059 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 132272+ + + // #3060 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 132352+ + + // #3061 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 132384 + + // #3062 + "\377\376\375\374\373\372\371\370" + "false" + "\377\376\375" // 132400 + + // #3063 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 132416 + + // #3064 + "\377\376\375\374\373\372\371\370" + "ActiveSemiTransparent" + "\377\376\375" // 132448 + + // #3065 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 132528+ + + // #3066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 132608+ + + // #3067 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 132624 + + // #3068 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Value" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 132704+ + + // #3069 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 132720 + + // #3070 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "double" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 132752 + + // #3071 + "DisabledValue" + "\377\376\375" // 132768 + + // #3072 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 132848+ + + // #3073 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 132928+ + + // #3074 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Color" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 132960 + + // #3075 + "34,202,0" + "\377\376\375\374\373\372\371\370" // 132976 + + // #3076 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 132992 + + // #3077 + "\377\376\375\374\373\372\371\370" + "DisabledColor" + "\377\376\375\374\373\372\371\370\367\366\365" // 133024+ + + // #3078 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 133104+ + + // #3079 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 133184+ + + // #3080 + "\377\376\375\374" + "Color2" + "\377\376\375\374\373\372" // 133200 + + // #3081 + "\377\376\375\374\373\372\371\370" + "0,0,0" + "\377\376\375" // 133216 + + // #3082 + "\377\376\375\374\373\372\371" + "QColor" + "\377\376\375" // 133232 + + // #3083 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "DisabledColor2" + "\377\376\375\374\373\372\371\370\367\366" // 133280+ + + // #3084 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 133360+ + + // #3085 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 133440+ + + // #3086 + "\377\376\375\374\373\372\371\370\367\366\365" + "SemiTransparent" + "\377\376\375\374\373\372" // 133472 + + // #3087 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 133488 + + // #3088 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 133504 + + // #3089 + "\377\376\375\374\373\372\371\370" + "DisabledSemiTransparent" + "\377" // 133536 + + // #3090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 133616+ + + // #3091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 133696+ + + // #3092 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 133712 + + // #3093 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 133728 + + // #3094 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 133744 + + // #3095 + "Effect" + "\377\376\375\374\373\372\371\370\367\366" // 133760 + + // #3096 + "\377\376\375\374\373\372\371\370\367\366\365" + "icon-cache" + "\377\376\375\374\373\372\371\370\367\366\365" // 133792+ + + // #3097 + "\377\376\375\374\373\372\371\370" + ".kcache" + "\377" // 133808 + + // #3098 + "\377\376\375\374\373" + "cache" + "\377\376\375\374\373\372" // 133824 + + // #3099 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 133840 + + // #3100 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 133856 + + // #3101 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 133872 + + // #3102 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 133888 + + // #3103 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 133904 + + // #3104 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 133936 + + // #3105 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 133968 + + // #3106 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 134000 + + // #3107 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 134032 + + // #3108 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 134064 + + // #3109 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 134080 + + // #3110 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 134096 + + // #3111 + "\377\376\375" + "/usr/share/pixmaps/" + "\377\376\375\374\373\372\371\370\367\366" // 134128 + + // #3112 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 134144 + + // #3113 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 134160 + + // #3114 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 134176 + + // #3115 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 134192 + + // #3116 + "index.theme" + "\377\376\375\374\373" // 134208 + + // #3117 + "\377" + "index.desktop" + "\377\376" // 134224 + + // #3118 + "index.theme" + "\377\376\375\374\373" // 134240 + + // #3119 + "\377" + "index.desktop" + "\377\376" // 134256 + + // #3120 + "index.theme" + "\377\376\375\374\373" // 134272 + + // #3121 + "index.theme" + "\377\376\375\374\373" // 134288 + + // #3122 + "\377\376\375\374\373\372\371\370\367\366\365" + "Icon Theme" + "\377\376\375\374\373\372\371\370\367\366\365" // 134320 + + // #3123 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 134336 + + // #3124 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 134352 + + // #3125 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 134368 + + // #3126 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 134384 + + // #3127 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 134416 + + // #3128 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 134432 + + // #3129 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 134448 + + // #3130 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 134464 + + // #3131 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 134480 + + // #3132 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 134496 + + // #3133 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 134512 + + // #3134 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 134544 + + // #3135 + "\377\376\375\374" + "DisplayDepth" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 134576 + + // #3136 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 134640+ + + // #3137 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 134720+ + + // #3138 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 134736 + + // #3139 + "8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 134752 + + // #3140 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 134784 + + // #3141 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 134816+ + + // #3142 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 134896+ + + // #3143 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 134976+ + + // #3144 + "8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 134992 + + // #3145 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135024 + + // #3146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135072+ + + // #3147 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 135152+ + + // #3148 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 135232+ + + // #3149 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 135248 + + // #3150 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135280 + + // #3151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135328+ + + // #3152 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 135408+ + + // #3153 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 135488+ + + // #3154 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 135504 + + // #3155 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135536 + + // #3156 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135584+ + + // #3157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 135664+ + + // #3158 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 135744+ + + // #3159 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 135760 + + // #3160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135792 + + // #3161 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 135840+ + + // #3162 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 135920+ + + // #3163 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 136000+ + + // #3164 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 136016 + + // #3165 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136048 + + // #3166 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136096+ + + // #3167 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 136176+ + + // #3168 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 136256+ + + // #3169 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 136272 + + // #3170 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136304 + + // #3171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136352+ + + // #3172 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 136432+ + + // #3173 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 136512+ + + // #3174 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 136528 + + // #3175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136560 + + // #3176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136608+ + + // #3177 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 136688+ + + // #3178 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 136768+ + + // #3179 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 136784 + + // #3180 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136816 + + // #3181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 136864+ + + // #3182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 136944+ + + // #3183 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 137024+ + + // #3184 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 137040 + + // #3185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137072 + + // #3186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137120+ + + // #3187 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 137200+ + + // #3188 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 137280+ + + // #3189 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 137296 + + // #3190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137328 + + // #3191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137376+ + + // #3192 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 137456+ + + // #3193 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 137536+ + + // #3194 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 137552 + + // #3195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137584 + + // #3196 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137632+ + + // #3197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 137712+ + + // #3198 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 137792+ + + // #3199 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 137808 + + // #3200 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137840 + + // #3201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 137888+ + + // #3202 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 137968+ + + // #3203 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 138048+ + + // #3204 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 138064 + + // #3205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138096 + + // #3206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138144+ + + // #3207 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 138224+ + + // #3208 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 138304+ + + // #3209 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 138320 + + // #3210 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138352 + + // #3211 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138400+ + + // #3212 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 138480+ + + // #3213 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 138560+ + + // #3214 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 138576 + + // #3215 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138608 + + // #3216 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138656+ + + // #3217 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 138736+ + + // #3218 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 138816+ + + // #3219 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 138832 + + // #3220 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138864 + + // #3221 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 138912+ + + // #3222 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 138992+ + + // #3223 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 139072+ + + // #3224 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 139088 + + // #3225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139120 + + // #3226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139168+ + + // #3227 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 139248+ + + // #3228 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 139328+ + + // #3229 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 139344 + + // #3230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139376 + + // #3231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139424+ + + // #3232 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 139504+ + + // #3233 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 139584+ + + // #3234 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 139600 + + // #3235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139632 + + // #3236 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139680+ + + // #3237 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 139760+ + + // #3238 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 139840+ + + // #3239 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 139856 + + // #3240 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139888 + + // #3241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 139936+ + + // #3242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 140016+ + + // #3243 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 140096+ + + // #3244 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 140112 + + // #3245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140144 + + // #3246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140192+ + + // #3247 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 140272+ + + // #3248 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 140352+ + + // #3249 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 140368 + + // #3250 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140400 + + // #3251 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140448+ + + // #3252 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 140528+ + + // #3253 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 140608+ + + // #3254 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 140624 + + // #3255 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140656 + + // #3256 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140704+ + + // #3257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 140784+ + + // #3258 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 140864+ + + // #3259 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 140880 + + // #3260 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140912 + + // #3261 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 140960+ + + // #3262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 141040+ + + // #3263 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 141120+ + + // #3264 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 141136 + + // #3265 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141168 + + // #3266 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141216+ + + // #3267 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 141296+ + + // #3268 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 141376+ + + // #3269 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 141392 + + // #3270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141424 + + // #3271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141472+ + + // #3272 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 141552+ + + // #3273 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 141632+ + + // #3274 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 141648 + + // #3275 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141680 + + // #3276 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141728+ + + // #3277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 141808+ + + // #3278 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 141888+ + + // #3279 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 141904 + + // #3280 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141936 + + // #3281 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 141984+ + + // #3282 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 142064+ + + // #3283 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 142144+ + + // #3284 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 142160 + + // #3285 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142192 + + // #3286 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142240+ + + // #3287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 142320+ + + // #3288 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 142400+ + + // #3289 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 142416 + + // #3290 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142448 + + // #3291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142496+ + + // #3292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 142576+ + + // #3293 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 142656+ + + // #3294 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 142672 + + // #3295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142704 + + // #3296 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142752+ + + // #3297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 142832+ + + // #3298 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 142912+ + + // #3299 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 142928 + + // #3300 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 142960 + + // #3301 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143008+ + + // #3302 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 143088+ + + // #3303 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 143168+ + + // #3304 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 143184 + + // #3305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143216 + + // #3306 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143264+ + + // #3307 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 143344+ + + // #3308 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 143424+ + + // #3309 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 143440 + + // #3310 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143472 + + // #3311 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143520+ + + // #3312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 143600+ + + // #3313 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 143680+ + + // #3314 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 143696 + + // #3315 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143728 + + // #3316 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143776+ + + // #3317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 143856+ + + // #3318 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 143936+ + + // #3319 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 143952 + + // #3320 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 143984 + + // #3321 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144032+ + + // #3322 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 144112+ + + // #3323 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 144192+ + + // #3324 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 144208 + + // #3325 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144240 + + // #3326 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144288+ + + // #3327 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 144368+ + + // #3328 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 144448+ + + // #3329 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 144464 + + // #3330 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144496 + + // #3331 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144544+ + + // #3332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 144624+ + + // #3333 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 144704+ + + // #3334 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 144720 + + // #3335 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144752 + + // #3336 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 144800+ + + // #3337 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 144880+ + + // #3338 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 144960+ + + // #3339 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 144976 + + // #3340 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145008 + + // #3341 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145056+ + + // #3342 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 145136+ + + // #3343 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 145216+ + + // #3344 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 145232 + + // #3345 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145264 + + // #3346 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145312+ + + // #3347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 145392+ + + // #3348 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 145472+ + + // #3349 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 145488 + + // #3350 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145520 + + // #3351 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145568+ + + // #3352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 145648+ + + // #3353 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 145728+ + + // #3354 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 145744 + + // #3355 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145776 + + // #3356 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 145824+ + + // #3357 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 145904+ + + // #3358 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 145984+ + + // #3359 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 146000 + + // #3360 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146032 + + // #3361 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146080+ + + // #3362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 146160+ + + // #3363 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 146240+ + + // #3364 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 146256 + + // #3365 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146288 + + // #3366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146336+ + + // #3367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 146416+ + + // #3368 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 146496+ + + // #3369 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 146512 + + // #3370 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146544 + + // #3371 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146592+ + + // #3372 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 146672+ + + // #3373 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 146752+ + + // #3374 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 146768 + + // #3375 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146800 + + // #3376 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 146848+ + + // #3377 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 146928+ + + // #3378 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 147008+ + + // #3379 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 147024 + + // #3380 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147056 + + // #3381 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147104+ + + // #3382 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 147184+ + + // #3383 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 147264+ + + // #3384 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 147280 + + // #3385 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147312 + + // #3386 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147360+ + + // #3387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 147440+ + + // #3388 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 147520+ + + // #3389 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 147536 + + // #3390 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147568 + + // #3391 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147616+ + + // #3392 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 147696+ + + // #3393 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 147776+ + + // #3394 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 147792 + + // #3395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147824 + + // #3396 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 147872+ + + // #3397 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 147952+ + + // #3398 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 148032+ + + // #3399 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 148048 + + // #3400 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148080 + + // #3401 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148128+ + + // #3402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 148208+ + + // #3403 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 148288+ + + // #3404 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 148304 + + // #3405 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148336 + + // #3406 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148384+ + + // #3407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 148464+ + + // #3408 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 148544+ + + // #3409 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 148560 + + // #3410 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148592 + + // #3411 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148640+ + + // #3412 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 148720+ + + // #3413 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 148800+ + + // #3414 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 148816 + + // #3415 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148848 + + // #3416 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 148896+ + + // #3417 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 148976+ + + // #3418 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 149056+ + + // #3419 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 149072 + + // #3420 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149104 + + // #3421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149152+ + + // #3422 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 149232+ + + // #3423 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 149312+ + + // #3424 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 149328 + + // #3425 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149360 + + // #3426 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149408+ + + // #3427 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 149488+ + + // #3428 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 149568+ + + // #3429 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 149584 + + // #3430 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149616 + + // #3431 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149664+ + + // #3432 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 149744+ + + // #3433 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 149824+ + + // #3434 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 149840 + + // #3435 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149872 + + // #3436 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 149920+ + + // #3437 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 150000+ + + // #3438 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 150080+ + + // #3439 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 150096 + + // #3440 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150128 + + // #3441 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150176+ + + // #3442 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 150256+ + + // #3443 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 150336+ + + // #3444 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 150352 + + // #3445 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150384 + + // #3446 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150432+ + + // #3447 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 150512+ + + // #3448 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 150592+ + + // #3449 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 150608 + + // #3450 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150640 + + // #3451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150688+ + + // #3452 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 150768+ + + // #3453 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 150848+ + + // #3454 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 150864 + + // #3455 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150896 + + // #3456 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 150944+ + + // #3457 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 151024+ + + // #3458 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 151104+ + + // #3459 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 151120 + + // #3460 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151152 + + // #3461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151200+ + + // #3462 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 151280+ + + // #3463 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 151360+ + + // #3464 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 151376 + + // #3465 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151408 + + // #3466 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151456+ + + // #3467 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 151536+ + + // #3468 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 151616+ + + // #3469 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 151632 + + // #3470 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151664 + + // #3471 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151712+ + + // #3472 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 151792+ + + // #3473 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 151872+ + + // #3474 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 151888 + + // #3475 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151920 + + // #3476 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 151968+ + + // #3477 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 152048+ + + // #3478 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 152128+ + + // #3479 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 152144 + + // #3480 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152176 + + // #3481 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152224+ + + // #3482 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 152304+ + + // #3483 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 152384+ + + // #3484 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 152400 + + // #3485 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152432 + + // #3486 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152480+ + + // #3487 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 152560+ + + // #3488 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 152640+ + + // #3489 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 152656 + + // #3490 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152688 + + // #3491 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152736+ + + // #3492 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 152816+ + + // #3493 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 152896+ + + // #3494 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 152912 + + // #3495 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152944 + + // #3496 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 152992+ + + // #3497 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 153072+ + + // #3498 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 153152+ + + // #3499 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 153168 + + // #3500 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153200 + + // #3501 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153248+ + + // #3502 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 153328+ + + // #3503 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 153408+ + + // #3504 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 153424 + + // #3505 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153456 + + // #3506 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153504+ + + // #3507 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 153584+ + + // #3508 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 153664+ + + // #3509 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 153680 + + // #3510 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153712 + + // #3511 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153760+ + + // #3512 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 153840+ + + // #3513 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 153920+ + + // #3514 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 153936 + + // #3515 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 153968 + + // #3516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154016+ + + // #3517 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 154096+ + + // #3518 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 154176+ + + // #3519 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 154192 + + // #3520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154224 + + // #3521 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154272+ + + // #3522 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 154352+ + + // #3523 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 154432+ + + // #3524 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 154448 + + // #3525 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154480 + + // #3526 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154528+ + + // #3527 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 154608+ + + // #3528 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 154688+ + + // #3529 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 154704 + + // #3530 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154736 + + // #3531 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154784+ + + // #3532 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 154864+ + + // #3533 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 154944+ + + // #3534 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 154960 + + // #3535 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 154992 + + // #3536 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155040+ + + // #3537 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 155120+ + + // #3538 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 155200+ + + // #3539 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 155216 + + // #3540 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155248 + + // #3541 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155296+ + + // #3542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 155376+ + + // #3543 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 155456+ + + // #3544 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 155472 + + // #3545 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155504 + + // #3546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155552+ + + // #3547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 155632+ + + // #3548 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 155712+ + + // #3549 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 155728 + + // #3550 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155760 + + // #3551 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 155808+ + + // #3552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 155888+ + + // #3553 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 155968+ + + // #3554 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 155984 + + // #3555 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156016 + + // #3556 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156064+ + + // #3557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 156144+ + + // #3558 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 156224+ + + // #3559 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 156240 + + // #3560 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156272 + + // #3561 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156320+ + + // #3562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 156400+ + + // #3563 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 156480+ + + // #3564 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 156496 + + // #3565 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156528 + + // #3566 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156576+ + + // #3567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 156656+ + + // #3568 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 156736+ + + // #3569 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 156752 + + // #3570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156784 + + // #3571 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 156832+ + + // #3572 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 156912+ + + // #3573 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 156992+ + + // #3574 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 157008 + + // #3575 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157040 + + // #3576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157088+ + + // #3577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 157168+ + + // #3578 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 157248+ + + // #3579 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 157264 + + // #3580 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157296 + + // #3581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157344+ + + // #3582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 157424+ + + // #3583 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 157504+ + + // #3584 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 157520 + + // #3585 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157552 + + // #3586 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157600+ + + // #3587 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 157680+ + + // #3588 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 157760+ + + // #3589 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 157776 + + // #3590 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157808 + + // #3591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 157856+ + + // #3592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 157936+ + + // #3593 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 158016+ + + // #3594 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 158032 + + // #3595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158064 + + // #3596 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158112+ + + // #3597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 158192+ + + // #3598 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 158272+ + + // #3599 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 158288 + + // #3600 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158320 + + // #3601 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158368+ + + // #3602 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 158448+ + + // #3603 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 158528+ + + // #3604 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 158544 + + // #3605 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158576 + + // #3606 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158624+ + + // #3607 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 158704+ + + // #3608 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 158784+ + + // #3609 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 158800 + + // #3610 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158832 + + // #3611 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 158880+ + + // #3612 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 158960+ + + // #3613 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 159040+ + + // #3614 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 159056 + + // #3615 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159088 + + // #3616 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159136+ + + // #3617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 159216+ + + // #3618 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 159296+ + + // #3619 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 159312 + + // #3620 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159344 + + // #3621 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159392+ + + // #3622 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 159472+ + + // #3623 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 159552+ + + // #3624 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 159568 + + // #3625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159600 + + // #3626 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159648+ + + // #3627 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 159728+ + + // #3628 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 159808+ + + // #3629 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 159824 + + // #3630 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159856 + + // #3631 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 159904+ + + // #3632 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 159984+ + + // #3633 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 160064+ + + // #3634 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 160080 + + // #3635 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160112 + + // #3636 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160160+ + + // #3637 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 160240+ + + // #3638 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 160320+ + + // #3639 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 160336 + + // #3640 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160368 + + // #3641 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160416+ + + // #3642 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 160496+ + + // #3643 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 160576+ + + // #3644 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 160592 + + // #3645 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160624 + + // #3646 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160672+ + + // #3647 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 160752+ + + // #3648 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 160832+ + + // #3649 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 160848 + + // #3650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160880 + + // #3651 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 160928+ + + // #3652 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 161008+ + + // #3653 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 161088+ + + // #3654 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 161104 + + // #3655 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161136 + + // #3656 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161184+ + + // #3657 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 161264+ + + // #3658 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 161344+ + + // #3659 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 161360 + + // #3660 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161392 + + // #3661 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161440+ + + // #3662 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 161520+ + + // #3663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 161600+ + + // #3664 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 161616 + + // #3665 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161648 + + // #3666 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161696+ + + // #3667 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 161776+ + + // #3668 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 161856+ + + // #3669 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 161872 + + // #3670 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161904 + + // #3671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 161952+ + + // #3672 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 162032+ + + // #3673 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 162112+ + + // #3674 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 162128 + + // #3675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162160 + + // #3676 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162208+ + + // #3677 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 162288+ + + // #3678 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 162368+ + + // #3679 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 162384 + + // #3680 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162416 + + // #3681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162464+ + + // #3682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 162544+ + + // #3683 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 162624+ + + // #3684 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 162640 + + // #3685 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162672 + + // #3686 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162720+ + + // #3687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 162800+ + + // #3688 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 162880+ + + // #3689 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 162896 + + // #3690 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162928 + + // #3691 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 162976+ + + // #3692 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 163056+ + + // #3693 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 163136+ + + // #3694 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 163152 + + // #3695 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163184 + + // #3696 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163232+ + + // #3697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 163312+ + + // #3698 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 163392+ + + // #3699 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 163408 + + // #3700 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163440 + + // #3701 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163488+ + + // #3702 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 163568+ + + // #3703 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 163648+ + + // #3704 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 163664 + + // #3705 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163696 + + // #3706 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163744+ + + // #3707 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 163824+ + + // #3708 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 163904+ + + // #3709 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 163920 + + // #3710 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 163952 + + // #3711 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164000+ + + // #3712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 164080+ + + // #3713 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 164160+ + + // #3714 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 164176 + + // #3715 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164208 + + // #3716 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164256+ + + // #3717 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 164336+ + + // #3718 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 164416+ + + // #3719 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 164432 + + // #3720 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164464 + + // #3721 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164512+ + + // #3722 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 164592+ + + // #3723 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 164672+ + + // #3724 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 164688 + + // #3725 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164720 + + // #3726 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164768+ + + // #3727 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 164848+ + + // #3728 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 164928+ + + // #3729 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 164944 + + // #3730 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 164976 + + // #3731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165024+ + + // #3732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 165104+ + + // #3733 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 165184+ + + // #3734 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 165200 + + // #3735 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165232 + + // #3736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165280+ + + // #3737 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 165360+ + + // #3738 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 165440+ + + // #3739 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 165456 + + // #3740 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165488 + + // #3741 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165536+ + + // #3742 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 165616+ + + // #3743 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 165696+ + + // #3744 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 165712 + + // #3745 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165744 + + // #3746 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 165792+ + + // #3747 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 165872+ + + // #3748 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 165952+ + + // #3749 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 165968 + + // #3750 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166000 + + // #3751 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166048+ + + // #3752 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 166128+ + + // #3753 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 166208+ + + // #3754 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 166224 + + // #3755 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166256 + + // #3756 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166304+ + + // #3757 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 166384+ + + // #3758 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 166464+ + + // #3759 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 166480 + + // #3760 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166512 + + // #3761 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166560+ + + // #3762 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 166640+ + + // #3763 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 166720+ + + // #3764 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 166736 + + // #3765 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166768 + + // #3766 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 166816+ + + // #3767 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 166896+ + + // #3768 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 166976+ + + // #3769 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 166992 + + // #3770 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167024 + + // #3771 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167072+ + + // #3772 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 167152+ + + // #3773 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 167232+ + + // #3774 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 167248 + + // #3775 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167280 + + // #3776 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167328+ + + // #3777 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 167408+ + + // #3778 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 167488+ + + // #3779 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 167504 + + // #3780 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167536 + + // #3781 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167584+ + + // #3782 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 167664+ + + // #3783 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 167744+ + + // #3784 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 167760 + + // #3785 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167792 + + // #3786 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 167840+ + + // #3787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 167920+ + + // #3788 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 168000+ + + // #3789 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 168016 + + // #3790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168048 + + // #3791 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168096+ + + // #3792 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 168176+ + + // #3793 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 168256+ + + // #3794 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 168272 + + // #3795 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168304 + + // #3796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168352+ + + // #3797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 168432+ + + // #3798 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 168512+ + + // #3799 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 168528 + + // #3800 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168560 + + // #3801 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168608+ + + // #3802 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 168688+ + + // #3803 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 168768+ + + // #3804 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 168784 + + // #3805 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168816 + + // #3806 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 168864+ + + // #3807 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 168944+ + + // #3808 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 169024+ + + // #3809 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 169040 + + // #3810 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169072 + + // #3811 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169120+ + + // #3812 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 169200+ + + // #3813 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 169280+ + + // #3814 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 169296 + + // #3815 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169328 + + // #3816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169376+ + + // #3817 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 169456+ + + // #3818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 169536+ + + // #3819 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 169552 + + // #3820 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169584 + + // #3821 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169632+ + + // #3822 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 169712+ + + // #3823 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 169792+ + + // #3824 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 169808 + + // #3825 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169840 + + // #3826 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 169888+ + + // #3827 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 169968+ + + // #3828 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 170048+ + + // #3829 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 170064 + + // #3830 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170096 + + // #3831 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170144+ + + // #3832 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 170224+ + + // #3833 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 170304+ + + // #3834 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 170320 + + // #3835 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170352 + + // #3836 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170400+ + + // #3837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 170480+ + + // #3838 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 170560+ + + // #3839 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 170576 + + // #3840 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170608 + + // #3841 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170656+ + + // #3842 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 170736+ + + // #3843 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 170816+ + + // #3844 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 170832 + + // #3845 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170864 + + // #3846 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 170912+ + + // #3847 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 170992+ + + // #3848 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 171072+ + + // #3849 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 171088 + + // #3850 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171120 + + // #3851 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171168+ + + // #3852 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 171248+ + + // #3853 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 171328+ + + // #3854 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 171344 + + // #3855 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171376 + + // #3856 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171424+ + + // #3857 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 171504+ + + // #3858 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 171584+ + + // #3859 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 171600 + + // #3860 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171632 + + // #3861 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171680+ + + // #3862 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 171760+ + + // #3863 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 171840+ + + // #3864 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 171856 + + // #3865 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171888 + + // #3866 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 171936+ + + // #3867 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 172016+ + + // #3868 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 172096+ + + // #3869 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 172112 + + // #3870 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172144 + + // #3871 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172192+ + + // #3872 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 172272+ + + // #3873 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 172352+ + + // #3874 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 172368 + + // #3875 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172400 + + // #3876 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172448+ + + // #3877 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 172528+ + + // #3878 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 172608+ + + // #3879 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 172624 + + // #3880 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172656 + + // #3881 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172704+ + + // #3882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 172784+ + + // #3883 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 172864+ + + // #3884 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 172880 + + // #3885 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172912 + + // #3886 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 172960+ + + // #3887 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 173040+ + + // #3888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 173120+ + + // #3889 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 173136 + + // #3890 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173168 + + // #3891 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173216+ + + // #3892 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 173296+ + + // #3893 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 173376+ + + // #3894 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 173392 + + // #3895 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173424 + + // #3896 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173472+ + + // #3897 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 173552+ + + // #3898 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 173632+ + + // #3899 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 173648 + + // #3900 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173680 + + // #3901 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173728+ + + // #3902 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 173808+ + + // #3903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 173888+ + + // #3904 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 173904 + + // #3905 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173936 + + // #3906 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 173984+ + + // #3907 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 174064+ + + // #3908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 174144+ + + // #3909 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 174160 + + // #3910 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174192 + + // #3911 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174240+ + + // #3912 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 174320+ + + // #3913 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 174400+ + + // #3914 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 174416 + + // #3915 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174448 + + // #3916 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174496+ + + // #3917 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 174576+ + + // #3918 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 174656+ + + // #3919 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 174672 + + // #3920 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174704 + + // #3921 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174752+ + + // #3922 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 174832+ + + // #3923 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 174912+ + + // #3924 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 174928 + + // #3925 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 174960 + + // #3926 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175008+ + + // #3927 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 175088+ + + // #3928 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 175168+ + + // #3929 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 175184 + + // #3930 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175216 + + // #3931 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175264+ + + // #3932 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 175344+ + + // #3933 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 175424+ + + // #3934 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 175440 + + // #3935 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175472 + + // #3936 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175520+ + + // #3937 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 175600+ + + // #3938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 175680+ + + // #3939 + "\377\376\375\374" + "Desktop" + "\377\376\375\374\373" // 175696 + + // #3940 + "\377\376" + "Toolbar" + "\377\376\375\374\373\372\371" // 175712 + + // #3941 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MainToolbar" + "\377\376\375\374\373\372\371\370\367" // 175744 + + // #3942 + "\377\376\375\374\373\372\371\370" + "Small" + "\377\376\375" // 175760 + + // #3943 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Panel" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 175792 + + // #3944 + "\377\376\375" + "Dialog" + "\377\376\375\374\373\372\371" // 175808 + + // #3945 + "Default" + "\377\376\375\374\373\372\371\370\367" // 175824 + + // #3946 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 175840 + + // #3947 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 175872 + + // #3948 + "\377\376\375\374\373\372\371\370" + "DesktopDefault" + "\377\376\375\374\373\372\371\370\367\366" // 175904 + + // #3949 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 175984+ + + // #3950 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 176064+ + + // #3951 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 176080 + + // #3952 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 176160+ + + // #3953 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 176192 + + // #3954 + "DesktopSizes" + "\377\376\375\374" // 176208 + + // #3955 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 176304+ + + // #3956 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 176384+ + + // #3957 + "Default" + "\377\376\375\374\373\372\371\370\367" // 176400 + + // #3958 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 176416 + + // #3959 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 176448 + + // #3960 + "\377\376\375\374\373\372\371\370" + "ToolbarDefault" + "\377\376\375\374\373\372\371\370\367\366" // 176480 + + // #3961 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 176560+ + + // #3962 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 176640+ + + // #3963 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 176656 + + // #3964 + "16,22,32,48" + "\377\376\375\374\373" // 176672 + + // #3965 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 176704 + + // #3966 + "\377\376\375\374\373\372\371\370" + "ToolbarSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 176736 + + // #3967 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 176816+ + + // #3968 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 176896+ + + // #3969 + "Default" + "\377\376\375\374\373\372\371\370\367" // 176912 + + // #3970 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 176928 + + // #3971 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 176960 + + // #3972 + "MainToolbarDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 176992+ + + // #3973 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 177072+ + + // #3974 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 177152+ + + // #3975 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 177168 + + // #3976 + "16,22,32,48" + "\377\376\375\374\373" // 177184 + + // #3977 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 177216 + + // #3978 + "\377\376\375\374\373\372\371\370" + "MainToolbarSizes" + "\377\376\375\374\373\372\371\370" // 177248+ + + // #3979 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 177328+ + + // #3980 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 177408+ + + // #3981 + "Default" + "\377\376\375\374\373\372\371\370\367" // 177424 + + // #3982 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 177440 + + // #3983 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 177472 + + // #3984 + "\377\376\375\374\373\372\371\370" + "SmallDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 177504 + + // #3985 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 177584+ + + // #3986 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 177664+ + + // #3987 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 177680 + + // #3988 + "16,22,32,48" + "\377\376\375\374\373" // 177696 + + // #3989 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 177728 + + // #3990 + "\377\376\375\374\373\372\371\370" + "SmallSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 177760+ + + // #3991 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 177840+ + + // #3992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 177920+ + + // #3993 + "Default" + "\377\376\375\374\373\372\371\370\367" // 177936 + + // #3994 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 177952 + + // #3995 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 177984 + + // #3996 + "\377\376\375\374\373\372\371\370" + "PanelDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 178016 + + // #3997 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 178096+ + + // #3998 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 178176+ + + // #3999 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 178192 + + // #4000 + "\377\376\375\374\373\372\371\370" + "16,22,32,48,64,128,256" + "\377\376" // 178224 + + // #4001 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 178256 + + // #4002 + "PanelSizes" + "\377\376\375\374\373\372" // 178272 + + // #4003 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 178352+ + + // #4004 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 178432+ + + // #4005 + "Default" + "\377\376\375\374\373\372\371\370\367" // 178448 + + // #4006 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 178464 + + // #4007 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 178496 + + // #4008 + "\377\376\375\374\373\372\371\370" + "DialogDefault" + "\377\376\375\374\373\372\371\370\367\366\365" // 178528 + + // #4009 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 178608+ + + // #4010 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 178688+ + + // #4011 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 178704 + + // #4012 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "16,22,32,48,64,128,256" + "\377\376" // 178784+ + + // #4013 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 178816 + + // #4014 + "\377\376\375\374\373\372\371\370" + "DialogSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 178848 + + // #4015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 178928+ + + // #4016 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 179008+ + + // #4017 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 179024 + + // #4018 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 179040 + + // #4019 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179072 + + // #4020 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179104 + + // #4021 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179136 + + // #4022 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179168 + + // #4023 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179200 + + // #4024 + "\377\376\375" + "/usr/share/pixmaps/" + "\377\376\375\374\373\372\371\370\367\366" // 179232 + + // #4025 + "index.theme" + "\377\376\375\374\373" // 179248 + + // #4026 + "\377" + "index.desktop" + "\377\376" // 179264 + + // #4027 + "index.theme" + "\377\376\375\374\373" // 179280 + + // #4028 + "\377" + "index.desktop" + "\377\376" // 179296 + + // #4029 + "index.theme" + "\377\376\375\374\373" // 179312 + + // #4030 + "index.theme" + "\377\376\375\374\373" // 179328 + + // #4031 + "\377\376\375\374\373\372\371\370\367\366\365" + "Icon Theme" + "\377\376\375\374\373\372\371\370\367\366\365" // 179360 + + // #4032 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 179376 + + // #4033 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179408 + + // #4034 + "\377\376\375\374" + "DisplayDepth" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 179440 + + // #4035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 179504+ + + // #4036 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 179584+ + + // #4037 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 179600 + + // #4038 + "8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179616 + + // #4039 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179648 + + // #4040 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179680+ + + // #4041 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 179760+ + + // #4042 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 179840+ + + // #4043 + "8" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179856 + + // #4044 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179888 + + // #4045 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 179936+ + + // #4046 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 180016+ + + // #4047 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 180096+ + + // #4048 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 180112 + + // #4049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180144 + + // #4050 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180192+ + + // #4051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 180272+ + + // #4052 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 180352+ + + // #4053 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 180368 + + // #4054 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180400 + + // #4055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180448+ + + // #4056 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 180528+ + + // #4057 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 180608+ + + // #4058 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 180624 + + // #4059 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180656 + + // #4060 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180704+ + + // #4061 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 180784+ + + // #4062 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 180864+ + + // #4063 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 180880 + + // #4064 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180912 + + // #4065 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 180960+ + + // #4066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 181040+ + + // #4067 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 181120+ + + // #4068 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 181136 + + // #4069 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181168 + + // #4070 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181216+ + + // #4071 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 181296+ + + // #4072 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 181376+ + + // #4073 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 181392 + + // #4074 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181424 + + // #4075 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181472+ + + // #4076 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 181552+ + + // #4077 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 181632+ + + // #4078 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 181648 + + // #4079 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181680 + + // #4080 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181728+ + + // #4081 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 181808+ + + // #4082 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 181888+ + + // #4083 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 181904 + + // #4084 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181936 + + // #4085 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 181984+ + + // #4086 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 182064+ + + // #4087 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 182144+ + + // #4088 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 182160 + + // #4089 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182192 + + // #4090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182240+ + + // #4091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 182320+ + + // #4092 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 182400+ + + // #4093 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 182416 + + // #4094 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182448 + + // #4095 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182496+ + + // #4096 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 182576+ + + // #4097 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 182656+ + + // #4098 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 182672 + + // #4099 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182704 + + // #4100 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182752+ + + // #4101 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 182832+ + + // #4102 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 182912+ + + // #4103 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 182928 + + // #4104 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 182960 + + // #4105 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183008+ + + // #4106 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 183088+ + + // #4107 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 183168+ + + // #4108 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 183184 + + // #4109 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183216 + + // #4110 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183264+ + + // #4111 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 183344+ + + // #4112 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 183424+ + + // #4113 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 183440 + + // #4114 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183472 + + // #4115 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183520+ + + // #4116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 183600+ + + // #4117 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 183680+ + + // #4118 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 183696 + + // #4119 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183728 + + // #4120 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183776+ + + // #4121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 183856+ + + // #4122 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 183936+ + + // #4123 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 183952 + + // #4124 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 183984 + + // #4125 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184032+ + + // #4126 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 184112+ + + // #4127 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 184192+ + + // #4128 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 184208 + + // #4129 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184240 + + // #4130 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184288+ + + // #4131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 184368+ + + // #4132 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 184448+ + + // #4133 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 184464 + + // #4134 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184496 + + // #4135 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184544+ + + // #4136 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 184624+ + + // #4137 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 184704+ + + // #4138 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 184720 + + // #4139 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184752 + + // #4140 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 184800+ + + // #4141 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 184880+ + + // #4142 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 184960+ + + // #4143 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 184976 + + // #4144 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185008 + + // #4145 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185056+ + + // #4146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 185136+ + + // #4147 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 185216+ + + // #4148 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 185232 + + // #4149 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185264 + + // #4150 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185312+ + + // #4151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 185392+ + + // #4152 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 185472+ + + // #4153 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 185488 + + // #4154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185520 + + // #4155 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185568+ + + // #4156 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 185648+ + + // #4157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 185728+ + + // #4158 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 185744 + + // #4159 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185776 + + // #4160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 185824+ + + // #4161 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 185904+ + + // #4162 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 185984+ + + // #4163 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 186000 + + // #4164 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186032 + + // #4165 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186080+ + + // #4166 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 186160+ + + // #4167 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 186240+ + + // #4168 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 186256 + + // #4169 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186288 + + // #4170 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186336+ + + // #4171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 186416+ + + // #4172 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 186496+ + + // #4173 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 186512 + + // #4174 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186544 + + // #4175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186592+ + + // #4176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 186672+ + + // #4177 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 186752+ + + // #4178 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 186768 + + // #4179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186800 + + // #4180 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 186848+ + + // #4181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 186928+ + + // #4182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 187008+ + + // #4183 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 187024 + + // #4184 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187056 + + // #4185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187104+ + + // #4186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 187184+ + + // #4187 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 187264+ + + // #4188 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 187280 + + // #4189 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187312 + + // #4190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187360+ + + // #4191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 187440+ + + // #4192 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 187520+ + + // #4193 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 187536 + + // #4194 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187568 + + // #4195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187616+ + + // #4196 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 187696+ + + // #4197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 187776+ + + // #4198 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 187792 + + // #4199 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187824 + + // #4200 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 187872+ + + // #4201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 187952+ + + // #4202 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 188032+ + + // #4203 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 188048 + + // #4204 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188080 + + // #4205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188128+ + + // #4206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 188208+ + + // #4207 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 188288+ + + // #4208 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 188304 + + // #4209 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188336 + + // #4210 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188384+ + + // #4211 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 188464+ + + // #4212 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 188544+ + + // #4213 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 188560 + + // #4214 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188592 + + // #4215 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188640+ + + // #4216 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 188720+ + + // #4217 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 188800+ + + // #4218 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 188816 + + // #4219 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188848 + + // #4220 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 188896+ + + // #4221 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 188976+ + + // #4222 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 189056+ + + // #4223 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 189072 + + // #4224 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189104 + + // #4225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189152+ + + // #4226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 189232+ + + // #4227 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 189312+ + + // #4228 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 189328 + + // #4229 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189360 + + // #4230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189408+ + + // #4231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 189488+ + + // #4232 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 189568+ + + // #4233 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 189584 + + // #4234 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189616 + + // #4235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189664+ + + // #4236 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 189744+ + + // #4237 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 189824+ + + // #4238 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 189840 + + // #4239 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189872 + + // #4240 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 189920+ + + // #4241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 190000+ + + // #4242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 190080+ + + // #4243 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 190096 + + // #4244 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190128 + + // #4245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190176+ + + // #4246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 190256+ + + // #4247 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 190336+ + + // #4248 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 190352 + + // #4249 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190384 + + // #4250 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190432+ + + // #4251 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 190512+ + + // #4252 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 190592+ + + // #4253 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 190608 + + // #4254 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190640 + + // #4255 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190688+ + + // #4256 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 190768+ + + // #4257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 190848+ + + // #4258 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 190864 + + // #4259 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190896 + + // #4260 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 190944+ + + // #4261 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 191024+ + + // #4262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 191104+ + + // #4263 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 191120 + + // #4264 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191152 + + // #4265 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191200+ + + // #4266 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 191280+ + + // #4267 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 191360+ + + // #4268 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 191376 + + // #4269 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191408 + + // #4270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191456+ + + // #4271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 191536+ + + // #4272 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 191616+ + + // #4273 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 191632 + + // #4274 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191664 + + // #4275 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191712+ + + // #4276 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 191792+ + + // #4277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 191872+ + + // #4278 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 191888 + + // #4279 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191920 + + // #4280 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 191968+ + + // #4281 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 192048+ + + // #4282 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 192128+ + + // #4283 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 192144 + + // #4284 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192176 + + // #4285 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192224+ + + // #4286 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 192304+ + + // #4287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 192384+ + + // #4288 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 192400 + + // #4289 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192432 + + // #4290 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192480+ + + // #4291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 192560+ + + // #4292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 192640+ + + // #4293 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 192656 + + // #4294 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192688 + + // #4295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192736+ + + // #4296 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 192816+ + + // #4297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 192896+ + + // #4298 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 192912 + + // #4299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192944 + + // #4300 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 192992+ + + // #4301 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 193072+ + + // #4302 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 193152+ + + // #4303 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 193168 + + // #4304 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193200 + + // #4305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193248+ + + // #4306 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 193328+ + + // #4307 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 193408+ + + // #4308 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 193424 + + // #4309 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193456 + + // #4310 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193504+ + + // #4311 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 193584+ + + // #4312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 193664+ + + // #4313 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 193680 + + // #4314 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193712 + + // #4315 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193760+ + + // #4316 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 193840+ + + // #4317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 193920+ + + // #4318 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 193936 + + // #4319 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 193968 + + // #4320 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194016+ + + // #4321 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 194096+ + + // #4322 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 194176+ + + // #4323 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 194192 + + // #4324 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194224 + + // #4325 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194272+ + + // #4326 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 194352+ + + // #4327 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 194432+ + + // #4328 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 194448 + + // #4329 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194480 + + // #4330 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194528+ + + // #4331 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 194608+ + + // #4332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 194688+ + + // #4333 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 194704 + + // #4334 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194736 + + // #4335 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194784+ + + // #4336 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 194864+ + + // #4337 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 194944+ + + // #4338 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 194960 + + // #4339 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 194992 + + // #4340 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195040+ + + // #4341 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 195120+ + + // #4342 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 195200+ + + // #4343 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 195216 + + // #4344 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195248 + + // #4345 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195296+ + + // #4346 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 195376+ + + // #4347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 195456+ + + // #4348 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 195472 + + // #4349 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195504 + + // #4350 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195552+ + + // #4351 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 195632+ + + // #4352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 195712+ + + // #4353 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 195728 + + // #4354 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195760 + + // #4355 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 195808+ + + // #4356 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 195888+ + + // #4357 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 195968+ + + // #4358 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 195984 + + // #4359 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196016 + + // #4360 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196064+ + + // #4361 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 196144+ + + // #4362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 196224+ + + // #4363 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 196240 + + // #4364 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196272 + + // #4365 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196320+ + + // #4366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 196400+ + + // #4367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 196480+ + + // #4368 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 196496 + + // #4369 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196528 + + // #4370 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196576+ + + // #4371 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 196656+ + + // #4372 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 196736+ + + // #4373 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 196752 + + // #4374 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196784 + + // #4375 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 196832+ + + // #4376 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 196912+ + + // #4377 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 196992+ + + // #4378 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 197008 + + // #4379 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197040 + + // #4380 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197088+ + + // #4381 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 197168+ + + // #4382 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 197248+ + + // #4383 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 197264 + + // #4384 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197296 + + // #4385 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197344+ + + // #4386 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 197424+ + + // #4387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 197504+ + + // #4388 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 197520 + + // #4389 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197552 + + // #4390 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197600+ + + // #4391 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 197680+ + + // #4392 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 197760+ + + // #4393 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 197776 + + // #4394 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197808 + + // #4395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 197856+ + + // #4396 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 197936+ + + // #4397 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 198016+ + + // #4398 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 198032 + + // #4399 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198064 + + // #4400 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198112+ + + // #4401 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 198192+ + + // #4402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 198272+ + + // #4403 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 198288 + + // #4404 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198320 + + // #4405 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198368+ + + // #4406 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 198448+ + + // #4407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 198528+ + + // #4408 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 198544 + + // #4409 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198576 + + // #4410 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198624+ + + // #4411 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 198704+ + + // #4412 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 198784+ + + // #4413 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 198800 + + // #4414 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198832 + + // #4415 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 198880+ + + // #4416 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 198960+ + + // #4417 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 199040+ + + // #4418 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 199056 + + // #4419 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199088 + + // #4420 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199136+ + + // #4421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 199216+ + + // #4422 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 199296+ + + // #4423 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 199312 + + // #4424 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199344 + + // #4425 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199392+ + + // #4426 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 199472+ + + // #4427 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 199552+ + + // #4428 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 199568 + + // #4429 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199600 + + // #4430 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199648+ + + // #4431 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 199728+ + + // #4432 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 199808+ + + // #4433 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 199824 + + // #4434 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199856 + + // #4435 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 199904+ + + // #4436 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 199984+ + + // #4437 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 200064+ + + // #4438 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 200080 + + // #4439 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200112 + + // #4440 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200160+ + + // #4441 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 200240+ + + // #4442 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 200320+ + + // #4443 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 200336 + + // #4444 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200368 + + // #4445 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200416+ + + // #4446 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 200496+ + + // #4447 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 200576+ + + // #4448 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 200592 + + // #4449 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200624 + + // #4450 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200672+ + + // #4451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 200752+ + + // #4452 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 200832+ + + // #4453 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 200848 + + // #4454 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200880 + + // #4455 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 200928+ + + // #4456 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 201008+ + + // #4457 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 201088+ + + // #4458 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 201104 + + // #4459 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201136 + + // #4460 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201184+ + + // #4461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 201264+ + + // #4462 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 201344+ + + // #4463 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 201360 + + // #4464 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201392 + + // #4465 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201440+ + + // #4466 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 201520+ + + // #4467 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 201600+ + + // #4468 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 201616 + + // #4469 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201648 + + // #4470 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201696+ + + // #4471 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 201776+ + + // #4472 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 201856+ + + // #4473 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 201872 + + // #4474 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201904 + + // #4475 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 201952+ + + // #4476 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 202032+ + + // #4477 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 202112+ + + // #4478 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 202128 + + // #4479 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202160 + + // #4480 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202208+ + + // #4481 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 202288+ + + // #4482 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 202368+ + + // #4483 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 202384 + + // #4484 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202416 + + // #4485 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202464+ + + // #4486 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 202544+ + + // #4487 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 202624+ + + // #4488 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 202640 + + // #4489 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202672 + + // #4490 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202720+ + + // #4491 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 202800+ + + // #4492 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 202880+ + + // #4493 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 202896 + + // #4494 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202928 + + // #4495 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 202976+ + + // #4496 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 203056+ + + // #4497 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 203136+ + + // #4498 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 203152 + + // #4499 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203184 + + // #4500 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203232+ + + // #4501 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 203312+ + + // #4502 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 203392+ + + // #4503 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 203408 + + // #4504 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203440 + + // #4505 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203488+ + + // #4506 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 203568+ + + // #4507 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 203648+ + + // #4508 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 203664 + + // #4509 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203696 + + // #4510 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203744+ + + // #4511 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 203824+ + + // #4512 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 203904+ + + // #4513 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 203920 + + // #4514 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 203952 + + // #4515 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204000+ + + // #4516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 204080+ + + // #4517 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 204160+ + + // #4518 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 204176 + + // #4519 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204208 + + // #4520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204256+ + + // #4521 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 204336+ + + // #4522 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 204416+ + + // #4523 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 204432 + + // #4524 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204464 + + // #4525 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204512+ + + // #4526 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 204592+ + + // #4527 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 204672+ + + // #4528 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 204688 + + // #4529 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204720 + + // #4530 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204768+ + + // #4531 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 204848+ + + // #4532 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 204928+ + + // #4533 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 204944 + + // #4534 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 204976 + + // #4535 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205024+ + + // #4536 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 205104+ + + // #4537 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 205184+ + + // #4538 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 205200 + + // #4539 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205232 + + // #4540 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205280+ + + // #4541 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 205360+ + + // #4542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 205440+ + + // #4543 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 205456 + + // #4544 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205488 + + // #4545 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205536+ + + // #4546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 205616+ + + // #4547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 205696+ + + // #4548 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 205712 + + // #4549 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205744 + + // #4550 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 205792+ + + // #4551 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 205872+ + + // #4552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 205952+ + + // #4553 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 205968 + + // #4554 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206000 + + // #4555 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206048+ + + // #4556 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 206128+ + + // #4557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 206208+ + + // #4558 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 206224 + + // #4559 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206256 + + // #4560 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206304+ + + // #4561 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 206384+ + + // #4562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 206464+ + + // #4563 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 206480 + + // #4564 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206512 + + // #4565 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206560+ + + // #4566 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 206640+ + + // #4567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 206720+ + + // #4568 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 206736 + + // #4569 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206768 + + // #4570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 206816+ + + // #4571 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 206896+ + + // #4572 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 206976+ + + // #4573 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 206992 + + // #4574 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207024 + + // #4575 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207072+ + + // #4576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 207152+ + + // #4577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 207232+ + + // #4578 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 207248 + + // #4579 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207280 + + // #4580 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207328+ + + // #4581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 207408+ + + // #4582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 207488+ + + // #4583 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 207504 + + // #4584 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207536 + + // #4585 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207584+ + + // #4586 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 207664+ + + // #4587 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 207744+ + + // #4588 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 207760 + + // #4589 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207792 + + // #4590 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 207840+ + + // #4591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 207920+ + + // #4592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 208000+ + + // #4593 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 208016 + + // #4594 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208048 + + // #4595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208096+ + + // #4596 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 208176+ + + // #4597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 208256+ + + // #4598 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 208272 + + // #4599 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208304 + + // #4600 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208352+ + + // #4601 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 208432+ + + // #4602 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 208512+ + + // #4603 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 208528 + + // #4604 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208560 + + // #4605 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208608+ + + // #4606 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 208688+ + + // #4607 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 208768+ + + // #4608 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 208784 + + // #4609 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208816 + + // #4610 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 208864+ + + // #4611 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 208944+ + + // #4612 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 209024+ + + // #4613 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 209040 + + // #4614 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209072 + + // #4615 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209120+ + + // #4616 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 209200+ + + // #4617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 209280+ + + // #4618 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 209296 + + // #4619 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209328 + + // #4620 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209376+ + + // #4621 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 209456+ + + // #4622 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 209536+ + + // #4623 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 209552 + + // #4624 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209584 + + // #4625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209632+ + + // #4626 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 209712+ + + // #4627 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 209792+ + + // #4628 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 209808 + + // #4629 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209840 + + // #4630 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 209888+ + + // #4631 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 209968+ + + // #4632 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 210048+ + + // #4633 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 210064 + + // #4634 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210096 + + // #4635 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210144+ + + // #4636 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 210224+ + + // #4637 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 210304+ + + // #4638 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 210320 + + // #4639 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210352 + + // #4640 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210400+ + + // #4641 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 210480+ + + // #4642 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 210560+ + + // #4643 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 210576 + + // #4644 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210608 + + // #4645 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210656+ + + // #4646 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 210736+ + + // #4647 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 210816+ + + // #4648 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 210832 + + // #4649 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210864 + + // #4650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 210912+ + + // #4651 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 210992+ + + // #4652 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 211072+ + + // #4653 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 211088 + + // #4654 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211120 + + // #4655 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211168+ + + // #4656 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 211248+ + + // #4657 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 211328+ + + // #4658 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 211344 + + // #4659 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211376 + + // #4660 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211424+ + + // #4661 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 211504+ + + // #4662 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 211584+ + + // #4663 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 211600 + + // #4664 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211632 + + // #4665 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211680+ + + // #4666 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 211760+ + + // #4667 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 211840+ + + // #4668 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 211856 + + // #4669 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211888 + + // #4670 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 211936+ + + // #4671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 212016+ + + // #4672 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 212096+ + + // #4673 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 212112 + + // #4674 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212144 + + // #4675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212192+ + + // #4676 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 212272+ + + // #4677 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 212352+ + + // #4678 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 212368 + + // #4679 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212400 + + // #4680 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212448+ + + // #4681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 212528+ + + // #4682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 212608+ + + // #4683 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 212624 + + // #4684 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212656 + + // #4685 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212704+ + + // #4686 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 212784+ + + // #4687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 212864+ + + // #4688 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 212880 + + // #4689 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212912 + + // #4690 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 212960+ + + // #4691 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 213040+ + + // #4692 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 213120+ + + // #4693 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 213136 + + // #4694 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213168 + + // #4695 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213216+ + + // #4696 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 213296+ + + // #4697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 213376+ + + // #4698 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 213392 + + // #4699 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213424 + + // #4700 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213472+ + + // #4701 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 213552+ + + // #4702 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 213632+ + + // #4703 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 213648 + + // #4704 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213680 + + // #4705 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213728+ + + // #4706 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 213808+ + + // #4707 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 213888+ + + // #4708 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 213904 + + // #4709 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213936 + + // #4710 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 213984+ + + // #4711 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 214064+ + + // #4712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 214144+ + + // #4713 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 214160 + + // #4714 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214192 + + // #4715 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214240+ + + // #4716 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 214320+ + + // #4717 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 214400+ + + // #4718 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 214416 + + // #4719 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214448 + + // #4720 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214496+ + + // #4721 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 214576+ + + // #4722 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 214656+ + + // #4723 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 214672 + + // #4724 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214704 + + // #4725 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214752+ + + // #4726 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 214832+ + + // #4727 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 214912+ + + // #4728 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 214928 + + // #4729 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 214960 + + // #4730 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215008+ + + // #4731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 215088+ + + // #4732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 215168+ + + // #4733 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 215184 + + // #4734 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215216 + + // #4735 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215264+ + + // #4736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 215344+ + + // #4737 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 215424+ + + // #4738 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 215440 + + // #4739 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215472 + + // #4740 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215520+ + + // #4741 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 215600+ + + // #4742 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 215680+ + + // #4743 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 215696 + + // #4744 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215728 + + // #4745 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215776+ + + // #4746 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 215856+ + + // #4747 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 215936+ + + // #4748 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 215952 + + // #4749 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 215984 + + // #4750 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216032+ + + // #4751 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 216112+ + + // #4752 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 216192+ + + // #4753 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 216208 + + // #4754 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216240 + + // #4755 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216288+ + + // #4756 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 216368+ + + // #4757 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 216448+ + + // #4758 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 216464 + + // #4759 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216496 + + // #4760 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216544+ + + // #4761 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 216624+ + + // #4762 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 216704+ + + // #4763 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 216720 + + // #4764 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216752 + + // #4765 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 216800+ + + // #4766 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 216880+ + + // #4767 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 216960+ + + // #4768 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 216976 + + // #4769 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217008 + + // #4770 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217056+ + + // #4771 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 217136+ + + // #4772 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 217216+ + + // #4773 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 217232 + + // #4774 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217264 + + // #4775 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217312+ + + // #4776 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 217392+ + + // #4777 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 217472+ + + // #4778 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 217488 + + // #4779 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217520 + + // #4780 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217568+ + + // #4781 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 217648+ + + // #4782 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 217728+ + + // #4783 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 217744 + + // #4784 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217776 + + // #4785 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 217824+ + + // #4786 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 217904+ + + // #4787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 217984+ + + // #4788 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 218000 + + // #4789 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218032 + + // #4790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218080+ + + // #4791 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 218160+ + + // #4792 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 218240+ + + // #4793 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 218256 + + // #4794 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218288 + + // #4795 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218336+ + + // #4796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 218416+ + + // #4797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 218496+ + + // #4798 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 218512 + + // #4799 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218544 + + // #4800 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218592+ + + // #4801 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 218672+ + + // #4802 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 218752+ + + // #4803 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 218768 + + // #4804 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218800 + + // #4805 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 218848+ + + // #4806 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 218928+ + + // #4807 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 219008+ + + // #4808 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 219024 + + // #4809 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219056 + + // #4810 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219104+ + + // #4811 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 219184+ + + // #4812 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 219264+ + + // #4813 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 219280 + + // #4814 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219312 + + // #4815 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219360+ + + // #4816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 219440+ + + // #4817 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 219520+ + + // #4818 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 219536 + + // #4819 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219568 + + // #4820 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219616+ + + // #4821 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 219696+ + + // #4822 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 219776+ + + // #4823 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 219792 + + // #4824 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219824 + + // #4825 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 219872+ + + // #4826 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 219952+ + + // #4827 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 220032+ + + // #4828 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 220048 + + // #4829 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 220080 + + // #4830 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 220128+ + + // #4831 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 220208+ + + // #4832 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 220288+ + + // #4833 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 220304 + + // #4834 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 220336 + + // #4835 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 220384+ + + // #4836 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 220464+ + + // #4837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 220544+ + + // #4838 + "\377\376\375\374" + "Desktop" + "\377\376\375\374\373" // 220560 + + // #4839 + "\377\376" + "Toolbar" + "\377\376\375\374\373\372\371" // 220576 + + // #4840 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MainToolbar" + "\377\376\375\374\373\372\371\370\367" // 220608 + + // #4841 + "\377\376\375\374\373\372\371\370" + "Small" + "\377\376\375" // 220624 + + // #4842 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Panel" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 220656 + + // #4843 + "\377\376\375" + "Dialog" + "\377\376\375\374\373\372\371" // 220672 + + // #4844 + "Default" + "\377\376\375\374\373\372\371\370\367" // 220688 + + // #4845 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 220704 + + // #4846 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 220736 + + // #4847 + "DesktopDefault" + "\377\376" // 220752 + + // #4848 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 220848+ + + // #4849 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 220928+ + + // #4850 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 220944 + + // #4851 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 221024+ + + // #4852 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 221056 + + // #4853 + "\377\376\375\374\373\372\371\370" + "DesktopSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 221088 + + // #4854 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 221168+ + + // #4855 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 221248+ + + // #4856 + "Default" + "\377\376\375\374\373\372\371\370\367" // 221264 + + // #4857 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 221280 + + // #4858 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 221312 + + // #4859 + "ToolbarDefault" + "\377\376" // 221328 + + // #4860 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 221424+ + + // #4861 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 221504+ + + // #4862 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 221520 + + // #4863 + "16,22,32,48" + "\377\376\375\374\373" // 221536 + + // #4864 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 221568 + + // #4865 + "ToolbarSizes" + "\377\376\375\374" // 221584 + + // #4866 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 221680+ + + // #4867 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 221760+ + + // #4868 + "Default" + "\377\376\375\374\373\372\371\370\367" // 221776 + + // #4869 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 221792 + + // #4870 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 221824 + + // #4871 + "\377\376\375\374\373\372\371\370" + "MainToolbarDefault" + "\377\376\375\374\373\372" // 221856+ + + // #4872 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 221936+ + + // #4873 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 222016+ + + // #4874 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 222032 + + // #4875 + "16,22,32,48" + "\377\376\375\374\373" // 222048 + + // #4876 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 222080 + + // #4877 + "MainToolbarSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 222112 + + // #4878 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 222192+ + + // #4879 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 222272+ + + // #4880 + "Default" + "\377\376\375\374\373\372\371\370\367" // 222288 + + // #4881 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 222304 + + // #4882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 222336 + + // #4883 + "SmallDefault" + "\377\376\375\374" // 222352 + + // #4884 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 222448+ + + // #4885 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 222528+ + + // #4886 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 222544 + + // #4887 + "16,22,32,48" + "\377\376\375\374\373" // 222560 + + // #4888 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 222592 + + // #4889 + "\377\376\375\374\373\372\371\370" + "SmallSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 222624 + + // #4890 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 222704+ + + // #4891 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 222784+ + + // #4892 + "Default" + "\377\376\375\374\373\372\371\370\367" // 222800 + + // #4893 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 222816 + + // #4894 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 222848 + + // #4895 + "\377\376\375\374\373\372\371\370" + "PanelDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 222880 + + // #4896 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 222960+ + + // #4897 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 223040+ + + // #4898 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 223056 + + // #4899 + "\377\376\375\374\373\372\371\370" + "16,22,32,48,64,128,256" + "\377\376" // 223088 + + // #4900 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 223120 + + // #4901 + "\377\376\375\374\373\372\371\370" + "PanelSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 223152 + + // #4902 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 223216+ + + // #4903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 223296+ + + // #4904 + "Default" + "\377\376\375\374\373\372\371\370\367" // 223312 + + // #4905 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 223328 + + // #4906 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 223360 + + // #4907 + "DialogDefault" + "\377\376\375" // 223376 + + // #4908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 223472+ + + // #4909 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 223552+ + + // #4910 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 223568 + + // #4911 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "16,22,32,48,64,128,256" + "\377\376" // 223648+ + + // #4912 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 223680 + + // #4913 + "\377\376\375\374\373\372\371\370" + "DialogSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 223712 + + // #4914 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 223792+ + + // #4915 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 223872+ + + // #4916 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "hicolor" + "\377\376\375\374\373\372\371\370\367\366" // 223904+ + + // #4917 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 223920 + + // #4918 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 223952 + + // #4919 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 223984 + + // #4920 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 224016 + + // #4921 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 224048 + + // #4922 + "\377\376\375\374\373\372\371\370\367\366\365" + "/icons/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 224080 + + // #4923 + "\377\376\375" + "/usr/share/pixmaps/" + "\377\376\375\374\373\372\371\370\367\366" // 224112 + + // #4924 + "index.theme" + "\377\376\375\374\373" // 224128 + + // #4925 + "index.theme" + "\377\376\375\374\373" // 224144 + + // #4926 + "\377\376\375\374\373\372\371\370\367\366\365" + "Icon Theme" + "\377\376\375\374\373\372\371\370\367\366\365" // 224176 + + // #4927 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 224192 + + // #4928 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 224208 + + // #4929 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 224224 + + // #4930 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 224240 + + // #4931 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 224272 + + // #4932 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 224288 + + // #4933 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 224304 + + // #4934 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 224320 + + // #4935 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 224336 + + // #4936 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 224352 + + // #4937 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 224368 + + // #4938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 224400 + + // #4939 + "\377\376\375\374" + "DisplayDepth" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 224432 + + // #4940 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 224496+ + + // #4941 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 224576+ + + // #4942 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 224592 + + // #4943 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 224608 + + // #4944 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 224624 + + // #4945 + "\377\376\375\374\373\372\371\370\367\366" + "Hidden" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 224656 + + // #4946 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 224752+ + + // #4947 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 224832+ + + // #4948 + "\377\376\375\374\373\372\371\370" + "192" + "\377\376\375\374\373" // 224848 + + // #4949 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 224880 + + // #4950 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 224928+ + + // #4951 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 225008+ + + // #4952 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 225088+ + + // #4953 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 225104 + + // #4954 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225136 + + // #4955 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225184+ + + // #4956 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 225264+ + + // #4957 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 225344+ + + // #4958 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 225360 + + // #4959 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225392 + + // #4960 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225440+ + + // #4961 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 225520+ + + // #4962 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 225600+ + + // #4963 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 225616 + + // #4964 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225648 + + // #4965 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225696+ + + // #4966 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 225776+ + + // #4967 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 225856+ + + // #4968 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 225872 + + // #4969 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225904 + + // #4970 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 225952+ + + // #4971 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 226032+ + + // #4972 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 226112+ + + // #4973 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 226128 + + // #4974 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226160 + + // #4975 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226208+ + + // #4976 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 226288+ + + // #4977 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 226368+ + + // #4978 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 226384 + + // #4979 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226416 + + // #4980 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226464+ + + // #4981 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 226544+ + + // #4982 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 226624+ + + // #4983 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 226640 + + // #4984 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226672 + + // #4985 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226720+ + + // #4986 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 226800+ + + // #4987 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 226880+ + + // #4988 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 226896 + + // #4989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226928 + + // #4990 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 226976+ + + // #4991 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 227056+ + + // #4992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 227136+ + + // #4993 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 227152 + + // #4994 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227184 + + // #4995 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227232+ + + // #4996 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 227312+ + + // #4997 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 227392+ + + // #4998 + "\377\376\375\374\373\372\371\370" + "96" + "\377\376\375\374\373\372" // 227408 + + // #4999 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227440 + + // #5000 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227488+ + + // #5001 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 227568+ + + // #5002 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 227648+ + + // #5003 + "\377\376\375\374\373\372\371\370" + "96" + "\377\376\375\374\373\372" // 227664 + + // #5004 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227696 + + // #5005 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227744+ + + // #5006 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 227824+ + + // #5007 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 227904+ + + // #5008 + "96" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 227920 + + // #5009 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 227952 + + // #5010 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228000+ + + // #5011 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 228080+ + + // #5012 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 228160+ + + // #5013 + "\377\376\375\374\373\372\371\370" + "96" + "\377\376\375\374\373\372" // 228176 + + // #5014 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228208 + + // #5015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228256+ + + // #5016 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 228336+ + + // #5017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 228416+ + + // #5018 + "96" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 228432 + + // #5019 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228464 + + // #5020 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228512+ + + // #5021 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 228592+ + + // #5022 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 228672+ + + // #5023 + "72" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 228688 + + // #5024 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228720 + + // #5025 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228768+ + + // #5026 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 228848+ + + // #5027 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 228928+ + + // #5028 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 228944 + + // #5029 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 228976 + + // #5030 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229024+ + + // #5031 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 229104+ + + // #5032 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 229184+ + + // #5033 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 229200 + + // #5034 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229232 + + // #5035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229280+ + + // #5036 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 229360+ + + // #5037 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 229440+ + + // #5038 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 229456 + + // #5039 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229488 + + // #5040 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229536+ + + // #5041 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 229616+ + + // #5042 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 229696+ + + // #5043 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 229712 + + // #5044 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229744 + + // #5045 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 229792+ + + // #5046 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 229872+ + + // #5047 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 229952+ + + // #5048 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 229968 + + // #5049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230000 + + // #5050 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230048+ + + // #5051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 230128+ + + // #5052 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 230208+ + + // #5053 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 230224 + + // #5054 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230256 + + // #5055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230304+ + + // #5056 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 230384+ + + // #5057 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 230464+ + + // #5058 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 230480 + + // #5059 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230512 + + // #5060 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230560+ + + // #5061 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 230640+ + + // #5062 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 230720+ + + // #5063 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 230736 + + // #5064 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230768 + + // #5065 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 230816+ + + // #5066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 230896+ + + // #5067 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 230976+ + + // #5068 + "\377\376\375\374\373\372\371\370" + "64" + "\377\376\375\374\373\372" // 230992 + + // #5069 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231024 + + // #5070 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231072+ + + // #5071 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 231152+ + + // #5072 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 231232+ + + // #5073 + "64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 231248 + + // #5074 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231280 + + // #5075 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231328+ + + // #5076 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 231408+ + + // #5077 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 231488+ + + // #5078 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 231504 + + // #5079 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231536 + + // #5080 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231584+ + + // #5081 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 231664+ + + // #5082 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 231744+ + + // #5083 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 231760 + + // #5084 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231792 + + // #5085 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 231840+ + + // #5086 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 231920+ + + // #5087 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 232000+ + + // #5088 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 232016 + + // #5089 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232048 + + // #5090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232096+ + + // #5091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 232176+ + + // #5092 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 232256+ + + // #5093 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 232272 + + // #5094 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232304 + + // #5095 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232352+ + + // #5096 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 232432+ + + // #5097 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 232512+ + + // #5098 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 232528 + + // #5099 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232560 + + // #5100 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232608+ + + // #5101 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 232688+ + + // #5102 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 232768+ + + // #5103 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 232784 + + // #5104 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232816 + + // #5105 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 232864+ + + // #5106 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 232944+ + + // #5107 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 233024+ + + // #5108 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 233040 + + // #5109 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233072 + + // #5110 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233120+ + + // #5111 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 233200+ + + // #5112 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 233280+ + + // #5113 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 233296 + + // #5114 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233328 + + // #5115 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233376+ + + // #5116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 233456+ + + // #5117 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 233536+ + + // #5118 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 233552 + + // #5119 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233584 + + // #5120 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233632+ + + // #5121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 233712+ + + // #5122 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 233792+ + + // #5123 + "36" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 233808 + + // #5124 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233840 + + // #5125 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 233888+ + + // #5126 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 233968+ + + // #5127 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 234048+ + + // #5128 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 234064 + + // #5129 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234096 + + // #5130 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234144+ + + // #5131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 234224+ + + // #5132 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 234304+ + + // #5133 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 234320 + + // #5134 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234352 + + // #5135 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234400+ + + // #5136 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 234480+ + + // #5137 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 234560+ + + // #5138 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 234576 + + // #5139 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234608 + + // #5140 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234656+ + + // #5141 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 234736+ + + // #5142 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 234816+ + + // #5143 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 234832 + + // #5144 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234864 + + // #5145 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 234912+ + + // #5146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 234992+ + + // #5147 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 235072+ + + // #5148 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 235088 + + // #5149 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235120 + + // #5150 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235168+ + + // #5151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 235248+ + + // #5152 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 235328+ + + // #5153 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 235344 + + // #5154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235376 + + // #5155 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235424+ + + // #5156 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 235504+ + + // #5157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 235584+ + + // #5158 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 235600 + + // #5159 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235632 + + // #5160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235680+ + + // #5161 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 235760+ + + // #5162 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 235840+ + + // #5163 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 235856 + + // #5164 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235888 + + // #5165 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 235936+ + + // #5166 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 236016+ + + // #5167 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 236096+ + + // #5168 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 236112 + + // #5169 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236144 + + // #5170 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236192+ + + // #5171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 236272+ + + // #5172 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 236352+ + + // #5173 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 236368 + + // #5174 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236400 + + // #5175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236448+ + + // #5176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 236528+ + + // #5177 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 236608+ + + // #5178 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 236624 + + // #5179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236656 + + // #5180 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236704+ + + // #5181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 236784+ + + // #5182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 236864+ + + // #5183 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 236880 + + // #5184 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236912 + + // #5185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 236960+ + + // #5186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 237040+ + + // #5187 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 237120+ + + // #5188 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 237136 + + // #5189 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237168 + + // #5190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237216+ + + // #5191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 237296+ + + // #5192 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 237376+ + + // #5193 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 237392 + + // #5194 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237424 + + // #5195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237472+ + + // #5196 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 237552+ + + // #5197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 237632+ + + // #5198 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 237648 + + // #5199 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237680 + + // #5200 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237728+ + + // #5201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 237808+ + + // #5202 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 237888+ + + // #5203 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 237904 + + // #5204 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237936 + + // #5205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 237984+ + + // #5206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 238064+ + + // #5207 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 238144+ + + // #5208 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 238160 + + // #5209 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238192 + + // #5210 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238240+ + + // #5211 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 238320+ + + // #5212 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 238400+ + + // #5213 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 238416 + + // #5214 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238448 + + // #5215 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238496+ + + // #5216 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 238576+ + + // #5217 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 238656+ + + // #5218 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 238672 + + // #5219 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238704 + + // #5220 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238752+ + + // #5221 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 238832+ + + // #5222 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 238912+ + + // #5223 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 238928 + + // #5224 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 238960 + + // #5225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239008+ + + // #5226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 239088+ + + // #5227 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 239168+ + + // #5228 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 239184 + + // #5229 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239216 + + // #5230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239264+ + + // #5231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 239344+ + + // #5232 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 239424+ + + // #5233 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 239440 + + // #5234 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239472 + + // #5235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239520+ + + // #5236 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 239600+ + + // #5237 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 239680+ + + // #5238 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 239696 + + // #5239 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239728 + + // #5240 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239776+ + + // #5241 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 239856+ + + // #5242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 239936+ + + // #5243 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 239952 + + // #5244 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 239984 + + // #5245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240032+ + + // #5246 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 240112+ + + // #5247 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 240192+ + + // #5248 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 240208 + + // #5249 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240240 + + // #5250 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240288+ + + // #5251 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 240368+ + + // #5252 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 240448+ + + // #5253 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 240464 + + // #5254 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240496 + + // #5255 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240544+ + + // #5256 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 240624+ + + // #5257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 240704+ + + // #5258 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 240720 + + // #5259 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240752 + + // #5260 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 240800+ + + // #5261 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 240880+ + + // #5262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 240960+ + + // #5263 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 240976 + + // #5264 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241008 + + // #5265 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241056+ + + // #5266 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 241136+ + + // #5267 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 241216+ + + // #5268 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 241232 + + // #5269 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241264 + + // #5270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241312+ + + // #5271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 241392+ + + // #5272 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 241472+ + + // #5273 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 241488 + + // #5274 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241520 + + // #5275 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241568+ + + // #5276 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 241648+ + + // #5277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 241728+ + + // #5278 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 241744 + + // #5279 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241776 + + // #5280 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 241824+ + + // #5281 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 241904+ + + // #5282 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 241984+ + + // #5283 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 242000 + + // #5284 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242032 + + // #5285 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242080+ + + // #5286 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 242160+ + + // #5287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 242240+ + + // #5288 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 242256 + + // #5289 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242288 + + // #5290 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242336+ + + // #5291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 242416+ + + // #5292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 242496+ + + // #5293 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 242512 + + // #5294 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242544 + + // #5295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242592+ + + // #5296 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 242672+ + + // #5297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 242752+ + + // #5298 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 242768 + + // #5299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242800 + + // #5300 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 242848+ + + // #5301 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 242928+ + + // #5302 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 243008+ + + // #5303 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 243024 + + // #5304 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243056 + + // #5305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243104+ + + // #5306 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 243184+ + + // #5307 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 243264+ + + // #5308 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 243280 + + // #5309 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243312 + + // #5310 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 243328 + + // #5311 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 243376+ + + // #5312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 243456+ + + // #5313 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 243472 + + // #5314 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243504 + + // #5315 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 243520 + + // #5316 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 243568+ + + // #5317 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 243648+ + + // #5318 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 243664 + + // #5319 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243696 + + // #5320 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243744+ + + // #5321 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 243824+ + + // #5322 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 243904+ + + // #5323 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 243920 + + // #5324 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 243952 + + // #5325 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 243968 + + // #5326 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 244016+ + + // #5327 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 244096+ + + // #5328 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 244112 + + // #5329 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244144 + + // #5330 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 244160 + + // #5331 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 244208+ + + // #5332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 244288+ + + // #5333 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 244304 + + // #5334 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244336 + + // #5335 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244384+ + + // #5336 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 244464+ + + // #5337 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 244544+ + + // #5338 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 244560 + + // #5339 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244592 + + // #5340 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 244608 + + // #5341 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 244656+ + + // #5342 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 244736+ + + // #5343 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 244752 + + // #5344 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244784 + + // #5345 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 244800 + + // #5346 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 244848+ + + // #5347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 244928+ + + // #5348 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 244944 + + // #5349 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 244976 + + // #5350 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245024+ + + // #5351 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 245104+ + + // #5352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 245184+ + + // #5353 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 245200 + + // #5354 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245232 + + // #5355 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 245248 + + // #5356 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 245296+ + + // #5357 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 245376+ + + // #5358 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 245392 + + // #5359 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245424 + + // #5360 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 245440 + + // #5361 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 245488+ + + // #5362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 245568+ + + // #5363 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 245584 + + // #5364 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245616 + + // #5365 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245664+ + + // #5366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 245744+ + + // #5367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 245824+ + + // #5368 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 245840 + + // #5369 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 245872 + + // #5370 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 245888 + + // #5371 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 245936+ + + // #5372 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 246016+ + + // #5373 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 246032 + + // #5374 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246064 + + // #5375 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 246080 + + // #5376 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 246128+ + + // #5377 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 246208+ + + // #5378 + "\377\376\375\374\373\372\371\370" + "128" + "\377\376\375\374\373" // 246224 + + // #5379 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246256 + + // #5380 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246304+ + + // #5381 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 246384+ + + // #5382 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 246464+ + + // #5383 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 246480 + + // #5384 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246512 + + // #5385 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 246528 + + // #5386 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 246576+ + + // #5387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 246656+ + + // #5388 + "256" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 246672 + + // #5389 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246704 + + // #5390 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 246720 + + // #5391 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 246768+ + + // #5392 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 246848+ + + // #5393 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 246864 + + // #5394 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246896 + + // #5395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 246944+ + + // #5396 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 247024+ + + // #5397 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 247104+ + + // #5398 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247120 + + // #5399 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247152 + + // #5400 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 247168 + + // #5401 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 247216+ + + // #5402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 247296+ + + // #5403 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 247312 + + // #5404 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247344 + + // #5405 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 247360 + + // #5406 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 247408+ + + // #5407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 247488+ + + // #5408 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 247504 + + // #5409 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247536 + + // #5410 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247584+ + + // #5411 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 247664+ + + // #5412 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 247744+ + + // #5413 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247760 + + // #5414 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247792 + + // #5415 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 247808 + + // #5416 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 247856+ + + // #5417 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 247936+ + + // #5418 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 247952 + + // #5419 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 247984 + + // #5420 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 248000 + + // #5421 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 248048+ + + // #5422 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 248128+ + + // #5423 + "128" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 248144 + + // #5424 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248176 + + // #5425 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248224+ + + // #5426 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 248304+ + + // #5427 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 248384+ + + // #5428 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248400 + + // #5429 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248432 + + // #5430 + "\377\376\375" + "MinSize" + "\377\376\375\374\373\372" // 248448 + + // #5431 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 248496+ + + // #5432 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 248576+ + + // #5433 + "\377\376\375\374\373\372\371\370" + "256" + "\377\376\375\374\373" // 248592 + + // #5434 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248624 + + // #5435 + "\377\376\375" + "MaxSize" + "\377\376\375\374\373\372" // 248640 + + // #5436 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 248688+ + + // #5437 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 248768+ + + // #5438 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 248784 + + // #5439 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248816 + + // #5440 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 248864+ + + // #5441 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 248944+ + + // #5442 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 249024+ + + // #5443 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 249040 + + // #5444 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249072 + + // #5445 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249120+ + + // #5446 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 249200+ + + // #5447 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 249280+ + + // #5448 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 249296 + + // #5449 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249328 + + // #5450 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249376+ + + // #5451 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 249456+ + + // #5452 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 249536+ + + // #5453 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 249552 + + // #5454 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249584 + + // #5455 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249632+ + + // #5456 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 249712+ + + // #5457 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 249792+ + + // #5458 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 249808 + + // #5459 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249840 + + // #5460 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 249888+ + + // #5461 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 249968+ + + // #5462 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 250048+ + + // #5463 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 250064 + + // #5464 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250096 + + // #5465 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250144+ + + // #5466 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 250224+ + + // #5467 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 250304+ + + // #5468 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 250320 + + // #5469 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250352 + + // #5470 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250400+ + + // #5471 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 250480+ + + // #5472 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 250560+ + + // #5473 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 250576 + + // #5474 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250608 + + // #5475 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250656+ + + // #5476 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 250736+ + + // #5477 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 250816+ + + // #5478 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 250832 + + // #5479 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250864 + + // #5480 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 250912+ + + // #5481 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 250992+ + + // #5482 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 251072+ + + // #5483 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 251088 + + // #5484 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251120 + + // #5485 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251168+ + + // #5486 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 251248+ + + // #5487 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 251328+ + + // #5488 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 251344 + + // #5489 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251376 + + // #5490 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251424+ + + // #5491 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 251504+ + + // #5492 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 251584+ + + // #5493 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 251600 + + // #5494 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251632 + + // #5495 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251680+ + + // #5496 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 251760+ + + // #5497 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 251840+ + + // #5498 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 251856 + + // #5499 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251888 + + // #5500 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 251936+ + + // #5501 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 252016+ + + // #5502 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 252096+ + + // #5503 + "24" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 252112 + + // #5504 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252144 + + // #5505 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252192+ + + // #5506 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 252272+ + + // #5507 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 252352+ + + // #5508 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 252368 + + // #5509 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252400 + + // #5510 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252448+ + + // #5511 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 252528+ + + // #5512 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 252608+ + + // #5513 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 252624 + + // #5514 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252656 + + // #5515 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252704+ + + // #5516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 252784+ + + // #5517 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 252864+ + + // #5518 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 252880 + + // #5519 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252912 + + // #5520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 252960+ + + // #5521 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 253040+ + + // #5522 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 253120+ + + // #5523 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 253136 + + // #5524 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253168 + + // #5525 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253216+ + + // #5526 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 253296+ + + // #5527 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 253376+ + + // #5528 + "24" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 253392 + + // #5529 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253424 + + // #5530 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253472+ + + // #5531 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 253552+ + + // #5532 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 253632+ + + // #5533 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 253648 + + // #5534 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253680 + + // #5535 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253728+ + + // #5536 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 253808+ + + // #5537 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 253888+ + + // #5538 + "24" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 253904 + + // #5539 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253936 + + // #5540 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 253984+ + + // #5541 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 254064+ + + // #5542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 254144+ + + // #5543 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 254160 + + // #5544 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254192 + + // #5545 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254240+ + + // #5546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 254320+ + + // #5547 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 254400+ + + // #5548 + "24" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 254416 + + // #5549 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254448 + + // #5550 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254496+ + + // #5551 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 254576+ + + // #5552 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 254656+ + + // #5553 + "\377\376\375\374\373\372\371\370" + "24" + "\377\376\375\374\373\372" // 254672 + + // #5554 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254704 + + // #5555 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254752+ + + // #5556 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 254832+ + + // #5557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 254912+ + + // #5558 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 254928 + + // #5559 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 254960 + + // #5560 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255008+ + + // #5561 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 255088+ + + // #5562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 255168+ + + // #5563 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 255184 + + // #5564 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255216 + + // #5565 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255264+ + + // #5566 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 255344+ + + // #5567 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 255424+ + + // #5568 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 255440 + + // #5569 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255472 + + // #5570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255520+ + + // #5571 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 255600+ + + // #5572 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 255680+ + + // #5573 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 255696 + + // #5574 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255728 + + // #5575 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255776+ + + // #5576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 255856+ + + // #5577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 255936+ + + // #5578 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 255952 + + // #5579 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 255984 + + // #5580 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256032+ + + // #5581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 256112+ + + // #5582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 256192+ + + // #5583 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 256208 + + // #5584 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256240 + + // #5585 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256288+ + + // #5586 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 256368+ + + // #5587 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 256448+ + + // #5588 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 256464 + + // #5589 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256496 + + // #5590 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256544+ + + // #5591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 256624+ + + // #5592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 256704+ + + // #5593 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 256720 + + // #5594 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256752 + + // #5595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 256800+ + + // #5596 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 256880+ + + // #5597 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 256960+ + + // #5598 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 256976 + + // #5599 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257008 + + // #5600 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257056+ + + // #5601 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 257136+ + + // #5602 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 257216+ + + // #5603 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 257232 + + // #5604 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257264 + + // #5605 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257312+ + + // #5606 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 257392+ + + // #5607 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 257472+ + + // #5608 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 257488 + + // #5609 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257520 + + // #5610 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257568+ + + // #5611 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 257648+ + + // #5612 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 257728+ + + // #5613 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 257744 + + // #5614 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257776 + + // #5615 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 257824+ + + // #5616 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 257904+ + + // #5617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 257984+ + + // #5618 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 258000 + + // #5619 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258032 + + // #5620 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258080+ + + // #5621 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 258160+ + + // #5622 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 258240+ + + // #5623 + "36" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 258256 + + // #5624 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258288 + + // #5625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258336+ + + // #5626 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 258416+ + + // #5627 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 258496+ + + // #5628 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 258512 + + // #5629 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258544 + + // #5630 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258592+ + + // #5631 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 258672+ + + // #5632 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 258752+ + + // #5633 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 258768 + + // #5634 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258800 + + // #5635 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 258848+ + + // #5636 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 258928+ + + // #5637 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 259008+ + + // #5638 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 259024 + + // #5639 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259056 + + // #5640 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259104+ + + // #5641 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 259184+ + + // #5642 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 259264+ + + // #5643 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 259280 + + // #5644 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259312 + + // #5645 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259360+ + + // #5646 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 259440+ + + // #5647 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 259520+ + + // #5648 + "36" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 259536 + + // #5649 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259568 + + // #5650 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259616+ + + // #5651 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 259696+ + + // #5652 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 259776+ + + // #5653 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 259792 + + // #5654 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259824 + + // #5655 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 259872+ + + // #5656 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 259952+ + + // #5657 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 260032+ + + // #5658 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 260048 + + // #5659 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260080 + + // #5660 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260128+ + + // #5661 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 260208+ + + // #5662 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 260288+ + + // #5663 + "36" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 260304 + + // #5664 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260336 + + // #5665 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260384+ + + // #5666 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 260464+ + + // #5667 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 260544+ + + // #5668 + "\377\376\375\374\373\372\371\370" + "36" + "\377\376\375\374\373\372" // 260560 + + // #5669 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260592 + + // #5670 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260640+ + + // #5671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 260720+ + + // #5672 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 260800+ + + // #5673 + "36" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 260816 + + // #5674 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260848 + + // #5675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 260896+ + + // #5676 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 260976+ + + // #5677 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 261056+ + + // #5678 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 261072 + + // #5679 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261104 + + // #5680 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261152+ + + // #5681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 261232+ + + // #5682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 261312+ + + // #5683 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 261328 + + // #5684 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261360 + + // #5685 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261408+ + + // #5686 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 261488+ + + // #5687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 261568+ + + // #5688 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 261584 + + // #5689 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261616 + + // #5690 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261664+ + + // #5691 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 261744+ + + // #5692 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 261824+ + + // #5693 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 261840 + + // #5694 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261872 + + // #5695 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 261920+ + + // #5696 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 262000+ + + // #5697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 262080+ + + // #5698 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 262096 + + // #5699 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262128 + + // #5700 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262176+ + + // #5701 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 262256+ + + // #5702 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 262336+ + + // #5703 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 262352 + + // #5704 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262384 + + // #5705 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262432+ + + // #5706 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 262512+ + + // #5707 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 262592+ + + // #5708 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 262608 + + // #5709 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262640 + + // #5710 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262688+ + + // #5711 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 262768+ + + // #5712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 262848+ + + // #5713 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 262864 + + // #5714 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262896 + + // #5715 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 262944+ + + // #5716 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 263024+ + + // #5717 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 263104+ + + // #5718 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 263120 + + // #5719 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263152 + + // #5720 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263200+ + + // #5721 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 263280+ + + // #5722 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 263360+ + + // #5723 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 263376 + + // #5724 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263408 + + // #5725 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263456+ + + // #5726 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 263536+ + + // #5727 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 263616+ + + // #5728 + "48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 263632 + + // #5729 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263664 + + // #5730 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263712+ + + // #5731 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 263792+ + + // #5732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 263872+ + + // #5733 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 263888 + + // #5734 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263920 + + // #5735 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 263968+ + + // #5736 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 264048+ + + // #5737 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 264128+ + + // #5738 + "\377\376\375\374" + "Desktop" + "\377\376\375\374\373" // 264144 + + // #5739 + "\377\376" + "Toolbar" + "\377\376\375\374\373\372\371" // 264160 + + // #5740 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MainToolbar" + "\377\376\375\374\373\372\371\370\367" // 264192 + + // #5741 + "\377\376\375\374\373\372\371\370" + "Small" + "\377\376\375" // 264208 + + // #5742 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Panel" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 264240 + + // #5743 + "\377\376\375" + "Dialog" + "\377\376\375\374\373\372\371" // 264256 + + // #5744 + "Default" + "\377\376\375\374\373\372\371\370\367" // 264272 + + // #5745 + "\377\376\375\374\373\372\371\370" + "32" + "\377\376\375\374\373\372" // 264288 + + // #5746 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 264320 + + // #5747 + "DesktopDefault" + "\377\376" // 264336 + + // #5748 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 264432+ + + // #5749 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 264512+ + + // #5750 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 264528 + + // #5751 + "\377\376\375\374\373\372\371\370" + "16,32,48,64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 264560 + + // #5752 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 264592 + + // #5753 + "DesktopSizes" + "\377\376\375\374" // 264608 + + // #5754 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 264688+ + + // #5755 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 264768+ + + // #5756 + "Default" + "\377\376\375\374\373\372\371\370\367" // 264784 + + // #5757 + "22" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 264800 + + // #5758 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 264832 + + // #5759 + "ToolbarDefault" + "\377\376" // 264848 + + // #5760 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 264944+ + + // #5761 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 265024+ + + // #5762 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 265040 + + // #5763 + "16,22,32" + "\377\376\375\374\373\372\371\370" // 265056 + + // #5764 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 265088 + + // #5765 + "ToolbarSizes" + "\377\376\375\374" // 265104 + + // #5766 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 265200+ + + // #5767 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 265280+ + + // #5768 + "Default" + "\377\376\375\374\373\372\371\370\367" // 265296 + + // #5769 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 265312 + + // #5770 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 265344 + + // #5771 + "MainToolbarDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 265376 + + // #5772 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 265456+ + + // #5773 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 265536+ + + // #5774 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 265552 + + // #5775 + "16,22,32" + "\377\376\375\374\373\372\371\370" // 265568 + + // #5776 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 265600 + + // #5777 + "MainToolbarSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 265632 + + // #5778 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 265712+ + + // #5779 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 265792+ + + // #5780 + "Default" + "\377\376\375\374\373\372\371\370\367" // 265808 + + // #5781 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 265824 + + // #5782 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 265856 + + // #5783 + "\377\376\375\374\373\372\371\370" + "SmallDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 265888 + + // #5784 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 265968+ + + // #5785 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 266048+ + + // #5786 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 266064 + + // #5787 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 266080 + + // #5788 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 266112 + + // #5789 + "SmallSizes" + "\377\376\375\374\373\372" // 266128 + + // #5790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 266224+ + + // #5791 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 266304+ + + // #5792 + "Default" + "\377\376\375\374\373\372\371\370\367" // 266320 + + // #5793 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 266336 + + // #5794 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 266368 + + // #5795 + "\377\376\375\374\373\372\371\370" + "PanelDefault" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 266400 + + // #5796 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 266480+ + + // #5797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 266560+ + + // #5798 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 266576 + + // #5799 + "16,22,32,48" + "\377\376\375\374\373" // 266592 + + // #5800 + "\377\376\375\374\373" + "QVariantList" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 266624 + + // #5801 + "\377\376\375\374\373\372\371\370" + "PanelSizes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 266656+ + + // #5802 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 266736+ + + // #5803 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 266816+ + + // #5804 + "Default" + "\377\376\375\374\373\372\371\370\367" // 266832 + + // #5805 + "Sizes" + "\377\376\375\374\373\372\371\370\367\366\365" // 266848 + + // #5806 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "/pics/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 266880 + + // #5807 + "\377\376\375\374\373\372\371\370" + "data" + "\377\376\375\374" // 266896 + + // #5808 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "/toolbar/" + "\377\376\375\374\373\372\371\370\367\366" // 266928 + + // #5809 + "\377\376\375\374\373\372\371\370" + "data" + "\377\376\375\374" // 266944 + + // #5810 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 266960 + + // #5811 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 266976 + + // #5812 + "\377\376\375\374" + "/usr/share/pixmaps" + "\377\376\375\374\373\372\371\370\367\366" // 267008 + + // #5813 + "\377\376\375\374" + "Desktop" + "\377\376\375\374\373" // 267024 + + // #5814 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 267040 + + // #5815 + "\377\376\375\374\373\372\371\370" + "48" + "\377\376\375\374\373\372" // 267056 + + // #5816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267088 + + // #5817 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267168+ + + // #5818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 267248+ + + // #5819 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 267328+ + + // #5820 + "\377\376" + "Toolbar" + "\377\376\375\374\373\372\371" // 267344 + + // #5821 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 267360 + + // #5822 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 267376 + + // #5823 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267408 + + // #5824 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267488+ + + // #5825 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 267568+ + + // #5826 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 267648+ + + // #5827 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "MainToolbar" + "\377\376\375\374\373\372\371\370\367" // 267680 + + // #5828 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 267696 + + // #5829 + "\377\376\375\374\373\372\371\370" + "22" + "\377\376\375\374\373\372" // 267712 + + // #5830 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267744 + + // #5831 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 267808+ + + // #5832 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 267888+ + + // #5833 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 267968+ + + // #5834 + "\377\376\375\374\373\372\371\370" + "Small" + "\377\376\375" // 267984 + + // #5835 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 268000 + + // #5836 + "\377\376\375\374\373\372\371\370" + "16" + "\377\376\375\374\373\372" // 268016 + + // #5837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 268048 + + // #5838 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 268128+ + + // #5839 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 268208+ + + // #5840 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 268288+ + + // #5841 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Panel" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 268320 + + // #5842 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 268336 + + // #5843 + "32" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 268352 + + // #5844 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 268384 + + // #5845 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323" + "Size" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 268448+ + + // #5846 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 268528+ + + // #5847 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 268608+ + + // #5848 + "\377\376\375" + "Dialog" + "\377\376\375\374\373\372\371" // 268624 + + // #5849 + "\377\376\375\374\373\372\371\370\367" + "Icons" + "\377\376" // 268640 + + // #5850 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 268656 + + // #5851 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 268672 + + // #5852 + "\377" + "/imageformats" + "\377\376" // 268688 + + // #5853 + "Trolltech" + "\377\376\375\374\373\372\371" // 268704 + + // #5854 + "\377\376\375\374\373\372\371\370\367" + ".conf" + "\377\376" // 268720 + + // #5855 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351" + "No such file or directory" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 268784+ + + // #5856 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 268800 + + // #5857 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 268816 + + // #5858 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 268832 + + // #5859 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 268848 + + // #5860 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 268864 + + // #5861 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 268880 + + // #5862 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 268912 + + // #5863 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 268992+ + + // #5864 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 269040 + + // #5865 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 269088 + + // #5866 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 269104 + + // #5867 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 269120 + + // #5868 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 269152 + + // #5869 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 269248+ + + // #5870 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 269296 + + // #5871 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 269344 + + // #5872 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 269360 + + // #5873 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 269376 + + // #5874 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 269408 + + // #5875 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 269504+ + + // #5876 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 269552 + + // #5877 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 269600 + + // #5878 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 269616 + + // #5879 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 269632 + + // #5880 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 269664 + + // #5881 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 269760+ + + // #5882 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 269808 + + // #5883 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 269856 + + // #5884 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 269872 + + // #5885 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 269888 + + // #5886 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 269920 + + // #5887 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 270016+ + + // #5888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 270064 + + // #5889 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 270112 + + // #5890 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 270128 + + // #5891 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 270144 + + // #5892 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 270176 + + // #5893 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 270272+ + + // #5894 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 270320 + + // #5895 + "The shared library was not found." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 270368 + + // #5896 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 270384 + + // #5897 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 270400 + + // #5898 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 270416 + + // #5899 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 270432 + + // #5900 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 270448 + + // #5901 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 270464 + + // #5902 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 270496 + + // #5903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 270592+ + + // #5904 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 270640 + + // #5905 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 270656 + + // #5906 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 270672 + + // #5907 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 270704 + + // #5908 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 270784+ + + // #5909 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 270832 + + // #5910 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 270848 + + // #5911 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 270864 + + // #5912 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 270896 + + // #5913 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 270976+ + + // #5914 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 271024 + + // #5915 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 271040 + + // #5916 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 271056 + + // #5917 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 271088 + + // #5918 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 271168+ + + // #5919 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 271216 + + // #5920 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 271232 + + // #5921 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 271248 + + // #5922 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 271280 + + // #5923 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 271360+ + + // #5924 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 271408 + + // #5925 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 271424 + + // #5926 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 271440 + + // #5927 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 271472 + + // #5928 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 271552+ + + // #5929 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 271600 + + // #5930 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 271616 + + // #5931 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 271632 + + // #5932 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 271648 + + // #5933 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 271664 + + // #5934 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 271680 + + // #5935 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 271696 + + // #5936 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 271728 + + // #5937 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 271808+ + + // #5938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 271856 + + // #5939 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 271872 + + // #5940 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 271888 + + // #5941 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 271920 + + // #5942 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272000+ + + // #5943 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 272048 + + // #5944 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 272064 + + // #5945 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 272080 + + // #5946 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 272112 + + // #5947 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272192+ + + // #5948 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 272240 + + // #5949 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 272256 + + // #5950 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 272272 + + // #5951 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 272304 + + // #5952 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272384+ + + // #5953 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 272432 + + // #5954 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 272448 + + // #5955 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 272464 + + // #5956 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 272496 + + // #5957 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272576+ + + // #5958 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 272624 + + // #5959 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 272640 + + // #5960 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 272656 + + // #5961 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 272688 + + // #5962 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272768+ + + // #5963 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 272816 + + // #5964 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 272832 + + // #5965 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 272848 + + // #5966 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 272880 + + // #5967 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 272960+ + + // #5968 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273008 + + // #5969 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 273024 + + // #5970 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 273040 + + // #5971 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 273072 + + // #5972 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 273152+ + + // #5973 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273200 + + // #5974 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 273216 + + // #5975 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 273232 + + // #5976 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 273264 + + // #5977 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 273344+ + + // #5978 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273392 + + // #5979 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 273408 + + // #5980 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 273424 + + // #5981 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 273456 + + // #5982 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 273536+ + + // #5983 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273584 + + // #5984 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 273600 + + // #5985 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 273616 + + // #5986 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 273648 + + // #5987 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 273728+ + + // #5988 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273776 + + // #5989 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 273792 + + // #5990 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 273808 + + // #5991 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 273840 + + // #5992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 273920+ + + // #5993 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 273968 + + // #5994 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 273984 + + // #5995 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 274000 + + // #5996 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 274016 + + // #5997 + "\377\376\375\374\373\372" + "*" + "\377\376\375\374\373\372\371\370\367" // 274032 + + // #5998 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 274048 + + // #5999 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 274064 + + // #6000 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 274096 + + // #6001 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 274176+ + + // #6002 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 274224 + + // #6003 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 274240 + + // #6004 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 274256 + + // #6005 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 274288 + + // #6006 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 274368+ + + // #6007 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 274416 + + // #6008 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 274432 + + // #6009 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 274448 + + // #6010 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 274480 + + // #6011 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 274560+ + + // #6012 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 274608 + + // #6013 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 274624 + + // #6014 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 274640 + + // #6015 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 274672 + + // #6016 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 274752+ + + // #6017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 274800 + + // #6018 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 274816 + + // #6019 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 274832 + + // #6020 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 274864 + + // #6021 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 274944+ + + // #6022 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 274992 + + // #6023 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275008 + + // #6024 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275024 + + // #6025 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 275056 + + // #6026 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 275136+ + + // #6027 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 275184 + + // #6028 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275200 + + // #6029 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275216 + + // #6030 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 275248 + + // #6031 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 275328+ + + // #6032 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 275376 + + // #6033 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275392 + + // #6034 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275408 + + // #6035 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 275440 + + // #6036 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 275520+ + + // #6037 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 275568 + + // #6038 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275584 + + // #6039 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275600 + + // #6040 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 275632 + + // #6041 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 275712+ + + // #6042 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 275760 + + // #6043 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275776 + + // #6044 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275792 + + // #6045 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 275824 + + // #6046 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 275904+ + + // #6047 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 275952 + + // #6048 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 275968 + + // #6049 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 275984 + + // #6050 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 276016 + + // #6051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 276096+ + + // #6052 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 276144 + + // #6053 + "\377" + "%1:%2:%3" + "\377\376\375\374\373\372\371" // 276160 + + // #6054 + "\377\376\375" + "debug" + "\377\376\375\374\373\372\371\370" // 276176 + + // #6055 + "\377\376" + "Qt Plugin Cache %1.%2.%3/%4" + "\377\376\375" // 276208 + + // #6056 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "com.trolltech.Qt.QImageIOHandlerFactoryInterface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 276288+ + + // #6057 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Qt Factory Cache %1.%2/%3:/%4" + "\377\376\375\374\373" // 276336 + + // #6058 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 276352 + + // #6059 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 276368 + + // #6060 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276384 + + // #6061 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276400 + + // #6062 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276416 + + // #6063 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276432 + + // #6064 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276448 + + // #6065 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276464 + + // #6066 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276480 + + // #6067 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276496 + + // #6068 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276512 + + // #6069 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276528 + + // #6070 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276544 + + // #6071 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276560 + + // #6072 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276576 + + // #6073 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276592 + + // #6074 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276608 + + // #6075 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276624 + + // #6076 + "Software" + "\377\376\375\374\373\372\371\370" // 276640 + + // #6077 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "www.inkscape.org" + "\377\376\375\374\373\372\371\370" // 276704+ + + // #6078 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 276720 + + // #6079 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276736 + + // #6080 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276752 + + // #6081 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276768 + + // #6082 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276784 + + // #6083 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276800 + + // #6084 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276816 + + // #6085 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276832 + + // #6086 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276848 + + // #6087 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276864 + + // #6088 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276880 + + // #6089 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276896 + + // #6090 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276912 + + // #6091 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276928 + + // #6092 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 276944 + + // #6093 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 276960 + + // #6094 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 276976 + + // #6095 + "Software" + "\377\376\375\374\373\372\371\370" // 276992 + + // #6096 + "\377\376\375\374\373\372\371\370" + "www.inkscape.org" + "\377\376\375\374\373\372\371\370" // 277024+ + + // #6097 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 277040 + + // #6098 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277056 + + // #6099 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277072 + + // #6100 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277088 + + // #6101 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277104 + + // #6102 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277120 + + // #6103 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277136 + + // #6104 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277152 + + // #6105 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277168 + + // #6106 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277184 + + // #6107 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277200 + + // #6108 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277216 + + // #6109 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277232 + + // #6110 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277248 + + // #6111 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277264 + + // #6112 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277280 + + // #6113 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277296 + + // #6114 + "Software" + "\377\376\375\374\373\372\371\370" // 277312 + + // #6115 + "\377\376\375\374\373\372\371\370" + "www.inkscape.org" + "\377\376\375\374\373\372\371\370" // 277344+ + + // #6116 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 277360 + + // #6117 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277376 + + // #6118 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277392 + + // #6119 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277408 + + // #6120 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277424 + + // #6121 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277440 + + // #6122 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277456 + + // #6123 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277472 + + // #6124 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277488 + + // #6125 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277504 + + // #6126 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277520 + + // #6127 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277536 + + // #6128 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277552 + + // #6129 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277568 + + // #6130 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 277584 + + // #6131 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 277600 + + // #6132 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 277616 + + // #6133 + "Software" + "\377\376\375\374\373\372\371\370" // 277632 + + // #6134 + "\377\376\375\374\373\372\371\370" + "www.inkscape.org" + "\377\376\375\374\373\372\371\370" // 277664+ + + // #6135 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 277680 + + // #6136 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 277696 + + // #6137 + "\377\376\375\374\373\372\371\370" + "/home/tmacieir/KDE4/lib/kde4/libexec/drkonqi" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 277760+ + + // #6138 + "\377\376\375\374" + "--nocrashhandler" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 277792 + + // #6139 + "\377\376\375\374" + "--nocrashhandler" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 277824 + + // #6140 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "notifyChange" + "\377\376\375\374\373\372\371\370" // 277856 + + // #6141 + "\377\376\375\374\373\372\371\370\367" + "org.kde.KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 277904 + + // #6142 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317" + "/KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 277984+ + + // #6143 + "\377" + "type='signal'," + "\377" // 278000 + + // #6144 + "%1='%2'," + "\377\376\375\374\373\372\371\370" // 278016 + + // #6145 + "path" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 278032 + + // #6146 + "\377\376\375\374\373" + "interface" + "\377\376" // 278048 + + // #6147 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "member" + "\377\376\375\374\373\372\371\370\367\366\365" // 278080 + + // #6148 + "\377\376\375\374\373\372" + "RequestName" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278112+ + + // #6149 + "\377" + "/MainApplication" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278144 + + // #6150 + "\377\376\375\374\373\372" + "Locale" + "\377\376\375\374" // 278160 + + // #6151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Country" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 278192 + + // #6152 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "l10n/*/entry.desktop" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278256+ + + // #6153 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 278272 + + // #6154 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 278288 + + // #6155 + "C" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278304 + + // #6156 + "C" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278320 + + // #6157 + "\377" + "Language" + "\377\376\375\374\373\372\371" // 278336 + + // #6158 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 278368 + + // #6159 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 278400 + + // #6160 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 278432 + + // #6161 + "\377\376\375\374\373\372\371\370\367\366\365" + "kdelibs4" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 278464 + + // #6162 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 278496 + + // #6163 + "\377\376" + "Alt" + "\377\376\375\374\373\372\371\370\367\366\365" // 278512 + + // #6164 + "\377\376\375\374\373\372\371\370" + "AltGr" + "\377\376\375" // 278528 + + // #6165 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Backspace" + "\377\376\375\374\373\372\371\370\367" // 278560 + + // #6166 + "\377\376\375\374\373\372\371\370" + "CapsLock" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 278592 + + // #6167 + "\377" + "Control" + "\377\376\375\374\373\372\371\370" // 278608 + + // #6168 + "\377\376\375\374\373\372\371\370\367" + "Ctrl" + "\377\376\375" // 278624 + + // #6169 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Del" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 278656 + + // #6170 + "\377\376" + "Delete" + "\377\376\375\374\373\372\371\370" // 278672 + + // #6171 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "Down" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 278752+ + + // #6172 + "\377\376\375\374\373\372\371\370\367" + "End" + "\377\376\375\374" // 278768 + + // #6173 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Enter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 278816+ + + // #6174 + "\377\376\375" + "Esc" + "\377\376\375\374\373\372\371\370\367\366" // 278832 + + // #6175 + "\377\376\375\374\373\372\371" + "Escape" + "\377\376\375" // 278848 + + // #6176 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Home" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 278880 + + // #6177 + "\377\376\375" + "Hyper" + "\377\376\375\374\373\372\371\370" // 278896 + + // #6178 + "\377\376\375\374\373\372\371\370\367" + "Ins" + "\377\376\375\374" // 278912 + + // #6179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Insert" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 278944 + + // #6180 + "\377\376\375\374" + "Left" + "\377\376\375\374\373\372\371\370" // 278960 + + // #6181 + "\377\376\375\374\373\372\371\370\367" + "Menu" + "\377\376\375" // 278976 + + // #6182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Meta" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 279008 + + // #6183 + "\377\376\375" + "NumLock" + "\377\376\375\374\373\372" // 279024 + + // #6184 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "PageDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 279072+ + + // #6185 + "\377\376\375\374" + "PageUp" + "\377\376\375\374\373\372" // 279088 + + // #6186 + "\377\376\375\374\373\372\371\370\367\366\365" + "PgDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 279120 + + // #6187 + "\377\376" + "PgUp" + "\377\376\375\374\373\372\371\370\367\366" // 279136 + + // #6188 + "\377\376\375\374\373\372\371" + "PauseBreak" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 279168 + + // #6189 + "\377\376" + "PrintScreen" + "\377\376\375" // 279184 + + // #6190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "PrtScr" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 279216 + + // #6191 + "\377\376\375\374\373" + "Return" + "\377\376\375\374\373" // 279232 + + // #6192 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Right" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 279264+ + + // #6193 + "\377\376" + "ScrollLock" + "\377\376\375\374" // 279280 + + // #6194 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Shift" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 279312 + + // #6195 + "\377\376\375" + "Space" + "\377\376\375\374\373\372\371\370" // 279328 + + // #6196 + "\377\376\375\374\373\372\371\370\367" + "Super" + "\377\376" // 279344 + + // #6197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "SysReq" + "\377\376\375\374\373\372\371\370\367\366\365" // 279376 + + // #6198 + "\377\376\375\374\373\372" + "Tab" + "\377\376\375\374\373\372\371" // 279392 + + // #6199 + "\377\376\375\374\373\372\371\370" + "Up" + "\377\376\375\374\373\372" // 279408 + + // #6200 + "\377\376\375\374\373\372\371\370\367\366" + "Win" + "\377\376\375" // 279424 + + // #6201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "F%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 279456 + + // #6202 + "\377\376\375\374\373\372\371\370\367\366\365" + "kdelibs4" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 279488 + + // #6203 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 279520 + + // #6204 + "\377\376" + "Alt" + "\377\376\375\374\373\372\371\370\367\366\365" // 279536 + + // #6205 + "\377\376\375\374\373\372\371\370" + "AltGr" + "\377\376\375" // 279552 + + // #6206 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Backspace" + "\377\376\375\374\373\372\371\370\367" // 279584 + + // #6207 + "\377\376\375\374\373\372\371\370" + "CapsLock" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 279616 + + // #6208 + "\377" + "Control" + "\377\376\375\374\373\372\371\370" // 279632 + + // #6209 + "\377\376\375\374\373\372\371\370\367" + "Ctrl" + "\377\376\375" // 279648 + + // #6210 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Del" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 279680 + + // #6211 + "\377\376" + "Delete" + "\377\376\375\374\373\372\371\370" // 279696 + + // #6212 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "Down" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 279776+ + + // #6213 + "\377\376\375\374\373\372\371\370\367" + "End" + "\377\376\375\374" // 279792 + + // #6214 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Enter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 279840+ + + // #6215 + "\377\376\375" + "Esc" + "\377\376\375\374\373\372\371\370\367\366" // 279856 + + // #6216 + "\377\376\375\374\373\372\371" + "Escape" + "\377\376\375" // 279872 + + // #6217 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Home" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 279904 + + // #6218 + "\377\376\375" + "Hyper" + "\377\376\375\374\373\372\371\370" // 279920 + + // #6219 + "\377\376\375\374\373\372\371\370\367" + "Ins" + "\377\376\375\374" // 279936 + + // #6220 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Insert" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 279968 + + // #6221 + "\377\376\375\374" + "Left" + "\377\376\375\374\373\372\371\370" // 279984 + + // #6222 + "\377\376\375\374\373\372\371\370\367" + "Menu" + "\377\376\375" // 280000 + + // #6223 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Meta" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 280032 + + // #6224 + "\377\376\375" + "NumLock" + "\377\376\375\374\373\372" // 280048 + + // #6225 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "PageDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 280096+ + + // #6226 + "\377\376\375\374" + "PageUp" + "\377\376\375\374\373\372" // 280112 + + // #6227 + "\377\376\375\374\373\372\371\370\367\366\365" + "PgDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 280144 + + // #6228 + "\377\376" + "PgUp" + "\377\376\375\374\373\372\371\370\367\366" // 280160 + + // #6229 + "\377\376\375\374\373\372\371" + "PauseBreak" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 280192 + + // #6230 + "\377\376" + "PrintScreen" + "\377\376\375" // 280208 + + // #6231 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "PrtScr" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 280240 + + // #6232 + "\377\376\375\374\373" + "Return" + "\377\376\375\374\373" // 280256 + + // #6233 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Right" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 280288+ + + // #6234 + "\377\376" + "ScrollLock" + "\377\376\375\374" // 280304 + + // #6235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Shift" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 280336 + + // #6236 + "\377\376\375" + "Space" + "\377\376\375\374\373\372\371\370" // 280352 + + // #6237 + "\377\376\375\374\373\372\371\370\367" + "Super" + "\377\376" // 280368 + + // #6238 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "SysReq" + "\377\376\375\374\373\372\371\370\367\366\365" // 280400 + + // #6239 + "\377\376\375\374\373\372" + "Tab" + "\377\376\375\374\373\372\371" // 280416 + + // #6240 + "\377\376\375\374\373\372\371\370" + "Up" + "\377\376\375\374\373\372" // 280432 + + // #6241 + "\377\376\375\374\373\372\371\370\367\366" + "Win" + "\377\376\375" // 280448 + + // #6242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "F%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 280480 + + // #6243 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 280496 + + // #6244 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 280528 + + // #6245 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 280544 + + // #6246 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 280560 + + // #6247 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 280576 + + // #6248 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 280592 + + // #6249 + "\377\376\375\374" + "ps" + "\377\376\375\374\373\372\371\370\367\366" // 280608 + + // #6250 + "\377\376\375\374\373\372" + "ar" + "\377\376\375\374\373\372\371\370" // 280624 + + // #6251 + "\377\376\375\374\373\372\371\370\367\366\365" + "as" + "\377\376\375" // 280640 + + // #6252 + "\377\376\375\374\373\372\371" + "bn" + "\377\376\375\374\373\372\371" // 280656 + + // #6253 + "\377\376\375\374\373\372" + "ne" + "\377\376\375\374\373\372\371\370" // 280672 + + // #6254 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "hi" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 280704 + + // #6255 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ur" + "\377" // 280720 + + // #6256 + "\377\376\375\374\373\372\371\370\367\366" + "fa" + "\377\376\375\374" // 280736 + + // #6257 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "gu" + "\377" // 280752 + + // #6258 + "\377\376\375\374\373\372\371\370" + "pa" + "\377\376\375\374\373\372" // 280768 + + // #6259 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "kn" + "\377" // 280784 + + // #6260 + "km" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 280800 + + // #6261 + "\377\376\375" + "ml" + "\377\376\375\374\373\372\371\370\367\366\365" // 280816 + + // #6262 + "\377\376\375\374\373\372\371\370" + "or" + "\377\376\375\374\373\372" // 280832 + + // #6263 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "ta" + "\377" // 280848 + + // #6264 + "te" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 280864 + + // #6265 + "\377\376\375\374\373" + "th" + "\377\376\375\374\373\372\371\370\367" // 280880 + + // #6266 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "libphonon" + "\377\376\375\374\373\372\371\370\367\366\365" // 280912 + + // #6267 + "\377\376\375\374\373\372" + "kio4" + "\377\376\375\374\373\372" // 280928 + + // #6268 + "\377\376\375\374\373\372\371\370\367\366\365" + "kdelibs4" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 280960 + + // #6269 + "\377\376\375\374" + "kdeqt" + "\377\376\375\374\373\372\371" // 280976 + + // #6270 + "\377\376\375\374\373\372\371\370\367\366" + "solid_qt" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281008 + + // #6271 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355" + "kdecalendarsystems" + "\377\376\375\374\373\372\371\370\367\366\365" // 281056+ + + // #6272 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281088 + + // #6273 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281120 + + // #6274 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281152 + + // #6275 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281184 + + // #6276 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281216 + + // #6277 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281248 + + // #6278 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281280 + + // #6279 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281312 + + // #6280 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281344 + + // #6281 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281376 + + // #6282 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281408 + + // #6283 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281440 + + // #6284 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281472 + + // #6285 + "\377\376\375\374\373\372\371\370\367" + "%1/LC_MESSAGES/%2.mo" + "\377\376\375" // 281504 + + // #6286 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281536 + + // #6287 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281568 + + // #6288 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281600 + + // #6289 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281632 + + // #6290 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281664 + + // #6291 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281696 + + // #6292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281728 + + // #6293 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281760 + + // #6294 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281792 + + // #6295 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281824 + + // #6296 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281856 + + // #6297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281888 + + // #6298 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281920 + + // #6299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ".js" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 281952 + + // #6300 + "\377\376\375\374\373\372\371" + "l10n/%1/entry.desktop" + "\377\376\375\374" // 281984 + + // #6301 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282000 + + // #6302 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 282016 + + // #6303 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282032 + + // #6304 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282048 + + // #6305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 282080 + + // #6306 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282096 + + // #6307 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282112 + + // #6308 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282128 + + // #6309 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282144 + + // #6310 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 282160 + + // #6311 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282176 + + // #6312 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 282208 + + // #6313 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282224 + + // #6314 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282240 + + // #6315 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282256 + + // #6316 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282272 + + // #6317 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 282288 + + // #6318 + "\377\376" + "$0" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 282304 + + // #6319 + "\377\376\375\374\373\372\371\370\367\366" + "currency/%1.desktop" + "\377\376\375" // 282336 + + // #6320 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282352 + + // #6321 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 282368 + + // #6322 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282384 + + // #6323 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282400 + + // #6324 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 282432 + + // #6325 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282448 + + // #6326 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282464 + + // #6327 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282480 + + // #6328 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282496 + + // #6329 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 282512 + + // #6330 + "1914,08,02" + "\377\376\375\374\373\372" // 282528 + + // #6331 + "\377\376\375\374\373\372\371\370\367\366\365" + "QDate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 282560 + + // #6332 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "CurrencyIntroducedDate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 282608 + + // #6333 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 282672+ + + // #6334 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 282752+ + + // #6335 + "\377\376\375\374\373\372\371\370\367\366" + "currency/%1.desktop" + "\377\376\375" // 282784 + + // #6336 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282800 + + // #6337 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 282816 + + // #6338 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282832 + + // #6339 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282848 + + // #6340 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 282880 + + // #6341 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282896 + + // #6342 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282912 + + // #6343 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282928 + + // #6344 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 282944 + + // #6345 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 282960 + + // #6346 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 282976 + + // #6347 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 283008 + + // #6348 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 283024 + + // #6349 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 283040 + + // #6350 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 283056 + + // #6351 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 283072 + + // #6352 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 283088 + + // #6353 + "1914,08,02" + "\377\376\375\374\373\372" // 283104 + + // #6354 + "\377\376\375\374\373\372\371\370\367\366\365" + "QDate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 283136 + + // #6355 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "CurrencyIntroducedDate" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 283184 + + // #6356 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 283248+ + + // #6357 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 283328+ + + // #6358 + "\377\376" + "$0" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 283344 + + // #6359 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 283360 + + // #6360 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 283376 + + // #6361 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "PositivePrefixCurrencySymbol" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 283440+ + + // #6362 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 283504+ + + // #6363 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 283584+ + + // #6364 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 283600 + + // #6365 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 283616 + + // #6366 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "PositivePrefixCurrencySymbol" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 283696+ + + // #6367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 283760+ + + // #6368 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 283840+ + + // #6369 + "\377\376\375\374\373\372\371\370" + "true" + "\377\376\375\374" // 283856 + + // #6370 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 283872 + + // #6371 + "\377\376\375\374\373" + "NegativePrefixCurrencySymbol" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 283920 + + // #6372 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 284016+ + + // #6373 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 284096+ + + // #6374 + "false" + "\377\376\375\374\373\372\371\370\367\366\365" // 284112 + + // #6375 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 284128 + + // #6376 + "\377\376\375\374\373" + "NegativePrefixCurrencySymbol" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 284176 + + // #6377 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 284272+ + + // #6378 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 284352+ + + // #6379 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 284368 + + // #6380 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 284400 + + // #6381 + "\377\376" + "PositiveMonetarySignPosition" + "\377\376" // 284432 + + // #6382 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 284528+ + + // #6383 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 284608+ + + // #6384 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 284624 + + // #6385 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 284656 + + // #6386 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "NegativeMonetarySignPosition" + "\377\376\375\374\373" // 284720+ + + // #6387 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 284784+ + + // #6388 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 284864+ + + // #6389 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 284880 + + // #6390 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 284912 + + // #6391 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "BinaryUnitDialect" + "\377\376" // 284944 + + // #6392 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 285040+ + + // #6393 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 285120+ + + // #6394 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285136 + + // #6395 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285168 + + // #6396 + "\377" + "WeekStartDay" + "\377\376\375" // 285184 + + // #6397 + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 285232+ + + // #6398 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 285312+ + + // #6399 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285328 + + // #6400 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285360 + + // #6401 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "PageSize" + "\377\376\375\374\373\372\371\370\367" // 285408+ + + // #6402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 285488+ + + // #6403 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 285568+ + + // #6404 + "0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285584 + + // #6405 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 285616 + + // #6406 + "\377\376\375\374\373\372\371\370" + "MeasureSystem" + "\377\376\375\374\373\372\371\370\367\366\365" // 285648 + + // #6407 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 285744+ + + // #6408 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 285824+ + + // #6409 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%1/entry.desktop" + "\377\376\375\374" // 285856 + + // #6410 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 285872 + + // #6411 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 285888 + + // #6412 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 285904 + + // #6413 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 285920 + + // #6414 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 285952 + + // #6415 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 285968 + + // #6416 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 285984 + + // #6417 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 286000 + + // #6418 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 286016 + + // #6419 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 286032 + + // #6420 + "\377\376\375\374\373\372\371" + "DayPeriod1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 286064 + + // #6421 + "\377\376" + "kuit" + "\377\376\375\374\373\372\371\370\367\366" // 286080 + + // #6422 + "\377\376" + "kuit" + "\377\376\375\374\373\372\371\370\367\366" // 286096 + + // #6423 + "\377\376\375\374\373\372\371" + "kuil" + "\377\376\375\374\373" // 286112 + + // #6424 + "\377\376\375\374\373\372\371" + "kuil" + "\377\376\375\374\373" // 286128 + + // #6425 + "\377" + "title" + "\377\376\375\374\373\372\371\370\367\366" // 286144 + + // #6426 + "\377" + "title" + "\377\376\375\374\373\372\371\370\367\366" // 286160 + + // #6427 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "subtitle" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 286192 + + // #6428 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "subtitle" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 286224 + + // #6429 + "\377\376\375\374" + "para" + "\377\376\375\374\373\372\371\370" // 286240 + + // #6430 + "\377\376\375\374" + "para" + "\377\376\375\374\373\372\371\370" // 286256 + + // #6431 + "list" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 286272 + + // #6432 + "list" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 286288 + + // #6433 + "\377\376\375\374\373\372\371\370" + "item" + "\377\376\375\374" // 286304 + + // #6434 + "\377\376\375\374\373\372\371\370" + "item" + "\377\376\375\374" // 286320 + + // #6435 + "\377\376\375\374\373" + "note" + "\377\376\375\374\373\372\371" // 286336 + + // #6436 + "\377\376\375\374\373" + "note" + "\377\376\375\374\373\372\371" // 286352 + + // #6437 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306" + "warning" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 286432+ + + // #6438 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "warning" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 286496+ + + // #6439 + "\377\376" + "filename" + "\377\376\375\374\373\372" // 286512 + + // #6440 + "\377\376" + "filename" + "\377\376\375\374\373\372" // 286528 + + // #6441 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "link" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 286560 + + // #6442 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "link" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 286592 + + // #6443 + "\377\376\375\374\373\372\371\370\367\366\365" + "application" + "\377\376\375\374\373\372\371\370\367\366" // 286624 + + // #6444 + "\377\376\375\374\373\372\371\370\367\366\365" + "application" + "\377\376\375\374\373\372\371\370\367\366" // 286656 + + // #6445 + "\377\376\375\374\373\372\371" + "command" + "\377\376" // 286672 + + // #6446 + "\377\376\375\374\373\372\371" + "command" + "\377\376" // 286688 + + // #6447 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "resource" + "\377\376\375\374\373\372\371\370\367" // 286720 + + // #6448 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "resource" + "\377\376\375\374\373\372\371\370\367" // 286752 + + // #6449 + "\377\376\375\374\373\372" + "icode" + "\377\376\375\374\373" // 286768 + + // #6450 + "\377\376\375\374\373\372" + "icode" + "\377\376\375\374\373" // 286784 + + // #6451 + "\377\376\375\374\373\372\371\370" + "bcode" + "\377\376\375" // 286800 + + // #6452 + "\377\376\375\374\373\372\371\370" + "bcode" + "\377\376\375" // 286816 + + // #6453 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "shortcut" + "\377\376\375\374\373\372\371\370\367\366" // 286848 + + // #6454 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "shortcut" + "\377\376\375\374\373\372\371\370\367\366" // 286880 + + // #6455 + "\377\376\375\374\373\372\371" + "interface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 286912 + + // #6456 + "\377\376\375\374\373\372\371" + "interface" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 286944 + + // #6457 + "\377" + "emphasis" + "\377\376\375\374\373\372\371" // 286960 + + // #6458 + "\377" + "emphasis" + "\377\376\375\374\373\372\371" // 286976 + + // #6459 + "\377\376\375\374\373\372\371\370\367\366" + "placeholder" + "\377\376\375\374\373\372\371\370\367\366\365" // 287008 + + // #6460 + "\377\376\375\374\373\372\371\370\367\366" + "placeholder" + "\377\376\375\374\373\372\371\370\367\366\365" // 287040 + + // #6461 + "\377\376\375\374\373\372" + "email" + "\377\376\375\374\373" // 287056 + + // #6462 + "\377\376\375\374\373\372" + "email" + "\377\376\375\374\373" // 287072 + + // #6463 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "envar" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 287104 + + // #6464 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "envar" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 287136 + + // #6465 + "\377\376" + "message" + "\377\376\375\374\373\372\371" // 287152 + + // #6466 + "\377\376" + "message" + "\377\376\375\374\373\372\371" // 287168 + + // #6467 + "\377\376\375\374\373\372\371\370\367\366" + "numid" + "\377" // 287184 + + // #6468 + "\377\376\375\374\373\372\371\370\367\366" + "numid" + "\377" // 287200 + + // #6469 + "nl" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287216 + + // #6470 + "nl" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287232 + + // #6471 + "\377\376\375\374\373\372\371" + "numintg" + "\377\376" // 287248 + + // #6472 + "\377\376\375\374\373\372\371" + "numintg" + "\377\376" // 287264 + + // #6473 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "numreal" + "\377\376\375\374\373\372\371\370\367\366" // 287296 + + // #6474 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "numreal" + "\377\376\375\374\373\372\371\370\367\366" // 287328 + + // #6475 + "\377\376\375" + "ctx" + "\377\376\375\374\373\372\371\370\367\366" // 287344 + + // #6476 + "\377\376\375\374\373\372\371" + "url" + "\377\376\375\374\373\372" // 287360 + + // #6477 + "\377\376\375\374\373" + "address" + "\377\376\375\374" // 287376 + + // #6478 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "section" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287456+ + + // #6479 + "\377\376\375" + "label" + "\377\376\375\374\373\372\371\370" // 287472 + + // #6480 + "\377\376\375\374\373\372\371\370\367" + "strong" + "\377" // 287488 + + // #6481 + "width" + "\377\376\375\374\373\372\371\370\367\366\365" // 287504 + + // #6482 + "\377\376\375\374\373\372" + "fill" + "\377\376\375\374\373\372" // 287520 + + // #6483 + "\377\376\375\374\373\372\371\370" + "plain" + "\377\376\375" // 287536 + + // #6484 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "rich" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287568 + + // #6485 + "\377\376\375\374" + "term" + "\377\376\375\374\373\372\371\370" // 287584 + + // #6486 + "\377\376\375\374\373\372\371\370\367\366\365" + "action" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 287616 + + // #6487 + "\377" + "title" + "\377\376\375\374\373\372\371\370\367\366" // 287632 + + // #6488 + "\377\376\375" + "label" + "\377\376\375\374\373\372\371\370" // 287648 + + // #6489 + "\377\376\375\374\373\372\371\370\367\366\365" + "option" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 287680 + + // #6490 + "\377\376\375\374\373\372\371\370" + "item" + "\377\376\375\374" // 287696 + + // #6491 + "\377\376\375\374\373\372" + "info" + "\377\376\375\374\373\372" // 287712 + + // #6492 + "\377\376" + "button" + "\377\376\375\374\373\372\371\370" // 287728 + + // #6493 + "\377\376\375\374\373\372\371\370\367" + "inmenu" + "\377" // 287744 + + // #6494 + "intoolbar" + "\377\376\375\374\373\372\371" // 287760 + + // #6495 + "\377\376\375\374\373\372\371\370\367\366" + "window" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 287792 + + // #6496 + "\377\376\375\374" + "menu" + "\377\376\375\374\373\372\371\370" // 287808 + + // #6497 + "\377\376" + "tab" + "\377\376\375\374\373\372\371\370\367\366\365" // 287824 + + // #6498 + "\377\376\375" + "group" + "\377\376\375\374\373\372\371\370" // 287840 + + // #6499 + "\377" + "column" + "\377\376\375\374\373\372\371\370\367" // 287856 + + // #6500 + "\377\376\375\374\373\372\371\370" + "row" + "\377\376\375\374\373" // 287872 + + // #6501 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "slider" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287904 + + // #6502 + "\377\376\375" + "spinbox" + "\377\376\375\374\373\372" // 287920 + + // #6503 + "\377\376\375" + "listbox" + "\377\376\375\374\373\372" // 287936 + + // #6504 + "\377\376\375\374\373\372\371\370\367\366\365" + "textbox" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 287968 + + // #6505 + "\377\376\375" + "chooser" + "\377\376\375\374\373\372" // 287984 + + // #6506 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "check" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288016 + + // #6507 + "\377\376\375\374\373\372\371\370\367\366\365" + "radio" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 288048 + + // #6508 + "\377" + "inlistbox" + "\377\376\375\374\373\372" // 288064 + + // #6509 + "\377\376\375\374\373\372\371\370\367\366\365" + "intable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288096+ + + // #6510 + "\377\376\375" + "inrange" + "\377\376\375\374\373\372" // 288112 + + // #6511 + "\377" + "intext" + "\377\376\375\374\373\372\371\370\367" // 288128 + + // #6512 + "\377\376\375\374\373\372\371\370\367\366\365" + "tooltip" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288160 + + // #6513 + "\377\376\375" + "whatsthis" + "\377\376\375\374" // 288176 + + // #6514 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "status" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 288208 + + // #6515 + "\377\376\375\374" + "progress" + "\377\376\375\374" // 288224 + + // #6516 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "tipoftheday" + "\377\376\375\374\373\372\371\370" // 288256 + + // #6517 + "\377\376\375\374\373\372\371\370\367" + "credit" + "\377" // 288272 + + // #6518 + "shell" + "\377\376\375\374\373\372\371\370\367\366\365" // 288288 + + // #6519 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "var" + "\377" // 288304 + + // #6520 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ul" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 288336 + + // #6521 + "\377\376\375" + "u" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 288352 + + // #6522 + "\377\376\375\374\373\372" + "tt" + "\377\376\375\374\373\372\371\370" // 288368 + + // #6523 + "\377\376\375\374\373\372\371\370\367" + "tr" + "\377\376\375\374\373" // 288384 + + // #6524 + "\377" + "title" + "\377\376\375\374\373\372\371\370\367\366" // 288400 + + // #6525 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "thead" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 288432 + + // #6526 + "\377\376\375\374\373" + "th" + "\377\376\375\374\373\372\371\370\367" // 288448 + + // #6527 + "\377\376" + "tfoot" + "\377\376\375\374\373\372\371\370\367" // 288464 + + // #6528 + "\377\376\375\374\373\372\371\370" + "td" + "\377\376\375\374\373\372" // 288480 + + // #6529 + "\377\376\375\374\373\372\371\370\367\366\365" + "tbody" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 288512 + + // #6530 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "table" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288544+ + + // #6531 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "sub" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288576 + + // #6532 + "\377\376\375\374\373\372\371\370\367\366" + "sup" + "\377\376\375" // 288592 + + // #6533 + "\377\376\375\374\373\372\371\370\367" + "strong" + "\377" // 288608 + + // #6534 + "\377" + "span" + "\377\376\375\374\373\372\371\370\367\366\365" // 288624 + + // #6535 + "\377\376\375\374\373\372" + "small" + "\377\376\375\374\373" // 288640 + + // #6536 + "\377\376\375\374\373\372" + "samp" + "\377\376\375\374\373\372" // 288656 + + // #6537 + "\377\376\375\374" + "s" + "\377\376\375\374\373\372\371\370\367\366\365" // 288672 + + // #6538 + "qt" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288688 + + // #6539 + "\377\376\375\374\373\372\371\370\367\366\365" + "pre" + "\377\376" // 288704 + + // #6540 + "\377\376\375\374\373\372\371\370\367\366" + "p" + "\377\376\375\374\373" // 288720 + + // #6541 + "\377\376\375\374\373\372\371\370\367\366" + "ol" + "\377\376\375\374" // 288736 + + // #6542 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "nobr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 288768 + + // #6543 + "li" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 288784 + + // #6544 + "\377\376\375\374" + "meta" + "\377\376\375\374\373\372\371\370" // 288800 + + // #6545 + "\377\376\375\374\373\372\371\370\367" + "kbd" + "\377\376\375\374" // 288816 + + // #6546 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "img" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 288848 + + // #6547 + "i" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 288864 + + // #6548 + "\377\376\375\374\373\372\371\370\367\366\365" + "html" + "\377" // 288880 + + // #6549 + "\377\376\375\374\373" + "hr" + "\377\376\375\374\373\372\371\370\367" // 288896 + + // #6550 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "head" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 288928 + + // #6551 + "\377" + "h6" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 288944 + + // #6552 + "\377\376\375\374" + "h5" + "\377\376\375\374\373\372\371\370\367\366" // 288960 + + // #6553 + "\377\376\375\374\373\372\371" + "h4" + "\377\376\375\374\373\372\371" // 288976 + + // #6554 + "\377\376\375\374\373\372\371\370\367\366" + "h3" + "\377\376\375\374" // 288992 + + // #6555 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "h2" + "\377" // 289008 + + // #6556 + "h1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 289024 + + // #6557 + "\377\376\375\374\373" + "font" + "\377\376\375\374\373\372\371" // 289040 + + // #6558 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "em" + "\377" // 289056 + + // #6559 + "\377\376\375" + "dt" + "\377\376\375\374\373\372\371\370\367\366\365" // 289072 + + // #6560 + "\377\376\375\374\373\372" + "dl" + "\377\376\375\374\373\372\371\370" // 289088 + + // #6561 + "\377\376\375\374\373\372\371\370\367" + "div" + "\377\376\375\374" // 289104 + + // #6562 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "dfn" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 289136 + + // #6563 + "\377\376" + "dd" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 289152 + + // #6564 + "\377\376\375\374\373\372\371\370\367" + "code" + "\377\376\375" // 289168 + + // #6565 + "\377" + "cita" + "\377\376\375\374\373\372\371\370\367\366\365" // 289184 + + // #6566 + "\377\376\375\374" + "center" + "\377\376\375\374\373\372" // 289200 + + // #6567 + "\377" + "br" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289216 + + // #6568 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "body" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 289248 + + // #6569 + "\377\376\375\374\373\372" + "blockquote" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 289280 + + // #6570 + "\377" + "big" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 289296 + + // #6571 + "\377\376\375\374\373\372" + "b" + "\377\376\375\374\373\372\371\370\367" // 289312 + + // #6572 + "\377\376\375\374\373" + "address" + "\377\376\375\374" // 289328 + + // #6573 + "\377\376\375\374\373\372\371\370\367" + "a" + "\377\376\375\374\373\372" // 289344 + + // #6574 + "\377\376\375" + "lt" + "\377\376\375\374\373\372\371\370\367\366\365" // 289360 + + // #6575 + "\377\376" + "gt" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 289376 + + // #6576 + "\377\376\375\374\373\372\371" + "amp" + "\377\376\375\374\373\372" // 289392 + + // #6577 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 289424 + + // #6578 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "quot" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 289456 + + // #6579 + "\377\376\375" + "lt" + "\377\376\375\374\373\372\371\370\367\366\365" // 289472 + + // #6580 + "\377\376" + "gt" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 289488 + + // #6581 + "\377\376\375\374\373\372\371" + "amp" + "\377\376\375\374\373\372" // 289504 + + // #6582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 289536 + + // #6583 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "quot" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 289568 + + // #6584 + "\377\376\375\374\373\372\371\370" + "&([a-z]+|#[0-9]+|#x[0-9a-fA-F]+);" + "\377\376\375\374\373\372\371" // 289616 + + // #6585 + "\377\376\375\374\373\372\371\370\367\366\365" + "kdetranslator" + "\377\376\375\374\373\372\371\370" // 289648 + + // #6586 + "\377" + "/.krcdirs" + "\377\376\375\374\373\372" // 289664 + + // #6587 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ".kde" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 289696 + + // #6588 + "\377" + "/.config/" + "\377\376\375\374\373\372" // 289712 + + // #6589 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289744 + + // #6590 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289776 + + // #6591 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289808 + + // #6592 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289840 + + // #6593 + "\377\376\375\374\373" + "/.local/share/" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289872 + + // #6594 + "\377\376" + "lib/" + "\377\376\375\374\373\372\371\370\367\366" // 289888 + + // #6595 + "\377\376\375\374\373" + "share/apps" + "\377" // 289904 + + // #6596 + "\377\376\375\374\373" + "share/doc/HTML" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 289936 + + // #6597 + "\377\376\375\374\373\372\371\370\367" + "share/icons" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 289968 + + // #6598 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "share/config" + "\377\376\375\374\373\372\371\370" // 290016+ + + // #6599 + "share/pixmaps" + "\377\376\375" // 290032 + + // #6600 + "\377\376\375" + "share/applnk" + "\377" // 290048 + + // #6601 + "\377\376\375\374\373\372" + "share/sounds" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 290080+ + + // #6602 + "\377\376\375\374\373\372\371\370\367\366" + "share/locale" + "\377\376\375\374\373\372\371\370\367\366" // 290112 + + // #6603 + "share/kde4/services" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 290144 + + // #6604 + "\377" + "share/kde4/servicetypes" + "\377\376\375\374\373\372\371\370" // 290176 + + // #6605 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "share/mimelnk" + "\377\376\375\374\373" // 290208 + + // #6606 + "cgi-bin" + "\377\376\375\374\373\372\371\370\367" // 290224 + + // #6607 + "\377\376" + "share/wallpapers" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 290256 + + // #6608 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "share/templates" + "\377\376\375\374" // 290288 + + // #6609 + "\377" + "bin" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 290304 + + // #6610 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%lib/kde4" + "\377\376\375\374\373\372\371\370\367\366\365" // 290336+ + + // #6611 + "%lib/kde4/plugins" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 290368 + + // #6612 + "\377\376\375\374\373\372\371" + "share/config.kcfg" + "\377\376\375\374\373\372\371\370" // 290400 + + // #6613 + "\377\376\375" + "share/emoticons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 290432 + + // #6614 + "applications" + "\377\376\375\374" // 290448 + + // #6615 + "\377\376\375\374\373\372\371\370\367\366" + "icons" + "\377" // 290464 + + // #6616 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "pixmaps" + "\377\376\375\374\373\372\371\370\367\366" // 290496 + + // #6617 + "\377\376\375\374" + "desktop-directories" + "\377\376\375\374\373\372\371\370\367" // 290528 + + // #6618 + "\377\376\375\374\373\372\371\370\367" + "mime" + "\377\376\375" // 290544 + + // #6619 + "\377\376" + "menus" + "\377\376\375\374\373\372\371\370\367" // 290560 + + // #6620 + "\377\376\375\374\373\372\371\370\367\366" + "autostart" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 290592 + + // #6621 + "\377\376\375\374" + "kde4/libexec" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 290624 + + // #6622 + "\377\376\375\374\373\372\371\370" + "lib" + "\377\376\375\374\373" // 290640 + + // #6623 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 290656 + + // #6624 + "\377\376\375\374\373\372" + "xdgconf-autostart" + "\377\376\375\374\373\372\371\370\367" // 290688 + + // #6625 + "\377\376\375\374\373\372\371\370" + "share/autostart" + "\377\376\375\374\373\372\371\370\367" // 290720 + + // #6626 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "data" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 290752 + + // #6627 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 290768 + + // #6628 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 290784 + + // #6629 + "\377\376\375\374" + "rc" + "\377\376\375\374\373\372\371\370\367\366" // 290800 + + // #6630 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 290816 + + // #6631 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 290832 + + // #6632 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 290848 + + // #6633 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 290864 + + // #6634 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 290896 + + // #6635 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 290912 + + // #6636 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 290928 + + // #6637 + "\377\376\375\374\373\372\371\370" + "Directories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 290960 + + // #6638 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306" + "default" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 291040+ + + // #6639 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335" + "Directories-%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 291104+ + + // #6640 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 291136 + + // #6641 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 291152 + + // #6642 + "\377\376\375\374\373\372\371\370" + "/etc/xdg" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 291184 + + // #6643 + "\377\376\375\374\373\372\371" + "/share" + "\377\376\375" // 291200 + + // #6644 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 291216 + + // #6645 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 291232 + + // #6646 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 291248 + + // #6647 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 291280 + + // #6648 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 291296 + + // #6649 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 291312 + + // #6650 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 291328 + + // #6651 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 291344 + + // #6652 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "warn_unwritable_config" + "\377\376\375\374\373\372\371\370\367\366\365" // 291440+ + + // #6653 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "notifyChange" + "\377\376\375\374\373\372\371\370" // 291472 + + // #6654 + "\377\376\375\374\373\372\371\370\367" + "org.kde.KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 291520 + + // #6655 + "\377" + "/KGlobalSettings" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 291552+ + + // #6656 + "\377" + "type='signal'," + "\377" // 291568 + + // #6657 + "%1='%2'," + "\377\376\375\374\373\372\371\370" // 291584 + + // #6658 + "path" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 291600 + + // #6659 + "\377\376\375\374\373" + "interface" + "\377\376" // 291616 + + // #6660 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "member" + "\377\376\375\374\373\372\371\370\367\366\365" // 291648 + + // #6661 + "\377\376\375" + "oxygen" + "\377\376\375\374\373\372\371" // 291664 + + // #6662 + "Sans Serif" + "\377\376\375\374\373\372" // 291680 + + // #6663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Sans Serif,10,-1,5,50,0,0,0,0,0" + "\377\376\375\374\373\372\371\370\367" // 291760+ + + // #6664 + "\377\376" + "QFont" + "\377\376\375\374\373\372\371\370\367" // 291776 + + // #6665 + "\377\376\375\374\373\372\371\370" + "font" + "\377\376\375\374" // 291792 + + // #6666 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 291888+ + + // #6667 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 291968+ + + // #6668 + "Sans Serif" + "\377\376\375\374\373\372" // 291984 + + // #6669 + "\377\376\375\374\373\372\371\370" + "Sans Serif,10,-1,5,50,0,0,0,0,0" + "\377\376\375\374\373\372\371\370\367" // 292032 + + // #6670 + "\377\376" + "QFont" + "\377\376\375\374\373\372\371\370\367" // 292048 + + // #6671 + "\377\376\375\374" + "menuFont" + "\377\376\375\374" // 292064 + + // #6672 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 292144+ + + // #6673 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 292224+ + + // #6674 + "Sans Serif" + "\377\376\375\374\373\372" // 292240 + + // #6675 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Sans Serif,8,-1,5,50,0,0,0,0,0" + "\377\376\375\374\373\372\371\370\367\366" // 292336+ + + // #6676 + "\377\376" + "QFont" + "\377\376\375\374\373\372\371\370\367" // 292352 + + // #6677 + "\377\376\375\374\373\372\371\370" + "toolBarFont" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 292384 + + // #6678 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 292464+ + + // #6679 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 292544+ + + // #6680 + "400" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 292560 + + // #6681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 292592 + + // #6682 + "\377\376\375\374\373\372\371\370\367\366\365" + "DoubleClickInterval" + "\377\376" // 292624 + + // #6683 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 292720+ + + // #6684 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 292800+ + + // #6685 + "500" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 292816 + + // #6686 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 292848 + + // #6687 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "StartDragTime" + "\377\376\375\374" // 292896+ + + // #6688 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 292976+ + + // #6689 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 293056+ + + // #6690 + "4" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 293072 + + // #6691 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 293104 + + // #6692 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "StartDragDist" + "\377\376\375\374\373\372\371\370\367" // 293152+ + + // #6693 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 293232+ + + // #6694 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 293312+ + + // #6695 + "3" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 293328 + + // #6696 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 293360 + + // #6697 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "WheelScrollLines" + "\377\376\375" // 293392 + + // #6698 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 293488+ + + // #6699 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 293568+ + + // #6700 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 293584 + + // #6701 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 293600 + + // #6702 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "ShowIconsInMenuItems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 293648 + + // #6703 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 293744+ + + // #6704 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 293824+ + + // #6705 + "\377\376\375\374" + "kapp_accel_filter" + "\377\376\375\374\373\372\371\370\367\366\365" // 293856 + + // #6706 + "\377\376\375" + "Linux" + "\377\376\375\374\373\372\371\370" // 293872 + + // #6707 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "lsb_release" + "\377\376\375\374\373\372\371\370" // 293904 + + // #6708 + "\377\376\375\374\373\372\371\370" + "kdebug.areas" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 293936 + + // #6709 + "\377\376\375" + "/l10n" + "\377\376\375\374\373\372\371\370" // 293952 + + // #6710 + "InfoOutput" + "\377\376\375\374\373\372" // 293968 + + // #6711 + "2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 293984 + + // #6712 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 294016 + + // #6713 + "\377\376\375\374\373\372\371\370" + "InfoOutput" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 294048 + + // #6714 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 294128+ + + // #6715 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 294208+ + + // #6716 + "drkonqi" + "\377\376\375\374\373\372\371\370\367" // 294224 + + // #6717 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 294256 + + // #6718 + "\377" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 294272 + + // #6719 + "\377\376" + " " + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294288 + + // #6720 + "\377\376\375\374\373" + "SystemInformation::runLsbRelease" + "\377\376\375\374\373\372\371\370\367\366\365" // 294336 + + // #6721 + "\377\376\375\374\373\372\371\370\367\366\365\364" + ":" + "\377\376\375" // 294352 + + // #6722 + "\377\376\375\374\373\372\371" + "found lsb_release" + "\377\376\375\374\373\372\371\370" // 294384 + + // #6723 + "C" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 294400 + + // #6724 + "\377\376\375\374\373\372" + "LC_ALL" + "\377\376\375\374" // 294416 + + // #6725 + "\377\376\375" + "_KPROCESS_DUMMY_=" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 294448 + + // #6726 + "\377\376\375\374\373\372\371\370\367" + "-sd" + "\377\376\375\374" // 294464 + + // #6727 + "2.0" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294480 + + // #6728 + "\377\376\375\374\373\372\371\370" + "submit@bugs.kde.org" + "\377\376\375\374\373" // 294512 + + // #6729 + "\377\376\375\374\373\372\371" + "https://bugs.kde.org" + "\377\376\375\374\373" // 294544 + + // #6730 + "\377\376\375\374\373\372\371" + "/proc/%1/exe" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294576 + + // #6731 + "drkonqi" + "\377\376\375\374\373\372\371\370\367" // 294592 + + // #6732 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 294624 + + // #6733 + "\377" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 294640 + + // #6734 + "\377\376" + " " + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294656 + + // #6735 + "\377\376\375\374" + "KCrashBackend::constructCrashedApplication" + "\377\376" // 294704 + + // #6736 + "\377\376\375\374\373\372\371\370\367\366\365\364" + ":" + "\377\376\375" // 294720 + + // #6737 + "\377\376\375\374" + "Using /proc to determine executable path" + "\377\376\375\374" // 294768+ + + // #6738 + "\377\376\375\374\373\372\371" + "/proc/%1/exe" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294800 + + // #6739 + "drkonqi" + "\377\376\375\374\373\372\371\370\367" // 294816 + + // #6740 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 294848 + + // #6741 + "\377" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 294864 + + // #6742 + "\377\376" + " " + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 294880 + + // #6743 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334" + "KCrashBackend::constructCrashedApplication" + "\377\376" // 294960+ + + // #6744 + "\377\376\375\374\373\372\371\370\367\366\365\364" + ":" + "\377\376\375" // 294976 + + // #6745 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Executable is:" + "\377\376\375\374\373" // 295008 + + // #6746 + "drkonqi" + "\377\376\375\374\373\372\371\370\367" // 295024 + + // #6747 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 295056 + + // #6748 + "\377" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 295072 + + // #6749 + "\377\376" + " " + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 295088 + + // #6750 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354" + "KCrashBackend::constructCrashedApplication" + "\377\376" // 295152+ + + // #6751 + "\377\376\375\374\373\372\371\370\367\366\365\364" + ":" + "\377\376\375" // 295168 + + // #6752 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Executable exists:" + "\377\376" // 295200 + + // #6753 + "\377\376\375\374\373\372\371\370\367\366\365" + "true" + "\377" // 295216 + + // #6754 + "\377\376\375\374\373\372\371\370\367\366\365" + "KCrash" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 295248 + + // #6755 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304" + "debuggers/internal/*" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 295344+ + + // #6756 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295360 + + // #6757 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "*" + "\377\376\375" // 295376 + + // #6758 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295392 + + // #6759 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295408 + + // #6760 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295424 + + // #6761 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295440 + + // #6762 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295456 + + // #6763 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295472 + + // #6764 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295488 + + // #6765 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295504 + + // #6766 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295520 + + // #6767 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295536 + + // #6768 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295552 + + // #6769 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295568 + + // #6770 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295584 + + // #6771 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295600 + + // #6772 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295616 + + // #6773 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295632 + + // #6774 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 295648 + + // #6775 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 295664 + + // #6776 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 295680 + + // #6777 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 295696 + + // #6778 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295712 + + // #6779 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 295728 + + // #6780 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 295760 + + // #6781 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295776 + + // #6782 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295792 + + // #6783 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295808 + + // #6784 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295824 + + // #6785 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 295840 + + // #6786 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 295856 + + // #6787 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 295872 + + // #6788 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295888 + + // #6789 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 295904 + + // #6790 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 295936 + + // #6791 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295952 + + // #6792 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295968 + + // #6793 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 295984 + + // #6794 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296000 + + // #6795 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 296016 + + // #6796 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296032 + + // #6797 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 296048 + + // #6798 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296064 + + // #6799 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296080 + + // #6800 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 296112 + + // #6801 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296128 + + // #6802 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296144 + + // #6803 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296160 + + // #6804 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296176 + + // #6805 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 296192 + + // #6806 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "gdb" + "\377" // 296208 + + // #6807 + "\377\376\375\374\373\372\371\370\367\366\365" + "KCrash" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 296240 + + // #6808 + "\377\376\375\374\373\372\371" + "debuggers/external/*" + "\377\376\375\374\373" // 296272 + + // #6809 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296288 + + // #6810 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296304 + + // #6811 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296320 + + // #6812 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296336 + + // #6813 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296352 + + // #6814 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296368 + + // #6815 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296384 + + // #6816 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296400 + + // #6817 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296416 + + // #6818 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296432 + + // #6819 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296448 + + // #6820 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296464 + + // #6821 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 296480 + + // #6822 + "\377\376\375\374\373" + ".." + "\377\376\375\374\373\372\371\370\367" // 296496 + + // #6823 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296512 + + // #6824 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 296528 + + // #6825 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296544 + + // #6826 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296560 + + // #6827 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 296592 + + // #6828 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296608 + + // #6829 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296624 + + // #6830 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296640 + + // #6831 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296656 + + // #6832 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 296672 + + // #6833 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296688 + + // #6834 + "\377\376" + "/etc/kde4rc" + "\377\376\375" // 296704 + + // #6835 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296720 + + // #6836 + "\377\376\375\374" + "kdeglobals" + "\377\376" // 296736 + + // #6837 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "system.kdeglobals" + "\377\376" // 296768 + + // #6838 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296784 + + // #6839 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296800 + + // #6840 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296816 + + // #6841 + "\377\376\375\374\373\372\371\370" + "INI" + "\377\376\375\374\373" // 296832 + + // #6842 + "\377\376\375" + "/" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 296848 + + // #6843 + "\377\376\375\374\373\372" + "/krashinfo" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 296880 + + // #6844 + "drkonqi" + "\377\376\375\374\373\372\371\370\367" // 296896 + + // #6845 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 296928 + + // #6846 + "\377" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 296944 + + // #6847 + "\377\376" + " " + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 296960 + + // #6848 + "\377\376\375\374" + "DrKonqi::init" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 296992 + + // #6849 + "\377\376\375\374\373\372\371\370\367\366\365\364" + ":" + "\377\376\375" // 297008 + + // #6850 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Enabling drkonqi crash catching" + "\377\376\375\374\373" // 297056 + + // #6851 + "\377\376\375\374" + "drkonqi" + "\377\376\375\374\373" // 297072 + + // #6852 + "\377\376\375\374\373\372\371\370" + "dialog-ok" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 297104 + + // #6853 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 297120 + + // #6854 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 297136 + + // #6855 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 297200+ + + // #6856 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 297264+ + + // #6857 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 297344+ + + // #6858 + "\377\376\375\374\373\372\371\370\367" + "dialog-cancel" + "\377\376\375\374\373\372\371\370\367\366" // 297376 + + // #6859 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297392 + + // #6860 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297408 + + // #6861 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297424 + + // #6862 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297440 + + // #6863 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297456 + + // #6864 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "Document/application separator in titlebar" + "\377\376\375\374\373\372" // 297520+ + + // #6865 + "\377\376\375\374\373\372\371\370" + "tools-report-bug" + "\377\376\375\374\373\372\371\370" // 297552 + + // #6866 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297568 + + // #6867 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297584 + + // #6868 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297600 + + // #6869 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297616 + + // #6870 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 297632 + + // #6871 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325" + "qt_tabwidget_stackedwidget" + "\377\376\375\374\373\372\371\370\367\366\365" // 297712+ + + // #6872 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "qt_tabwidget_tabbar" + "\377\376\375\374\373" // 297760+ + + // #6873 + "QObject::connect: Connecting from " + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 297808 + + // #6874 + "\377\376\375\374" + "::" + "\377\376\375\374\373\372\371\370\367\366" // 297824 + + // #6875 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + " to COMPAT slot (" + "\377\376\375\374\373\372\371" // 297888+ + + // #6876 + "\377\376\375\374\373\372\371\370\367\366\365" + "::" + "\377\376\375" // 297904 + + // #6877 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + ")" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 297936 + + // #6878 + "\377\376\375" + "tabbar" + "\377\376\375\374\373\372\371" // 297952 + + // #6879 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 297968 + + // #6880 + "@info" + "\377\376\375\374\373\372\371\370\367\366\365" // 297984 + + // #6881 + "\377\376\375\374" + "\134""s" + "\377\376\375\374\373\372\371\370\367\366" // 298000 + + // #6882 + "\377\376\375\374\373\372\371\370\367\366\365" + "^\134""s*<\134""s*(\134""w+)[^>]*>" + "\377\376" // 298032 + + // #6883 + "\377\376\375\374\373\372\371\370" + "</" + "\377\376\375\374\373\372" // 298048 + + // #6884 + "\377\376\375\374\373\372" + "xml" + "\377\376\375\374\373\372\371" // 298064 + + // #6885 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "http://www.w3.org/XML/1998/namespace" + "\377\376\375\374" // 298160+ + + // #6886 + "\377\376\375\374\373\372\371\370\367\366\365" + "<" + "\377\376\375\374" // 298176 + + // #6887 + "\377\376\375\374\373\372" + "lt" + "\377\376\375\374\373\372\371\370" // 298192 + + // #6888 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ">" + "\377\376" // 298208 + + // #6889 + "\377\376\375\374\373\372\371\370\367" + "gt" + "\377\376\375\374\373" // 298224 + + // #6890 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "&" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 298256 + + // #6891 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "amp" + "\377" // 298272 + + // #6892 + "\377\376\375" + "'" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 298288 + + // #6893 + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 298304 + + // #6894 + "\377\376\375\374\373" + "\42""" + "\377\376\375\374\373\372\371\370\367\366" // 298320 + + // #6895 + "\377\376\375\374\373" + "quot" + "\377\376\375\374\373\372\371" // 298336 + + // #6896 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298352 + + // #6897 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298368 + + // #6898 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 298400 + + // #6899 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 298416 + + // #6900 + "\377\376\375\374" + "Serif" + "\377\376\375\374\373\372\371" // 298432 + + // #6901 + "Sans Serif" + "\377\376\375\374\373\372" // 298448 + + // #6902 + "\377\376\375\374\373\372" + "Monospace" + "\377" // 298464 + + // #6903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Helvetica" + "\377\376\375\374\373\372\371\370\367" // 298528+ + + // #6904 + "\377\376\375\374\373\372\371\370" + "@info" + "\377\376\375" // 298544 + + // #6905 + "\377\376\375\374\373\372\371\370" + "</" + "\377\376\375\374\373\372" // 298560 + + // #6906 + "\377\376\375\374\373\372" + "xml" + "\377\376\375\374\373\372\371" // 298576 + + // #6907 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "http://www.w3.org/XML/1998/namespace" + "\377\376\375\374" // 298672+ + + // #6908 + "\377\376\375\374\373\372\371\370\367\366\365" + "<" + "\377\376\375\374" // 298688 + + // #6909 + "\377\376\375\374\373\372" + "lt" + "\377\376\375\374\373\372\371\370" // 298704 + + // #6910 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ">" + "\377\376" // 298720 + + // #6911 + "\377\376\375\374\373\372\371\370\367" + "gt" + "\377\376\375\374\373" // 298736 + + // #6912 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "&" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 298768 + + // #6913 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "amp" + "\377" // 298784 + + // #6914 + "\377\376\375" + "'" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 298800 + + // #6915 + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 298816 + + // #6916 + "\377\376\375\374\373" + "\42""" + "\377\376\375\374\373\372\371\370\367\366" // 298832 + + // #6917 + "\377\376\375\374\373" + "quot" + "\377\376\375\374\373\372\371" // 298848 + + // #6918 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298864 + + // #6919 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298880 + + // #6920 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298896 + + // #6921 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298912 + + // #6922 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 298928 + + // #6923 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 298960 + + // #6924 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 298976 + + // #6925 + "\377\376\375\374\373\372\371\370\367" + "pics/crash.png" + "\377\376\375\374\373\372\371\370\367" // 299008 + + // #6926 + "\377\376\375" + "/l10n" + "\377\376\375\374\373\372\371\370" // 299024 + + // #6927 + "png" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 299040 + + // #6928 + "\377\376\375\374\373\372\371\370" + "Software" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 299072 + + // #6929 + "www.inkscape.org" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 299104 + + // #6930 + "@label" + "\377\376\375\374\373\372\371\370\367\366" // 299120 + + // #6931 + "\377\376\375\374\373" + "<strong>%1</strong>" + "\377\376\375\374\373\372\371\370" // 299152 + + // #6932 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299168 + + // #6933 + "\377\376\375\374\373\372\371" + "numintg" + "\377\376" // 299184 + + // #6934 + "\377\376\375\374\373\372\371\370\367\366" + "<%1>" + "\377\376" // 299200 + + // #6935 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "</%1>" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 299232 + + // #6936 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299248 + + // #6937 + "\377\376\375\374\373\372\371" + "numintg" + "\377\376" // 299264 + + // #6938 + "\377\376\375\374\373\372\371\370\367\366" + "<%1>" + "\377\376" // 299280 + + // #6939 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "</%1>" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 299312 + + // #6940 + "\377\376\375\374\373\372\371\370" + "@info" + "\377\376\375" // 299328 + + // #6941 + "\377\376\375\374\373\372\371\370" + "</" + "\377\376\375\374\373\372" // 299344 + + // #6942 + "\377\376\375\374\373\372" + "xml" + "\377\376\375\374\373\372\371" // 299360 + + // #6943 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "http://www.w3.org/XML/1998/namespace" + "\377\376\375\374" // 299440+ + + // #6944 + "\377\376\375\374\373\372\371\370\367\366\365" + "<" + "\377\376\375\374" // 299456 + + // #6945 + "\377\376\375\374\373\372" + "lt" + "\377\376\375\374\373\372\371\370" // 299472 + + // #6946 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ">" + "\377\376" // 299488 + + // #6947 + "\377\376\375\374\373\372\371\370\367" + "gt" + "\377\376\375\374\373" // 299504 + + // #6948 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "&" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 299536 + + // #6949 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "amp" + "\377" // 299552 + + // #6950 + "\377\376\375" + "'" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 299568 + + // #6951 + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 299584 + + // #6952 + "\377\376\375\374\373" + "\42""" + "\377\376\375\374\373\372\371\370\367\366" // 299600 + + // #6953 + "\377\376\375\374\373" + "quot" + "\377\376\375\374\373\372\371" // 299616 + + // #6954 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299632 + + // #6955 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299648 + + // #6956 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299664 + + // #6957 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299680 + + // #6958 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299696 + + // #6959 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 299712 + + // #6960 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 299744 + + // #6961 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 299760 + + // #6962 + "@title:tab general information" + "\377\376" // 299792 + + // #6963 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 299824 + + // #6964 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 299856 + + // #6965 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 299888 + + // #6966 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 299920 + + // #6967 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 299952 + + // #6968 + "\377\376\375\374\373\372\371\370" + "1" + "\377\376\375\374\373\372\371" // 299968 + + // #6969 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300000 + + // #6970 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300032 + + // #6971 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300064 + + // #6972 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "Helvetica" + "\377\376\375\374\373\372\371\370\367" // 300128+ + + // #6973 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300160 + + // #6974 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Helvetica" + "\377\376\375\374\373\372\371\370\367" // 300192+ + + // #6975 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300224 + + // #6976 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300256 + + // #6977 + "\377\376\375\374\373\372\371\370\367\366" + "process-working" + "\377\376\375\374\373\372\371" // 300288 + + // #6978 + "\377\376\375\374\373" + ".png" + "\377\376\375\374\373\372\371" // 300304 + + // #6979 + "\377\376\375" + "/l10n" + "\377\376\375\374\373\372\371\370" // 300320 + + // #6980 + "png" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 300336 + + // #6981 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "process-working" + "\377\376" // 300368 + + // #6982 + "\377\376\375\374\373" + ".png" + "\377\376\375\374\373\372\371" // 300384 + + // #6983 + "\377\376\375" + "/l10n" + "\377\376\375\374\373\372\371\370" // 300400 + + // #6984 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "qt_scrollarea_viewport" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 300464+ + + // #6985 + "\377\376\375" + "qt_scrollarea_hcontainer" + "\377\376\375\374\373" // 300496 + + // #6986 + "\377\376\375\374\373\372\371\370" + "qt_scrollarea_vcontainer" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 300544 + + // #6987 + "qt_abstractscrollarea_filter" + "\377\376\375\374" // 300576 + + // #6988 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "installdbgsymbols.sh" + "\377\376" // 300640+ + + // #6989 + " margin: 5px; " + "\377\376" // 300656 + + // #6990 + "\377\376\375\374\373\372\371" + "QLineEdit" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 300688 + + // #6991 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 300720 + + // #6992 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 300736 + + // #6993 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 300768 + + // #6994 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 300800 + + // #6995 + "\377\376\375\374\373\372\371" + "QLineEdit" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 300832 + + // #6996 + "no-frame" + "\377\376\375\374\373\372\371\370" // 300848 + + // #6997 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 300864 + + // #6998 + "\377\376\375\374\373\372\371\370\367" + "QFrame" + "\377" // 300880 + + // #6999 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 300896 + + // #7000 + "QLabel" + "\377\376\375\374\373\372\371\370\367\366" // 300912 + + // #7001 + "\377\376\375\374\373\372\371" + "QToolBox" + "\377" // 300928 + + // #7002 + "background" + "\377\376\375\374\373\372" // 300944 + + // #7003 + "\377\376\375\374\373\372\371\370\367\366\365" + "border-image" + "\377\376\375\374\373\372\371\370\367" // 300976 + + // #7004 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "QGroupBox" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 301024+ + + // #7005 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 301040 + + // #7006 + "\377\376" + "QToolTip" + "\377\376\375\374\373\372" // 301056 + + // #7007 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301088 + + // #7008 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 301104 + + // #7009 + "\377\376\375\374\373\372\371\370\367\366\365" + "QPushButton" + "\377\376\375\374\373\372\371\370\367\366" // 301136 + + // #7010 + "\377\376\375\374\373\372\371" + "QToolButton" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 301168 + + // #7011 + "\377\376\375" + "border-style" + "\377" // 301184 + + // #7012 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 301216 + + // #7013 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 301248 + + // #7014 + "QComboBox" + "\377\376\375\374\373\372\371" // 301264 + + // #7015 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 301280 + + // #7016 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 301312 + + // #7017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 301344 + + // #7018 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "background-gradient" + "\377\376\375" // 301408+ + + // #7019 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301440 + + // #7020 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "QAbstractSpinBox" + "\377\376\375" // 301472+ + + // #7021 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 301488 + + // #7022 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 301520 + + // #7023 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 301552 + + // #7024 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301584 + + // #7025 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "QMenu" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 301616 + + // #7026 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301648 + + // #7027 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "QMenu" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 301680 + + // #7028 + "\377\376\375\374" + "item" + "\377\376\375\374\373\372\371\370" // 301696 + + // #7029 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 301728 + + // #7030 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 301760 + + // #7031 + "\377\376\375\374\373\372\371\370\367" + "QHeaderView" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301792 + + // #7032 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301824 + + // #7033 + "\377\376\375\374\373" + "QTableCornerButton" + "\377\376\375\374\373\372\371\370\367" // 301856 + + // #7034 + "\377\376\375\374\373\372\371\370" + "section" + "\377" // 301872 + + // #7035 + "\377\376\375\374\373\372\371\370\367" + "QHeaderView" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301904 + + // #7036 + "\377\376\375\374\373\372\371\370" + "section" + "\377" // 301920 + + // #7037 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 301952 + + // #7038 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "-qt-style-features" + "\377\376" // 301984 + + // #7039 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "background-color" + "\377" // 302016 + + // #7040 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 302032 + + // #7041 + "QProgressBar" + "\377\376\375\374" // 302048 + + // #7042 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 302080 + + // #7043 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "QScrollBar" + "\377\376\375\374\373\372\371\370\367" // 302112 + + // #7044 + "\377" + "-qt-background-role" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 302144 + + // #7045 + "\377\376\375\374\373\372\371\370" + "QDockWidget" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 302176 + + // #7046 + "\377\376\375\374\373" + "border" + "\377\376\375\374\373" // 302192 + + // #7047 + "QLabel" + "\377\376\375\374\373\372\371\370\367\366" // 302208 + + // #7048 + "QFrame" + "\377\376\375\374\373\372\371\370\367\366" // 302224 + + // #7049 + "QWidget" + "\377\376\375\374\373\372\371\370\367" // 302240 + + // #7050 + "QObject" + "\377\376\375\374\373\372\371\370\367" // 302256 + + // #7051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 302304+ + + // #7052 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 302336 + + // #7053 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 302352 + + // #7054 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "view-refresh" + "\377\376\375\374\373" // 302432+ + + // #7055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "@action:button" + "\377\376\375\374\373\372\371\370\367\366" // 302496+ + + // #7056 + "\377\376\375\374\373\372\371\370" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 302528 + + // #7057 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 302560 + + // #7058 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 302576 + + // #7059 + "\377\376\375" + "system-software-update" + "\377\376\375\374\373\372\371" // 302608 + + // #7060 + "\377\376\375\374\373\372\371\370" + "@action:button" + "\377\376\375\374\373\372\371\370\367\366" // 302640 + + // #7061 + "\377\376\375\374\373\372\371\370" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 302672 + + // #7062 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 302704 + + // #7063 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 302720 + + // #7064 + "\377\376\375\374\373\372\371\370\367" + "edit-copy" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 302752 + + // #7065 + "\377\376\375\374\373\372\371\370" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 302784 + + // #7066 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 302816 + + // #7067 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 302832 + + // #7068 + "\377\376\375\374" + "document-save" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 302864 + + // #7069 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "favorites" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 302944+ + + // #7070 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 302960 + + // #7071 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 302976 + + // #7072 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 302992 + + // #7073 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303008 + + // #7074 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303024 + + // #7075 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303040 + + // #7076 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303056 + + // #7077 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303072 + + // #7078 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303088 + + // #7079 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303104 + + // #7080 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303120 + + // #7081 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303136 + + // #7082 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303152 + + // #7083 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303168 + + // #7084 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303184 + + // #7085 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303200 + + // #7086 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303216 + + // #7087 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "favorites" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 303264+ + + // #7088 + "1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 303280 + + // #7089 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 303296 + + // #7090 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303312 + + // #7091 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303328 + + // #7092 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303344 + + // #7093 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303360 + + // #7094 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303376 + + // #7095 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303392 + + // #7096 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303408 + + // #7097 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303424 + + // #7098 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303440 + + // #7099 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303456 + + // #7100 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303472 + + // #7101 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303488 + + // #7102 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303504 + + // #7103 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303520 + + // #7104 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303536 + + // #7105 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303552 + + // #7106 + "\377\376" + "dialog-error" + "\377\376" // 303568 + + // #7107 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 303584 + + // #7108 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303600 + + // #7109 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303616 + + // #7110 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303632 + + // #7111 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303648 + + // #7112 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303664 + + // #7113 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303680 + + // #7114 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303696 + + // #7115 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303712 + + // #7116 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303728 + + // #7117 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303744 + + // #7118 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303760 + + // #7119 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 303776 + + // #7120 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303792 + + // #7121 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303808 + + // #7122 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 303824 + + // #7123 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 303840 + + // #7124 + "Software" + "\377\376\375\374\373\372\371\370" // 303856 + + // #7125 + "www.inkscape.org" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 303888 + + // #7126 + "\377\376\375\374\373" + "Monospace" + "\377\376" // 303904 + + // #7127 + "\377\376\375\374\373\372\371\370" + "Monospace,10,-1,5,50,0,0,0,0,0" + "\377\376\375\374\373\372\371\370\367\366" // 303952 + + // #7128 + "\377\376" + "QFont" + "\377\376\375\374\373\372\371\370\367" // 303968 + + // #7129 + "\377\376\375\374\373\372\371\370\367\366" + "fixed" + "\377" // 303984 + + // #7130 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 304048+ + + // #7131 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 304128+ + + // #7132 + "\377\376\375\374\373\372\371\370" + "@title:tab" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 304160 + + // #7133 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "window-close" + "\377\376\375\374\373\372\371" // 304192 + + // #7134 + "\377\376\375\374\373\372\371\370" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 304224 + + // #7135 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 304256 + + // #7136 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 304272 + + // #7137 + "\377\376\375\374\373\372\371\370" + "tools-report-bug" + "\377\376\375\374\373\372\371\370" // 304304 + + // #7138 + "\377\376\375\374\373\372\371\370" + "@action:button" + "\377\376\375\374\373\372\371\370\367\366" // 304336 + + // #7139 + "\377\376\375\374\373\372\371\370" + "@info:tooltip" + "\377\376\375\374\373\372\371\370\367\366\365" // 304368 + + // #7140 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 304400 + + // #7141 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 304416 + + // #7142 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "applications-development" + "\377\376\375\374\373\372\371\370" // 304480+ + + // #7143 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "@action:button this is the debug menu button label which contains the debugging applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 304624+ + + // #7144 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "applications-development" + "\377\376\375\374\373\372\371\370" // 304672+ + + // #7145 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 304688 + + // #7146 + "@action:inmenu 1 is the debugger name" + "\377\376\375\374\373\372\371\370\367\366\365" // 304736 + + // #7147 + "\377\376\375\374\373\372\371\370" + "</" + "\377\376\375\374\373\372" // 304752 + + // #7148 + "\377\376\375\374\373\372" + "xml" + "\377\376\375\374\373\372\371" // 304768 + + // #7149 + "\377\376\375\374\373\372\371\370" + "http://www.w3.org/XML/1998/namespace" + "\377\376\375\374" // 304816+ + + // #7150 + "\377\376\375\374\373\372\371\370\367\366\365" + "<" + "\377\376\375\374" // 304832 + + // #7151 + "\377\376\375\374\373\372" + "lt" + "\377\376\375\374\373\372\371\370" // 304848 + + // #7152 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + ">" + "\377\376" // 304864 + + // #7153 + "\377\376\375\374\373\372\371\370\367" + "gt" + "\377\376\375\374\373" // 304880 + + // #7154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "&" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 304912 + + // #7155 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "amp" + "\377" // 304928 + + // #7156 + "\377\376\375" + "'" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 304944 + + // #7157 + "apos" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 304960 + + // #7158 + "\377\376\375\374\373" + "\42""" + "\377\376\375\374\373\372\371\370\367\366" // 304976 + + // #7159 + "\377\376\375\374\373" + "quot" + "\377\376\375\374\373\372\371" // 304992 + + // #7160 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 305008 + + // #7161 + "@info:tooltip" + "\377\376\375" // 305024 + + // #7162 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 305056 + + // #7163 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 305072 + + // #7164 + "\377" + "system-reboot" + "\377\376" // 305088 + + // #7165 + "@action:button" + "\377\376" // 305104 + + // #7166 + "@info:tooltip" + "\377\376\375" // 305120 + + // #7167 + "\377\376\375\374\373\372\371\370\367" + "</html>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 305152 + + // #7168 + "\377" + "<html>" + "\377\376\375\374\373\372\371\370\367" // 305168 + + // #7169 + "QLabel" + "\377\376\375\374\373\372\371\370\367\366" // 305184 + + // #7170 + "QFrame" + "\377\376\375\374\373\372\371\370\367\366" // 305200 + + // #7171 + "QWidget" + "\377\376\375\374\373\372\371\370\367" // 305216 + + // #7172 + "QObject" + "\377\376\375\374\373\372\371\370\367" // 305232 + + // #7173 + "Oxygen::TransitionWidget" + "\377\376\375\374\373\372\371\370" // 305264 + + // #7174 + "QWidget" + "\377\376\375\374\373\372\371\370\367" // 305280 + + // #7175 + "QObject" + "\377\376\375\374\373\372\371\370\367" // 305296 + + // #7176 + "\377\376\375\374\373\372\371\370\367\366\365" + "XXXX" + "\377" // 305312 + + // #7177 + "\377\376\375\374\373\372\371\370\367\366\365" + "XXXX" + "\377" // 305328 + + // #7178 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 305344 + + // #7179 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 305360 + + // #7180 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 305456+ + + // #7181 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 305520+ + + // #7182 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 305600+ + + // #7183 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 305616 + + // #7184 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 305632 + + // #7185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 305712+ + + // #7186 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 305776+ + + // #7187 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 305856+ + + // #7188 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 305872 + + // #7189 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 305888 + + // #7190 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 305968+ + + // #7191 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 306032+ + + // #7192 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 306112+ + + // #7193 + "\377\376\375\374\373\372\371\370\367\366" + "Width %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 306144 + + // #7194 + "902" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 306160 + + // #7195 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 306192 + + // #7196 + "Width 1680" + "\377\376\375\374\373\372" // 306208 + + // #7197 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 306288+ + + // #7198 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 306368+ + + // #7199 + "\377\376\375" + "Height %1" + "\377\376\375\374" // 306384 + + // #7200 + "\377\376\375\374\373\372\371\370" + "706" + "\377\376\375\374\373" // 306400 + + // #7201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "int" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 306432 + + // #7202 + "\377\376\375\374\373\372\371\370" + "Height 1050" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 306464 + + // #7203 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 306544+ + + // #7204 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 306624+ + + // #7205 + "suse" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 306640 + + // #7206 + "\377\376\375\374\373" + "ubuntu" + "\377\376\375\374\373" // 306656 + + // #7207 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "fedora" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 306688 + + // #7208 + "\377\376\375" + "redhat" + "\377\376\375\374\373\372\371" // 306704 + + // #7209 + "\377\376\375\374\373\372\371\370\367\366" + "mandriva" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 306736 + + // #7210 + "\377\376\375\374" + "Mandriva RPMs" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 306768 + + // #7211 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 306784 + + // #7212 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306800 + + // #7213 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 306816 + + // #7214 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306832 + + // #7215 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 306848 + + // #7216 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306864 + + // #7217 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 306880 + + // #7218 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306896 + + // #7219 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 306912 + + // #7220 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306928 + + // #7221 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 306944 + + // #7222 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306960 + + // #7223 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 306976 + + // #7224 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 306992 + + // #7225 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307008 + + // #7226 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307024 + + // #7227 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307040 + + // #7228 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307056 + + // #7229 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307072 + + // #7230 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307088 + + // #7231 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307104 + + // #7232 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307120 + + // #7233 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307136 + + // #7234 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307152 + + // #7235 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307168 + + // #7236 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307184 + + // #7237 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307200 + + // #7238 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307216 + + // #7239 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307232 + + // #7240 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307248 + + // #7241 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307264 + + // #7242 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307280 + + // #7243 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307296 + + // #7244 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307312 + + // #7245 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307328 + + // #7246 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307344 + + // #7247 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307360 + + // #7248 + "7" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 307376 + + // #7249 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307392 + + // #7250 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307408 + + // #7251 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307424 + + // #7252 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307440 + + // #7253 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307456 + + // #7254 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307472 + + // #7255 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307488 + + // #7256 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307504 + + // #7257 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307520 + + // #7258 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307536 + + // #7259 + "\211""PNG\15""\12""" + "\377\376\375\374\373\372\371\370\367\366" // 307552 + + // #7260 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307568 + + // #7261 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307584 + + // #7262 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307600 + + // #7263 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307616 + + // #7264 + "\377\376\375\374" + "^\1""\332""\1""[\1""\2""]" + "\377\376\375\374" // 307632 + + // #7265 + "\377\376\375\374\373\372\371\370" + "\211""PNG\15""\12""" + "\377\376" // 307648 + + // #7266 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307664 + + // #7267 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307680 + + // #7268 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307696 + + // #7269 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 307712 + + // #7270 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307744 + + // #7271 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 307760 + + // #7272 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 307776 + + // #7273 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 307792 + + // #7274 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 307808 + + // #7275 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307840 + + // #7276 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 307856 + + // #7277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307888 + + // #7278 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 307904 + + // #7279 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307936 + + // #7280 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 307952 + + // #7281 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 307984 + + // #7282 + "\377\376\375\374" + "&" + "\377\376\375\374\373\372\371\370\367\366\365" // 308000 + + // #7283 + "\377\376\375\374" + "<tr><td>" + "\377\376\375\374" // 308016 + + // #7284 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "</td></tr>" + "\377\376\375\374\373\372\371\370\367" // 308064+ + + // #7285 + "\377\376\375\374" + "&" + "\377\376\375\374\373\372\371\370\367\366\365" // 308080 + + // #7286 + "\377\376\375\374" + "&" + "\377\376\375\374\373\372\371\370\367\366\365" // 308096 + + // #7287 + "\377\376\375\374" + "<tr><td>" + "\377\376\375\374" // 308112 + + // #7288 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "</td></tr>" + "\377\376\375\374\373\372\371\370\367" // 308192+ + + // #7289 + "\377\376\375\374" + "&" + "\377\376\375\374\373\372\371\370\367\366\365" // 308208 + + // #7290 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 308224 + + // #7291 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 308240 + + // #7292 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 308336+ + + // #7293 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 308400+ + + // #7294 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 308480+ + + // #7295 + "true" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 308496 + + // #7296 + "\377\376\375\374\373\372\371\370\367" + "bool" + "\377\376\375" // 308512 + + // #7297 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325" + "ShowIconsOnPushButtons" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 308592+ + + // #7298 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "\42""%1\42"" - conversion from \42""%3\42"" to %2 failed" + "\377\376\375\374\373\372\371\370" // 308656+ + + // #7299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + " (wrong format: expected '%1' items, read '%2')" + "\377\376\375\374\373" // 308736+ + + // #7300 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308752 + + // #7301 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308768 + + // #7302 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308784 + + // #7303 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308800 + + // #7304 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 308816 + + // #7305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308848 + + // #7306 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 308864 + + // #7307 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308896 + + // #7308 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 308912 + + // #7309 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308944 + + // #7310 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 308960 + + // #7311 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 308992 + + // #7312 + "\377\376\375\374\373\372\371\370\367\366" + "(!)&" + "\377\376" // 309008 + + // #7313 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "(&&)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309040 + + // #7314 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309056 + + // #7315 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309072 + + // #7316 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309088 + + // #7317 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309104 + + // #7318 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309120 + + // #7319 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309136 + + // #7320 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309152 + + // #7321 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309168 + + // #7322 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309184 + + // #7323 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309200 + + // #7324 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309216 + + // #7325 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309232 + + // #7326 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309248 + + // #7327 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309264 + + // #7328 + "\377\376" + "_" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 309280 + + // #7329 + "\377\376\375\374\373\372\371\370\367\366" + "Width %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 309312 + + // #7330 + "\377\376\375" + "Height %1" + "\377\376\375\374" // 309328 + + // #7331 + "\377\376\375\374\373\372\371\370" + "qt_default_session_bus" + "\377\376" // 309360 }; static const int intData[] = { - 16, 8, 8, 2760, 2760, // #0 - 11, 40, 40, 3080, 3080, // #1 - 12, 72, 72, 2232, 2232, // #2 - 1, 100, 100, 2164, 2164, // #3 - 7, 124, 124, 2780, 2780, // #4 - 1, 148, 148, 2164, 2164, // #5 - 1, 164, 164, 2164, 2164, // #6 - 119, 192, 192, 3280, 3280, // #7 - 1, 324, 324, 2164, 2164, // #8 - 1, 340, 340, 2164, 2164, // #9 - 1, 356, 356, 2164, 2164, // #10 - 1, 372, 372, 2164, 2164, // #11 - 13, 389, 389, 2229, 2229, // #12 - 9, 419, 419, 2243, 2243, // #13 - 18, 445, 445, 2253, 2253, // #14 - 7, 471, 471, 2391, 2391, // #15 - 1, 485, 485, 2261, 2261, // #16 - 13, 504, 504, 2200, 2200, // #17 - 9, 537, 537, 2377, 2377, // #18 - 1, 565, 565, 2261, 2261, // #19 - 3, 579, 579, 2387, 2387, // #20 - 1, 599, 599, 2263, 2263, // #21 - 2, 617, 617, 2265, 2265, // #22 - 2, 624, 624, 3088, 3088, // #23 - 4, 652, 652, 3244, 3244, // #24 - 4, 680, 680, 3400, 3400, // #25 - 8, 692, 692, 3556, 3556, // #26 - 1, 714, 714, 2426, 2426, // #27 - 1, 733, 733, 2429, 2429, // #28 - 1, 736, 736, 2432, 2432, // #29 - 1, 757, 757, 2261, 2261, // #30 - 9, 777, 777, 2377, 2377, // #31 - 1, 805, 805, 2261, 2261, // #32 - 3, 819, 819, 2387, 2387, // #33 - 1, 839, 839, 2263, 2263, // #34 - 2, 857, 857, 2265, 2265, // #35 - 1, 869, 869, 2261, 2261, // #36 - 13, 908, 908, 3004, 3004, // #37 - 13, 936, 936, 2200, 2200, // #38 - 9, 969, 969, 2377, 2377, // #39 - 1, 997, 997, 2261, 2261, // #40 - 3, 1011, 1011, 2387, 2387, // #41 - 1, 1031, 1031, 2263, 2263, // #42 - 2, 1049, 1049, 2265, 2265, // #43 - 25, 1096, 1096, 2744, 2744, // #44 - 9, 1145, 1145, 2377, 2377, // #45 - 1, 1173, 1173, 2261, 2261, // #46 - 3, 1187, 1187, 2387, 2387, // #47 - 1, 1207, 1207, 2263, 2263, // #48 - 2, 1225, 1225, 2265, 2265, // #49 - 37, 1292, 1292, 2604, 2604, // #50 + 29, 10, 10, 1642, 1642, // #0 + 3, 49, 49, 433, 433, // #1 + 2, 69, 69, 437, 437, // #2 + 1, 85, 85, 3797, 3797, // #3 + 10, 136, 136, 440, 440, // #4 + 5, 164, 164, 3716, 3716, // #5 + 7, 178, 178, 898, 898, // #6 + 7, 194, 194, 2450, 2450, // #7 + 16, 216, 216, 2024, 2024, // #8 + 9, 241, 241, 2225, 2225, // #9 + 4, 269, 269, 2333, 2333, // #10 + 9, 289, 289, 2401, 2401, // #11 + 6, 317, 317, 2477, 2477, // #12 + 6, 349, 349, 2477, 2477, // #13 + 6, 381, 381, 2477, 2477, // #14 + 6, 413, 413, 2477, 2477, // #15 + 14, 437, 437, 2469, 2469, // #16 + 4, 466, 466, 306, 306, // #17 + 10, 485, 485, 3333, 3333, // #18 + 14, 501, 501, 3349, 3349, // #19 + 11, 537, 537, 3369, 3369, // #20 + 12, 588, 588, 3388, 3388, // #21 + 13, 608, 608, 3408, 3408, // #22 + 12, 627, 627, 3427, 3427, // #23 + 12, 646, 646, 3446, 3446, // #24 + 12, 682, 682, 3466, 3466, // #25 + 19, 704, 704, 3488, 3488, // #26 + 23, 737, 737, 3521, 3521, // #27 + 13, 782, 782, 3550, 3550, // #28 + 7, 800, 800, 3568, 3568, // #29 + 16, 818, 818, 3586, 3586, // #30 + 15, 861, 861, 3613, 3613, // #31 + 3, 881, 881, 3633, 3633, // #32 + 9, 908, 908, 3644, 3644, // #33 + 17, 928, 928, 3664, 3664, // #34 + 17, 967, 967, 3687, 3687, // #35 + 15, 995, 995, 3715, 3715, // #36 + 12, 1024, 1024, 3744, 3744, // #37 + 5, 1050, 1050, 3770, 3770, // #38 + 7, 1071, 1071, 3791, 3791, // #39 + 19, 1092, 1092, 3812, 3812, // #40 + 4, 1129, 1129, 3545, 3545, // #41 + 5, 1138, 1138, 3858, 3858, // #42 + 9, 1162, 1162, 3882, 3882, // #43 + 12, 1188, 1188, 2484, 2484, // #44 + 3, 1224, 1224, 1432, 1432, // #45 + 1, 1235, 1235, 2339, 2339, // #46 + 17, 1254, 1254, 2502, 2502, // #47 + 15, 1288, 1288, 2520, 2520, // #48 + 4, 1324, 1324, 3132, 3132, // #49 + 10, 1348, 1348, 756, 756, // #50 + 1, 1370, 1370, 1226, 1226, // #51 + 1, 1388, 1388, 1228, 1228, // #52 + 1, 1402, 1402, 1226, 1226, // #53 + 1, 1420, 1420, 1228, 1228, // #54 + 16, 1425, 1425, 1441, 1441, // #55 + 11, 1464, 1464, 24, 24, // #56 + 1, 1500, 1500, 1228, 1228, // #57 + 119, 1536, 1536, 3520, 3520, // #58 + 1, 1676, 1676, 1228, 1228, // #59 + 1, 1692, 1692, 1228, 1228, // #60 + 1, 1708, 1708, 1228, 1228, // #61 + 1, 1724, 1724, 1228, 1228, // #62 + 1, 1740, 1740, 1228, 1228, // #63 + 1, 1756, 1756, 1228, 1228, // #64 + 1, 1772, 1772, 1228, 1228, // #65 + 11, 1778, 1778, 642, 642, // #66 + 2, 1796, 1796, 3428, 3428, // #67 + 3, 1816, 1816, 3000, 3000, // #68 + 10, 1828, 1828, 756, 756, // #69 + 1, 1850, 1850, 1226, 1226, // #70 + 1, 1868, 1868, 1228, 1228, // #71 + 17, 1885, 1885, 749, 749, // #72 + 3, 1912, 1912, 3000, 3000, // #73 + 3, 1928, 1928, 3000, 3000, // #74 + 11, 1944, 1944, 2536, 2536, // #75 + 7, 1994, 1994, 2618, 2618, // #76 + 14, 2051, 2051, 2675, 2675, // #77 + 8, 2088, 2088, 2376, 2376, // #78 + 6, 2119, 2119, 2663, 2663, // #79 + 8, 2136, 2136, 2376, 2376, // #80 + 6, 2167, 2167, 2663, 2663, // #81 + 1, 2186, 2186, 1226, 1226, // #82 + 1, 2204, 2204, 1228, 1228, // #83 + 10, 2212, 2212, 756, 756, // #84 + 17, 2237, 2237, 749, 749, // #85 + 3, 2264, 2264, 3000, 3000, // #86 + 3, 2280, 2280, 3000, 3000, // #87 + 3, 2296, 2296, 3000, 3000, // #88 + 3, 2312, 2312, 3000, 3000, // #89 + 12, 2332, 2332, 540, 540, // #90 + 1, 2364, 2364, 1228, 1228, // #91 + 10, 2368, 2368, 1488, 1488, // #92 + 6, 2395, 2395, 2027, 2027, // #93 + 8, 2419, 2419, 2035, 2035, // #94 + 2, 2440, 2440, 1384, 1384, // #95 + 6, 2459, 2459, 2219, 2219, // #96 + 3, 2484, 2484, 3620, 3620, // #97 + 6, 2504, 2504, 3624, 3624, // #98 + 9, 2527, 2527, 2335, 2335, // #99 + 3, 2548, 2548, 3620, 3620, // #100 + 6, 2568, 2568, 3624, 3624, // #101 + 26, 2627, 2627, 3635, 3635, // #102 + 9, 2671, 2671, 2335, 2335, // #103 + 3, 2692, 2692, 3620, 3620, // #104 + 3, 2719, 2719, 3631, 3631, // #105 + 9, 2751, 2751, 2335, 2335, // #106 + 9, 2783, 2783, 2335, 2335, // #107 + 9, 2815, 2815, 2335, 2335, // #108 + 7, 2843, 2843, 2411, 2411, // #109 + 3, 2868, 2868, 3620, 3620, // #110 + 6, 2888, 2888, 3624, 3624, // #111 + 8, 2908, 2908, 2444, 2444, // #112 + 3, 2932, 2932, 3620, 3620, // #113 + 6, 2952, 2952, 3624, 3624, // #114 + 5, 2975, 2975, 2527, 2527, // #115 + 3, 2996, 2996, 3620, 3620, // #116 + 6, 3016, 3016, 3624, 3624, // #117 + 26, 3075, 3075, 3635, 3635, // #118 + 5, 3119, 3119, 2527, 2527, // #119 + 3, 3140, 3140, 3620, 3620, // #120 + 3, 3167, 3167, 3631, 3631, // #121 + 5, 3199, 3199, 2527, 2527, // #122 + 5, 3231, 3231, 2527, 2527, // #123 + 5, 3263, 3263, 2527, 2527, // #124 + 5, 3295, 3295, 2527, 2527, // #125 + 9, 3314, 3314, 1026, 1026, // #126 + 5, 3337, 3337, 1433, 1433, // #127 + 25, 3399, 3399, 631, 631, // #128 + 2, 3452, 3452, 1036, 1036, // #129 + 14, 3471, 3471, 1039, 1039, // #130 + 16, 3502, 3502, 1054, 1054, // #131 + 16, 3535, 3535, 1071, 1071, // #132 + 9, 3559, 3559, 151, 151, // #133 + 1, 3596, 3596, 1228, 1228, // #134 + 5, 3661, 3661, 2301, 2301, // #135 + 5, 3683, 3683, 2307, 2307, // #136 + 6, 3705, 3705, 2313, 2313, // #137 + 4, 3727, 3727, 1439, 1439, // #138 + 4, 3747, 3747, 1123, 1123, // #139 + 1, 3768, 3768, 1128, 1128, // #140 + 4, 3779, 3779, 1123, 1123, // #141 + 17, 3802, 3802, 1130, 1130, // #142 + 5, 3852, 3852, 1148, 1148, // #143 + 19, 3874, 3874, 1154, 1154, // #144 + 15, 3910, 3910, 1174, 1174, // #145 + 16, 3942, 3942, 1190, 1190, // #146 + 7, 3975, 3975, 1207, 1207, // #147 + 9, 4047, 4047, 1215, 1215, // #148 + 4, 4076, 4076, 1244, 1244, // #149 + 12, 4097, 4097, 1249, 1249, // #150 + 17, 4126, 4126, 1262, 1262, // #151 + 18, 4144, 4144, 1280, 1280, // #152 + 10, 4179, 4179, 1299, 1299, // #153 + 7, 4206, 4206, 1310, 1310, // #154 + 11, 4230, 4230, 1318, 1318, // #155 + 8, 4258, 4258, 1330, 1330, // #156 + 12, 4299, 4299, 1339, 1339, // #157 + 14, 4328, 4328, 1352, 1352, // #158 + 11, 4359, 4359, 1367, 1367, // #159 + 14, 4387, 4387, 1379, 1379, // #160 + 16, 4421, 4421, 1413, 1413, // #161 + 11, 4454, 4454, 1430, 1430, // #162 + 13, 4482, 4482, 1442, 1442, // #163 + 3, 4497, 4497, 3697, 3697, // #164 + 13, 4515, 4515, 3683, 3683, // #165 + 9, 4544, 4544, 832, 832, // #166 + 5, 4569, 4569, 1433, 1433, // #167 + 1, 4586, 4586, 842, 842, // #168 + 1, 4604, 4604, 1228, 1228, // #169 + 1, 4620, 4620, 1228, 1228, // #170 + 1, 4630, 4630, 2390, 2390, // #171 + 8, 4641, 4641, 577, 577, // #172 + 5, 4659, 4659, 1747, 1747, // #173 + 27, 4674, 4674, 2018, 2018, // #174 + 46, 4744, 4744, 2856, 2856, // #175 + 29, 4814, 4814, 910, 910, // #176 + 33, 4848, 4848, 1984, 1984, // #177 + 1, 4906, 4906, 842, 842, // #178 + 1, 4924, 4924, 1228, 1228, // #179 + 1, 4940, 4940, 1228, 1228, // #180 + 1, 4950, 4950, 2390, 2390, // #181 + 8, 4961, 4961, 577, 577, // #182 + 5, 4979, 4979, 1747, 1747, // #183 + 27, 4994, 4994, 2018, 2018, // #184 + 46, 5064, 5064, 2856, 2856, // #185 + 29, 5134, 5134, 910, 910, // #186 + 1, 5178, 5178, 842, 842, // #187 + 1, 5196, 5196, 1228, 1228, // #188 + 1, 5210, 5210, 842, 842, // #189 + 1, 5228, 5228, 1228, 1228, // #190 + 1, 5242, 5242, 842, 842, // #191 + 1, 5260, 5260, 1228, 1228, // #192 + 3, 5275, 5275, 1499, 1499, // #193 + 18, 5295, 5295, 1503, 1503, // #194 + 77, 5384, 5384, 1048, 1048, // #195 + 7, 5476, 5476, 3076, 3076, // #196 + 9, 5488, 5488, 832, 832, // #197 + 5, 5513, 5513, 1433, 1433, // #198 + 25, 5575, 5575, 631, 631, // #199 + 1, 5626, 5626, 842, 842, // #200 + 1, 5644, 5644, 1228, 1228, // #201 + 1, 5658, 5658, 842, 842, // #202 + 1, 5676, 5676, 1228, 1228, // #203 + 1, 5692, 5692, 1228, 1228, // #204 + 1, 5702, 5702, 2390, 2390, // #205 + 8, 5713, 5713, 577, 577, // #206 + 5, 5731, 5731, 1747, 1747, // #207 + 27, 5746, 5746, 2018, 2018, // #208 + 39, 5824, 5824, 4000, 4000, // #209 + 29, 5886, 5886, 910, 910, // #210 + 1, 5930, 5930, 842, 842, // #211 + 1, 5948, 5948, 1228, 1228, // #212 + 1, 5964, 5964, 1228, 1228, // #213 + 1, 5974, 5974, 2390, 2390, // #214 + 8, 5985, 5985, 577, 577, // #215 + 5, 6003, 6003, 1747, 1747, // #216 + 27, 6018, 6018, 2018, 2018, // #217 + 39, 6080, 6080, 4000, 4000, // #218 + 29, 6142, 6142, 910, 910, // #219 + 8, 6177, 6177, 577, 577, // #220 + 5, 6195, 6195, 1747, 1747, // #221 + 27, 6210, 6210, 2018, 2018, // #222 + 39, 6272, 6272, 4000, 4000, // #223 + 29, 6334, 6334, 910, 910, // #224 + 1, 6378, 6378, 842, 842, // #225 + 1, 6396, 6396, 1228, 1228, // #226 + 1, 6412, 6412, 1228, 1228, // #227 + 1, 6422, 6422, 2390, 2390, // #228 + 8, 6433, 6433, 577, 577, // #229 + 5, 6451, 6451, 1747, 1747, // #230 + 27, 6466, 6466, 2018, 2018, // #231 + 39, 6528, 6528, 4000, 4000, // #232 + 29, 6590, 6590, 910, 910, // #233 + 8, 6625, 6625, 577, 577, // #234 + 5, 6643, 6643, 1747, 1747, // #235 + 27, 6658, 6658, 2018, 2018, // #236 + 39, 6720, 6720, 4000, 4000, // #237 + 29, 6782, 6782, 910, 910, // #238 + 1, 6826, 6826, 842, 842, // #239 + 1, 6844, 6844, 1228, 1228, // #240 + 4, 6861, 6861, 3053, 3053, // #241 + 16, 6914, 6914, 3058, 3058, // #242 + 14, 6947, 6947, 3075, 3075, // #243 + 10, 6978, 6978, 3090, 3090, // #244 + 10, 6992, 6992, 3104, 3104, // #245 + 13, 7021, 7021, 3101, 3101, // #246 + 18, 7051, 7051, 3115, 3115, // #247 + 15, 7118, 7118, 3134, 3134, // #248 + 10, 7150, 7150, 3150, 3150, // #249 + 14, 7177, 7177, 3161, 3161, // #250 + 16, 7208, 7208, 3176, 3176, // #251 + 4, 7245, 7245, 3053, 3053, // #252 + 16, 7298, 7298, 3058, 3058, // #253 + 14, 7331, 7331, 3075, 3075, // #254 + 10, 7362, 7362, 3090, 3090, // #255 + 10, 7376, 7376, 3104, 3104, // #256 + 13, 7405, 7405, 3101, 3101, // #257 + 18, 7435, 7435, 3115, 3115, // #258 + 15, 7502, 7502, 3134, 3134, // #259 + 10, 7534, 7534, 3150, 3150, // #260 + 14, 7561, 7561, 3161, 3161, // #261 + 16, 7592, 7592, 3176, 3176, // #262 + 7, 7618, 7618, 898, 898, // #263 + 7, 7634, 7634, 2450, 2450, // #264 + 9, 7649, 7649, 2225, 2225, // #265 + 4, 7677, 7677, 2333, 2333, // #266 + 9, 7697, 7697, 2401, 2401, // #267 + 6, 7725, 7725, 2477, 2477, // #268 + 6, 7757, 7757, 2477, 2477, // #269 + 6, 7789, 7789, 2477, 2477, // #270 + 6, 7821, 7821, 2477, 2477, // #271 + 14, 7845, 7845, 2469, 2469, // #272 + 4, 7874, 7874, 306, 306, // #273 + 10, 7893, 7893, 3333, 3333, // #274 + 14, 7909, 7909, 3349, 3349, // #275 + 11, 7945, 7945, 3369, 3369, // #276 + 12, 8012, 8012, 3388, 3388, // #277 + 13, 8032, 8032, 3408, 3408, // #278 + 12, 8051, 8051, 3427, 3427, // #279 + 12, 8070, 8070, 3446, 3446, // #280 + 12, 8106, 8106, 3466, 3466, // #281 + 19, 8128, 8128, 3488, 3488, // #282 + 23, 8161, 8161, 3521, 3521, // #283 + 13, 8206, 8206, 3550, 3550, // #284 + 7, 8224, 8224, 3568, 3568, // #285 + 16, 8242, 8242, 3586, 3586, // #286 + 15, 8285, 8285, 3613, 3613, // #287 + 3, 8305, 8305, 3633, 3633, // #288 + 9, 8332, 8332, 3644, 3644, // #289 + 17, 8352, 8352, 3664, 3664, // #290 + 17, 8391, 8391, 3687, 3687, // #291 + 15, 8419, 8419, 3715, 3715, // #292 + 12, 8448, 8448, 3744, 3744, // #293 + 5, 8474, 8474, 3770, 3770, // #294 + 7, 8495, 8495, 3791, 3791, // #295 + 19, 8516, 8516, 3812, 3812, // #296 + 4, 8553, 8553, 3545, 3545, // #297 + 5, 8562, 8562, 3858, 3858, // #298 + 9, 8586, 8586, 3882, 3882, // #299 + 12, 8612, 8612, 2484, 2484, // #300 + 3, 8648, 8648, 1432, 1432, // #301 + 1, 8659, 8659, 2339, 2339, // #302 + 17, 8678, 8678, 2502, 2502, // #303 + 15, 8712, 8712, 2520, 2520, // #304 + 4, 8748, 8748, 3132, 3132, // #305 + 10, 8772, 8772, 756, 756, // #306 + 11, 8786, 8786, 642, 642, // #307 + 2, 8804, 8804, 3428, 3428, // #308 + 3, 8824, 8824, 3000, 3000, // #309 + 10, 8836, 8836, 756, 756, // #310 + 1, 8858, 8858, 1226, 1226, // #311 + 1, 8876, 8876, 1228, 1228, // #312 + 17, 8893, 8893, 749, 749, // #313 + 3, 8920, 8920, 3000, 3000, // #314 + 3, 8936, 8936, 3000, 3000, // #315 + 11, 8952, 8952, 2536, 2536, // #316 + 7, 9034, 9034, 2618, 2618, // #317 + 14, 9091, 9091, 2675, 2675, // #318 + 8, 9128, 9128, 2376, 2376, // #319 + 6, 9159, 9159, 2663, 2663, // #320 + 8, 9176, 9176, 2376, 2376, // #321 + 6, 9207, 9207, 2663, 2663, // #322 + 1, 9226, 9226, 1226, 1226, // #323 + 1, 9244, 9244, 1228, 1228, // #324 + 10, 9252, 9252, 756, 756, // #325 + 17, 9277, 9277, 749, 749, // #326 + 3, 9304, 9304, 3000, 3000, // #327 + 3, 9320, 9320, 3000, 3000, // #328 + 3, 9336, 9336, 3000, 3000, // #329 + 3, 9352, 9352, 3000, 3000, // #330 + 1, 9368, 9368, 632, 632, // #331 + 3, 9390, 9390, 2734, 2734, // #332 + 8, 9408, 9408, 320, 320, // #333 + 40, 9472, 9472, 3376, 3376, // #334 + 47, 9548, 9548, 3420, 3420, // #335 + 8, 9612, 9612, 2796, 2796, // #336 + 10, 9636, 9636, 756, 756, // #337 + 11, 9650, 9650, 642, 642, // #338 + 3, 9672, 9672, 3000, 3000, // #339 + 3, 9688, 9688, 3000, 3000, // #340 + 3, 9704, 9704, 3000, 3000, // #341 + 3, 9720, 9720, 3000, 3000, // #342 + 5, 9728, 9728, 1520, 1520, // #343 + 4, 9753, 9753, 2729, 2729, // #344 + 10, 9765, 9765, 2805, 2805, // #345 + 40, 9792, 9792, 3376, 3376, // #346 + 47, 9868, 9868, 3420, 3420, // #347 + 10, 9920, 9920, 2816, 2816, // #348 + 5, 9999, 9999, 2751, 2751, // #349 + 5, 10026, 10026, 2762, 2762, // #350 + 9, 10032, 10032, 2736, 2736, // #351 + 10, 10058, 10058, 2746, 2746, // #352 + 10, 10085, 10085, 2757, 2757, // #353 + 9, 10100, 10100, 2644, 2644, // #354 + 16, 10112, 10112, 2608, 2608, // #355 + 18, 10145, 10145, 2625, 2625, // #356 + 7, 10176, 10176, 2768, 2768, // #357 + 8, 10200, 10200, 2776, 2776, // #358 + 14, 10227, 10227, 3491, 3491, // #359 + 3, 10258, 10258, 3506, 3506, // #360 + 22, 10280, 10280, 3400, 3400, // #361 + 6, 10308, 10308, 3636, 3636, // #362 + 3, 10324, 10324, 3620, 3620, // #363 + 6, 10344, 10344, 3624, 3624, // #364 + 20, 10361, 10361, 665, 665, // #365 + 33, 10444, 10444, 3068, 3068, // #366 + 29, 10481, 10481, 3137, 3137, // #367 + 21, 10521, 10521, 3545, 3545, // #368 + 20, 10575, 10575, 3567, 3567, // #369 + 20, 10639, 10639, 3567, 3567, // #370 + 16, 10674, 10674, 1218, 1218, // #371 + 20, 10707, 10707, 1235, 1235, // #372 + 20, 10739, 10739, 1235, 1235, // #373 + 14, 10769, 10769, 1569, 1569, // #374 + 8, 10784, 10784, 1584, 1584, // #375 + 6, 10809, 10809, 1593, 1593, // #376 + 9, 10821, 10821, 1605, 1605, // #377 + 6, 10847, 10847, 1615, 1615, // #378 + 11, 10870, 10870, 1622, 1622, // #379 + 20, 10950, 10950, 3510, 3510, // #380 + 20, 10987, 10987, 3531, 3531, // #381 + 12, 11008, 11008, 3552, 3552, // #382 + 14, 11025, 11025, 1569, 1569, // #383 + 8, 11040, 11040, 1584, 1584, // #384 + 4, 11056, 11056, 1600, 1600, // #385 + 9, 11077, 11077, 1605, 1605, // #386 + 6, 11103, 11103, 1615, 1615, // #387 + 12, 11133, 11133, 3565, 3565, // #388 + 23, 11210, 11210, 3578, 3578, // #389 + 16, 11250, 11250, 3602, 3602, // #390 + 14, 11281, 11281, 1569, 1569, // #391 + 8, 11296, 11296, 1584, 1584, // #392 + 4, 11312, 11312, 1600, 1600, // #393 + 9, 11333, 11333, 1605, 1605, // #394 + 6, 11359, 11359, 1615, 1615, // #395 + 10, 11380, 11380, 756, 756, // #396 + 17, 11405, 11405, 749, 749, // #397 + 3, 11432, 11432, 3000, 3000, // #398 + 3, 11448, 11448, 3000, 3000, // #399 + 3, 11464, 11464, 3000, 3000, // #400 + 3, 11480, 11480, 3000, 3000, // #401 + 1, 11488, 11488, 1856, 1856, // #402 + 3, 11518, 11518, 2734, 2734, // #403 + 8, 11536, 11536, 320, 320, // #404 + 40, 11584, 11584, 3376, 3376, // #405 + 47, 11660, 11660, 3420, 3420, // #406 + 1, 11712, 11712, 1856, 1856, // #407 + 3, 11742, 11742, 2734, 2734, // #408 + 8, 11760, 11760, 320, 320, // #409 + 40, 11776, 11776, 3376, 3376, // #410 + 47, 11852, 11852, 3420, 3420, // #411 + 11, 11904, 11904, 528, 528, // #412 + 6, 11927, 11927, 2999, 2999, // #413 + 16, 11983, 11983, 1023, 1023, // #414 + 40, 12032, 12032, 3376, 3376, // #415 + 47, 12108, 12108, 3420, 3420, // #416 + 11, 12168, 12168, 3640, 3640, // #417 + 6, 12199, 12199, 2999, 2999, // #418 + 19, 12208, 12208, 1040, 1040, // #419 + 40, 12288, 12288, 3376, 3376, // #420 + 47, 12364, 12364, 3420, 3420, // #421 + 8, 12416, 12416, 144, 144, // #422 + 6, 12439, 12439, 2999, 2999, // #423 + 16, 12449, 12449, 849, 849, // #424 + 40, 12480, 12480, 3376, 3376, // #425 + 47, 12556, 12556, 3420, 3420, // #426 + 11, 12616, 12616, 1176, 1176, // #427 + 6, 12647, 12647, 2999, 2999, // #428 + 18, 12658, 12658, 866, 866, // #429 + 40, 12736, 12736, 3376, 3376, // #430 + 47, 12812, 12812, 3420, 3420, // #431 + 11, 12864, 12864, 64, 64, // #432 + 6, 12887, 12887, 2999, 2999, // #433 + 16, 12933, 12933, 885, 885, // #434 + 40, 12992, 12992, 3376, 3376, // #435 + 47, 13068, 13068, 3420, 3420, // #436 + 8, 13128, 13128, 104, 104, // #437 + 6, 13159, 13159, 2999, 2999, // #438 + 14, 13174, 13174, 902, 902, // #439 + 40, 13248, 13248, 3376, 3376, // #440 + 47, 13324, 13324, 3420, 3420, // #441 + 9, 13384, 13384, 184, 184, // #442 + 6, 13415, 13415, 2999, 2999, // #443 + 17, 13429, 13429, 917, 917, // #444 + 40, 13504, 13504, 3376, 3376, // #445 + 47, 13580, 13580, 3420, 3420, // #446 + 7, 13640, 13640, 1496, 1496, // #447 + 6, 13655, 13655, 2999, 2999, // #448 + 18, 13671, 13671, 935, 935, // #449 + 40, 13696, 13696, 3376, 3376, // #450 + 47, 13772, 13772, 3420, 3420, // #451 + 9, 13832, 13832, 1656, 1656, // #452 + 6, 13863, 13863, 2999, 2999, // #453 + 17, 13898, 13898, 954, 954, // #454 + 40, 13952, 13952, 3376, 3376, // #455 + 47, 14028, 14028, 3420, 3420, // #456 + 8, 14088, 14088, 3832, 3832, // #457 + 6, 14119, 14119, 2999, 2999, // #458 + 18, 14140, 14140, 972, 972, // #459 + 40, 14208, 14208, 3376, 3376, // #460 + 47, 14284, 14284, 3420, 3420, // #461 + 11, 14344, 14344, 24, 24, // #462 + 6, 14375, 14375, 2999, 2999, // #463 + 15, 14399, 14399, 991, 991, // #464 + 40, 14464, 14464, 3376, 3376, // #465 + 47, 14540, 14540, 3420, 3420, // #466 + 10, 14592, 14592, 4080, 4080, // #467 + 6, 14615, 14615, 2999, 2999, // #468 + 15, 14639, 14639, 1007, 1007, // #469 + 40, 14656, 14656, 3376, 3376, // #470 + 47, 14732, 14732, 3420, 3420, // #471 + 1, 14784, 14784, 1856, 1856, // #472 + 3, 14814, 14814, 2734, 2734, // #473 + 8, 14832, 14832, 320, 320, // #474 + 40, 14848, 14848, 3376, 3376, // #475 + 47, 14924, 14924, 3420, 3420, // #476 + 11, 14976, 14976, 528, 528, // #477 + 6, 14999, 14999, 2999, 2999, // #478 + 16, 15055, 15055, 1023, 1023, // #479 + 40, 15104, 15104, 3376, 3376, // #480 + 47, 15180, 15180, 3420, 3420, // #481 + 11, 15240, 15240, 3640, 3640, // #482 + 6, 15271, 15271, 2999, 2999, // #483 + 19, 15280, 15280, 1040, 1040, // #484 + 40, 15360, 15360, 3376, 3376, // #485 + 47, 15436, 15436, 3420, 3420, // #486 + 8, 15488, 15488, 144, 144, // #487 + 6, 15511, 15511, 2999, 2999, // #488 + 16, 15521, 15521, 849, 849, // #489 + 40, 15552, 15552, 3376, 3376, // #490 + 47, 15628, 15628, 3420, 3420, // #491 + 11, 15688, 15688, 1176, 1176, // #492 + 6, 15719, 15719, 2999, 2999, // #493 + 18, 15730, 15730, 866, 866, // #494 + 40, 15808, 15808, 3376, 3376, // #495 + 47, 15884, 15884, 3420, 3420, // #496 + 11, 15936, 15936, 64, 64, // #497 + 6, 15959, 15959, 2999, 2999, // #498 + 16, 16005, 16005, 885, 885, // #499 + 40, 16064, 16064, 3376, 3376, // #500 + 47, 16140, 16140, 3420, 3420, // #501 + 8, 16200, 16200, 104, 104, // #502 + 6, 16231, 16231, 2999, 2999, // #503 + 14, 16246, 16246, 902, 902, // #504 + 40, 16320, 16320, 3376, 3376, // #505 + 47, 16396, 16396, 3420, 3420, // #506 + 9, 16456, 16456, 184, 184, // #507 + 6, 16487, 16487, 2999, 2999, // #508 + 17, 16501, 16501, 917, 917, // #509 + 40, 16576, 16576, 3376, 3376, // #510 + 47, 16652, 16652, 3420, 3420, // #511 + 7, 16712, 16712, 1496, 1496, // #512 + 6, 16727, 16727, 2999, 2999, // #513 + 18, 16743, 16743, 935, 935, // #514 + 40, 16768, 16768, 3376, 3376, // #515 + 47, 16844, 16844, 3420, 3420, // #516 + 9, 16904, 16904, 1656, 1656, // #517 + 6, 16935, 16935, 2999, 2999, // #518 + 17, 16970, 16970, 954, 954, // #519 + 40, 17024, 17024, 3376, 3376, // #520 + 47, 17100, 17100, 3420, 3420, // #521 + 8, 17160, 17160, 3832, 3832, // #522 + 6, 17191, 17191, 2999, 2999, // #523 + 18, 17212, 17212, 972, 972, // #524 + 40, 17280, 17280, 3376, 3376, // #525 + 47, 17356, 17356, 3420, 3420, // #526 + 11, 17416, 17416, 24, 24, // #527 + 6, 17447, 17447, 2999, 2999, // #528 + 15, 17471, 17471, 991, 991, // #529 + 40, 17536, 17536, 3376, 3376, // #530 + 47, 17612, 17612, 3420, 3420, // #531 + 10, 17664, 17664, 4080, 4080, // #532 + 6, 17687, 17687, 2999, 2999, // #533 + 15, 17711, 17711, 1007, 1007, // #534 + 40, 17728, 17728, 3376, 3376, // #535 + 47, 17804, 17804, 3420, 3420, // #536 + 21, 17864, 17864, 712, 712, // #537 + 1, 17888, 17888, 976, 976, // #538 + 3, 17918, 17918, 2734, 2734, // #539 + 15, 17995, 17995, 763, 763, // #540 + 40, 18048, 18048, 3376, 3376, // #541 + 47, 18124, 18124, 3420, 3420, // #542 + 1, 18184, 18184, 3192, 3192, // #543 + 3, 18206, 18206, 2734, 2734, // #544 + 11, 18235, 18235, 779, 779, // #545 + 40, 18304, 18304, 3376, 3376, // #546 + 47, 18380, 18380, 3420, 3420, // #547 + 1, 18440, 18440, 3496, 3496, // #548 + 3, 18462, 18462, 2734, 2734, // #549 + 14, 18487, 18487, 791, 791, // #550 + 40, 18560, 18560, 3376, 3376, // #551 + 47, 18636, 18636, 3420, 3420, // #552 + 3, 18696, 18696, 824, 824, // #553 + 6, 18716, 18716, 2764, 2764, // #554 + 15, 18742, 18742, 806, 806, // #555 + 40, 18816, 18816, 3376, 3376, // #556 + 47, 18892, 18892, 3420, 3420, // #557 + 1, 18944, 18944, 3040, 3040, // #558 + 6, 18972, 18972, 2764, 2764, // #559 + 11, 19014, 19014, 822, 822, // #560 + 40, 19072, 19072, 3376, 3376, // #561 + 47, 19148, 19148, 3420, 3420, // #562 + 4, 19200, 19200, 3344, 3344, // #563 + 6, 19228, 19228, 2764, 2764, // #564 + 14, 19250, 19250, 834, 834, // #565 + 40, 19328, 19328, 3376, 3376, // #566 + 47, 19404, 19404, 3420, 3420, // #567 + 1, 19456, 19456, 1856, 1856, // #568 + 3, 19486, 19486, 2734, 2734, // #569 + 8, 19504, 19504, 320, 320, // #570 + 40, 19520, 19520, 3376, 3376, // #571 + 47, 19596, 19596, 3420, 3420, // #572 + 11, 19648, 19648, 528, 528, // #573 + 6, 19671, 19671, 2999, 2999, // #574 + 16, 19727, 19727, 1023, 1023, // #575 + 40, 19776, 19776, 3376, 3376, // #576 + 47, 19852, 19852, 3420, 3420, // #577 + 11, 19912, 19912, 3640, 3640, // #578 + 6, 19943, 19943, 2999, 2999, // #579 + 19, 19952, 19952, 1040, 1040, // #580 + 40, 20032, 20032, 3376, 3376, // #581 + 47, 20108, 20108, 3420, 3420, // #582 + 8, 20160, 20160, 144, 144, // #583 + 6, 20183, 20183, 2999, 2999, // #584 + 16, 20193, 20193, 849, 849, // #585 + 40, 20224, 20224, 3376, 3376, // #586 + 47, 20300, 20300, 3420, 3420, // #587 + 11, 20360, 20360, 1176, 1176, // #588 + 6, 20391, 20391, 2999, 2999, // #589 + 18, 20402, 20402, 866, 866, // #590 + 40, 20480, 20480, 3376, 3376, // #591 + 47, 20556, 20556, 3420, 3420, // #592 + 11, 20608, 20608, 64, 64, // #593 + 6, 20631, 20631, 2999, 2999, // #594 + 16, 20677, 20677, 885, 885, // #595 + 40, 20736, 20736, 3376, 3376, // #596 + 47, 20812, 20812, 3420, 3420, // #597 + 8, 20872, 20872, 104, 104, // #598 + 6, 20903, 20903, 2999, 2999, // #599 + 14, 20918, 20918, 902, 902, // #600 + 40, 20992, 20992, 3376, 3376, // #601 + 47, 21068, 21068, 3420, 3420, // #602 + 9, 21128, 21128, 184, 184, // #603 + 6, 21159, 21159, 2999, 2999, // #604 + 17, 21173, 21173, 917, 917, // #605 + 40, 21248, 21248, 3376, 3376, // #606 + 47, 21324, 21324, 3420, 3420, // #607 + 7, 21384, 21384, 1496, 1496, // #608 + 6, 21399, 21399, 2999, 2999, // #609 + 18, 21415, 21415, 935, 935, // #610 + 40, 21440, 21440, 3376, 3376, // #611 + 47, 21516, 21516, 3420, 3420, // #612 + 9, 21576, 21576, 1656, 1656, // #613 + 6, 21607, 21607, 2999, 2999, // #614 + 17, 21642, 21642, 954, 954, // #615 + 40, 21696, 21696, 3376, 3376, // #616 + 47, 21772, 21772, 3420, 3420, // #617 + 8, 21832, 21832, 3832, 3832, // #618 + 6, 21863, 21863, 2999, 2999, // #619 + 18, 21884, 21884, 972, 972, // #620 + 40, 21952, 21952, 3376, 3376, // #621 + 47, 22028, 22028, 3420, 3420, // #622 + 11, 22088, 22088, 24, 24, // #623 + 6, 22119, 22119, 2999, 2999, // #624 + 15, 22143, 22143, 991, 991, // #625 + 40, 22208, 22208, 3376, 3376, // #626 + 47, 22284, 22284, 3420, 3420, // #627 + 10, 22336, 22336, 4080, 4080, // #628 + 6, 22359, 22359, 2999, 2999, // #629 + 15, 22383, 22383, 1007, 1007, // #630 + 40, 22400, 22400, 3376, 3376, // #631 + 47, 22476, 22476, 3420, 3420, // #632 + 21, 22542, 22542, 734, 734, // #633 + 4, 22584, 22584, 648, 648, // #634 + 4, 22601, 22601, 2729, 2729, // #635 + 6, 22612, 22612, 756, 756, // #636 + 40, 22656, 22656, 3376, 3376, // #637 + 47, 22732, 22732, 3420, 3420, // #638 + 1, 22792, 22792, 472, 472, // #639 + 3, 22814, 22814, 2734, 2734, // #640 + 15, 22859, 22859, 763, 763, // #641 + 40, 22912, 22912, 3376, 3376, // #642 + 47, 22988, 22988, 3420, 3420, // #643 + 1, 23040, 23040, 192, 192, // #644 + 3, 23070, 23070, 2734, 2734, // #645 + 11, 23099, 23099, 779, 779, // #646 + 40, 23168, 23168, 3376, 3376, // #647 + 47, 23244, 23244, 3420, 3420, // #648 + 1, 23296, 23296, 496, 496, // #649 + 3, 23326, 23326, 2734, 2734, // #650 + 14, 23351, 23351, 791, 791, // #651 + 40, 23424, 23424, 3376, 3376, // #652 + 47, 23500, 23500, 3420, 3420, // #653 + 1, 23552, 23552, 320, 320, // #654 + 6, 23580, 23580, 2764, 2764, // #655 + 15, 23606, 23606, 806, 806, // #656 + 40, 23680, 23680, 3376, 3376, // #657 + 47, 23756, 23756, 3420, 3420, // #658 + 5, 23816, 23816, 40, 40, // #659 + 6, 23836, 23836, 2764, 2764, // #660 + 11, 23878, 23878, 822, 822, // #661 + 40, 23936, 23936, 3376, 3376, // #662 + 47, 24012, 24012, 3420, 3420, // #663 + 3, 24072, 24072, 344, 344, // #664 + 6, 24092, 24092, 2764, 2764, // #665 + 14, 24114, 24114, 834, 834, // #666 + 40, 24192, 24192, 3376, 3376, // #667 + 47, 24268, 24268, 3420, 3420, // #668 + 11, 24328, 24328, 1384, 1384, // #669 + 6, 24359, 24359, 2999, 2999, // #670 + 5, 24383, 24383, 2735, 2735, // #671 + 40, 24448, 24448, 3376, 3376, // #672 + 47, 24524, 24524, 3420, 3420, // #673 + 1, 24576, 24576, 1856, 1856, // #674 + 3, 24606, 24606, 2734, 2734, // #675 + 8, 24624, 24624, 320, 320, // #676 + 40, 24640, 24640, 3376, 3376, // #677 + 47, 24716, 24716, 3420, 3420, // #678 + 11, 24768, 24768, 528, 528, // #679 + 6, 24791, 24791, 2999, 2999, // #680 + 16, 24847, 24847, 1023, 1023, // #681 + 40, 24896, 24896, 3376, 3376, // #682 + 47, 24972, 24972, 3420, 3420, // #683 + 11, 25032, 25032, 3640, 3640, // #684 + 6, 25063, 25063, 2999, 2999, // #685 + 19, 25072, 25072, 1040, 1040, // #686 + 40, 25152, 25152, 3376, 3376, // #687 + 47, 25228, 25228, 3420, 3420, // #688 + 8, 25280, 25280, 144, 144, // #689 + 6, 25303, 25303, 2999, 2999, // #690 + 16, 25313, 25313, 849, 849, // #691 + 40, 25344, 25344, 3376, 3376, // #692 + 47, 25420, 25420, 3420, 3420, // #693 + 11, 25480, 25480, 1176, 1176, // #694 + 6, 25511, 25511, 2999, 2999, // #695 + 18, 25522, 25522, 866, 866, // #696 + 40, 25600, 25600, 3376, 3376, // #697 + 47, 25676, 25676, 3420, 3420, // #698 + 11, 25728, 25728, 64, 64, // #699 + 6, 25751, 25751, 2999, 2999, // #700 + 16, 25797, 25797, 885, 885, // #701 + 40, 25856, 25856, 3376, 3376, // #702 + 47, 25932, 25932, 3420, 3420, // #703 + 8, 25992, 25992, 104, 104, // #704 + 6, 26023, 26023, 2999, 2999, // #705 + 14, 26038, 26038, 902, 902, // #706 + 40, 26112, 26112, 3376, 3376, // #707 + 47, 26188, 26188, 3420, 3420, // #708 + 9, 26248, 26248, 184, 184, // #709 + 6, 26279, 26279, 2999, 2999, // #710 + 17, 26293, 26293, 917, 917, // #711 + 40, 26368, 26368, 3376, 3376, // #712 + 47, 26444, 26444, 3420, 3420, // #713 + 7, 26504, 26504, 1496, 1496, // #714 + 6, 26519, 26519, 2999, 2999, // #715 + 18, 26535, 26535, 935, 935, // #716 + 40, 26560, 26560, 3376, 3376, // #717 + 47, 26636, 26636, 3420, 3420, // #718 + 9, 26696, 26696, 1656, 1656, // #719 + 6, 26727, 26727, 2999, 2999, // #720 + 17, 26762, 26762, 954, 954, // #721 + 40, 26816, 26816, 3376, 3376, // #722 + 47, 26892, 26892, 3420, 3420, // #723 + 8, 26952, 26952, 3832, 3832, // #724 + 6, 26983, 26983, 2999, 2999, // #725 + 18, 27004, 27004, 972, 972, // #726 + 40, 27072, 27072, 3376, 3376, // #727 + 47, 27148, 27148, 3420, 3420, // #728 + 11, 27208, 27208, 24, 24, // #729 + 6, 27239, 27239, 2999, 2999, // #730 + 15, 27263, 27263, 991, 991, // #731 + 40, 27328, 27328, 3376, 3376, // #732 + 47, 27404, 27404, 3420, 3420, // #733 + 10, 27456, 27456, 4080, 4080, // #734 + 6, 27479, 27479, 2999, 2999, // #735 + 15, 27503, 27503, 1007, 1007, // #736 + 40, 27520, 27520, 3376, 3376, // #737 + 47, 27596, 27596, 3420, 3420, // #738 + 1, 27648, 27648, 1856, 1856, // #739 + 3, 27678, 27678, 2734, 2734, // #740 + 8, 27696, 27696, 320, 320, // #741 + 40, 27712, 27712, 3376, 3376, // #742 + 47, 27788, 27788, 3420, 3420, // #743 + 11, 27840, 27840, 528, 528, // #744 + 6, 27863, 27863, 2999, 2999, // #745 + 16, 27919, 27919, 1023, 1023, // #746 + 40, 27968, 27968, 3376, 3376, // #747 + 47, 28044, 28044, 3420, 3420, // #748 + 11, 28104, 28104, 3640, 3640, // #749 + 6, 28135, 28135, 2999, 2999, // #750 + 19, 28144, 28144, 1040, 1040, // #751 + 40, 28224, 28224, 3376, 3376, // #752 + 47, 28300, 28300, 3420, 3420, // #753 + 8, 28352, 28352, 144, 144, // #754 + 6, 28375, 28375, 2999, 2999, // #755 + 16, 28385, 28385, 849, 849, // #756 + 40, 28416, 28416, 3376, 3376, // #757 + 47, 28492, 28492, 3420, 3420, // #758 + 11, 28552, 28552, 1176, 1176, // #759 + 6, 28583, 28583, 2999, 2999, // #760 + 18, 28594, 28594, 866, 866, // #761 + 40, 28672, 28672, 3376, 3376, // #762 + 47, 28748, 28748, 3420, 3420, // #763 + 11, 28800, 28800, 64, 64, // #764 + 6, 28823, 28823, 2999, 2999, // #765 + 16, 28869, 28869, 885, 885, // #766 + 40, 28928, 28928, 3376, 3376, // #767 + 47, 29004, 29004, 3420, 3420, // #768 + 8, 29064, 29064, 104, 104, // #769 + 6, 29095, 29095, 2999, 2999, // #770 + 14, 29110, 29110, 902, 902, // #771 + 40, 29184, 29184, 3376, 3376, // #772 + 47, 29260, 29260, 3420, 3420, // #773 + 9, 29320, 29320, 184, 184, // #774 + 6, 29351, 29351, 2999, 2999, // #775 + 17, 29365, 29365, 917, 917, // #776 + 40, 29440, 29440, 3376, 3376, // #777 + 47, 29516, 29516, 3420, 3420, // #778 + 7, 29576, 29576, 1496, 1496, // #779 + 6, 29591, 29591, 2999, 2999, // #780 + 18, 29607, 29607, 935, 935, // #781 + 40, 29632, 29632, 3376, 3376, // #782 + 47, 29708, 29708, 3420, 3420, // #783 + 9, 29768, 29768, 1656, 1656, // #784 + 6, 29799, 29799, 2999, 2999, // #785 + 17, 29834, 29834, 954, 954, // #786 + 40, 29888, 29888, 3376, 3376, // #787 + 47, 29964, 29964, 3420, 3420, // #788 + 8, 30024, 30024, 3832, 3832, // #789 + 6, 30055, 30055, 2999, 2999, // #790 + 18, 30076, 30076, 972, 972, // #791 + 40, 30144, 30144, 3376, 3376, // #792 + 47, 30220, 30220, 3420, 3420, // #793 + 11, 30280, 30280, 24, 24, // #794 + 6, 30311, 30311, 2999, 2999, // #795 + 15, 30335, 30335, 991, 991, // #796 + 40, 30400, 30400, 3376, 3376, // #797 + 47, 30476, 30476, 3420, 3420, // #798 + 10, 30528, 30528, 4080, 4080, // #799 + 6, 30551, 30551, 2999, 2999, // #800 + 15, 30575, 30575, 1007, 1007, // #801 + 40, 30592, 30592, 3376, 3376, // #802 + 47, 30668, 30668, 3420, 3420, // #803 + 21, 30728, 30728, 712, 712, // #804 + 1, 30752, 30752, 976, 976, // #805 + 3, 30782, 30782, 2734, 2734, // #806 + 15, 30859, 30859, 763, 763, // #807 + 40, 30912, 30912, 3376, 3376, // #808 + 47, 30988, 30988, 3420, 3420, // #809 + 1, 31048, 31048, 3192, 3192, // #810 + 3, 31070, 31070, 2734, 2734, // #811 + 11, 31099, 31099, 779, 779, // #812 + 40, 31168, 31168, 3376, 3376, // #813 + 47, 31244, 31244, 3420, 3420, // #814 + 1, 31304, 31304, 3496, 3496, // #815 + 3, 31326, 31326, 2734, 2734, // #816 + 14, 31351, 31351, 791, 791, // #817 + 40, 31424, 31424, 3376, 3376, // #818 + 47, 31500, 31500, 3420, 3420, // #819 + 3, 31560, 31560, 824, 824, // #820 + 6, 31580, 31580, 2764, 2764, // #821 + 15, 31606, 31606, 806, 806, // #822 + 40, 31680, 31680, 3376, 3376, // #823 + 47, 31756, 31756, 3420, 3420, // #824 + 1, 31808, 31808, 3040, 3040, // #825 + 6, 31836, 31836, 2764, 2764, // #826 + 11, 31878, 31878, 822, 822, // #827 + 40, 31936, 31936, 3376, 3376, // #828 + 47, 32012, 32012, 3420, 3420, // #829 + 4, 32064, 32064, 3344, 3344, // #830 + 6, 32092, 32092, 2764, 2764, // #831 + 14, 32114, 32114, 834, 834, // #832 + 40, 32192, 32192, 3376, 3376, // #833 + 47, 32268, 32268, 3420, 3420, // #834 + 1, 32320, 32320, 1856, 1856, // #835 + 3, 32350, 32350, 2734, 2734, // #836 + 8, 32368, 32368, 320, 320, // #837 + 40, 32384, 32384, 3376, 3376, // #838 + 47, 32460, 32460, 3420, 3420, // #839 + 11, 32512, 32512, 528, 528, // #840 + 6, 32535, 32535, 2999, 2999, // #841 + 16, 32591, 32591, 1023, 1023, // #842 + 40, 32640, 32640, 3376, 3376, // #843 + 47, 32716, 32716, 3420, 3420, // #844 + 11, 32776, 32776, 3640, 3640, // #845 + 6, 32807, 32807, 2999, 2999, // #846 + 19, 32816, 32816, 1040, 1040, // #847 + 40, 32896, 32896, 3376, 3376, // #848 + 47, 32972, 32972, 3420, 3420, // #849 + 8, 33024, 33024, 144, 144, // #850 + 6, 33047, 33047, 2999, 2999, // #851 + 16, 33057, 33057, 849, 849, // #852 + 40, 33088, 33088, 3376, 3376, // #853 + 47, 33164, 33164, 3420, 3420, // #854 + 11, 33224, 33224, 1176, 1176, // #855 + 6, 33255, 33255, 2999, 2999, // #856 + 18, 33266, 33266, 866, 866, // #857 + 40, 33344, 33344, 3376, 3376, // #858 + 47, 33420, 33420, 3420, 3420, // #859 + 11, 33472, 33472, 64, 64, // #860 + 6, 33495, 33495, 2999, 2999, // #861 + 16, 33541, 33541, 885, 885, // #862 + 40, 33600, 33600, 3376, 3376, // #863 + 47, 33676, 33676, 3420, 3420, // #864 + 8, 33736, 33736, 104, 104, // #865 + 6, 33767, 33767, 2999, 2999, // #866 + 14, 33782, 33782, 902, 902, // #867 + 40, 33856, 33856, 3376, 3376, // #868 + 47, 33932, 33932, 3420, 3420, // #869 + 9, 33992, 33992, 184, 184, // #870 + 6, 34023, 34023, 2999, 2999, // #871 + 17, 34037, 34037, 917, 917, // #872 + 40, 34112, 34112, 3376, 3376, // #873 + 47, 34188, 34188, 3420, 3420, // #874 + 7, 34248, 34248, 1496, 1496, // #875 + 6, 34263, 34263, 2999, 2999, // #876 + 18, 34279, 34279, 935, 935, // #877 + 40, 34304, 34304, 3376, 3376, // #878 + 47, 34380, 34380, 3420, 3420, // #879 + 9, 34440, 34440, 1656, 1656, // #880 + 6, 34471, 34471, 2999, 2999, // #881 + 17, 34506, 34506, 954, 954, // #882 + 40, 34560, 34560, 3376, 3376, // #883 + 47, 34636, 34636, 3420, 3420, // #884 + 8, 34696, 34696, 3832, 3832, // #885 + 6, 34727, 34727, 2999, 2999, // #886 + 18, 34748, 34748, 972, 972, // #887 + 40, 34816, 34816, 3376, 3376, // #888 + 47, 34892, 34892, 3420, 3420, // #889 + 11, 34952, 34952, 24, 24, // #890 + 6, 34983, 34983, 2999, 2999, // #891 + 15, 35007, 35007, 991, 991, // #892 + 40, 35072, 35072, 3376, 3376, // #893 + 47, 35148, 35148, 3420, 3420, // #894 + 10, 35200, 35200, 4080, 4080, // #895 + 6, 35223, 35223, 2999, 2999, // #896 + 15, 35247, 35247, 1007, 1007, // #897 + 40, 35264, 35264, 3376, 3376, // #898 + 47, 35340, 35340, 3420, 3420, // #899 + 21, 35406, 35406, 734, 734, // #900 + 4, 35448, 35448, 648, 648, // #901 + 4, 35465, 35465, 2729, 2729, // #902 + 6, 35476, 35476, 756, 756, // #903 + 40, 35520, 35520, 3376, 3376, // #904 + 47, 35596, 35596, 3420, 3420, // #905 + 1, 35656, 35656, 472, 472, // #906 + 3, 35678, 35678, 2734, 2734, // #907 + 15, 35723, 35723, 763, 763, // #908 + 40, 35776, 35776, 3376, 3376, // #909 + 47, 35852, 35852, 3420, 3420, // #910 + 1, 35904, 35904, 192, 192, // #911 + 3, 35934, 35934, 2734, 2734, // #912 + 11, 35963, 35963, 779, 779, // #913 + 40, 36032, 36032, 3376, 3376, // #914 + 47, 36108, 36108, 3420, 3420, // #915 + 1, 36160, 36160, 496, 496, // #916 + 3, 36190, 36190, 2734, 2734, // #917 + 14, 36215, 36215, 791, 791, // #918 + 40, 36288, 36288, 3376, 3376, // #919 + 47, 36364, 36364, 3420, 3420, // #920 + 1, 36416, 36416, 320, 320, // #921 + 6, 36444, 36444, 2764, 2764, // #922 + 15, 36470, 36470, 806, 806, // #923 + 40, 36544, 36544, 3376, 3376, // #924 + 47, 36620, 36620, 3420, 3420, // #925 + 5, 36680, 36680, 40, 40, // #926 + 6, 36700, 36700, 2764, 2764, // #927 + 11, 36742, 36742, 822, 822, // #928 + 40, 36800, 36800, 3376, 3376, // #929 + 47, 36876, 36876, 3420, 3420, // #930 + 3, 36936, 36936, 344, 344, // #931 + 6, 36956, 36956, 2764, 2764, // #932 + 14, 36978, 36978, 834, 834, // #933 + 40, 37056, 37056, 3376, 3376, // #934 + 47, 37132, 37132, 3420, 3420, // #935 + 11, 37192, 37192, 1384, 1384, // #936 + 6, 37223, 37223, 2999, 2999, // #937 + 5, 37247, 37247, 2735, 2735, // #938 + 40, 37312, 37312, 3376, 3376, // #939 + 47, 37388, 37388, 3420, 3420, // #940 + 1, 37440, 37440, 1856, 1856, // #941 + 3, 37470, 37470, 2734, 2734, // #942 + 8, 37488, 37488, 320, 320, // #943 + 40, 37504, 37504, 3376, 3376, // #944 + 47, 37580, 37580, 3420, 3420, // #945 + 11, 37632, 37632, 528, 528, // #946 + 6, 37655, 37655, 2999, 2999, // #947 + 16, 37711, 37711, 1023, 1023, // #948 + 40, 37760, 37760, 3376, 3376, // #949 + 47, 37836, 37836, 3420, 3420, // #950 + 11, 37896, 37896, 3640, 3640, // #951 + 6, 37927, 37927, 2999, 2999, // #952 + 19, 37936, 37936, 1040, 1040, // #953 + 40, 38016, 38016, 3376, 3376, // #954 + 47, 38092, 38092, 3420, 3420, // #955 + 8, 38144, 38144, 144, 144, // #956 + 6, 38167, 38167, 2999, 2999, // #957 + 16, 38177, 38177, 849, 849, // #958 + 40, 38208, 38208, 3376, 3376, // #959 + 47, 38284, 38284, 3420, 3420, // #960 + 11, 38344, 38344, 1176, 1176, // #961 + 6, 38375, 38375, 2999, 2999, // #962 + 18, 38386, 38386, 866, 866, // #963 + 40, 38464, 38464, 3376, 3376, // #964 + 47, 38540, 38540, 3420, 3420, // #965 + 11, 38592, 38592, 64, 64, // #966 + 6, 38615, 38615, 2999, 2999, // #967 + 16, 38661, 38661, 885, 885, // #968 + 40, 38720, 38720, 3376, 3376, // #969 + 47, 38796, 38796, 3420, 3420, // #970 + 8, 38856, 38856, 104, 104, // #971 + 6, 38887, 38887, 2999, 2999, // #972 + 14, 38902, 38902, 902, 902, // #973 + 40, 38976, 38976, 3376, 3376, // #974 + 47, 39052, 39052, 3420, 3420, // #975 + 9, 39112, 39112, 184, 184, // #976 + 6, 39143, 39143, 2999, 2999, // #977 + 17, 39157, 39157, 917, 917, // #978 + 40, 39232, 39232, 3376, 3376, // #979 + 47, 39308, 39308, 3420, 3420, // #980 + 7, 39368, 39368, 1496, 1496, // #981 + 6, 39383, 39383, 2999, 2999, // #982 + 18, 39399, 39399, 935, 935, // #983 + 40, 39424, 39424, 3376, 3376, // #984 + 47, 39500, 39500, 3420, 3420, // #985 + 9, 39560, 39560, 1656, 1656, // #986 + 6, 39591, 39591, 2999, 2999, // #987 + 17, 39626, 39626, 954, 954, // #988 + 40, 39680, 39680, 3376, 3376, // #989 + 47, 39756, 39756, 3420, 3420, // #990 + 8, 39816, 39816, 3832, 3832, // #991 + 6, 39847, 39847, 2999, 2999, // #992 + 18, 39868, 39868, 972, 972, // #993 + 40, 39936, 39936, 3376, 3376, // #994 + 47, 40012, 40012, 3420, 3420, // #995 + 11, 40072, 40072, 24, 24, // #996 + 6, 40103, 40103, 2999, 2999, // #997 + 15, 40127, 40127, 991, 991, // #998 + 40, 40192, 40192, 3376, 3376, // #999 + 47, 40268, 40268, 3420, 3420, // #1000 + 10, 40320, 40320, 4080, 4080, // #1001 + 6, 40343, 40343, 2999, 2999, // #1002 + 15, 40367, 40367, 1007, 1007, // #1003 + 40, 40384, 40384, 3376, 3376, // #1004 + 47, 40460, 40460, 3420, 3420, // #1005 + 1, 40512, 40512, 1856, 1856, // #1006 + 3, 40542, 40542, 2734, 2734, // #1007 + 8, 40560, 40560, 320, 320, // #1008 + 40, 40576, 40576, 3376, 3376, // #1009 + 47, 40652, 40652, 3420, 3420, // #1010 + 11, 40704, 40704, 528, 528, // #1011 + 6, 40727, 40727, 2999, 2999, // #1012 + 16, 40783, 40783, 1023, 1023, // #1013 + 40, 40832, 40832, 3376, 3376, // #1014 + 47, 40908, 40908, 3420, 3420, // #1015 + 11, 40968, 40968, 3640, 3640, // #1016 + 6, 40999, 40999, 2999, 2999, // #1017 + 19, 41008, 41008, 1040, 1040, // #1018 + 40, 41088, 41088, 3376, 3376, // #1019 + 47, 41164, 41164, 3420, 3420, // #1020 + 8, 41216, 41216, 144, 144, // #1021 + 6, 41239, 41239, 2999, 2999, // #1022 + 16, 41249, 41249, 849, 849, // #1023 + 40, 41280, 41280, 3376, 3376, // #1024 + 47, 41356, 41356, 3420, 3420, // #1025 + 11, 41416, 41416, 1176, 1176, // #1026 + 6, 41447, 41447, 2999, 2999, // #1027 + 18, 41458, 41458, 866, 866, // #1028 + 40, 41536, 41536, 3376, 3376, // #1029 + 47, 41612, 41612, 3420, 3420, // #1030 + 11, 41664, 41664, 64, 64, // #1031 + 6, 41687, 41687, 2999, 2999, // #1032 + 16, 41733, 41733, 885, 885, // #1033 + 40, 41792, 41792, 3376, 3376, // #1034 + 47, 41868, 41868, 3420, 3420, // #1035 + 8, 41928, 41928, 104, 104, // #1036 + 6, 41959, 41959, 2999, 2999, // #1037 + 14, 41974, 41974, 902, 902, // #1038 + 40, 42048, 42048, 3376, 3376, // #1039 + 47, 42124, 42124, 3420, 3420, // #1040 + 9, 42184, 42184, 184, 184, // #1041 + 6, 42215, 42215, 2999, 2999, // #1042 + 17, 42229, 42229, 917, 917, // #1043 + 40, 42304, 42304, 3376, 3376, // #1044 + 47, 42380, 42380, 3420, 3420, // #1045 + 7, 42440, 42440, 1496, 1496, // #1046 + 6, 42455, 42455, 2999, 2999, // #1047 + 18, 42471, 42471, 935, 935, // #1048 + 40, 42496, 42496, 3376, 3376, // #1049 + 47, 42572, 42572, 3420, 3420, // #1050 + 9, 42632, 42632, 1656, 1656, // #1051 + 6, 42663, 42663, 2999, 2999, // #1052 + 17, 42698, 42698, 954, 954, // #1053 + 40, 42752, 42752, 3376, 3376, // #1054 + 47, 42828, 42828, 3420, 3420, // #1055 + 8, 42888, 42888, 3832, 3832, // #1056 + 6, 42919, 42919, 2999, 2999, // #1057 + 18, 42940, 42940, 972, 972, // #1058 + 40, 43008, 43008, 3376, 3376, // #1059 + 47, 43084, 43084, 3420, 3420, // #1060 + 11, 43144, 43144, 24, 24, // #1061 + 6, 43175, 43175, 2999, 2999, // #1062 + 15, 43199, 43199, 991, 991, // #1063 + 40, 43264, 43264, 3376, 3376, // #1064 + 47, 43340, 43340, 3420, 3420, // #1065 + 10, 43392, 43392, 4080, 4080, // #1066 + 6, 43415, 43415, 2999, 2999, // #1067 + 15, 43439, 43439, 1007, 1007, // #1068 + 40, 43456, 43456, 3376, 3376, // #1069 + 47, 43532, 43532, 3420, 3420, // #1070 + 21, 43592, 43592, 712, 712, // #1071 + 1, 43616, 43616, 976, 976, // #1072 + 3, 43646, 43646, 2734, 2734, // #1073 + 15, 43723, 43723, 763, 763, // #1074 + 40, 43776, 43776, 3376, 3376, // #1075 + 47, 43852, 43852, 3420, 3420, // #1076 + 1, 43912, 43912, 3192, 3192, // #1077 + 3, 43934, 43934, 2734, 2734, // #1078 + 11, 43963, 43963, 779, 779, // #1079 + 40, 44032, 44032, 3376, 3376, // #1080 + 47, 44108, 44108, 3420, 3420, // #1081 + 1, 44168, 44168, 3496, 3496, // #1082 + 3, 44190, 44190, 2734, 2734, // #1083 + 14, 44215, 44215, 791, 791, // #1084 + 40, 44288, 44288, 3376, 3376, // #1085 + 47, 44364, 44364, 3420, 3420, // #1086 + 3, 44424, 44424, 824, 824, // #1087 + 6, 44444, 44444, 2764, 2764, // #1088 + 15, 44470, 44470, 806, 806, // #1089 + 40, 44544, 44544, 3376, 3376, // #1090 + 47, 44620, 44620, 3420, 3420, // #1091 + 1, 44672, 44672, 3040, 3040, // #1092 + 6, 44700, 44700, 2764, 2764, // #1093 + 11, 44742, 44742, 822, 822, // #1094 + 40, 44800, 44800, 3376, 3376, // #1095 + 47, 44876, 44876, 3420, 3420, // #1096 + 4, 44928, 44928, 3344, 3344, // #1097 + 6, 44956, 44956, 2764, 2764, // #1098 + 14, 44978, 44978, 834, 834, // #1099 + 40, 45056, 45056, 3376, 3376, // #1100 + 47, 45132, 45132, 3420, 3420, // #1101 + 1, 45184, 45184, 1856, 1856, // #1102 + 3, 45214, 45214, 2734, 2734, // #1103 + 8, 45232, 45232, 320, 320, // #1104 + 40, 45248, 45248, 3376, 3376, // #1105 + 47, 45324, 45324, 3420, 3420, // #1106 + 11, 45376, 45376, 528, 528, // #1107 + 6, 45399, 45399, 2999, 2999, // #1108 + 16, 45455, 45455, 1023, 1023, // #1109 + 40, 45504, 45504, 3376, 3376, // #1110 + 47, 45580, 45580, 3420, 3420, // #1111 + 11, 45640, 45640, 3640, 3640, // #1112 + 6, 45671, 45671, 2999, 2999, // #1113 + 19, 45680, 45680, 1040, 1040, // #1114 + 40, 45760, 45760, 3376, 3376, // #1115 + 47, 45836, 45836, 3420, 3420, // #1116 + 8, 45888, 45888, 144, 144, // #1117 + 6, 45911, 45911, 2999, 2999, // #1118 + 16, 45921, 45921, 849, 849, // #1119 + 40, 45952, 45952, 3376, 3376, // #1120 + 47, 46028, 46028, 3420, 3420, // #1121 + 11, 46088, 46088, 1176, 1176, // #1122 + 6, 46119, 46119, 2999, 2999, // #1123 + 18, 46130, 46130, 866, 866, // #1124 + 40, 46208, 46208, 3376, 3376, // #1125 + 47, 46284, 46284, 3420, 3420, // #1126 + 11, 46336, 46336, 64, 64, // #1127 + 6, 46359, 46359, 2999, 2999, // #1128 + 16, 46405, 46405, 885, 885, // #1129 + 40, 46464, 46464, 3376, 3376, // #1130 + 47, 46540, 46540, 3420, 3420, // #1131 + 8, 46600, 46600, 104, 104, // #1132 + 6, 46631, 46631, 2999, 2999, // #1133 + 14, 46646, 46646, 902, 902, // #1134 + 40, 46720, 46720, 3376, 3376, // #1135 + 47, 46796, 46796, 3420, 3420, // #1136 + 9, 46856, 46856, 184, 184, // #1137 + 6, 46887, 46887, 2999, 2999, // #1138 + 17, 46901, 46901, 917, 917, // #1139 + 40, 46976, 46976, 3376, 3376, // #1140 + 47, 47052, 47052, 3420, 3420, // #1141 + 7, 47112, 47112, 1496, 1496, // #1142 + 6, 47127, 47127, 2999, 2999, // #1143 + 18, 47143, 47143, 935, 935, // #1144 + 40, 47168, 47168, 3376, 3376, // #1145 + 47, 47244, 47244, 3420, 3420, // #1146 + 9, 47304, 47304, 1656, 1656, // #1147 + 6, 47335, 47335, 2999, 2999, // #1148 + 17, 47370, 47370, 954, 954, // #1149 + 40, 47424, 47424, 3376, 3376, // #1150 + 47, 47500, 47500, 3420, 3420, // #1151 + 8, 47560, 47560, 3832, 3832, // #1152 + 6, 47591, 47591, 2999, 2999, // #1153 + 18, 47612, 47612, 972, 972, // #1154 + 40, 47680, 47680, 3376, 3376, // #1155 + 47, 47756, 47756, 3420, 3420, // #1156 + 11, 47816, 47816, 24, 24, // #1157 + 6, 47847, 47847, 2999, 2999, // #1158 + 15, 47871, 47871, 991, 991, // #1159 + 40, 47936, 47936, 3376, 3376, // #1160 + 47, 48012, 48012, 3420, 3420, // #1161 + 10, 48064, 48064, 4080, 4080, // #1162 + 6, 48087, 48087, 2999, 2999, // #1163 + 15, 48111, 48111, 1007, 1007, // #1164 + 40, 48128, 48128, 3376, 3376, // #1165 + 47, 48204, 48204, 3420, 3420, // #1166 + 21, 48270, 48270, 734, 734, // #1167 + 4, 48312, 48312, 648, 648, // #1168 + 4, 48329, 48329, 2729, 2729, // #1169 + 6, 48340, 48340, 756, 756, // #1170 + 40, 48384, 48384, 3376, 3376, // #1171 + 47, 48460, 48460, 3420, 3420, // #1172 + 1, 48520, 48520, 472, 472, // #1173 + 3, 48542, 48542, 2734, 2734, // #1174 + 15, 48587, 48587, 763, 763, // #1175 + 40, 48640, 48640, 3376, 3376, // #1176 + 47, 48716, 48716, 3420, 3420, // #1177 + 1, 48768, 48768, 192, 192, // #1178 + 3, 48798, 48798, 2734, 2734, // #1179 + 11, 48827, 48827, 779, 779, // #1180 + 40, 48896, 48896, 3376, 3376, // #1181 + 47, 48972, 48972, 3420, 3420, // #1182 + 1, 49024, 49024, 496, 496, // #1183 + 3, 49054, 49054, 2734, 2734, // #1184 + 14, 49079, 49079, 791, 791, // #1185 + 40, 49152, 49152, 3376, 3376, // #1186 + 47, 49228, 49228, 3420, 3420, // #1187 + 1, 49280, 49280, 320, 320, // #1188 + 6, 49308, 49308, 2764, 2764, // #1189 + 15, 49334, 49334, 806, 806, // #1190 + 40, 49408, 49408, 3376, 3376, // #1191 + 47, 49484, 49484, 3420, 3420, // #1192 + 5, 49544, 49544, 40, 40, // #1193 + 6, 49564, 49564, 2764, 2764, // #1194 + 11, 49606, 49606, 822, 822, // #1195 + 40, 49664, 49664, 3376, 3376, // #1196 + 47, 49740, 49740, 3420, 3420, // #1197 + 3, 49800, 49800, 344, 344, // #1198 + 6, 49820, 49820, 2764, 2764, // #1199 + 14, 49842, 49842, 834, 834, // #1200 + 40, 49920, 49920, 3376, 3376, // #1201 + 47, 49996, 49996, 3420, 3420, // #1202 + 11, 50056, 50056, 1384, 1384, // #1203 + 6, 50087, 50087, 2999, 2999, // #1204 + 5, 50111, 50111, 2735, 2735, // #1205 + 40, 50176, 50176, 3376, 3376, // #1206 + 47, 50252, 50252, 3420, 3420, // #1207 + 8, 50316, 50316, 668, 668, // #1208 + 8, 50342, 50342, 806, 806, // #1209 + 10, 50356, 50356, 756, 756, // #1210 + 11, 50370, 50370, 642, 642, // #1211 + 3, 50392, 50392, 3000, 3000, // #1212 + 10, 50404, 50404, 756, 756, // #1213 + 17, 50429, 50429, 749, 749, // #1214 + 3, 50456, 50456, 3000, 3000, // #1215 + 3, 50472, 50472, 3000, 3000, // #1216 + 3, 50488, 50488, 3000, 3000, // #1217 + 3, 50504, 50504, 3000, 3000, // #1218 + 5, 50522, 50522, 3546, 3546, // #1219 + 12, 50531, 50531, 723, 723, // #1220 + 12, 50547, 50547, 723, 723, // #1221 + 12, 50560, 50560, 736, 736, // #1222 + 12, 50576, 50576, 736, 736, // #1223 + 14, 50605, 50605, 749, 749, // #1224 + 14, 50637, 50637, 749, 749, // #1225 + 13, 50700, 50700, 764, 764, // #1226 + 13, 50764, 50764, 764, 764, // #1227 + 18, 50794, 50794, 778, 778, // #1228 + 18, 50826, 50826, 778, 778, // #1229 + 23, 50861, 50861, 797, 797, // #1230 + 23, 50909, 50909, 797, 797, // #1231 + 24, 50949, 50949, 821, 821, // #1232 + 24, 51013, 51013, 821, 821, // #1233 + 26, 51054, 51054, 846, 846, // #1234 + 26, 51102, 51102, 846, 846, // #1235 + 7, 51145, 51145, 873, 873, // #1236 + 8, 51169, 51169, 881, 881, // #1237 + 9, 51210, 51210, 890, 890, // #1238 + 26, 51236, 51236, 900, 900, // #1239 + 26, 51268, 51268, 900, 900, // #1240 + 22, 51311, 51311, 927, 927, // #1241 + 22, 51359, 51359, 927, 927, // #1242 + 23, 51398, 51398, 950, 950, // #1243 + 23, 51462, 51462, 950, 950, // #1244 + 14, 51502, 51502, 974, 974, // #1245 + 14, 51534, 51534, 974, 974, // #1246 + 23, 51565, 51565, 989, 989, // #1247 + 23, 51613, 51613, 989, 989, // #1248 + 23, 51653, 51653, 1013, 1013, // #1249 + 23, 51717, 51717, 1013, 1013, // #1250 + 16, 51757, 51757, 1037, 1037, // #1251 + 16, 51789, 51789, 1037, 1037, // #1252 + 14, 51822, 51822, 1054, 1054, // #1253 + 14, 51854, 51854, 1054, 1054, // #1254 + 8, 51885, 51885, 1069, 1069, // #1255 + 4, 51910, 51910, 1078, 1078, // #1256 + 13, 51979, 51979, 1083, 1083, // #1257 + 13, 52043, 52043, 1083, 1083, // #1258 + 19, 52073, 52073, 1097, 1097, // #1259 + 19, 52105, 52105, 1097, 1097, // #1260 + 7, 52141, 52141, 1117, 1117, // #1261 + 9, 52165, 52165, 1125, 1125, // #1262 + 9, 52191, 52191, 1135, 1135, // #1263 + 17, 52233, 52233, 1145, 1145, // #1264 + 17, 52297, 52297, 1145, 1145, // #1265 + 15, 52331, 52331, 1163, 1163, // #1266 + 15, 52363, 52363, 1163, 1163, // #1267 + 9, 52395, 52395, 1179, 1179, // #1268 + 8, 52421, 52421, 1189, 1189, // #1269 + 8, 52446, 52446, 1198, 1198, // #1270 + 8, 52478, 52478, 1198, 1198, // #1271 + 17, 52551, 52551, 1207, 1207, // #1272 + 17, 52615, 52615, 1207, 1207, // #1273 + 5, 52640, 52640, 1296, 1296, // #1274 + 4, 52665, 52665, 2729, 2729, // #1275 + 17, 52672, 52672, 3424, 3424, // #1276 + 40, 52736, 52736, 3376, 3376, // #1277 + 47, 52812, 52812, 3420, 3420, // #1278 + 10, 52873, 52873, 1225, 1225, // #1279 + 7, 52900, 52900, 1236, 1236, // #1280 + 14, 52924, 52924, 1244, 1244, // #1281 + 14, 52956, 52956, 1244, 1244, // #1282 + 21, 52987, 52987, 1259, 1259, // #1283 + 21, 53035, 53035, 1259, 1259, // #1284 + 15, 53073, 53073, 1281, 1281, // #1285 + 15, 53105, 53105, 1281, 1281, // #1286 + 19, 53137, 53137, 1297, 1297, // #1287 + 19, 53169, 53169, 1297, 1297, // #1288 + 19, 53205, 53205, 1317, 1317, // #1289 + 19, 53237, 53237, 1317, 1317, // #1290 + 15, 53321, 53321, 1337, 1337, // #1291 + 15, 53385, 53385, 1337, 1337, // #1292 + 17, 53408, 53408, 1360, 1360, // #1293 + 17, 53440, 53440, 1360, 1360, // #1294 + 24, 53481, 53481, 1353, 1353, // #1295 + 24, 53529, 53529, 1353, 1353, // #1296 + 7, 53570, 53570, 1378, 1378, // #1297 + 7, 53594, 53594, 1386, 1386, // #1298 + 15, 53634, 53634, 1394, 1394, // #1299 + 20, 53666, 53666, 1410, 1410, // #1300 + 20, 53698, 53698, 1410, 1410, // #1301 + 7, 53735, 53735, 1431, 1431, // #1302 + 7, 53759, 53759, 1439, 1439, // #1303 + 15, 53783, 53783, 1447, 1447, // #1304 + 20, 53831, 53831, 1463, 1463, // #1305 + 20, 53895, 53895, 1463, 1463, // #1306 + 7, 53932, 53932, 1484, 1484, // #1307 + 7, 53956, 53956, 1492, 1492, // #1308 + 15, 53980, 53980, 1500, 1500, // #1309 + 17, 54012, 54012, 1516, 1516, // #1310 + 17, 54044, 54044, 1516, 1516, // #1311 + 28, 54094, 54094, 1534, 1534, // #1312 + 28, 54158, 54158, 1534, 1534, // #1313 + 25, 54203, 54203, 1563, 1563, // #1314 + 25, 54251, 54251, 1563, 1563, // #1315 + 25, 54341, 54341, 1589, 1589, // #1316 + 25, 54405, 54405, 1589, 1589, // #1317 + 25, 54447, 54447, 1615, 1615, // #1318 + 25, 54495, 54495, 1615, 1615, // #1319 + 36, 54536, 54536, 2056, 2056, // #1320 + 36, 54584, 54584, 2056, 2056, // #1321 + 22, 54633, 54633, 1641, 1641, // #1322 + 22, 54665, 54665, 1641, 1641, // #1323 + 33, 54720, 54720, 2096, 2096, // #1324 + 33, 54784, 54784, 2096, 2096, // #1325 + 29, 54832, 54832, 1664, 1664, // #1326 + 29, 54864, 54864, 1664, 1664, // #1327 + 27, 54910, 54910, 1694, 1694, // #1328 + 27, 54958, 54958, 1694, 1694, // #1329 + 31, 54996, 54996, 2132, 2132, // #1330 + 31, 55044, 55044, 2132, 2132, // #1331 + 5, 55088, 55088, 1168, 1168, // #1332 + 4, 55113, 55113, 2729, 2729, // #1333 + 31, 55128, 55128, 3480, 3480, // #1334 + 40, 55168, 55168, 3376, 3376, // #1335 + 47, 55244, 55244, 3420, 3420, // #1336 + 23, 55306, 55306, 1722, 1722, // #1337 + 23, 55370, 55370, 1722, 1722, // #1338 + 5, 55416, 55416, 1048, 1048, // #1339 + 4, 55433, 55433, 2729, 2729, // #1340 + 23, 55448, 55448, 3976, 3976, // #1341 + 40, 55488, 55488, 3376, 3376, // #1342 + 47, 55564, 55564, 3420, 3420, // #1343 + 26, 55618, 55618, 1746, 1746, // #1344 + 26, 55650, 55650, 1746, 1746, // #1345 + 5, 55680, 55680, 880, 880, // #1346 + 4, 55705, 55705, 2729, 2729, // #1347 + 26, 55712, 55712, 608, 608, // #1348 + 40, 55744, 55744, 3376, 3376, // #1349 + 47, 55820, 55820, 3420, 3420, // #1350 + 26, 55885, 55885, 1773, 1773, // #1351 + 26, 55949, 55949, 1773, 1773, // #1352 + 32, 56004, 56004, 2164, 2164, // #1353 + 32, 56068, 56068, 2164, 2164, // #1354 + 24, 56120, 56120, 1800, 1800, // #1355 + 24, 56168, 56168, 1800, 1800, // #1356 + 27, 56209, 56209, 1825, 1825, // #1357 + 27, 56241, 56241, 1825, 1825, // #1358 + 27, 56333, 56333, 1853, 1853, // #1359 + 27, 56397, 56397, 1853, 1853, // #1360 + 10, 56436, 56436, 756, 756, // #1361 + 17, 56461, 56461, 749, 749, // #1362 + 3, 56488, 56488, 3000, 3000, // #1363 + 3, 56504, 56504, 3000, 3000, // #1364 + 3, 56520, 56520, 3000, 3000, // #1365 + 3, 56536, 56536, 3000, 3000, // #1366 + 5, 56552, 56552, 3256, 3256, // #1367 + 4, 56569, 56569, 2729, 2729, // #1368 + 17, 56576, 56576, 1840, 1840, // #1369 + 40, 56640, 56640, 3376, 3376, // #1370 + 47, 56716, 56716, 3420, 3420, // #1371 + 5, 56776, 56776, 3128, 3128, // #1372 + 4, 56793, 56793, 2729, 2729, // #1373 + 31, 56840, 56840, 1832, 1832, // #1374 + 40, 56896, 56896, 3376, 3376, // #1375 + 47, 56972, 56972, 3420, 3420, // #1376 + 5, 57024, 57024, 3008, 3008, // #1377 + 4, 57049, 57049, 2729, 2729, // #1378 + 23, 57056, 57056, 2080, 2080, // #1379 + 40, 57088, 57088, 3376, 3376, // #1380 + 47, 57164, 57164, 3420, 3420, // #1381 + 5, 57224, 57224, 2840, 2840, // #1382 + 4, 57241, 57241, 2729, 2729, // #1383 + 26, 57248, 57248, 2272, 2272, // #1384 + 40, 57280, 57280, 3376, 3376, // #1385 + 47, 57356, 57356, 3420, 3420, // #1386 + 10, 57412, 57412, 756, 756, // #1387 + 17, 57437, 57437, 749, 749, // #1388 + 3, 57464, 57464, 3000, 3000, // #1389 + 3, 57480, 57480, 3000, 3000, // #1390 + 3, 57496, 57496, 3000, 3000, // #1391 + 3, 57512, 57512, 3000, 3000, // #1392 + 5, 57528, 57528, 2344, 2344, // #1393 + 4, 57545, 57545, 2729, 2729, // #1394 + 17, 57552, 57552, 3232, 3232, // #1395 + 40, 57600, 57600, 3376, 3376, // #1396 + 47, 57676, 57676, 3420, 3420, // #1397 + 5, 57736, 57736, 2216, 2216, // #1398 + 4, 57753, 57753, 2729, 2729, // #1399 + 31, 57768, 57768, 3224, 3224, // #1400 + 40, 57856, 57856, 3376, 3376, // #1401 + 47, 57932, 57932, 3420, 3420, // #1402 + 5, 57984, 57984, 2096, 2096, // #1403 + 4, 58009, 58009, 2729, 2729, // #1404 + 23, 58016, 58016, 3472, 3472, // #1405 + 40, 58048, 58048, 3376, 3376, // #1406 + 47, 58124, 58124, 3420, 3420, // #1407 + 5, 58184, 58184, 1928, 1928, // #1408 + 4, 58201, 58201, 2729, 2729, // #1409 + 26, 58208, 58208, 3664, 3664, // #1410 + 40, 58240, 58240, 3376, 3376, // #1411 + 47, 58316, 58316, 3420, 3420, // #1412 + 13, 58373, 58373, 405, 405, // #1413 + 1, 58409, 58409, 393, 393, // #1414 + 16, 58419, 58419, 419, 419, // #1415 + 1, 58457, 58457, 393, 393, // #1416 + 24, 58500, 58500, 436, 436, // #1417 + 1, 58537, 58537, 393, 393, // #1418 + 24, 58560, 58560, 368, 368, // #1419 + 1, 58601, 58601, 393, 393, // #1420 + 9, 58619, 58619, 395, 395, // #1421 + 1, 58649, 58649, 393, 393, // #1422 + 3, 58668, 58668, 1900, 1900, // #1423 + 13, 58672, 58672, 1920, 1920, // #1424 + 9, 58688, 58688, 832, 832, // #1425 + 5, 58713, 58713, 1433, 1433, // #1426 + 25, 58759, 58759, 631, 631, // #1427 + 1, 58810, 58810, 842, 842, // #1428 + 1, 58828, 58828, 1228, 1228, // #1429 + 1, 58842, 58842, 842, 842, // #1430 + 1, 58860, 58860, 1228, 1228, // #1431 + 1, 58876, 58876, 1228, 1228, // #1432 + 1, 58886, 58886, 2390, 2390, // #1433 + 1, 58906, 58906, 842, 842, // #1434 + 1, 58924, 58924, 1228, 1228, // #1435 + 1, 58940, 58940, 1228, 1228, // #1436 + 1, 58950, 58950, 2390, 2390, // #1437 + 8, 58961, 58961, 577, 577, // #1438 + 5, 58979, 58979, 1747, 1747, // #1439 + 27, 58994, 58994, 2018, 2018, // #1440 + 40, 59032, 59032, 2056, 2056, // #1441 + 29, 59102, 59102, 910, 910, // #1442 + 1, 59146, 59146, 842, 842, // #1443 + 1, 59164, 59164, 1228, 1228, // #1444 + 1, 59180, 59180, 1228, 1228, // #1445 + 1, 59190, 59190, 2390, 2390, // #1446 + 8, 59201, 59201, 577, 577, // #1447 + 5, 59219, 59219, 1747, 1747, // #1448 + 27, 59234, 59234, 2018, 2018, // #1449 + 40, 59272, 59272, 2056, 2056, // #1450 + 29, 59342, 59342, 910, 910, // #1451 + 1, 59386, 59386, 842, 842, // #1452 + 1, 59404, 59404, 1228, 1228, // #1453 + 1, 59408, 59408, 432, 432, // #1454 + 3, 59438, 59438, 2734, 2734, // #1455 + 8, 59456, 59456, 320, 320, // #1456 + 40, 59520, 59520, 3376, 3376, // #1457 + 47, 59596, 59596, 3420, 3420, // #1458 + 11, 59656, 59656, 1736, 1736, // #1459 + 6, 59687, 59687, 2999, 2999, // #1460 + 16, 59727, 59727, 1023, 1023, // #1461 + 40, 59776, 59776, 3376, 3376, // #1462 + 47, 59852, 59852, 3420, 3420, // #1463 + 11, 59904, 59904, 1696, 1696, // #1464 + 6, 59927, 59927, 2999, 2999, // #1465 + 19, 59936, 59936, 1040, 1040, // #1466 + 40, 59968, 59968, 3376, 3376, // #1467 + 47, 60044, 60044, 3420, 3420, // #1468 + 8, 60104, 60104, 1976, 1976, // #1469 + 6, 60135, 60135, 2999, 2999, // #1470 + 16, 60145, 60145, 849, 849, // #1471 + 40, 60224, 60224, 3376, 3376, // #1472 + 47, 60300, 60300, 3420, 3420, // #1473 + 10, 60360, 60360, 1896, 1896, // #1474 + 6, 60391, 60391, 2999, 2999, // #1475 + 18, 60402, 60402, 866, 866, // #1476 + 40, 60480, 60480, 3376, 3376, // #1477 + 47, 60556, 60556, 3420, 3420, // #1478 + 11, 60608, 60608, 1856, 1856, // #1479 + 6, 60631, 60631, 2999, 2999, // #1480 + 16, 60677, 60677, 885, 885, // #1481 + 40, 60736, 60736, 3376, 3376, // #1482 + 47, 60812, 60812, 3420, 3420, // #1483 + 8, 60864, 60864, 1936, 1936, // #1484 + 6, 60887, 60887, 2999, 2999, // #1485 + 14, 60902, 60902, 902, 902, // #1486 + 40, 60928, 60928, 3376, 3376, // #1487 + 47, 61004, 61004, 3420, 3420, // #1488 + 9, 61056, 61056, 2016, 2016, // #1489 + 6, 61079, 61079, 2999, 2999, // #1490 + 17, 61093, 61093, 917, 917, // #1491 + 40, 61120, 61120, 3376, 3376, // #1492 + 47, 61196, 61196, 3420, 3420, // #1493 + 7, 61248, 61248, 3616, 3616, // #1494 + 6, 61271, 61271, 2999, 2999, // #1495 + 18, 61287, 61287, 935, 935, // #1496 + 40, 61312, 61312, 3376, 3376, // #1497 + 47, 61388, 61388, 3420, 3420, // #1498 + 9, 61440, 61440, 3776, 3776, // #1499 + 6, 61463, 61463, 2999, 2999, // #1500 + 17, 61514, 61514, 954, 954, // #1501 + 40, 61568, 61568, 3376, 3376, // #1502 + 47, 61644, 61644, 3420, 3420, // #1503 + 8, 61704, 61704, 8, 8, // #1504 + 6, 61735, 61735, 2999, 2999, // #1505 + 18, 61756, 61756, 972, 972, // #1506 + 40, 61824, 61824, 3376, 3376, // #1507 + 47, 61900, 61900, 3420, 3420, // #1508 + 11, 61960, 61960, 1816, 1816, // #1509 + 6, 61991, 61991, 2999, 2999, // #1510 + 15, 62015, 62015, 991, 991, // #1511 + 40, 62080, 62080, 3376, 3376, // #1512 + 47, 62156, 62156, 3420, 3420, // #1513 + 10, 62208, 62208, 1776, 1776, // #1514 + 6, 62231, 62231, 2999, 2999, // #1515 + 15, 62255, 62255, 1007, 1007, // #1516 + 40, 62272, 62272, 3376, 3376, // #1517 + 47, 62348, 62348, 3420, 3420, // #1518 + 1, 62400, 62400, 432, 432, // #1519 + 3, 62430, 62430, 2734, 2734, // #1520 + 8, 62448, 62448, 320, 320, // #1521 + 40, 62464, 62464, 3376, 3376, // #1522 + 47, 62540, 62540, 3420, 3420, // #1523 + 11, 62592, 62592, 592, 592, // #1524 + 6, 62615, 62615, 2999, 2999, // #1525 + 16, 62671, 62671, 1023, 1023, // #1526 + 40, 62720, 62720, 3376, 3376, // #1527 + 47, 62796, 62796, 3420, 3420, // #1528 + 11, 62856, 62856, 1656, 1656, // #1529 + 6, 62887, 62887, 2999, 2999, // #1530 + 19, 62896, 62896, 1040, 1040, // #1531 + 40, 62976, 62976, 3376, 3376, // #1532 + 47, 63052, 63052, 3420, 3420, // #1533 + 8, 63104, 63104, 2256, 2256, // #1534 + 6, 63127, 63127, 2999, 2999, // #1535 + 16, 63137, 63137, 849, 849, // #1536 + 40, 63168, 63168, 3376, 3376, // #1537 + 47, 63244, 63244, 3420, 3420, // #1538 + 11, 63304, 63304, 1240, 1240, // #1539 + 6, 63335, 63335, 2999, 2999, // #1540 + 18, 63346, 63346, 866, 866, // #1541 + 40, 63424, 63424, 3376, 3376, // #1542 + 47, 63500, 63500, 3420, 3420, // #1543 + 11, 63552, 63552, 2176, 2176, // #1544 + 6, 63575, 63575, 2999, 2999, // #1545 + 16, 63621, 63621, 885, 885, // #1546 + 40, 63680, 63680, 3376, 3376, // #1547 + 47, 63756, 63756, 3420, 3420, // #1548 + 8, 63816, 63816, 2216, 2216, // #1549 + 6, 63847, 63847, 2999, 2999, // #1550 + 14, 63862, 63862, 902, 902, // #1551 + 40, 63936, 63936, 3376, 3376, // #1552 + 47, 64012, 64012, 3420, 3420, // #1553 + 9, 64072, 64072, 2296, 2296, // #1554 + 6, 64103, 64103, 2999, 2999, // #1555 + 17, 64117, 64117, 917, 917, // #1556 + 40, 64192, 64192, 3376, 3376, // #1557 + 47, 64268, 64268, 3420, 3420, // #1558 + 7, 64328, 64328, 1560, 1560, // #1559 + 6, 64343, 64343, 2999, 2999, // #1560 + 18, 64359, 64359, 935, 935, // #1561 + 40, 64384, 64384, 3376, 3376, // #1562 + 47, 64460, 64460, 3420, 3420, // #1563 + 9, 64520, 64520, 1720, 1720, // #1564 + 6, 64551, 64551, 2999, 2999, // #1565 + 17, 64586, 64586, 954, 954, // #1566 + 40, 64640, 64640, 3376, 3376, // #1567 + 47, 64716, 64716, 3420, 3420, // #1568 + 8, 64768, 64768, 2048, 2048, // #1569 + 6, 64791, 64791, 2999, 2999, // #1570 + 18, 64812, 64812, 972, 972, // #1571 + 40, 64832, 64832, 3376, 3376, // #1572 + 47, 64908, 64908, 3420, 3420, // #1573 + 11, 64968, 64968, 2136, 2136, // #1574 + 6, 64999, 64999, 2999, 2999, // #1575 + 15, 65023, 65023, 991, 991, // #1576 + 40, 65088, 65088, 3376, 3376, // #1577 + 47, 65164, 65164, 3420, 3420, // #1578 + 10, 65216, 65216, 2096, 2096, // #1579 + 6, 65239, 65239, 2999, 2999, // #1580 + 15, 65263, 65263, 1007, 1007, // #1581 + 40, 65280, 65280, 3376, 3376, // #1582 + 47, 65356, 65356, 3420, 3420, // #1583 + 1, 65408, 65408, 432, 432, // #1584 + 3, 65438, 65438, 2734, 2734, // #1585 + 8, 65456, 65456, 320, 320, // #1586 + 40, 65472, 65472, 3376, 3376, // #1587 + 47, 65548, 65548, 3420, 3420, // #1588 + 11, 65608, 65608, 2376, 2376, // #1589 + 6, 65639, 65639, 2999, 2999, // #1590 + 16, 65679, 65679, 1023, 1023, // #1591 + 40, 65728, 65728, 3376, 3376, // #1592 + 47, 65804, 65804, 3420, 3420, // #1593 + 11, 65864, 65864, 2056, 2056, // #1594 + 6, 65895, 65895, 2999, 2999, // #1595 + 19, 65904, 65904, 1040, 1040, // #1596 + 40, 65984, 65984, 3376, 3376, // #1597 + 47, 66060, 66060, 3420, 3420, // #1598 + 8, 66112, 66112, 2576, 2576, // #1599 + 6, 66135, 66135, 2999, 2999, // #1600 + 16, 66145, 66145, 849, 849, // #1601 + 40, 66176, 66176, 3376, 3376, // #1602 + 47, 66252, 66252, 3420, 3420, // #1603 + 11, 66304, 66304, 576, 576, // #1604 + 6, 66327, 66327, 2999, 2999, // #1605 + 18, 66338, 66338, 866, 866, // #1606 + 40, 66368, 66368, 3376, 3376, // #1607 + 47, 66444, 66444, 3420, 3420, // #1608 + 11, 66496, 66496, 2496, 2496, // #1609 + 6, 66519, 66519, 2999, 2999, // #1610 + 16, 66565, 66565, 885, 885, // #1611 + 40, 66624, 66624, 3376, 3376, // #1612 + 47, 66700, 66700, 3420, 3420, // #1613 + 8, 66760, 66760, 2536, 2536, // #1614 + 6, 66791, 66791, 2999, 2999, // #1615 + 14, 66806, 66806, 902, 902, // #1616 + 40, 66880, 66880, 3376, 3376, // #1617 + 47, 66956, 66956, 3420, 3420, // #1618 + 9, 67016, 67016, 2616, 2616, // #1619 + 6, 67047, 67047, 2999, 2999, // #1620 + 17, 67061, 67061, 917, 917, // #1621 + 40, 67136, 67136, 3376, 3376, // #1622 + 47, 67212, 67212, 3420, 3420, // #1623 + 7, 67264, 67264, 896, 896, // #1624 + 6, 67287, 67287, 2999, 2999, // #1625 + 18, 67303, 67303, 935, 935, // #1626 + 40, 67328, 67328, 3376, 3376, // #1627 + 47, 67404, 67404, 3420, 3420, // #1628 + 9, 67456, 67456, 1056, 1056, // #1629 + 6, 67479, 67479, 2999, 2999, // #1630 + 17, 67530, 67530, 954, 954, // #1631 + 40, 67584, 67584, 3376, 3376, // #1632 + 47, 67660, 67660, 3420, 3420, // #1633 + 8, 67720, 67720, 1384, 1384, // #1634 + 6, 67751, 67751, 2999, 2999, // #1635 + 18, 67772, 67772, 972, 972, // #1636 + 40, 67840, 67840, 3376, 3376, // #1637 + 47, 67916, 67916, 3420, 3420, // #1638 + 11, 67976, 67976, 2456, 2456, // #1639 + 6, 68007, 68007, 2999, 2999, // #1640 + 15, 68031, 68031, 991, 991, // #1641 + 40, 68096, 68096, 3376, 3376, // #1642 + 47, 68172, 68172, 3420, 3420, // #1643 + 10, 68224, 68224, 2416, 2416, // #1644 + 6, 68247, 68247, 2999, 2999, // #1645 + 15, 68271, 68271, 1007, 1007, // #1646 + 40, 68288, 68288, 3376, 3376, // #1647 + 47, 68364, 68364, 3420, 3420, // #1648 + 1, 68416, 68416, 432, 432, // #1649 + 3, 68446, 68446, 2734, 2734, // #1650 + 8, 68464, 68464, 320, 320, // #1651 + 40, 68480, 68480, 3376, 3376, // #1652 + 47, 68556, 68556, 3420, 3420, // #1653 + 11, 68608, 68608, 1056, 1056, // #1654 + 6, 68631, 68631, 2999, 2999, // #1655 + 16, 68687, 68687, 1023, 1023, // #1656 + 40, 68736, 68736, 3376, 3376, // #1657 + 47, 68812, 68812, 3420, 3420, // #1658 + 11, 68872, 68872, 1016, 1016, // #1659 + 6, 68903, 68903, 2999, 2999, // #1660 + 19, 68912, 68912, 1040, 1040, // #1661 + 40, 68992, 68992, 3376, 3376, // #1662 + 47, 69068, 69068, 3420, 3420, // #1663 + 8, 69120, 69120, 1296, 1296, // #1664 + 6, 69143, 69143, 2999, 2999, // #1665 + 16, 69153, 69153, 849, 849, // #1666 + 40, 69184, 69184, 3376, 3376, // #1667 + 47, 69260, 69260, 3420, 3420, // #1668 + 11, 69312, 69312, 1216, 1216, // #1669 + 6, 69335, 69335, 2999, 2999, // #1670 + 18, 69346, 69346, 866, 866, // #1671 + 40, 69376, 69376, 3376, 3376, // #1672 + 47, 69452, 69452, 3420, 3420, // #1673 + 11, 69512, 69512, 1176, 1176, // #1674 + 6, 69543, 69543, 2999, 2999, // #1675 + 16, 69573, 69573, 885, 885, // #1676 + 40, 69632, 69632, 3376, 3376, // #1677 + 47, 69708, 69708, 3420, 3420, // #1678 + 8, 69768, 69768, 1256, 1256, // #1679 + 6, 69799, 69799, 2999, 2999, // #1680 + 14, 69814, 69814, 902, 902, // #1681 + 40, 69888, 69888, 3376, 3376, // #1682 + 47, 69964, 69964, 3420, 3420, // #1683 + 9, 70024, 70024, 1336, 1336, // #1684 + 6, 70055, 70055, 2999, 2999, // #1685 + 17, 70069, 70069, 917, 917, // #1686 + 40, 70144, 70144, 3376, 3376, // #1687 + 47, 70220, 70220, 3420, 3420, // #1688 + 7, 70280, 70280, 3624, 3624, // #1689 + 6, 70295, 70295, 2999, 2999, // #1690 + 18, 70311, 70311, 935, 935, // #1691 + 40, 70336, 70336, 3376, 3376, // #1692 + 47, 70412, 70412, 3420, 3420, // #1693 + 9, 70472, 70472, 3784, 3784, // #1694 + 6, 70503, 70503, 2999, 2999, // #1695 + 17, 70538, 70538, 954, 954, // #1696 + 40, 70592, 70592, 3376, 3376, // #1697 + 47, 70668, 70668, 3420, 3420, // #1698 + 8, 70720, 70720, 16, 16, // #1699 + 6, 70743, 70743, 2999, 2999, // #1700 + 18, 70764, 70764, 972, 972, // #1701 + 40, 70784, 70784, 3376, 3376, // #1702 + 47, 70860, 70860, 3420, 3420, // #1703 + 11, 70912, 70912, 1136, 1136, // #1704 + 6, 70935, 70935, 2999, 2999, // #1705 + 15, 70959, 70959, 991, 991, // #1706 + 40, 70976, 70976, 3376, 3376, // #1707 + 47, 71052, 71052, 3420, 3420, // #1708 + 10, 71112, 71112, 1096, 1096, // #1709 + 6, 71143, 71143, 2999, 2999, // #1710 + 15, 71167, 71167, 1007, 1007, // #1711 + 40, 71232, 71232, 3376, 3376, // #1712 + 47, 71308, 71308, 3420, 3420, // #1713 + 4, 71368, 71368, 248, 248, // #1714 + 4, 71385, 71385, 2729, 2729, // #1715 + 6, 71396, 71396, 756, 756, // #1716 + 40, 71424, 71424, 3376, 3376, // #1717 + 47, 71500, 71500, 3420, 3420, // #1718 + 4, 71560, 71560, 3384, 3384, // #1719 + 4, 71577, 71577, 2729, 2729, // #1720 + 20, 71584, 71584, 1088, 1088, // #1721 + 40, 71616, 71616, 3376, 3376, // #1722 + 47, 71692, 71692, 3420, 3420, // #1723 + 1, 71744, 71744, 432, 432, // #1724 + 3, 71774, 71774, 2734, 2734, // #1725 + 8, 71792, 71792, 320, 320, // #1726 + 40, 71808, 71808, 3376, 3376, // #1727 + 47, 71884, 71884, 3420, 3420, // #1728 + 10, 71936, 71936, 1376, 1376, // #1729 + 6, 71959, 71959, 2999, 2999, // #1730 + 16, 72015, 72015, 1023, 1023, // #1731 + 40, 72064, 72064, 3376, 3376, // #1732 + 47, 72140, 72140, 3420, 3420, // #1733 + 10, 72192, 72192, 2128, 2128, // #1734 + 6, 72215, 72215, 2999, 2999, // #1735 + 19, 72224, 72224, 1040, 1040, // #1736 + 40, 72256, 72256, 3376, 3376, // #1737 + 47, 72332, 72332, 3420, 3420, // #1738 + 11, 72384, 72384, 240, 240, // #1739 + 6, 72407, 72407, 2999, 2999, // #1740 + 16, 72417, 72417, 849, 849, // #1741 + 40, 72448, 72448, 3376, 3376, // #1742 + 47, 72524, 72524, 3420, 3420, // #1743 + 11, 72576, 72576, 1536, 1536, // #1744 + 6, 72599, 72599, 2999, 2999, // #1745 + 18, 72610, 72610, 866, 866, // #1746 + 40, 72640, 72640, 3376, 3376, // #1747 + 47, 72716, 72716, 3420, 3420, // #1748 + 11, 72776, 72776, 1496, 1496, // #1749 + 6, 72807, 72807, 2999, 2999, // #1750 + 16, 72837, 72837, 885, 885, // #1751 + 40, 72896, 72896, 3376, 3376, // #1752 + 47, 72972, 72972, 3420, 3420, // #1753 + 8, 73032, 73032, 1576, 1576, // #1754 + 6, 73063, 73063, 2999, 2999, // #1755 + 14, 73078, 73078, 902, 902, // #1756 + 40, 73152, 73152, 3376, 3376, // #1757 + 47, 73228, 73228, 3420, 3420, // #1758 + 9, 73280, 73280, 1616, 1616, // #1759 + 6, 73303, 73303, 2999, 2999, // #1760 + 17, 73317, 73317, 917, 917, // #1761 + 40, 73344, 73344, 3376, 3376, // #1762 + 47, 73420, 73420, 3420, 3420, // #1763 + 9, 73472, 73472, 1568, 1568, // #1764 + 6, 73495, 73495, 2999, 2999, // #1765 + 18, 73511, 73511, 935, 935, // #1766 + 40, 73536, 73536, 3376, 3376, // #1767 + 47, 73612, 73612, 3420, 3420, // #1768 + 9, 73672, 73672, 1736, 1736, // #1769 + 6, 73703, 73703, 2999, 2999, // #1770 + 17, 73738, 73738, 954, 954, // #1771 + 40, 73792, 73792, 3376, 3376, // #1772 + 47, 73868, 73868, 3420, 3420, // #1773 + 11, 73928, 73928, 2072, 2072, // #1774 + 6, 73959, 73959, 2999, 2999, // #1775 + 18, 73980, 73980, 972, 972, // #1776 + 40, 74048, 74048, 3376, 3376, // #1777 + 47, 74124, 74124, 3420, 3420, // #1778 + 11, 74176, 74176, 1456, 1456, // #1779 + 6, 74199, 74199, 2999, 2999, // #1780 + 15, 74223, 74223, 991, 991, // #1781 + 40, 74240, 74240, 3376, 3376, // #1782 + 47, 74316, 74316, 3420, 3420, // #1783 + 10, 74376, 74376, 1416, 1416, // #1784 + 6, 74407, 74407, 2999, 2999, // #1785 + 15, 74431, 74431, 1007, 1007, // #1786 + 40, 74496, 74496, 3376, 3376, // #1787 + 47, 74572, 74572, 3420, 3420, // #1788 + 1, 74624, 74624, 432, 432, // #1789 + 3, 74654, 74654, 2734, 2734, // #1790 + 8, 74672, 74672, 320, 320, // #1791 + 40, 74688, 74688, 3376, 3376, // #1792 + 47, 74764, 74764, 3420, 3420, // #1793 + 11, 74816, 74816, 592, 592, // #1794 + 6, 74839, 74839, 2999, 2999, // #1795 + 16, 74895, 74895, 1023, 1023, // #1796 + 40, 74944, 74944, 3376, 3376, // #1797 + 47, 75020, 75020, 3420, 3420, // #1798 + 11, 75080, 75080, 1656, 1656, // #1799 + 6, 75111, 75111, 2999, 2999, // #1800 + 19, 75120, 75120, 1040, 1040, // #1801 + 40, 75200, 75200, 3376, 3376, // #1802 + 47, 75276, 75276, 3420, 3420, // #1803 + 8, 75328, 75328, 2256, 2256, // #1804 + 6, 75351, 75351, 2999, 2999, // #1805 + 16, 75361, 75361, 849, 849, // #1806 + 40, 75392, 75392, 3376, 3376, // #1807 + 47, 75468, 75468, 3420, 3420, // #1808 + 11, 75528, 75528, 1240, 1240, // #1809 + 6, 75559, 75559, 2999, 2999, // #1810 + 18, 75570, 75570, 866, 866, // #1811 + 40, 75648, 75648, 3376, 3376, // #1812 + 47, 75724, 75724, 3420, 3420, // #1813 + 11, 75776, 75776, 2176, 2176, // #1814 + 6, 75799, 75799, 2999, 2999, // #1815 + 16, 75845, 75845, 885, 885, // #1816 + 40, 75904, 75904, 3376, 3376, // #1817 + 47, 75980, 75980, 3420, 3420, // #1818 + 8, 76040, 76040, 2216, 2216, // #1819 + 6, 76071, 76071, 2999, 2999, // #1820 + 14, 76086, 76086, 902, 902, // #1821 + 40, 76160, 76160, 3376, 3376, // #1822 + 47, 76236, 76236, 3420, 3420, // #1823 + 9, 76296, 76296, 2296, 2296, // #1824 + 6, 76327, 76327, 2999, 2999, // #1825 + 17, 76341, 76341, 917, 917, // #1826 + 40, 76416, 76416, 3376, 3376, // #1827 + 47, 76492, 76492, 3420, 3420, // #1828 + 7, 76552, 76552, 1560, 1560, // #1829 + 6, 76567, 76567, 2999, 2999, // #1830 + 18, 76583, 76583, 935, 935, // #1831 + 40, 76608, 76608, 3376, 3376, // #1832 + 47, 76684, 76684, 3420, 3420, // #1833 + 9, 76744, 76744, 1720, 1720, // #1834 + 6, 76775, 76775, 2999, 2999, // #1835 + 17, 76810, 76810, 954, 954, // #1836 + 40, 76864, 76864, 3376, 3376, // #1837 + 47, 76940, 76940, 3420, 3420, // #1838 + 8, 76992, 76992, 2048, 2048, // #1839 + 6, 77015, 77015, 2999, 2999, // #1840 + 18, 77036, 77036, 972, 972, // #1841 + 40, 77056, 77056, 3376, 3376, // #1842 + 47, 77132, 77132, 3420, 3420, // #1843 + 11, 77192, 77192, 2136, 2136, // #1844 + 6, 77223, 77223, 2999, 2999, // #1845 + 15, 77247, 77247, 991, 991, // #1846 + 40, 77312, 77312, 3376, 3376, // #1847 + 47, 77388, 77388, 3420, 3420, // #1848 + 10, 77440, 77440, 2096, 2096, // #1849 + 6, 77463, 77463, 2999, 2999, // #1850 + 15, 77487, 77487, 1007, 1007, // #1851 + 40, 77504, 77504, 3376, 3376, // #1852 + 47, 77580, 77580, 3420, 3420, // #1853 + 21, 77646, 77646, 734, 734, // #1854 + 4, 77688, 77688, 248, 248, // #1855 + 4, 77705, 77705, 2729, 2729, // #1856 + 6, 77716, 77716, 756, 756, // #1857 + 40, 77760, 77760, 3376, 3376, // #1858 + 47, 77836, 77836, 3420, 3420, // #1859 + 1, 77888, 77888, 544, 544, // #1860 + 3, 77918, 77918, 2734, 2734, // #1861 + 15, 77963, 77963, 763, 763, // #1862 + 40, 78016, 78016, 3376, 3376, // #1863 + 47, 78092, 78092, 3420, 3420, // #1864 + 1, 78144, 78144, 3888, 3888, // #1865 + 3, 78174, 78174, 2734, 2734, // #1866 + 11, 78203, 78203, 779, 779, // #1867 + 40, 78272, 78272, 3376, 3376, // #1868 + 47, 78348, 78348, 3420, 3420, // #1869 + 1, 78400, 78400, 96, 96, // #1870 + 3, 78430, 78430, 2734, 2734, // #1871 + 14, 78455, 78455, 791, 791, // #1872 + 40, 78528, 78528, 3376, 3376, // #1873 + 47, 78604, 78604, 3420, 3420, // #1874 + 1, 78664, 78664, 392, 392, // #1875 + 6, 78684, 78684, 2764, 2764, // #1876 + 15, 78710, 78710, 806, 806, // #1877 + 40, 78784, 78784, 3376, 3376, // #1878 + 47, 78860, 78860, 3420, 3420, // #1879 + 5, 78920, 78920, 3736, 3736, // #1880 + 6, 78940, 78940, 2764, 2764, // #1881 + 11, 78982, 78982, 822, 822, // #1882 + 40, 79040, 79040, 3376, 3376, // #1883 + 47, 79116, 79116, 3420, 3420, // #1884 + 3, 79176, 79176, 4040, 4040, // #1885 + 6, 79196, 79196, 2764, 2764, // #1886 + 14, 79218, 79218, 834, 834, // #1887 + 40, 79296, 79296, 3376, 3376, // #1888 + 47, 79372, 79372, 3420, 3420, // #1889 + 11, 79424, 79424, 3584, 3584, // #1890 + 6, 79447, 79447, 2999, 2999, // #1891 + 5, 79471, 79471, 2735, 2735, // #1892 + 40, 79488, 79488, 3376, 3376, // #1893 + 47, 79564, 79564, 3420, 3420, // #1894 + 1, 79616, 79616, 432, 432, // #1895 + 3, 79646, 79646, 2734, 2734, // #1896 + 8, 79664, 79664, 320, 320, // #1897 + 40, 79680, 79680, 3376, 3376, // #1898 + 47, 79756, 79756, 3420, 3420, // #1899 + 11, 79816, 79816, 2376, 2376, // #1900 + 6, 79847, 79847, 2999, 2999, // #1901 + 16, 79887, 79887, 1023, 1023, // #1902 + 40, 79936, 79936, 3376, 3376, // #1903 + 47, 80012, 80012, 3420, 3420, // #1904 + 11, 80072, 80072, 2056, 2056, // #1905 + 6, 80103, 80103, 2999, 2999, // #1906 + 19, 80112, 80112, 1040, 1040, // #1907 + 40, 80192, 80192, 3376, 3376, // #1908 + 47, 80268, 80268, 3420, 3420, // #1909 + 8, 80320, 80320, 2576, 2576, // #1910 + 6, 80343, 80343, 2999, 2999, // #1911 + 16, 80353, 80353, 849, 849, // #1912 + 40, 80384, 80384, 3376, 3376, // #1913 + 47, 80460, 80460, 3420, 3420, // #1914 + 11, 80512, 80512, 576, 576, // #1915 + 6, 80535, 80535, 2999, 2999, // #1916 + 18, 80546, 80546, 866, 866, // #1917 + 40, 80576, 80576, 3376, 3376, // #1918 + 47, 80652, 80652, 3420, 3420, // #1919 + 11, 80704, 80704, 2496, 2496, // #1920 + 6, 80727, 80727, 2999, 2999, // #1921 + 16, 80773, 80773, 885, 885, // #1922 + 40, 80832, 80832, 3376, 3376, // #1923 + 47, 80908, 80908, 3420, 3420, // #1924 + 8, 80968, 80968, 2536, 2536, // #1925 + 6, 80999, 80999, 2999, 2999, // #1926 + 14, 81014, 81014, 902, 902, // #1927 + 40, 81088, 81088, 3376, 3376, // #1928 + 47, 81164, 81164, 3420, 3420, // #1929 + 9, 81224, 81224, 2616, 2616, // #1930 + 6, 81255, 81255, 2999, 2999, // #1931 + 17, 81269, 81269, 917, 917, // #1932 + 40, 81344, 81344, 3376, 3376, // #1933 + 47, 81420, 81420, 3420, 3420, // #1934 + 7, 81472, 81472, 896, 896, // #1935 + 6, 81495, 81495, 2999, 2999, // #1936 + 18, 81511, 81511, 935, 935, // #1937 + 40, 81536, 81536, 3376, 3376, // #1938 + 47, 81612, 81612, 3420, 3420, // #1939 + 9, 81664, 81664, 1056, 1056, // #1940 + 6, 81687, 81687, 2999, 2999, // #1941 + 17, 81738, 81738, 954, 954, // #1942 + 40, 81792, 81792, 3376, 3376, // #1943 + 47, 81868, 81868, 3420, 3420, // #1944 + 8, 81928, 81928, 1384, 1384, // #1945 + 6, 81959, 81959, 2999, 2999, // #1946 + 18, 81980, 81980, 972, 972, // #1947 + 40, 82048, 82048, 3376, 3376, // #1948 + 47, 82124, 82124, 3420, 3420, // #1949 + 11, 82184, 82184, 2456, 2456, // #1950 + 6, 82215, 82215, 2999, 2999, // #1951 + 15, 82239, 82239, 991, 991, // #1952 + 40, 82304, 82304, 3376, 3376, // #1953 + 47, 82380, 82380, 3420, 3420, // #1954 + 10, 82432, 82432, 2416, 2416, // #1955 + 6, 82455, 82455, 2999, 2999, // #1956 + 15, 82479, 82479, 1007, 1007, // #1957 + 40, 82496, 82496, 3376, 3376, // #1958 + 47, 82572, 82572, 3420, 3420, // #1959 + 21, 82638, 82638, 734, 734, // #1960 + 4, 82680, 82680, 248, 248, // #1961 + 4, 82697, 82697, 2729, 2729, // #1962 + 6, 82708, 82708, 756, 756, // #1963 + 40, 82752, 82752, 3376, 3376, // #1964 + 47, 82828, 82828, 3420, 3420, // #1965 + 1, 82880, 82880, 544, 544, // #1966 + 3, 82910, 82910, 2734, 2734, // #1967 + 15, 82955, 82955, 763, 763, // #1968 + 40, 83008, 83008, 3376, 3376, // #1969 + 47, 83084, 83084, 3420, 3420, // #1970 + 1, 83136, 83136, 3888, 3888, // #1971 + 3, 83166, 83166, 2734, 2734, // #1972 + 11, 83195, 83195, 779, 779, // #1973 + 40, 83264, 83264, 3376, 3376, // #1974 + 47, 83340, 83340, 3420, 3420, // #1975 + 1, 83392, 83392, 96, 96, // #1976 + 3, 83422, 83422, 2734, 2734, // #1977 + 14, 83447, 83447, 791, 791, // #1978 + 40, 83520, 83520, 3376, 3376, // #1979 + 47, 83596, 83596, 3420, 3420, // #1980 + 1, 83656, 83656, 392, 392, // #1981 + 6, 83676, 83676, 2764, 2764, // #1982 + 15, 83702, 83702, 806, 806, // #1983 + 40, 83776, 83776, 3376, 3376, // #1984 + 47, 83852, 83852, 3420, 3420, // #1985 + 5, 83912, 83912, 3736, 3736, // #1986 + 6, 83932, 83932, 2764, 2764, // #1987 + 11, 83974, 83974, 822, 822, // #1988 + 40, 84032, 84032, 3376, 3376, // #1989 + 47, 84108, 84108, 3420, 3420, // #1990 + 3, 84168, 84168, 4040, 4040, // #1991 + 6, 84188, 84188, 2764, 2764, // #1992 + 14, 84210, 84210, 834, 834, // #1993 + 40, 84288, 84288, 3376, 3376, // #1994 + 47, 84364, 84364, 3420, 3420, // #1995 + 11, 84416, 84416, 3584, 3584, // #1996 + 6, 84439, 84439, 2999, 2999, // #1997 + 5, 84463, 84463, 2735, 2735, // #1998 + 40, 84480, 84480, 3376, 3376, // #1999 + 47, 84556, 84556, 3420, 3420, // #2000 + 1, 84608, 84608, 432, 432, // #2001 + 3, 84638, 84638, 2734, 2734, // #2002 + 8, 84656, 84656, 320, 320, // #2003 + 40, 84672, 84672, 3376, 3376, // #2004 + 47, 84748, 84748, 3420, 3420, // #2005 + 11, 84800, 84800, 1056, 1056, // #2006 + 6, 84823, 84823, 2999, 2999, // #2007 + 16, 84879, 84879, 1023, 1023, // #2008 + 40, 84928, 84928, 3376, 3376, // #2009 + 47, 85004, 85004, 3420, 3420, // #2010 + 11, 85064, 85064, 1016, 1016, // #2011 + 6, 85095, 85095, 2999, 2999, // #2012 + 19, 85104, 85104, 1040, 1040, // #2013 + 40, 85184, 85184, 3376, 3376, // #2014 + 47, 85260, 85260, 3420, 3420, // #2015 + 8, 85312, 85312, 1296, 1296, // #2016 + 6, 85335, 85335, 2999, 2999, // #2017 + 16, 85345, 85345, 849, 849, // #2018 + 40, 85376, 85376, 3376, 3376, // #2019 + 47, 85452, 85452, 3420, 3420, // #2020 + 11, 85504, 85504, 1216, 1216, // #2021 + 6, 85527, 85527, 2999, 2999, // #2022 + 18, 85538, 85538, 866, 866, // #2023 + 40, 85568, 85568, 3376, 3376, // #2024 + 47, 85644, 85644, 3420, 3420, // #2025 + 11, 85704, 85704, 1176, 1176, // #2026 + 6, 85735, 85735, 2999, 2999, // #2027 + 16, 85765, 85765, 885, 885, // #2028 + 40, 85824, 85824, 3376, 3376, // #2029 + 47, 85900, 85900, 3420, 3420, // #2030 + 8, 85960, 85960, 1256, 1256, // #2031 + 6, 85991, 85991, 2999, 2999, // #2032 + 14, 86006, 86006, 902, 902, // #2033 + 40, 86080, 86080, 3376, 3376, // #2034 + 47, 86156, 86156, 3420, 3420, // #2035 + 9, 86216, 86216, 1336, 1336, // #2036 + 6, 86247, 86247, 2999, 2999, // #2037 + 17, 86261, 86261, 917, 917, // #2038 + 40, 86336, 86336, 3376, 3376, // #2039 + 47, 86412, 86412, 3420, 3420, // #2040 + 7, 86472, 86472, 3624, 3624, // #2041 + 6, 86487, 86487, 2999, 2999, // #2042 + 18, 86503, 86503, 935, 935, // #2043 + 40, 86528, 86528, 3376, 3376, // #2044 + 47, 86604, 86604, 3420, 3420, // #2045 + 9, 86664, 86664, 3784, 3784, // #2046 + 6, 86695, 86695, 2999, 2999, // #2047 + 17, 86730, 86730, 954, 954, // #2048 + 40, 86784, 86784, 3376, 3376, // #2049 + 47, 86860, 86860, 3420, 3420, // #2050 + 8, 86912, 86912, 16, 16, // #2051 + 6, 86935, 86935, 2999, 2999, // #2052 + 18, 86956, 86956, 972, 972, // #2053 + 40, 86976, 86976, 3376, 3376, // #2054 + 47, 87052, 87052, 3420, 3420, // #2055 + 11, 87104, 87104, 1136, 1136, // #2056 + 6, 87127, 87127, 2999, 2999, // #2057 + 15, 87151, 87151, 991, 991, // #2058 + 40, 87168, 87168, 3376, 3376, // #2059 + 47, 87244, 87244, 3420, 3420, // #2060 + 10, 87304, 87304, 1096, 1096, // #2061 + 6, 87335, 87335, 2999, 2999, // #2062 + 15, 87359, 87359, 1007, 1007, // #2063 + 40, 87424, 87424, 3376, 3376, // #2064 + 47, 87500, 87500, 3420, 3420, // #2065 + 21, 87566, 87566, 734, 734, // #2066 + 4, 87608, 87608, 248, 248, // #2067 + 4, 87625, 87625, 2729, 2729, // #2068 + 6, 87636, 87636, 756, 756, // #2069 + 40, 87680, 87680, 3376, 3376, // #2070 + 47, 87756, 87756, 3420, 3420, // #2071 + 1, 87808, 87808, 544, 544, // #2072 + 3, 87838, 87838, 2734, 2734, // #2073 + 15, 87883, 87883, 763, 763, // #2074 + 40, 87936, 87936, 3376, 3376, // #2075 + 47, 88012, 88012, 3420, 3420, // #2076 + 1, 88064, 88064, 3888, 3888, // #2077 + 3, 88094, 88094, 2734, 2734, // #2078 + 11, 88123, 88123, 779, 779, // #2079 + 40, 88192, 88192, 3376, 3376, // #2080 + 47, 88268, 88268, 3420, 3420, // #2081 + 1, 88320, 88320, 96, 96, // #2082 + 3, 88350, 88350, 2734, 2734, // #2083 + 14, 88375, 88375, 791, 791, // #2084 + 40, 88448, 88448, 3376, 3376, // #2085 + 47, 88524, 88524, 3420, 3420, // #2086 + 1, 88584, 88584, 392, 392, // #2087 + 6, 88604, 88604, 2764, 2764, // #2088 + 15, 88630, 88630, 806, 806, // #2089 + 40, 88704, 88704, 3376, 3376, // #2090 + 47, 88780, 88780, 3420, 3420, // #2091 + 5, 88840, 88840, 3736, 3736, // #2092 + 6, 88860, 88860, 2764, 2764, // #2093 + 11, 88902, 88902, 822, 822, // #2094 + 40, 88960, 88960, 3376, 3376, // #2095 + 47, 89036, 89036, 3420, 3420, // #2096 + 3, 89096, 89096, 4040, 4040, // #2097 + 6, 89116, 89116, 2764, 2764, // #2098 + 14, 89138, 89138, 834, 834, // #2099 + 40, 89216, 89216, 3376, 3376, // #2100 + 47, 89292, 89292, 3420, 3420, // #2101 + 11, 89344, 89344, 3584, 3584, // #2102 + 6, 89367, 89367, 2999, 2999, // #2103 + 5, 89391, 89391, 2735, 2735, // #2104 + 40, 89408, 89408, 3376, 3376, // #2105 + 47, 89484, 89484, 3420, 3420, // #2106 + 4, 89544, 89544, 248, 248, // #2107 + 4, 89561, 89561, 2729, 2729, // #2108 + 6, 89572, 89572, 756, 756, // #2109 + 40, 89600, 89600, 3376, 3376, // #2110 + 47, 89676, 89676, 3420, 3420, // #2111 + 4, 89736, 89736, 3384, 3384, // #2112 + 4, 89753, 89753, 2729, 2729, // #2113 + 20, 89760, 89760, 1088, 1088, // #2114 + 40, 89792, 89792, 3376, 3376, // #2115 + 47, 89868, 89868, 3420, 3420, // #2116 + 4, 89928, 89928, 248, 248, // #2117 + 4, 89945, 89945, 2729, 2729, // #2118 + 6, 89956, 89956, 756, 756, // #2119 + 40, 89984, 89984, 3376, 3376, // #2120 + 47, 90060, 90060, 3420, 3420, // #2121 + 4, 90120, 90120, 3384, 3384, // #2122 + 4, 90137, 90137, 2729, 2729, // #2123 + 20, 90144, 90144, 1088, 1088, // #2124 + 40, 90176, 90176, 3376, 3376, // #2125 + 47, 90252, 90252, 3420, 3420, // #2126 + 1, 90304, 90304, 432, 432, // #2127 + 3, 90334, 90334, 2734, 2734, // #2128 + 8, 90352, 90352, 320, 320, // #2129 + 40, 90368, 90368, 3376, 3376, // #2130 + 47, 90444, 90444, 3420, 3420, // #2131 + 10, 90496, 90496, 1376, 1376, // #2132 + 6, 90519, 90519, 2999, 2999, // #2133 + 16, 90575, 90575, 1023, 1023, // #2134 + 40, 90624, 90624, 3376, 3376, // #2135 + 47, 90700, 90700, 3420, 3420, // #2136 + 10, 90752, 90752, 2128, 2128, // #2137 + 6, 90775, 90775, 2999, 2999, // #2138 + 19, 90784, 90784, 1040, 1040, // #2139 + 40, 90816, 90816, 3376, 3376, // #2140 + 47, 90892, 90892, 3420, 3420, // #2141 + 11, 90944, 90944, 240, 240, // #2142 + 6, 90967, 90967, 2999, 2999, // #2143 + 16, 90977, 90977, 849, 849, // #2144 + 40, 91008, 91008, 3376, 3376, // #2145 + 47, 91084, 91084, 3420, 3420, // #2146 + 11, 91136, 91136, 1536, 1536, // #2147 + 6, 91159, 91159, 2999, 2999, // #2148 + 18, 91170, 91170, 866, 866, // #2149 + 40, 91200, 91200, 3376, 3376, // #2150 + 47, 91276, 91276, 3420, 3420, // #2151 + 11, 91336, 91336, 1496, 1496, // #2152 + 6, 91367, 91367, 2999, 2999, // #2153 + 16, 91397, 91397, 885, 885, // #2154 + 40, 91456, 91456, 3376, 3376, // #2155 + 47, 91532, 91532, 3420, 3420, // #2156 + 8, 91592, 91592, 1576, 1576, // #2157 + 6, 91623, 91623, 2999, 2999, // #2158 + 14, 91638, 91638, 902, 902, // #2159 + 40, 91712, 91712, 3376, 3376, // #2160 + 47, 91788, 91788, 3420, 3420, // #2161 + 9, 91840, 91840, 1616, 1616, // #2162 + 6, 91863, 91863, 2999, 2999, // #2163 + 17, 91877, 91877, 917, 917, // #2164 + 40, 91904, 91904, 3376, 3376, // #2165 + 47, 91980, 91980, 3420, 3420, // #2166 + 9, 92032, 92032, 1568, 1568, // #2167 + 6, 92055, 92055, 2999, 2999, // #2168 + 18, 92071, 92071, 935, 935, // #2169 + 40, 92096, 92096, 3376, 3376, // #2170 + 47, 92172, 92172, 3420, 3420, // #2171 + 9, 92232, 92232, 1736, 1736, // #2172 + 6, 92263, 92263, 2999, 2999, // #2173 + 17, 92298, 92298, 954, 954, // #2174 + 40, 92352, 92352, 3376, 3376, // #2175 + 47, 92428, 92428, 3420, 3420, // #2176 + 11, 92488, 92488, 2072, 2072, // #2177 + 6, 92519, 92519, 2999, 2999, // #2178 + 18, 92540, 92540, 972, 972, // #2179 + 40, 92608, 92608, 3376, 3376, // #2180 + 47, 92684, 92684, 3420, 3420, // #2181 + 11, 92736, 92736, 1456, 1456, // #2182 + 6, 92759, 92759, 2999, 2999, // #2183 + 15, 92783, 92783, 991, 991, // #2184 + 40, 92800, 92800, 3376, 3376, // #2185 + 47, 92876, 92876, 3420, 3420, // #2186 + 10, 92936, 92936, 1416, 1416, // #2187 + 6, 92967, 92967, 2999, 2999, // #2188 + 15, 92991, 92991, 1007, 1007, // #2189 + 40, 93056, 93056, 3376, 3376, // #2190 + 47, 93132, 93132, 3420, 3420, // #2191 + 1, 93184, 93184, 432, 432, // #2192 + 3, 93214, 93214, 2734, 2734, // #2193 + 8, 93232, 93232, 320, 320, // #2194 + 40, 93248, 93248, 3376, 3376, // #2195 + 47, 93324, 93324, 3420, 3420, // #2196 + 11, 93384, 93384, 2376, 2376, // #2197 + 6, 93415, 93415, 2999, 2999, // #2198 + 16, 93455, 93455, 1023, 1023, // #2199 + 40, 93504, 93504, 3376, 3376, // #2200 + 47, 93580, 93580, 3420, 3420, // #2201 + 11, 93640, 93640, 2056, 2056, // #2202 + 6, 93671, 93671, 2999, 2999, // #2203 + 19, 93680, 93680, 1040, 1040, // #2204 + 40, 93760, 93760, 3376, 3376, // #2205 + 47, 93836, 93836, 3420, 3420, // #2206 + 8, 93888, 93888, 2576, 2576, // #2207 + 6, 93911, 93911, 2999, 2999, // #2208 + 16, 93921, 93921, 849, 849, // #2209 + 40, 93952, 93952, 3376, 3376, // #2210 + 47, 94028, 94028, 3420, 3420, // #2211 + 11, 94080, 94080, 576, 576, // #2212 + 6, 94103, 94103, 2999, 2999, // #2213 + 18, 94114, 94114, 866, 866, // #2214 + 40, 94144, 94144, 3376, 3376, // #2215 + 47, 94220, 94220, 3420, 3420, // #2216 + 11, 94272, 94272, 2496, 2496, // #2217 + 6, 94295, 94295, 2999, 2999, // #2218 + 16, 94341, 94341, 885, 885, // #2219 + 40, 94400, 94400, 3376, 3376, // #2220 + 47, 94476, 94476, 3420, 3420, // #2221 + 8, 94536, 94536, 2536, 2536, // #2222 + 6, 94567, 94567, 2999, 2999, // #2223 + 14, 94582, 94582, 902, 902, // #2224 + 40, 94656, 94656, 3376, 3376, // #2225 + 47, 94732, 94732, 3420, 3420, // #2226 + 9, 94792, 94792, 2616, 2616, // #2227 + 6, 94823, 94823, 2999, 2999, // #2228 + 17, 94837, 94837, 917, 917, // #2229 + 40, 94912, 94912, 3376, 3376, // #2230 + 47, 94988, 94988, 3420, 3420, // #2231 + 7, 95040, 95040, 896, 896, // #2232 + 6, 95063, 95063, 2999, 2999, // #2233 + 18, 95079, 95079, 935, 935, // #2234 + 40, 95104, 95104, 3376, 3376, // #2235 + 47, 95180, 95180, 3420, 3420, // #2236 + 9, 95232, 95232, 1056, 1056, // #2237 + 6, 95255, 95255, 2999, 2999, // #2238 + 17, 95306, 95306, 954, 954, // #2239 + 40, 95360, 95360, 3376, 3376, // #2240 + 47, 95436, 95436, 3420, 3420, // #2241 + 8, 95496, 95496, 1384, 1384, // #2242 + 6, 95527, 95527, 2999, 2999, // #2243 + 18, 95548, 95548, 972, 972, // #2244 + 40, 95616, 95616, 3376, 3376, // #2245 + 47, 95692, 95692, 3420, 3420, // #2246 + 11, 95752, 95752, 2456, 2456, // #2247 + 6, 95783, 95783, 2999, 2999, // #2248 + 15, 95807, 95807, 991, 991, // #2249 + 40, 95872, 95872, 3376, 3376, // #2250 + 47, 95948, 95948, 3420, 3420, // #2251 + 10, 96000, 96000, 2416, 2416, // #2252 + 6, 96023, 96023, 2999, 2999, // #2253 + 15, 96047, 96047, 1007, 1007, // #2254 + 40, 96064, 96064, 3376, 3376, // #2255 + 47, 96140, 96140, 3420, 3420, // #2256 + 21, 96206, 96206, 734, 734, // #2257 + 4, 96248, 96248, 248, 248, // #2258 + 4, 96265, 96265, 2729, 2729, // #2259 + 6, 96276, 96276, 756, 756, // #2260 + 40, 96320, 96320, 3376, 3376, // #2261 + 47, 96396, 96396, 3420, 3420, // #2262 + 1, 96448, 96448, 544, 544, // #2263 + 3, 96478, 96478, 2734, 2734, // #2264 + 15, 96523, 96523, 763, 763, // #2265 + 40, 96576, 96576, 3376, 3376, // #2266 + 47, 96652, 96652, 3420, 3420, // #2267 + 1, 96704, 96704, 3888, 3888, // #2268 + 3, 96734, 96734, 2734, 2734, // #2269 + 11, 96763, 96763, 779, 779, // #2270 + 40, 96832, 96832, 3376, 3376, // #2271 + 47, 96908, 96908, 3420, 3420, // #2272 + 1, 96960, 96960, 96, 96, // #2273 + 3, 96990, 96990, 2734, 2734, // #2274 + 14, 97015, 97015, 791, 791, // #2275 + 40, 97088, 97088, 3376, 3376, // #2276 + 47, 97164, 97164, 3420, 3420, // #2277 + 1, 97224, 97224, 392, 392, // #2278 + 6, 97244, 97244, 2764, 2764, // #2279 + 15, 97270, 97270, 806, 806, // #2280 + 40, 97344, 97344, 3376, 3376, // #2281 + 47, 97420, 97420, 3420, 3420, // #2282 + 5, 97480, 97480, 3736, 3736, // #2283 + 6, 97500, 97500, 2764, 2764, // #2284 + 11, 97542, 97542, 822, 822, // #2285 + 40, 97600, 97600, 3376, 3376, // #2286 + 47, 97676, 97676, 3420, 3420, // #2287 + 3, 97736, 97736, 4040, 4040, // #2288 + 6, 97756, 97756, 2764, 2764, // #2289 + 14, 97778, 97778, 834, 834, // #2290 + 40, 97856, 97856, 3376, 3376, // #2291 + 47, 97932, 97932, 3420, 3420, // #2292 + 11, 97984, 97984, 3584, 3584, // #2293 + 6, 98007, 98007, 2999, 2999, // #2294 + 5, 98031, 98031, 2735, 2735, // #2295 + 40, 98048, 98048, 3376, 3376, // #2296 + 47, 98124, 98124, 3420, 3420, // #2297 + 1, 98176, 98176, 432, 432, // #2298 + 3, 98206, 98206, 2734, 2734, // #2299 + 8, 98224, 98224, 320, 320, // #2300 + 40, 98240, 98240, 3376, 3376, // #2301 + 47, 98316, 98316, 3420, 3420, // #2302 + 11, 98368, 98368, 592, 592, // #2303 + 6, 98391, 98391, 2999, 2999, // #2304 + 16, 98447, 98447, 1023, 1023, // #2305 + 40, 98496, 98496, 3376, 3376, // #2306 + 47, 98572, 98572, 3420, 3420, // #2307 + 11, 98632, 98632, 1656, 1656, // #2308 + 6, 98663, 98663, 2999, 2999, // #2309 + 19, 98672, 98672, 1040, 1040, // #2310 + 40, 98752, 98752, 3376, 3376, // #2311 + 47, 98828, 98828, 3420, 3420, // #2312 + 8, 98880, 98880, 2256, 2256, // #2313 + 6, 98903, 98903, 2999, 2999, // #2314 + 16, 98913, 98913, 849, 849, // #2315 + 40, 98944, 98944, 3376, 3376, // #2316 + 47, 99020, 99020, 3420, 3420, // #2317 + 11, 99080, 99080, 1240, 1240, // #2318 + 6, 99111, 99111, 2999, 2999, // #2319 + 18, 99122, 99122, 866, 866, // #2320 + 40, 99200, 99200, 3376, 3376, // #2321 + 47, 99276, 99276, 3420, 3420, // #2322 + 11, 99328, 99328, 2176, 2176, // #2323 + 6, 99351, 99351, 2999, 2999, // #2324 + 16, 99397, 99397, 885, 885, // #2325 + 40, 99456, 99456, 3376, 3376, // #2326 + 47, 99532, 99532, 3420, 3420, // #2327 + 8, 99592, 99592, 2216, 2216, // #2328 + 6, 99623, 99623, 2999, 2999, // #2329 + 14, 99638, 99638, 902, 902, // #2330 + 40, 99712, 99712, 3376, 3376, // #2331 + 47, 99788, 99788, 3420, 3420, // #2332 + 9, 99848, 99848, 2296, 2296, // #2333 + 6, 99879, 99879, 2999, 2999, // #2334 + 17, 99893, 99893, 917, 917, // #2335 + 40, 99968, 99968, 3376, 3376, // #2336 + 47, 100044, 100044, 3420, 3420, // #2337 + 7, 100104, 100104, 1560, 1560, // #2338 + 6, 100119, 100119, 2999, 2999, // #2339 + 18, 100135, 100135, 935, 935, // #2340 + 40, 100160, 100160, 3376, 3376, // #2341 + 47, 100236, 100236, 3420, 3420, // #2342 + 9, 100296, 100296, 1720, 1720, // #2343 + 6, 100327, 100327, 2999, 2999, // #2344 + 17, 100362, 100362, 954, 954, // #2345 + 40, 100416, 100416, 3376, 3376, // #2346 + 47, 100492, 100492, 3420, 3420, // #2347 + 8, 100544, 100544, 2048, 2048, // #2348 + 6, 100567, 100567, 2999, 2999, // #2349 + 18, 100588, 100588, 972, 972, // #2350 + 40, 100608, 100608, 3376, 3376, // #2351 + 47, 100684, 100684, 3420, 3420, // #2352 + 11, 100744, 100744, 2136, 2136, // #2353 + 6, 100775, 100775, 2999, 2999, // #2354 + 15, 100799, 100799, 991, 991, // #2355 + 40, 100864, 100864, 3376, 3376, // #2356 + 47, 100940, 100940, 3420, 3420, // #2357 + 10, 100992, 100992, 2096, 2096, // #2358 + 6, 101015, 101015, 2999, 2999, // #2359 + 15, 101039, 101039, 1007, 1007, // #2360 + 40, 101056, 101056, 3376, 3376, // #2361 + 47, 101132, 101132, 3420, 3420, // #2362 + 21, 101192, 101192, 712, 712, // #2363 + 1, 101224, 101224, 3176, 3176, // #2364 + 3, 101246, 101246, 2734, 2734, // #2365 + 15, 101323, 101323, 763, 763, // #2366 + 40, 101376, 101376, 3376, 3376, // #2367 + 47, 101452, 101452, 3420, 3420, // #2368 + 1, 101504, 101504, 1136, 1136, // #2369 + 3, 101534, 101534, 2734, 2734, // #2370 + 11, 101563, 101563, 779, 779, // #2371 + 40, 101632, 101632, 3376, 3376, // #2372 + 47, 101708, 101708, 3420, 3420, // #2373 + 1, 101768, 101768, 2872, 2872, // #2374 + 3, 101790, 101790, 2734, 2734, // #2375 + 14, 101815, 101815, 791, 791, // #2376 + 40, 101888, 101888, 3376, 3376, // #2377 + 47, 101964, 101964, 3420, 3420, // #2378 + 3, 102016, 102016, 3024, 3024, // #2379 + 6, 102044, 102044, 2764, 2764, // #2380 + 15, 102070, 102070, 806, 806, // #2381 + 40, 102144, 102144, 3376, 3376, // #2382 + 47, 102220, 102220, 3420, 3420, // #2383 + 1, 102280, 102280, 984, 984, // #2384 + 6, 102300, 102300, 2764, 2764, // #2385 + 11, 102342, 102342, 822, 822, // #2386 + 40, 102400, 102400, 3376, 3376, // #2387 + 47, 102476, 102476, 3420, 3420, // #2388 + 4, 102528, 102528, 2720, 2720, // #2389 + 6, 102556, 102556, 2764, 2764, // #2390 + 14, 102578, 102578, 834, 834, // #2391 + 40, 102656, 102656, 3376, 3376, // #2392 + 47, 102732, 102732, 3420, 3420, // #2393 + 1, 102784, 102784, 432, 432, // #2394 + 3, 102814, 102814, 2734, 2734, // #2395 + 8, 102832, 102832, 320, 320, // #2396 + 40, 102848, 102848, 3376, 3376, // #2397 + 47, 102924, 102924, 3420, 3420, // #2398 + 11, 102984, 102984, 2376, 2376, // #2399 + 6, 103015, 103015, 2999, 2999, // #2400 + 16, 103055, 103055, 1023, 1023, // #2401 + 40, 103104, 103104, 3376, 3376, // #2402 + 47, 103180, 103180, 3420, 3420, // #2403 + 11, 103240, 103240, 2056, 2056, // #2404 + 6, 103271, 103271, 2999, 2999, // #2405 + 19, 103280, 103280, 1040, 1040, // #2406 + 40, 103360, 103360, 3376, 3376, // #2407 + 47, 103436, 103436, 3420, 3420, // #2408 + 8, 103488, 103488, 2576, 2576, // #2409 + 6, 103511, 103511, 2999, 2999, // #2410 + 16, 103521, 103521, 849, 849, // #2411 + 40, 103552, 103552, 3376, 3376, // #2412 + 47, 103628, 103628, 3420, 3420, // #2413 + 11, 103680, 103680, 576, 576, // #2414 + 6, 103703, 103703, 2999, 2999, // #2415 + 18, 103714, 103714, 866, 866, // #2416 + 40, 103744, 103744, 3376, 3376, // #2417 + 47, 103820, 103820, 3420, 3420, // #2418 + 11, 103872, 103872, 2496, 2496, // #2419 + 6, 103895, 103895, 2999, 2999, // #2420 + 16, 103941, 103941, 885, 885, // #2421 + 40, 104000, 104000, 3376, 3376, // #2422 + 47, 104076, 104076, 3420, 3420, // #2423 + 8, 104136, 104136, 2536, 2536, // #2424 + 6, 104167, 104167, 2999, 2999, // #2425 + 14, 104182, 104182, 902, 902, // #2426 + 40, 104256, 104256, 3376, 3376, // #2427 + 47, 104332, 104332, 3420, 3420, // #2428 + 9, 104392, 104392, 2616, 2616, // #2429 + 6, 104423, 104423, 2999, 2999, // #2430 + 17, 104437, 104437, 917, 917, // #2431 + 40, 104512, 104512, 3376, 3376, // #2432 + 47, 104588, 104588, 3420, 3420, // #2433 + 7, 104640, 104640, 896, 896, // #2434 + 6, 104663, 104663, 2999, 2999, // #2435 + 18, 104679, 104679, 935, 935, // #2436 + 40, 104704, 104704, 3376, 3376, // #2437 + 47, 104780, 104780, 3420, 3420, // #2438 + 9, 104832, 104832, 1056, 1056, // #2439 + 6, 104855, 104855, 2999, 2999, // #2440 + 17, 104906, 104906, 954, 954, // #2441 + 40, 104960, 104960, 3376, 3376, // #2442 + 47, 105036, 105036, 3420, 3420, // #2443 + 8, 105096, 105096, 1384, 1384, // #2444 + 6, 105127, 105127, 2999, 2999, // #2445 + 18, 105148, 105148, 972, 972, // #2446 + 40, 105216, 105216, 3376, 3376, // #2447 + 47, 105292, 105292, 3420, 3420, // #2448 + 11, 105352, 105352, 2456, 2456, // #2449 + 6, 105383, 105383, 2999, 2999, // #2450 + 15, 105407, 105407, 991, 991, // #2451 + 40, 105472, 105472, 3376, 3376, // #2452 + 47, 105548, 105548, 3420, 3420, // #2453 + 10, 105600, 105600, 2416, 2416, // #2454 + 6, 105623, 105623, 2999, 2999, // #2455 + 15, 105647, 105647, 1007, 1007, // #2456 + 40, 105664, 105664, 3376, 3376, // #2457 + 47, 105740, 105740, 3420, 3420, // #2458 + 21, 105800, 105800, 712, 712, // #2459 + 1, 105832, 105832, 3176, 3176, // #2460 + 3, 105854, 105854, 2734, 2734, // #2461 + 15, 105931, 105931, 763, 763, // #2462 + 40, 105984, 105984, 3376, 3376, // #2463 + 47, 106060, 106060, 3420, 3420, // #2464 + 1, 106112, 106112, 1136, 1136, // #2465 + 3, 106142, 106142, 2734, 2734, // #2466 + 11, 106171, 106171, 779, 779, // #2467 + 40, 106240, 106240, 3376, 3376, // #2468 + 47, 106316, 106316, 3420, 3420, // #2469 + 1, 106376, 106376, 2872, 2872, // #2470 + 3, 106398, 106398, 2734, 2734, // #2471 + 14, 106423, 106423, 791, 791, // #2472 + 40, 106496, 106496, 3376, 3376, // #2473 + 47, 106572, 106572, 3420, 3420, // #2474 + 3, 106624, 106624, 3024, 3024, // #2475 + 6, 106652, 106652, 2764, 2764, // #2476 + 15, 106678, 106678, 806, 806, // #2477 + 40, 106752, 106752, 3376, 3376, // #2478 + 47, 106828, 106828, 3420, 3420, // #2479 + 1, 106888, 106888, 984, 984, // #2480 + 6, 106908, 106908, 2764, 2764, // #2481 + 11, 106950, 106950, 822, 822, // #2482 + 40, 107008, 107008, 3376, 3376, // #2483 + 47, 107084, 107084, 3420, 3420, // #2484 + 4, 107136, 107136, 2720, 2720, // #2485 + 6, 107164, 107164, 2764, 2764, // #2486 + 14, 107186, 107186, 834, 834, // #2487 + 40, 107264, 107264, 3376, 3376, // #2488 + 47, 107340, 107340, 3420, 3420, // #2489 + 1, 107392, 107392, 432, 432, // #2490 + 3, 107422, 107422, 2734, 2734, // #2491 + 8, 107440, 107440, 320, 320, // #2492 + 40, 107456, 107456, 3376, 3376, // #2493 + 47, 107532, 107532, 3420, 3420, // #2494 + 11, 107584, 107584, 1056, 1056, // #2495 + 6, 107607, 107607, 2999, 2999, // #2496 + 16, 107663, 107663, 1023, 1023, // #2497 + 40, 107712, 107712, 3376, 3376, // #2498 + 47, 107788, 107788, 3420, 3420, // #2499 + 11, 107848, 107848, 1016, 1016, // #2500 + 6, 107879, 107879, 2999, 2999, // #2501 + 19, 107888, 107888, 1040, 1040, // #2502 + 40, 107968, 107968, 3376, 3376, // #2503 + 47, 108044, 108044, 3420, 3420, // #2504 + 8, 108096, 108096, 1296, 1296, // #2505 + 6, 108119, 108119, 2999, 2999, // #2506 + 16, 108129, 108129, 849, 849, // #2507 + 40, 108160, 108160, 3376, 3376, // #2508 + 47, 108236, 108236, 3420, 3420, // #2509 + 11, 108288, 108288, 1216, 1216, // #2510 + 6, 108311, 108311, 2999, 2999, // #2511 + 18, 108322, 108322, 866, 866, // #2512 + 40, 108352, 108352, 3376, 3376, // #2513 + 47, 108428, 108428, 3420, 3420, // #2514 + 11, 108488, 108488, 1176, 1176, // #2515 + 6, 108519, 108519, 2999, 2999, // #2516 + 16, 108549, 108549, 885, 885, // #2517 + 40, 108608, 108608, 3376, 3376, // #2518 + 47, 108684, 108684, 3420, 3420, // #2519 + 8, 108744, 108744, 1256, 1256, // #2520 + 6, 108775, 108775, 2999, 2999, // #2521 + 14, 108790, 108790, 902, 902, // #2522 + 40, 108864, 108864, 3376, 3376, // #2523 + 47, 108940, 108940, 3420, 3420, // #2524 + 9, 109000, 109000, 1336, 1336, // #2525 + 6, 109031, 109031, 2999, 2999, // #2526 + 17, 109045, 109045, 917, 917, // #2527 + 40, 109120, 109120, 3376, 3376, // #2528 + 47, 109196, 109196, 3420, 3420, // #2529 + 7, 109256, 109256, 3624, 3624, // #2530 + 6, 109271, 109271, 2999, 2999, // #2531 + 18, 109287, 109287, 935, 935, // #2532 + 40, 109312, 109312, 3376, 3376, // #2533 + 47, 109388, 109388, 3420, 3420, // #2534 + 9, 109448, 109448, 3784, 3784, // #2535 + 6, 109479, 109479, 2999, 2999, // #2536 + 17, 109514, 109514, 954, 954, // #2537 + 40, 109568, 109568, 3376, 3376, // #2538 + 47, 109644, 109644, 3420, 3420, // #2539 + 8, 109696, 109696, 16, 16, // #2540 + 6, 109719, 109719, 2999, 2999, // #2541 + 18, 109740, 109740, 972, 972, // #2542 + 40, 109760, 109760, 3376, 3376, // #2543 + 47, 109836, 109836, 3420, 3420, // #2544 + 11, 109888, 109888, 1136, 1136, // #2545 + 6, 109911, 109911, 2999, 2999, // #2546 + 15, 109935, 109935, 991, 991, // #2547 + 40, 109952, 109952, 3376, 3376, // #2548 + 47, 110028, 110028, 3420, 3420, // #2549 + 10, 110088, 110088, 1096, 1096, // #2550 + 6, 110119, 110119, 2999, 2999, // #2551 + 15, 110143, 110143, 1007, 1007, // #2552 + 40, 110208, 110208, 3376, 3376, // #2553 + 47, 110284, 110284, 3420, 3420, // #2554 + 21, 110344, 110344, 712, 712, // #2555 + 1, 110376, 110376, 3176, 3176, // #2556 + 3, 110398, 110398, 2734, 2734, // #2557 + 15, 110475, 110475, 763, 763, // #2558 + 40, 110528, 110528, 3376, 3376, // #2559 + 47, 110604, 110604, 3420, 3420, // #2560 + 1, 110656, 110656, 1136, 1136, // #2561 + 3, 110686, 110686, 2734, 2734, // #2562 + 11, 110715, 110715, 779, 779, // #2563 + 40, 110784, 110784, 3376, 3376, // #2564 + 47, 110860, 110860, 3420, 3420, // #2565 + 1, 110920, 110920, 2872, 2872, // #2566 + 3, 110942, 110942, 2734, 2734, // #2567 + 14, 110967, 110967, 791, 791, // #2568 + 40, 111040, 111040, 3376, 3376, // #2569 + 47, 111116, 111116, 3420, 3420, // #2570 + 3, 111168, 111168, 3024, 3024, // #2571 + 6, 111196, 111196, 2764, 2764, // #2572 + 15, 111222, 111222, 806, 806, // #2573 + 40, 111296, 111296, 3376, 3376, // #2574 + 47, 111372, 111372, 3420, 3420, // #2575 + 1, 111432, 111432, 984, 984, // #2576 + 6, 111452, 111452, 2764, 2764, // #2577 + 11, 111494, 111494, 822, 822, // #2578 + 40, 111552, 111552, 3376, 3376, // #2579 + 47, 111628, 111628, 3420, 3420, // #2580 + 4, 111680, 111680, 2720, 2720, // #2581 + 6, 111708, 111708, 2764, 2764, // #2582 + 14, 111730, 111730, 834, 834, // #2583 + 40, 111808, 111808, 3376, 3376, // #2584 + 47, 111884, 111884, 3420, 3420, // #2585 + 4, 111944, 111944, 248, 248, // #2586 + 4, 111961, 111961, 2729, 2729, // #2587 + 6, 111972, 111972, 756, 756, // #2588 + 40, 112000, 112000, 3376, 3376, // #2589 + 47, 112076, 112076, 3420, 3420, // #2590 + 4, 112136, 112136, 3384, 3384, // #2591 + 4, 112153, 112153, 2729, 2729, // #2592 + 20, 112160, 112160, 1088, 1088, // #2593 + 40, 112192, 112192, 3376, 3376, // #2594 + 47, 112268, 112268, 3420, 3420, // #2595 + 1, 112320, 112320, 432, 432, // #2596 + 3, 112350, 112350, 2734, 2734, // #2597 + 8, 112368, 112368, 320, 320, // #2598 + 40, 112384, 112384, 3376, 3376, // #2599 + 47, 112460, 112460, 3420, 3420, // #2600 + 11, 112520, 112520, 2376, 2376, // #2601 + 6, 112551, 112551, 2999, 2999, // #2602 + 16, 112591, 112591, 1023, 1023, // #2603 + 40, 112640, 112640, 3376, 3376, // #2604 + 47, 112716, 112716, 3420, 3420, // #2605 + 11, 112776, 112776, 2056, 2056, // #2606 + 6, 112807, 112807, 2999, 2999, // #2607 + 19, 112816, 112816, 1040, 1040, // #2608 + 40, 112896, 112896, 3376, 3376, // #2609 + 47, 112972, 112972, 3420, 3420, // #2610 + 8, 113024, 113024, 2576, 2576, // #2611 + 6, 113047, 113047, 2999, 2999, // #2612 + 16, 113057, 113057, 849, 849, // #2613 + 40, 113088, 113088, 3376, 3376, // #2614 + 47, 113164, 113164, 3420, 3420, // #2615 + 11, 113216, 113216, 576, 576, // #2616 + 6, 113239, 113239, 2999, 2999, // #2617 + 18, 113250, 113250, 866, 866, // #2618 + 40, 113280, 113280, 3376, 3376, // #2619 + 47, 113356, 113356, 3420, 3420, // #2620 + 11, 113408, 113408, 2496, 2496, // #2621 + 6, 113431, 113431, 2999, 2999, // #2622 + 16, 113477, 113477, 885, 885, // #2623 + 40, 113536, 113536, 3376, 3376, // #2624 + 47, 113612, 113612, 3420, 3420, // #2625 + 8, 113672, 113672, 2536, 2536, // #2626 + 6, 113703, 113703, 2999, 2999, // #2627 + 14, 113718, 113718, 902, 902, // #2628 + 40, 113792, 113792, 3376, 3376, // #2629 + 47, 113868, 113868, 3420, 3420, // #2630 + 9, 113928, 113928, 2616, 2616, // #2631 + 6, 113959, 113959, 2999, 2999, // #2632 + 17, 113973, 113973, 917, 917, // #2633 + 40, 114048, 114048, 3376, 3376, // #2634 + 47, 114124, 114124, 3420, 3420, // #2635 + 7, 114176, 114176, 896, 896, // #2636 + 6, 114199, 114199, 2999, 2999, // #2637 + 18, 114215, 114215, 935, 935, // #2638 + 40, 114240, 114240, 3376, 3376, // #2639 + 47, 114316, 114316, 3420, 3420, // #2640 + 9, 114368, 114368, 1056, 1056, // #2641 + 6, 114391, 114391, 2999, 2999, // #2642 + 17, 114442, 114442, 954, 954, // #2643 + 40, 114496, 114496, 3376, 3376, // #2644 + 47, 114572, 114572, 3420, 3420, // #2645 + 8, 114632, 114632, 1384, 1384, // #2646 + 6, 114663, 114663, 2999, 2999, // #2647 + 18, 114684, 114684, 972, 972, // #2648 + 40, 114752, 114752, 3376, 3376, // #2649 + 47, 114828, 114828, 3420, 3420, // #2650 + 11, 114888, 114888, 2456, 2456, // #2651 + 6, 114919, 114919, 2999, 2999, // #2652 + 15, 114943, 114943, 991, 991, // #2653 + 40, 115008, 115008, 3376, 3376, // #2654 + 47, 115084, 115084, 3420, 3420, // #2655 + 10, 115136, 115136, 2416, 2416, // #2656 + 6, 115159, 115159, 2999, 2999, // #2657 + 15, 115183, 115183, 1007, 1007, // #2658 + 40, 115200, 115200, 3376, 3376, // #2659 + 47, 115276, 115276, 3420, 3420, // #2660 + 21, 115336, 115336, 712, 712, // #2661 + 1, 115368, 115368, 3176, 3176, // #2662 + 3, 115390, 115390, 2734, 2734, // #2663 + 15, 115467, 115467, 763, 763, // #2664 + 40, 115520, 115520, 3376, 3376, // #2665 + 47, 115596, 115596, 3420, 3420, // #2666 + 1, 115648, 115648, 1136, 1136, // #2667 + 3, 115678, 115678, 2734, 2734, // #2668 + 11, 115707, 115707, 779, 779, // #2669 + 40, 115776, 115776, 3376, 3376, // #2670 + 47, 115852, 115852, 3420, 3420, // #2671 + 1, 115912, 115912, 2872, 2872, // #2672 + 3, 115934, 115934, 2734, 2734, // #2673 + 14, 115959, 115959, 791, 791, // #2674 + 40, 116032, 116032, 3376, 3376, // #2675 + 47, 116108, 116108, 3420, 3420, // #2676 + 3, 116160, 116160, 3024, 3024, // #2677 + 6, 116188, 116188, 2764, 2764, // #2678 + 15, 116214, 116214, 806, 806, // #2679 + 40, 116288, 116288, 3376, 3376, // #2680 + 47, 116364, 116364, 3420, 3420, // #2681 + 1, 116424, 116424, 984, 984, // #2682 + 6, 116444, 116444, 2764, 2764, // #2683 + 11, 116486, 116486, 822, 822, // #2684 + 40, 116544, 116544, 3376, 3376, // #2685 + 47, 116620, 116620, 3420, 3420, // #2686 + 4, 116672, 116672, 2720, 2720, // #2687 + 6, 116700, 116700, 2764, 2764, // #2688 + 14, 116722, 116722, 834, 834, // #2689 + 40, 116800, 116800, 3376, 3376, // #2690 + 47, 116876, 116876, 3420, 3420, // #2691 + 6, 116931, 116931, 1491, 1491, // #2692 + 8, 116950, 116950, 2902, 2902, // #2693 + 3, 116964, 116964, 3620, 3620, // #2694 + 6, 116984, 116984, 3624, 3624, // #2695 + 26, 116995, 116995, 3635, 3635, // #2696 + 7, 117028, 117028, 1684, 1684, // #2697 + 7, 117042, 117042, 386, 386, // #2698 + 11, 117068, 117068, 1692, 1692, // #2699 + 5, 117096, 117096, 1704, 1704, // #2700 + 5, 117118, 117118, 1710, 1710, // #2701 + 6, 117139, 117139, 131, 131, // #2702 + 7, 117152, 117152, 2464, 2464, // #2703 + 6, 117199, 117199, 895, 895, // #2704 + 8, 117221, 117221, 725, 725, // #2705 + 6, 117236, 117236, 1716, 1716, // #2706 + 8, 117259, 117259, 1723, 1723, // #2707 + 10, 117284, 117284, 1732, 1732, // #2708 + 7, 117311, 117311, 1743, 1743, // #2709 + 4, 117333, 117333, 3861, 3861, // #2710 + 12, 117351, 117351, 1751, 1751, // #2711 + 5, 117385, 117385, 2889, 2889, // #2712 + 6, 117392, 117392, 784, 784, // #2713 + 5, 117454, 117454, 190, 190, // #2714 + 1, 117472, 117472, 416, 416, // #2715 + 6, 117500, 117500, 2764, 2764, // #2716 + 12, 117520, 117520, 3456, 3456, // #2717 + 40, 117568, 117568, 3376, 3376, // #2718 + 47, 117644, 117644, 3420, 3420, // #2719 + 5, 117711, 117711, 2735, 2735, // #2720 + 11, 117736, 117736, 2632, 2632, // #2721 + 6, 117767, 117767, 2999, 2999, // #2722 + 12, 117784, 117784, 936, 936, // #2723 + 40, 117824, 117824, 3376, 3376, // #2724 + 47, 117900, 117900, 3420, 3420, // #2725 + 6, 117956, 117956, 1764, 1764, // #2726 + 5, 117968, 117968, 3312, 3312, // #2727 + 6, 117991, 117991, 2999, 2999, // #2728 + 13, 118008, 118008, 664, 664, // #2729 + 40, 118080, 118080, 3376, 3376, // #2730 + 47, 118156, 118156, 3420, 3420, // #2731 + 15, 118219, 118219, 1771, 1771, // #2732 + 5, 118240, 118240, 1680, 1680, // #2733 + 4, 118265, 118265, 2729, 2729, // #2734 + 22, 118272, 118272, 256, 256, // #2735 + 40, 118336, 118336, 3376, 3376, // #2736 + 47, 118412, 118412, 3420, 3420, // #2737 + 6, 118464, 118464, 784, 784, // #2738 + 5, 118542, 118542, 190, 190, // #2739 + 3, 118568, 118568, 1256, 1256, // #2740 + 6, 118588, 118588, 2764, 2764, // #2741 + 11, 118664, 118664, 184, 184, // #2742 + 40, 118720, 118720, 3376, 3376, // #2743 + 47, 118796, 118796, 3420, 3420, // #2744 + 5, 118863, 118863, 2735, 2735, // #2745 + 11, 118880, 118880, 2336, 2336, // #2746 + 6, 118903, 118903, 2999, 2999, // #2747 + 11, 118912, 118912, 3408, 3408, // #2748 + 40, 118976, 118976, 3376, 3376, // #2749 + 47, 119052, 119052, 3420, 3420, // #2750 + 6, 119108, 119108, 1764, 1764, // #2751 + 5, 119128, 119128, 3304, 3304, // #2752 + 6, 119143, 119143, 2999, 2999, // #2753 + 12, 119160, 119160, 3336, 3336, // #2754 + 40, 119232, 119232, 3376, 3376, // #2755 + 47, 119308, 119308, 3420, 3420, // #2756 + 15, 119371, 119371, 1771, 1771, // #2757 + 5, 119392, 119392, 1904, 1904, // #2758 + 4, 119417, 119417, 2729, 2729, // #2759 + 21, 119424, 119424, 0, 0, // #2760 + 40, 119488, 119488, 3376, 3376, // #2761 + 47, 119564, 119564, 3420, 3420, // #2762 + 6, 119616, 119616, 784, 784, // #2763 + 5, 119694, 119694, 190, 190, // #2764 + 1, 119720, 119720, 3400, 3400, // #2765 + 6, 119740, 119740, 2764, 2764, // #2766 + 13, 119816, 119816, 3960, 3960, // #2767 + 40, 119872, 119872, 3376, 3376, // #2768 + 47, 119948, 119948, 3420, 3420, // #2769 + 5, 120015, 120015, 2735, 2735, // #2770 + 8, 120040, 120040, 3032, 3032, // #2771 + 6, 120071, 120071, 2999, 2999, // #2772 + 13, 120088, 120088, 3912, 3912, // #2773 + 40, 120128, 120128, 3376, 3376, // #2774 + 47, 120204, 120204, 3420, 3420, // #2775 + 6, 120260, 120260, 1764, 1764, // #2776 + 5, 120272, 120272, 1888, 1888, // #2777 + 6, 120295, 120295, 2999, 2999, // #2778 + 14, 120312, 120312, 4040, 4040, // #2779 + 40, 120384, 120384, 3376, 3376, // #2780 + 47, 120460, 120460, 3420, 3420, // #2781 + 15, 120523, 120523, 1771, 1771, // #2782 + 4, 120552, 120552, 1224, 1224, // #2783 + 4, 120569, 120569, 2729, 2729, // #2784 + 23, 120576, 120576, 1360, 1360, // #2785 + 40, 120640, 120640, 3376, 3376, // #2786 + 47, 120716, 120716, 3420, 3420, // #2787 + 5, 120777, 120777, 2889, 2889, // #2788 + 6, 120784, 120784, 784, 784, // #2789 + 5, 120846, 120846, 190, 190, // #2790 + 1, 120872, 120872, 3320, 3320, // #2791 + 6, 120892, 120892, 2764, 2764, // #2792 + 12, 120912, 120912, 80, 80, // #2793 + 40, 120960, 120960, 3376, 3376, // #2794 + 47, 121036, 121036, 3420, 3420, // #2795 + 5, 121103, 121103, 2735, 2735, // #2796 + 11, 121128, 121128, 2856, 2856, // #2797 + 6, 121159, 121159, 2999, 2999, // #2798 + 12, 121168, 121168, 1456, 1456, // #2799 + 40, 121216, 121216, 3376, 3376, // #2800 + 47, 121292, 121292, 3420, 3420, // #2801 + 6, 121348, 121348, 1764, 1764, // #2802 + 5, 121360, 121360, 2976, 2976, // #2803 + 6, 121383, 121383, 2999, 2999, // #2804 + 13, 121400, 121400, 1224, 1224, // #2805 + 40, 121472, 121472, 3376, 3376, // #2806 + 47, 121548, 121548, 3420, 3420, // #2807 + 15, 121611, 121611, 1771, 1771, // #2808 + 5, 121632, 121632, 3200, 3200, // #2809 + 4, 121657, 121657, 2729, 2729, // #2810 + 22, 121672, 121672, 1048, 1048, // #2811 + 40, 121728, 121728, 3376, 3376, // #2812 + 47, 121804, 121804, 3420, 3420, // #2813 + 6, 121856, 121856, 784, 784, // #2814 + 5, 121934, 121934, 190, 190, // #2815 + 1, 121960, 121960, 2632, 2632, // #2816 + 6, 121980, 121980, 2764, 2764, // #2817 + 11, 122008, 122008, 1288, 1288, // #2818 + 40, 122048, 122048, 3376, 3376, // #2819 + 47, 122124, 122124, 3420, 3420, // #2820 + 5, 122191, 122191, 2735, 2735, // #2821 + 11, 122208, 122208, 2128, 2128, // #2822 + 6, 122231, 122231, 2999, 2999, // #2823 + 11, 122248, 122248, 1208, 1208, // #2824 + 40, 122304, 122304, 3376, 3376, // #2825 + 47, 122380, 122380, 3420, 3420, // #2826 + 6, 122436, 122436, 1764, 1764, // #2827 + 5, 122448, 122448, 2288, 2288, // #2828 + 6, 122471, 122471, 2999, 2999, // #2829 + 12, 122504, 122504, 1272, 1272, // #2830 + 40, 122560, 122560, 3376, 3376, // #2831 + 47, 122636, 122636, 3420, 3420, // #2832 + 15, 122699, 122699, 1771, 1771, // #2833 + 5, 122720, 122720, 2512, 2512, // #2834 + 4, 122745, 122745, 2729, 2729, // #2835 + 21, 122760, 122760, 280, 280, // #2836 + 40, 122816, 122816, 3376, 3376, // #2837 + 47, 122892, 122892, 3420, 3420, // #2838 + 6, 122944, 122944, 784, 784, // #2839 + 5, 123022, 123022, 190, 190, // #2840 + 1, 123048, 123048, 3896, 3896, // #2841 + 6, 123068, 123068, 2764, 2764, // #2842 + 13, 123144, 123144, 376, 376, // #2843 + 40, 123200, 123200, 3376, 3376, // #2844 + 47, 123276, 123276, 3420, 3420, // #2845 + 5, 123343, 123343, 2735, 2735, // #2846 + 8, 123368, 123368, 3432, 3432, // #2847 + 6, 123399, 123399, 2999, 2999, // #2848 + 13, 123464, 123464, 440, 440, // #2849 + 40, 123520, 123520, 3376, 3376, // #2850 + 47, 123596, 123596, 3420, 3420, // #2851 + 6, 123652, 123652, 1764, 1764, // #2852 + 5, 123664, 123664, 3552, 3552, // #2853 + 6, 123687, 123687, 2999, 2999, // #2854 + 14, 123720, 123720, 568, 568, // #2855 + 40, 123776, 123776, 3376, 3376, // #2856 + 47, 123852, 123852, 3420, 3420, // #2857 + 15, 123915, 123915, 1771, 1771, // #2858 + 4, 123936, 123936, 3776, 3776, // #2859 + 4, 123961, 123961, 2729, 2729, // #2860 + 23, 123968, 123968, 1568, 1568, // #2861 + 40, 124032, 124032, 3376, 3376, // #2862 + 47, 124108, 124108, 3420, 3420, // #2863 + 5, 124169, 124169, 2889, 2889, // #2864 + 6, 124176, 124176, 784, 784, // #2865 + 5, 124238, 124238, 190, 190, // #2866 + 1, 124264, 124264, 2712, 2712, // #2867 + 6, 124284, 124284, 2764, 2764, // #2868 + 12, 124312, 124312, 1368, 1368, // #2869 + 40, 124352, 124352, 3376, 3376, // #2870 + 47, 124428, 124428, 3420, 3420, // #2871 + 5, 124495, 124495, 2735, 2735, // #2872 + 11, 124520, 124520, 2248, 2248, // #2873 + 6, 124551, 124551, 2999, 2999, // #2874 + 12, 124568, 124568, 1432, 1432, // #2875 + 40, 124608, 124608, 3376, 3376, // #2876 + 47, 124684, 124684, 3420, 3420, // #2877 + 6, 124740, 124740, 1764, 1764, // #2878 + 5, 124752, 124752, 2368, 2368, // #2879 + 6, 124775, 124775, 2999, 2999, // #2880 + 13, 124792, 124792, 1496, 1496, // #2881 + 40, 124864, 124864, 3376, 3376, // #2882 + 47, 124940, 124940, 3420, 3420, // #2883 + 15, 125003, 125003, 1771, 1771, // #2884 + 5, 125024, 125024, 2592, 2592, // #2885 + 4, 125049, 125049, 2729, 2729, // #2886 + 22, 125056, 125056, 4016, 4016, // #2887 + 40, 125120, 125120, 3376, 3376, // #2888 + 47, 125196, 125196, 3420, 3420, // #2889 + 6, 125248, 125248, 784, 784, // #2890 + 5, 125326, 125326, 190, 190, // #2891 + 1, 125352, 125352, 2024, 2024, // #2892 + 6, 125372, 125372, 2764, 2764, // #2893 + 11, 125400, 125400, 3944, 3944, // #2894 + 40, 125440, 125440, 3376, 3376, // #2895 + 47, 125516, 125516, 3420, 3420, // #2896 + 5, 125583, 125583, 2735, 2735, // #2897 + 11, 125600, 125600, 1520, 1520, // #2898 + 6, 125623, 125623, 2999, 2999, // #2899 + 11, 125632, 125632, 16, 16, // #2900 + 40, 125696, 125696, 3376, 3376, // #2901 + 47, 125772, 125772, 3420, 3420, // #2902 + 6, 125828, 125828, 1764, 1764, // #2903 + 5, 125840, 125840, 1680, 1680, // #2904 + 6, 125863, 125863, 2999, 2999, // #2905 + 12, 125872, 125872, 80, 80, // #2906 + 40, 125888, 125888, 3376, 3376, // #2907 + 47, 125964, 125964, 3420, 3420, // #2908 + 15, 126027, 126027, 1771, 1771, // #2909 + 5, 126048, 126048, 1904, 1904, // #2910 + 4, 126073, 126073, 2729, 2729, // #2911 + 21, 126088, 126088, 216, 216, // #2912 + 40, 126144, 126144, 3376, 3376, // #2913 + 47, 126220, 126220, 3420, 3420, // #2914 + 6, 126272, 126272, 784, 784, // #2915 + 5, 126350, 126350, 190, 190, // #2916 + 1, 126376, 126376, 3288, 3288, // #2917 + 6, 126396, 126396, 2764, 2764, // #2918 + 13, 126472, 126472, 312, 312, // #2919 + 40, 126528, 126528, 3376, 3376, // #2920 + 47, 126604, 126604, 3420, 3420, // #2921 + 5, 126671, 126671, 2735, 2735, // #2922 + 8, 126696, 126696, 2824, 2824, // #2923 + 6, 126727, 126727, 2999, 2999, // #2924 + 13, 126744, 126744, 3112, 3112, // #2925 + 40, 126784, 126784, 3376, 3376, // #2926 + 47, 126860, 126860, 3420, 3420, // #2927 + 6, 126916, 126916, 1764, 1764, // #2928 + 5, 126928, 126928, 2944, 2944, // #2929 + 6, 126951, 126951, 2999, 2999, // #2930 + 14, 126968, 126968, 3240, 3240, // #2931 + 40, 127040, 127040, 3376, 3376, // #2932 + 47, 127116, 127116, 3420, 3420, // #2933 + 15, 127179, 127179, 1771, 1771, // #2934 + 4, 127200, 127200, 3168, 3168, // #2935 + 4, 127225, 127225, 2729, 2729, // #2936 + 23, 127240, 127240, 3512, 3512, // #2937 + 40, 127296, 127296, 3376, 3376, // #2938 + 47, 127372, 127372, 3420, 3420, // #2939 + 5, 127433, 127433, 2889, 2889, // #2940 + 6, 127440, 127440, 784, 784, // #2941 + 5, 127502, 127502, 190, 190, // #2942 + 1, 127528, 127528, 472, 472, // #2943 + 6, 127548, 127548, 2764, 2764, // #2944 + 12, 127568, 127568, 3312, 3312, // #2945 + 40, 127616, 127616, 3376, 3376, // #2946 + 47, 127692, 127692, 3420, 3420, // #2947 + 5, 127759, 127759, 2735, 2735, // #2948 + 11, 127784, 127784, 8, 8, // #2949 + 6, 127815, 127815, 2999, 2999, // #2950 + 12, 127824, 127824, 3376, 3376, // #2951 + 40, 127872, 127872, 3376, 3376, // #2952 + 47, 127948, 127948, 3420, 3420, // #2953 + 6, 128004, 128004, 1764, 1764, // #2954 + 5, 128016, 128016, 128, 128, // #2955 + 6, 128039, 128039, 2999, 2999, // #2956 + 13, 128048, 128048, 3440, 3440, // #2957 + 40, 128064, 128064, 3376, 3376, // #2958 + 47, 128140, 128140, 3420, 3420, // #2959 + 15, 128203, 128203, 1771, 1771, // #2960 + 5, 128224, 128224, 352, 352, // #2961 + 4, 128249, 128249, 2729, 2729, // #2962 + 22, 128256, 128256, 1632, 1632, // #2963 + 40, 128320, 128320, 3376, 3376, // #2964 + 47, 128396, 128396, 3420, 3420, // #2965 + 6, 128448, 128448, 784, 784, // #2966 + 5, 128526, 128526, 190, 190, // #2967 + 1, 128552, 128552, 3880, 3880, // #2968 + 6, 128572, 128572, 2764, 2764, // #2969 + 11, 128600, 128600, 3672, 3672, // #2970 + 40, 128640, 128640, 3376, 3376, // #2971 + 47, 128716, 128716, 3420, 3420, // #2972 + 5, 128783, 128783, 2735, 2735, // #2973 + 11, 128800, 128800, 3376, 3376, // #2974 + 6, 128823, 128823, 2999, 2999, // #2975 + 11, 128832, 128832, 1728, 1728, // #2976 + 40, 128896, 128896, 3376, 3376, // #2977 + 47, 128972, 128972, 3420, 3420, // #2978 + 6, 129028, 129028, 1764, 1764, // #2979 + 5, 129040, 129040, 3536, 3536, // #2980 + 6, 129063, 129063, 2999, 2999, // #2981 + 12, 129072, 129072, 1792, 1792, // #2982 + 40, 129088, 129088, 3376, 3376, // #2983 + 47, 129164, 129164, 3420, 3420, // #2984 + 15, 129227, 129227, 1771, 1771, // #2985 + 5, 129248, 129248, 3760, 3760, // #2986 + 4, 129273, 129273, 2729, 2729, // #2987 + 21, 129288, 129288, 1992, 1992, // #2988 + 40, 129344, 129344, 3376, 3376, // #2989 + 47, 129420, 129420, 3420, 3420, // #2990 + 6, 129472, 129472, 784, 784, // #2991 + 5, 129550, 129550, 190, 190, // #2992 + 1, 129576, 129576, 1048, 1048, // #2993 + 6, 129596, 129596, 2764, 2764, // #2994 + 13, 129616, 129616, 1856, 1856, // #2995 + 40, 129664, 129664, 3376, 3376, // #2996 + 47, 129740, 129740, 3420, 3420, // #2997 + 5, 129807, 129807, 2735, 2735, // #2998 + 8, 129832, 129832, 584, 584, // #2999 + 6, 129863, 129863, 2999, 2999, // #3000 + 13, 129880, 129880, 2088, 2088, // #3001 + 40, 129920, 129920, 3376, 3376, // #3002 + 47, 129996, 129996, 3420, 3420, // #3003 + 6, 130052, 130052, 1764, 1764, // #3004 + 5, 130064, 130064, 704, 704, // #3005 + 6, 130087, 130087, 2999, 2999, // #3006 + 14, 130104, 130104, 2216, 2216, // #3007 + 40, 130176, 130176, 3376, 3376, // #3008 + 47, 130252, 130252, 3420, 3420, // #3009 + 15, 130315, 130315, 1771, 1771, // #3010 + 4, 130336, 130336, 928, 928, // #3011 + 4, 130361, 130361, 2729, 2729, // #3012 + 23, 130376, 130376, 1864, 1864, // #3013 + 40, 130432, 130432, 3376, 3376, // #3014 + 47, 130508, 130508, 3420, 3420, // #3015 + 5, 130569, 130569, 2889, 2889, // #3016 + 6, 130576, 130576, 784, 784, // #3017 + 5, 130638, 130638, 190, 190, // #3018 + 1, 130656, 130656, 2080, 2080, // #3019 + 6, 130684, 130684, 2764, 2764, // #3020 + 12, 130704, 130704, 2288, 2288, // #3021 + 40, 130752, 130752, 3376, 3376, // #3022 + 47, 130828, 130828, 3420, 3420, // #3023 + 5, 130895, 130895, 2735, 2735, // #3024 + 11, 130920, 130920, 1608, 1608, // #3025 + 6, 130951, 130951, 2999, 2999, // #3026 + 12, 130960, 130960, 1728, 1728, // #3027 + 40, 131008, 131008, 3376, 3376, // #3028 + 47, 131084, 131084, 3420, 3420, // #3029 + 6, 131140, 131140, 1764, 1764, // #3030 + 5, 131152, 131152, 1728, 1728, // #3031 + 6, 131175, 131175, 2999, 2999, // #3032 + 13, 131184, 131184, 1792, 1792, // #3033 + 40, 131200, 131200, 3376, 3376, // #3034 + 47, 131276, 131276, 3420, 3420, // #3035 + 15, 131339, 131339, 1771, 1771, // #3036 + 5, 131368, 131368, 1960, 1960, // #3037 + 4, 131385, 131385, 2729, 2729, // #3038 + 22, 131392, 131392, 2096, 2096, // #3039 + 40, 131456, 131456, 3376, 3376, // #3040 + 47, 131532, 131532, 3420, 3420, // #3041 + 6, 131584, 131584, 784, 784, // #3042 + 5, 131662, 131662, 190, 190, // #3043 + 3, 131688, 131688, 1384, 1384, // #3044 + 6, 131708, 131708, 2764, 2764, // #3045 + 11, 131736, 131736, 2024, 2024, // #3046 + 40, 131776, 131776, 3376, 3376, // #3047 + 47, 131852, 131852, 3420, 3420, // #3048 + 5, 131919, 131919, 2735, 2735, // #3049 + 11, 131944, 131944, 3544, 3544, // #3050 + 6, 131975, 131975, 2999, 2999, // #3051 + 11, 131984, 131984, 2192, 2192, // #3052 + 40, 132032, 132032, 3376, 3376, // #3053 + 47, 132108, 132108, 3420, 3420, // #3054 + 6, 132164, 132164, 1764, 1764, // #3055 + 5, 132184, 132184, 3704, 3704, // #3056 + 6, 132199, 132199, 2999, 2999, // #3057 + 12, 132208, 132208, 2256, 2256, // #3058 + 40, 132224, 132224, 3376, 3376, // #3059 + 47, 132300, 132300, 3420, 3420, // #3060 + 15, 132363, 132363, 1771, 1771, // #3061 + 5, 132392, 132392, 3928, 3928, // #3062 + 4, 132409, 132409, 2729, 2729, // #3063 + 21, 132424, 132424, 2008, 2008, // #3064 + 40, 132480, 132480, 3376, 3376, // #3065 + 47, 132556, 132556, 3420, 3420, // #3066 + 6, 132608, 132608, 784, 784, // #3067 + 5, 132686, 132686, 190, 190, // #3068 + 1, 132704, 132704, 2656, 2656, // #3069 + 6, 132732, 132732, 2764, 2764, // #3070 + 13, 132752, 132752, 2320, 2320, // #3071 + 40, 132800, 132800, 3376, 3376, // #3072 + 47, 132876, 132876, 3420, 3420, // #3073 + 5, 132943, 132943, 2735, 2735, // #3074 + 8, 132960, 132960, 2192, 2192, // #3075 + 6, 132983, 132983, 2999, 2999, // #3076 + 13, 133000, 133000, 2104, 2104, // #3077 + 40, 133056, 133056, 3376, 3376, // #3078 + 47, 133132, 133132, 3420, 3420, // #3079 + 6, 133188, 133188, 1764, 1764, // #3080 + 5, 133208, 133208, 2312, 2312, // #3081 + 6, 133223, 133223, 2999, 2999, // #3082 + 14, 133256, 133256, 2232, 2232, // #3083 + 40, 133312, 133312, 3376, 3376, // #3084 + 47, 133388, 133388, 3420, 3420, // #3085 + 15, 133451, 133451, 1771, 1771, // #3086 + 4, 133480, 133480, 2536, 2536, // #3087 + 4, 133497, 133497, 2729, 2729, // #3088 + 23, 133512, 133512, 2504, 2504, // #3089 + 40, 133568, 133568, 3376, 3376, // #3090 + 47, 133644, 133644, 3420, 3420, // #3091 + 5, 133705, 133705, 2889, 2889, // #3092 + 6, 133712, 133712, 784, 784, // #3093 + 6, 133728, 133728, 784, 784, // #3094 + 6, 133744, 133744, 784, 784, // #3095 + 10, 133771, 133771, 2171, 2171, // #3096 + 7, 133800, 133800, 88, 88, // #3097 + 5, 133813, 133813, 357, 357, // #3098 + 1, 133834, 133834, 1226, 1226, // #3099 + 1, 133852, 133852, 1228, 1228, // #3100 + 6, 133859, 133859, 1491, 1491, // #3101 + 1, 133882, 133882, 1226, 1226, // #3102 + 1, 133900, 133900, 1228, 1228, // #3103 + 7, 133915, 133915, 1739, 1739, // #3104 + 7, 133947, 133947, 1739, 1739, // #3105 + 7, 133979, 133979, 1739, 1739, // #3106 + 7, 134011, 134011, 1739, 1739, // #3107 + 7, 134043, 134043, 1739, 1739, // #3108 + 1, 134074, 134074, 1226, 1226, // #3109 + 1, 134092, 134092, 1228, 1228, // #3110 + 19, 134099, 134099, 1747, 1747, // #3111 + 1, 134138, 134138, 1226, 1226, // #3112 + 1, 134156, 134156, 1228, 1228, // #3113 + 1, 134170, 134170, 1226, 1226, // #3114 + 1, 134188, 134188, 1228, 1228, // #3115 + 11, 134192, 134192, 3072, 3072, // #3116 + 13, 134209, 134209, 3057, 3057, // #3117 + 11, 134224, 134224, 3072, 3072, // #3118 + 13, 134241, 134241, 3057, 3057, // #3119 + 11, 134256, 134256, 3072, 3072, // #3120 + 11, 134272, 134272, 3072, 3072, // #3121 + 10, 134299, 134299, 1771, 1771, // #3122 + 10, 134324, 134324, 756, 756, // #3123 + 11, 134338, 134338, 642, 642, // #3124 + 3, 134360, 134360, 3000, 3000, // #3125 + 10, 134372, 134372, 756, 756, // #3126 + 17, 134397, 134397, 749, 749, // #3127 + 3, 134424, 134424, 3000, 3000, // #3128 + 3, 134440, 134440, 3000, 3000, // #3129 + 3, 134456, 134456, 3000, 3000, // #3130 + 3, 134472, 134472, 3000, 3000, // #3131 + 1, 134483, 134483, 2339, 2339, // #3132 + 2, 134496, 134496, 64, 64, // #3133 + 3, 134526, 134526, 2734, 2734, // #3134 + 12, 134548, 134548, 1812, 1812, // #3135 + 40, 134592, 134592, 3376, 3376, // #3136 + 47, 134668, 134668, 3420, 3420, // #3137 + 6, 134723, 134723, 1491, 1491, // #3138 + 1, 134736, 134736, 3824, 3824, // #3139 + 3, 134766, 134766, 2734, 2734, // #3140 + 4, 134797, 134797, 509, 509, // #3141 + 40, 134848, 134848, 3376, 3376, // #3142 + 47, 134924, 134924, 3420, 3420, // #3143 + 1, 134976, 134976, 3824, 3824, // #3144 + 3, 135006, 135006, 2734, 2734, // #3145 + 4, 135053, 135053, 509, 509, // #3146 + 40, 135104, 135104, 3376, 3376, // #3147 + 47, 135180, 135180, 3420, 3420, // #3148 + 2, 135232, 135232, 4064, 4064, // #3149 + 3, 135262, 135262, 2734, 2734, // #3150 + 4, 135309, 135309, 509, 509, // #3151 + 40, 135360, 135360, 3376, 3376, // #3152 + 47, 135436, 135436, 3420, 3420, // #3153 + 2, 135488, 135488, 4064, 4064, // #3154 + 3, 135518, 135518, 2734, 2734, // #3155 + 4, 135565, 135565, 509, 509, // #3156 + 40, 135616, 135616, 3376, 3376, // #3157 + 47, 135692, 135692, 3420, 3420, // #3158 + 2, 135752, 135752, 376, 376, // #3159 + 3, 135774, 135774, 2734, 2734, // #3160 + 4, 135821, 135821, 509, 509, // #3161 + 40, 135872, 135872, 3376, 3376, // #3162 + 47, 135948, 135948, 3420, 3420, // #3163 + 2, 136008, 136008, 376, 376, // #3164 + 3, 136030, 136030, 2734, 2734, // #3165 + 4, 136077, 136077, 509, 509, // #3166 + 40, 136128, 136128, 3376, 3376, // #3167 + 47, 136204, 136204, 3420, 3420, // #3168 + 2, 136256, 136256, 784, 784, // #3169 + 3, 136286, 136286, 2734, 2734, // #3170 + 4, 136333, 136333, 509, 509, // #3171 + 40, 136384, 136384, 3376, 3376, // #3172 + 47, 136460, 136460, 3420, 3420, // #3173 + 2, 136512, 136512, 784, 784, // #3174 + 3, 136542, 136542, 2734, 2734, // #3175 + 4, 136589, 136589, 509, 509, // #3176 + 40, 136640, 136640, 3376, 3376, // #3177 + 47, 136716, 136716, 3420, 3420, // #3178 + 2, 136768, 136768, 1200, 1200, // #3179 + 3, 136798, 136798, 2734, 2734, // #3180 + 4, 136845, 136845, 509, 509, // #3181 + 40, 136896, 136896, 3376, 3376, // #3182 + 47, 136972, 136972, 3420, 3420, // #3183 + 2, 137024, 137024, 1200, 1200, // #3184 + 3, 137054, 137054, 2734, 2734, // #3185 + 4, 137101, 137101, 509, 509, // #3186 + 40, 137152, 137152, 3376, 3376, // #3187 + 47, 137228, 137228, 3420, 3420, // #3188 + 2, 137288, 137288, 1608, 1608, // #3189 + 3, 137310, 137310, 2734, 2734, // #3190 + 4, 137357, 137357, 509, 509, // #3191 + 40, 137408, 137408, 3376, 3376, // #3192 + 47, 137484, 137484, 3420, 3420, // #3193 + 2, 137544, 137544, 1608, 1608, // #3194 + 3, 137566, 137566, 2734, 2734, // #3195 + 4, 137613, 137613, 509, 509, // #3196 + 40, 137664, 137664, 3376, 3376, // #3197 + 47, 137740, 137740, 3420, 3420, // #3198 + 2, 137800, 137800, 2008, 2008, // #3199 + 3, 137822, 137822, 2734, 2734, // #3200 + 4, 137869, 137869, 509, 509, // #3201 + 40, 137920, 137920, 3376, 3376, // #3202 + 47, 137996, 137996, 3420, 3420, // #3203 + 2, 138056, 138056, 2008, 2008, // #3204 + 3, 138078, 138078, 2734, 2734, // #3205 + 4, 138125, 138125, 509, 509, // #3206 + 40, 138176, 138176, 3376, 3376, // #3207 + 47, 138252, 138252, 3420, 3420, // #3208 + 2, 138312, 138312, 2408, 2408, // #3209 + 3, 138334, 138334, 2734, 2734, // #3210 + 4, 138381, 138381, 509, 509, // #3211 + 40, 138432, 138432, 3376, 3376, // #3212 + 47, 138508, 138508, 3420, 3420, // #3213 + 2, 138568, 138568, 2408, 2408, // #3214 + 3, 138590, 138590, 2734, 2734, // #3215 + 4, 138637, 138637, 509, 509, // #3216 + 40, 138688, 138688, 3376, 3376, // #3217 + 47, 138764, 138764, 3420, 3420, // #3218 + 2, 138824, 138824, 2808, 2808, // #3219 + 3, 138846, 138846, 2734, 2734, // #3220 + 4, 138893, 138893, 509, 509, // #3221 + 40, 138944, 138944, 3376, 3376, // #3222 + 47, 139020, 139020, 3420, 3420, // #3223 + 2, 139080, 139080, 2808, 2808, // #3224 + 3, 139102, 139102, 2734, 2734, // #3225 + 4, 139149, 139149, 509, 509, // #3226 + 40, 139200, 139200, 3376, 3376, // #3227 + 47, 139276, 139276, 3420, 3420, // #3228 + 2, 139328, 139328, 3216, 3216, // #3229 + 3, 139358, 139358, 2734, 2734, // #3230 + 4, 139405, 139405, 509, 509, // #3231 + 40, 139456, 139456, 3376, 3376, // #3232 + 47, 139532, 139532, 3420, 3420, // #3233 + 2, 139584, 139584, 3216, 3216, // #3234 + 3, 139614, 139614, 2734, 2734, // #3235 + 4, 139661, 139661, 509, 509, // #3236 + 40, 139712, 139712, 3376, 3376, // #3237 + 47, 139788, 139788, 3420, 3420, // #3238 + 2, 139840, 139840, 3216, 3216, // #3239 + 3, 139870, 139870, 2734, 2734, // #3240 + 4, 139917, 139917, 509, 509, // #3241 + 40, 139968, 139968, 3376, 3376, // #3242 + 47, 140044, 140044, 3420, 3420, // #3243 + 2, 140104, 140104, 3624, 3624, // #3244 + 3, 140126, 140126, 2734, 2734, // #3245 + 4, 140173, 140173, 509, 509, // #3246 + 40, 140224, 140224, 3376, 3376, // #3247 + 47, 140300, 140300, 3420, 3420, // #3248 + 2, 140360, 140360, 3624, 3624, // #3249 + 3, 140382, 140382, 2734, 2734, // #3250 + 4, 140429, 140429, 509, 509, // #3251 + 40, 140480, 140480, 3376, 3376, // #3252 + 47, 140556, 140556, 3420, 3420, // #3253 + 2, 140616, 140616, 3624, 3624, // #3254 + 3, 140638, 140638, 2734, 2734, // #3255 + 4, 140685, 140685, 509, 509, // #3256 + 40, 140736, 140736, 3376, 3376, // #3257 + 47, 140812, 140812, 3420, 3420, // #3258 + 2, 140864, 140864, 496, 496, // #3259 + 3, 140894, 140894, 2734, 2734, // #3260 + 4, 140941, 140941, 509, 509, // #3261 + 40, 140992, 140992, 3376, 3376, // #3262 + 47, 141068, 141068, 3420, 3420, // #3263 + 2, 141120, 141120, 496, 496, // #3264 + 3, 141150, 141150, 2734, 2734, // #3265 + 4, 141197, 141197, 509, 509, // #3266 + 40, 141248, 141248, 3376, 3376, // #3267 + 47, 141324, 141324, 3420, 3420, // #3268 + 2, 141376, 141376, 896, 896, // #3269 + 3, 141406, 141406, 2734, 2734, // #3270 + 4, 141453, 141453, 509, 509, // #3271 + 40, 141504, 141504, 3376, 3376, // #3272 + 47, 141580, 141580, 3420, 3420, // #3273 + 2, 141632, 141632, 896, 896, // #3274 + 3, 141662, 141662, 2734, 2734, // #3275 + 4, 141709, 141709, 509, 509, // #3276 + 40, 141760, 141760, 3376, 3376, // #3277 + 47, 141836, 141836, 3420, 3420, // #3278 + 2, 141896, 141896, 1304, 1304, // #3279 + 3, 141918, 141918, 2734, 2734, // #3280 + 4, 141965, 141965, 509, 509, // #3281 + 40, 142016, 142016, 3376, 3376, // #3282 + 47, 142092, 142092, 3420, 3420, // #3283 + 2, 142152, 142152, 1304, 1304, // #3284 + 3, 142174, 142174, 2734, 2734, // #3285 + 4, 142221, 142221, 509, 509, // #3286 + 40, 142272, 142272, 3376, 3376, // #3287 + 47, 142348, 142348, 3420, 3420, // #3288 + 2, 142400, 142400, 1712, 1712, // #3289 + 3, 142430, 142430, 2734, 2734, // #3290 + 4, 142477, 142477, 509, 509, // #3291 + 40, 142528, 142528, 3376, 3376, // #3292 + 47, 142604, 142604, 3420, 3420, // #3293 + 2, 142656, 142656, 1712, 1712, // #3294 + 3, 142686, 142686, 2734, 2734, // #3295 + 4, 142733, 142733, 509, 509, // #3296 + 40, 142784, 142784, 3376, 3376, // #3297 + 47, 142860, 142860, 3420, 3420, // #3298 + 2, 142912, 142912, 2128, 2128, // #3299 + 3, 142942, 142942, 2734, 2734, // #3300 + 4, 142989, 142989, 509, 509, // #3301 + 40, 143040, 143040, 3376, 3376, // #3302 + 47, 143116, 143116, 3420, 3420, // #3303 + 2, 143168, 143168, 2128, 2128, // #3304 + 3, 143198, 143198, 2734, 2734, // #3305 + 4, 143245, 143245, 509, 509, // #3306 + 40, 143296, 143296, 3376, 3376, // #3307 + 47, 143372, 143372, 3420, 3420, // #3308 + 2, 143432, 143432, 2536, 2536, // #3309 + 3, 143454, 143454, 2734, 2734, // #3310 + 4, 143501, 143501, 509, 509, // #3311 + 40, 143552, 143552, 3376, 3376, // #3312 + 47, 143628, 143628, 3420, 3420, // #3313 + 2, 143688, 143688, 2536, 2536, // #3314 + 3, 143710, 143710, 2734, 2734, // #3315 + 4, 143757, 143757, 509, 509, // #3316 + 40, 143808, 143808, 3376, 3376, // #3317 + 47, 143884, 143884, 3420, 3420, // #3318 + 2, 143944, 143944, 2936, 2936, // #3319 + 3, 143966, 143966, 2734, 2734, // #3320 + 4, 144013, 144013, 509, 509, // #3321 + 40, 144064, 144064, 3376, 3376, // #3322 + 47, 144140, 144140, 3420, 3420, // #3323 + 2, 144200, 144200, 2936, 2936, // #3324 + 3, 144222, 144222, 2734, 2734, // #3325 + 4, 144269, 144269, 509, 509, // #3326 + 40, 144320, 144320, 3376, 3376, // #3327 + 47, 144396, 144396, 3420, 3420, // #3328 + 2, 144456, 144456, 3336, 3336, // #3329 + 3, 144478, 144478, 2734, 2734, // #3330 + 4, 144525, 144525, 509, 509, // #3331 + 40, 144576, 144576, 3376, 3376, // #3332 + 47, 144652, 144652, 3420, 3420, // #3333 + 2, 144712, 144712, 3336, 3336, // #3334 + 3, 144734, 144734, 2734, 2734, // #3335 + 4, 144781, 144781, 509, 509, // #3336 + 40, 144832, 144832, 3376, 3376, // #3337 + 47, 144908, 144908, 3420, 3420, // #3338 + 2, 144968, 144968, 3736, 3736, // #3339 + 3, 144990, 144990, 2734, 2734, // #3340 + 4, 145037, 145037, 509, 509, // #3341 + 40, 145088, 145088, 3376, 3376, // #3342 + 47, 145164, 145164, 3420, 3420, // #3343 + 2, 145224, 145224, 3736, 3736, // #3344 + 3, 145246, 145246, 2734, 2734, // #3345 + 4, 145293, 145293, 509, 509, // #3346 + 40, 145344, 145344, 3376, 3376, // #3347 + 47, 145420, 145420, 3420, 3420, // #3348 + 2, 145472, 145472, 48, 48, // #3349 + 3, 145502, 145502, 2734, 2734, // #3350 + 4, 145549, 145549, 509, 509, // #3351 + 40, 145600, 145600, 3376, 3376, // #3352 + 47, 145676, 145676, 3420, 3420, // #3353 + 2, 145728, 145728, 48, 48, // #3354 + 3, 145758, 145758, 2734, 2734, // #3355 + 4, 145805, 145805, 509, 509, // #3356 + 40, 145856, 145856, 3376, 3376, // #3357 + 47, 145932, 145932, 3420, 3420, // #3358 + 2, 145992, 145992, 456, 456, // #3359 + 3, 146014, 146014, 2734, 2734, // #3360 + 4, 146061, 146061, 509, 509, // #3361 + 40, 146112, 146112, 3376, 3376, // #3362 + 47, 146188, 146188, 3420, 3420, // #3363 + 2, 146248, 146248, 456, 456, // #3364 + 3, 146270, 146270, 2734, 2734, // #3365 + 4, 146317, 146317, 509, 509, // #3366 + 40, 146368, 146368, 3376, 3376, // #3367 + 47, 146444, 146444, 3420, 3420, // #3368 + 2, 146504, 146504, 456, 456, // #3369 + 3, 146526, 146526, 2734, 2734, // #3370 + 4, 146573, 146573, 509, 509, // #3371 + 40, 146624, 146624, 3376, 3376, // #3372 + 47, 146700, 146700, 3420, 3420, // #3373 + 2, 146760, 146760, 856, 856, // #3374 + 3, 146782, 146782, 2734, 2734, // #3375 + 4, 146829, 146829, 509, 509, // #3376 + 40, 146880, 146880, 3376, 3376, // #3377 + 47, 146956, 146956, 3420, 3420, // #3378 + 2, 147016, 147016, 856, 856, // #3379 + 3, 147038, 147038, 2734, 2734, // #3380 + 4, 147085, 147085, 509, 509, // #3381 + 40, 147136, 147136, 3376, 3376, // #3382 + 47, 147212, 147212, 3420, 3420, // #3383 + 2, 147272, 147272, 1256, 1256, // #3384 + 3, 147294, 147294, 2734, 2734, // #3385 + 4, 147341, 147341, 509, 509, // #3386 + 40, 147392, 147392, 3376, 3376, // #3387 + 47, 147468, 147468, 3420, 3420, // #3388 + 2, 147528, 147528, 1256, 1256, // #3389 + 3, 147550, 147550, 2734, 2734, // #3390 + 4, 147597, 147597, 509, 509, // #3391 + 40, 147648, 147648, 3376, 3376, // #3392 + 47, 147724, 147724, 3420, 3420, // #3393 + 2, 147776, 147776, 1664, 1664, // #3394 + 3, 147806, 147806, 2734, 2734, // #3395 + 4, 147853, 147853, 509, 509, // #3396 + 40, 147904, 147904, 3376, 3376, // #3397 + 47, 147980, 147980, 3420, 3420, // #3398 + 2, 148032, 148032, 1664, 1664, // #3399 + 3, 148062, 148062, 2734, 2734, // #3400 + 4, 148109, 148109, 509, 509, // #3401 + 40, 148160, 148160, 3376, 3376, // #3402 + 47, 148236, 148236, 3420, 3420, // #3403 + 2, 148296, 148296, 2072, 2072, // #3404 + 3, 148318, 148318, 2734, 2734, // #3405 + 4, 148365, 148365, 509, 509, // #3406 + 40, 148416, 148416, 3376, 3376, // #3407 + 47, 148492, 148492, 3420, 3420, // #3408 + 2, 148552, 148552, 2072, 2072, // #3409 + 3, 148574, 148574, 2734, 2734, // #3410 + 4, 148621, 148621, 509, 509, // #3411 + 40, 148672, 148672, 3376, 3376, // #3412 + 47, 148748, 148748, 3420, 3420, // #3413 + 2, 148808, 148808, 2488, 2488, // #3414 + 3, 148830, 148830, 2734, 2734, // #3415 + 4, 148877, 148877, 509, 509, // #3416 + 40, 148928, 148928, 3376, 3376, // #3417 + 47, 149004, 149004, 3420, 3420, // #3418 + 2, 149064, 149064, 2488, 2488, // #3419 + 3, 149086, 149086, 2734, 2734, // #3420 + 4, 149133, 149133, 509, 509, // #3421 + 40, 149184, 149184, 3376, 3376, // #3422 + 47, 149260, 149260, 3420, 3420, // #3423 + 2, 149320, 149320, 2904, 2904, // #3424 + 3, 149342, 149342, 2734, 2734, // #3425 + 4, 149389, 149389, 509, 509, // #3426 + 40, 149440, 149440, 3376, 3376, // #3427 + 47, 149516, 149516, 3420, 3420, // #3428 + 2, 149576, 149576, 2904, 2904, // #3429 + 3, 149598, 149598, 2734, 2734, // #3430 + 4, 149645, 149645, 509, 509, // #3431 + 40, 149696, 149696, 3376, 3376, // #3432 + 47, 149772, 149772, 3420, 3420, // #3433 + 2, 149824, 149824, 3152, 3152, // #3434 + 3, 149854, 149854, 2734, 2734, // #3435 + 4, 149901, 149901, 509, 509, // #3436 + 40, 149952, 149952, 3376, 3376, // #3437 + 47, 150028, 150028, 3420, 3420, // #3438 + 2, 150080, 150080, 3152, 3152, // #3439 + 3, 150110, 150110, 2734, 2734, // #3440 + 4, 150157, 150157, 509, 509, // #3441 + 40, 150208, 150208, 3376, 3376, // #3442 + 47, 150284, 150284, 3420, 3420, // #3443 + 2, 150336, 150336, 3552, 3552, // #3444 + 3, 150366, 150366, 2734, 2734, // #3445 + 4, 150413, 150413, 509, 509, // #3446 + 40, 150464, 150464, 3376, 3376, // #3447 + 47, 150540, 150540, 3420, 3420, // #3448 + 2, 150592, 150592, 3552, 3552, // #3449 + 3, 150622, 150622, 2734, 2734, // #3450 + 4, 150669, 150669, 509, 509, // #3451 + 40, 150720, 150720, 3376, 3376, // #3452 + 47, 150796, 150796, 3420, 3420, // #3453 + 2, 150848, 150848, 3952, 3952, // #3454 + 3, 150878, 150878, 2734, 2734, // #3455 + 4, 150925, 150925, 509, 509, // #3456 + 40, 150976, 150976, 3376, 3376, // #3457 + 47, 151052, 151052, 3420, 3420, // #3458 + 2, 151104, 151104, 3952, 3952, // #3459 + 3, 151134, 151134, 2734, 2734, // #3460 + 4, 151181, 151181, 509, 509, // #3461 + 40, 151232, 151232, 3376, 3376, // #3462 + 47, 151308, 151308, 3420, 3420, // #3463 + 2, 151368, 151368, 264, 264, // #3464 + 3, 151390, 151390, 2734, 2734, // #3465 + 4, 151437, 151437, 509, 509, // #3466 + 40, 151488, 151488, 3376, 3376, // #3467 + 47, 151564, 151564, 3420, 3420, // #3468 + 2, 151624, 151624, 264, 264, // #3469 + 3, 151646, 151646, 2734, 2734, // #3470 + 4, 151693, 151693, 509, 509, // #3471 + 40, 151744, 151744, 3376, 3376, // #3472 + 47, 151820, 151820, 3420, 3420, // #3473 + 2, 151880, 151880, 264, 264, // #3474 + 3, 151902, 151902, 2734, 2734, // #3475 + 4, 151949, 151949, 509, 509, // #3476 + 40, 152000, 152000, 3376, 3376, // #3477 + 47, 152076, 152076, 3420, 3420, // #3478 + 2, 152128, 152128, 672, 672, // #3479 + 3, 152158, 152158, 2734, 2734, // #3480 + 4, 152205, 152205, 509, 509, // #3481 + 40, 152256, 152256, 3376, 3376, // #3482 + 47, 152332, 152332, 3420, 3420, // #3483 + 2, 152384, 152384, 672, 672, // #3484 + 3, 152414, 152414, 2734, 2734, // #3485 + 4, 152461, 152461, 509, 509, // #3486 + 40, 152512, 152512, 3376, 3376, // #3487 + 47, 152588, 152588, 3420, 3420, // #3488 + 2, 152640, 152640, 672, 672, // #3489 + 3, 152670, 152670, 2734, 2734, // #3490 + 4, 152717, 152717, 509, 509, // #3491 + 40, 152768, 152768, 3376, 3376, // #3492 + 47, 152844, 152844, 3420, 3420, // #3493 + 2, 152896, 152896, 1072, 1072, // #3494 + 3, 152926, 152926, 2734, 2734, // #3495 + 4, 152973, 152973, 509, 509, // #3496 + 40, 153024, 153024, 3376, 3376, // #3497 + 47, 153100, 153100, 3420, 3420, // #3498 + 2, 153152, 153152, 1072, 1072, // #3499 + 3, 153182, 153182, 2734, 2734, // #3500 + 4, 153229, 153229, 509, 509, // #3501 + 40, 153280, 153280, 3376, 3376, // #3502 + 47, 153356, 153356, 3420, 3420, // #3503 + 2, 153408, 153408, 1472, 1472, // #3504 + 3, 153438, 153438, 2734, 2734, // #3505 + 4, 153485, 153485, 509, 509, // #3506 + 40, 153536, 153536, 3376, 3376, // #3507 + 47, 153612, 153612, 3420, 3420, // #3508 + 2, 153664, 153664, 1472, 1472, // #3509 + 3, 153694, 153694, 2734, 2734, // #3510 + 4, 153741, 153741, 509, 509, // #3511 + 40, 153792, 153792, 3376, 3376, // #3512 + 47, 153868, 153868, 3420, 3420, // #3513 + 2, 153928, 153928, 1880, 1880, // #3514 + 3, 153950, 153950, 2734, 2734, // #3515 + 4, 153997, 153997, 509, 509, // #3516 + 40, 154048, 154048, 3376, 3376, // #3517 + 47, 154124, 154124, 3420, 3420, // #3518 + 2, 154184, 154184, 1880, 1880, // #3519 + 3, 154206, 154206, 2734, 2734, // #3520 + 4, 154253, 154253, 509, 509, // #3521 + 40, 154304, 154304, 3376, 3376, // #3522 + 47, 154380, 154380, 3420, 3420, // #3523 + 2, 154432, 154432, 2288, 2288, // #3524 + 3, 154462, 154462, 2734, 2734, // #3525 + 4, 154509, 154509, 509, 509, // #3526 + 40, 154560, 154560, 3376, 3376, // #3527 + 47, 154636, 154636, 3420, 3420, // #3528 + 2, 154688, 154688, 2288, 2288, // #3529 + 3, 154718, 154718, 2734, 2734, // #3530 + 4, 154765, 154765, 509, 509, // #3531 + 40, 154816, 154816, 3376, 3376, // #3532 + 47, 154892, 154892, 3420, 3420, // #3533 + 2, 154944, 154944, 2704, 2704, // #3534 + 3, 154974, 154974, 2734, 2734, // #3535 + 4, 155021, 155021, 509, 509, // #3536 + 40, 155072, 155072, 3376, 3376, // #3537 + 47, 155148, 155148, 3420, 3420, // #3538 + 2, 155200, 155200, 2704, 2704, // #3539 + 3, 155230, 155230, 2734, 2734, // #3540 + 4, 155277, 155277, 509, 509, // #3541 + 40, 155328, 155328, 3376, 3376, // #3542 + 47, 155404, 155404, 3420, 3420, // #3543 + 2, 155464, 155464, 3112, 3112, // #3544 + 3, 155486, 155486, 2734, 2734, // #3545 + 4, 155533, 155533, 509, 509, // #3546 + 40, 155584, 155584, 3376, 3376, // #3547 + 47, 155660, 155660, 3420, 3420, // #3548 + 2, 155720, 155720, 3112, 3112, // #3549 + 3, 155742, 155742, 2734, 2734, // #3550 + 4, 155789, 155789, 509, 509, // #3551 + 40, 155840, 155840, 3376, 3376, // #3552 + 47, 155916, 155916, 3420, 3420, // #3553 + 2, 155976, 155976, 3512, 3512, // #3554 + 3, 155998, 155998, 2734, 2734, // #3555 + 4, 156045, 156045, 509, 509, // #3556 + 40, 156096, 156096, 3376, 3376, // #3557 + 47, 156172, 156172, 3420, 3420, // #3558 + 2, 156232, 156232, 3512, 3512, // #3559 + 3, 156254, 156254, 2734, 2734, // #3560 + 4, 156301, 156301, 509, 509, // #3561 + 40, 156352, 156352, 3376, 3376, // #3562 + 47, 156428, 156428, 3420, 3420, // #3563 + 2, 156488, 156488, 3912, 3912, // #3564 + 3, 156510, 156510, 2734, 2734, // #3565 + 4, 156557, 156557, 509, 509, // #3566 + 40, 156608, 156608, 3376, 3376, // #3567 + 47, 156684, 156684, 3420, 3420, // #3568 + 2, 156744, 156744, 3912, 3912, // #3569 + 3, 156766, 156766, 2734, 2734, // #3570 + 4, 156813, 156813, 509, 509, // #3571 + 40, 156864, 156864, 3376, 3376, // #3572 + 47, 156940, 156940, 3420, 3420, // #3573 + 2, 157000, 157000, 216, 216, // #3574 + 3, 157022, 157022, 2734, 2734, // #3575 + 4, 157069, 157069, 509, 509, // #3576 + 40, 157120, 157120, 3376, 3376, // #3577 + 47, 157196, 157196, 3420, 3420, // #3578 + 2, 157256, 157256, 216, 216, // #3579 + 3, 157278, 157278, 2734, 2734, // #3580 + 4, 157325, 157325, 509, 509, // #3581 + 40, 157376, 157376, 3376, 3376, // #3582 + 47, 157452, 157452, 3420, 3420, // #3583 + 2, 157512, 157512, 632, 632, // #3584 + 3, 157534, 157534, 2734, 2734, // #3585 + 4, 157581, 157581, 509, 509, // #3586 + 40, 157632, 157632, 3376, 3376, // #3587 + 47, 157708, 157708, 3420, 3420, // #3588 + 2, 157768, 157768, 632, 632, // #3589 + 3, 157790, 157790, 2734, 2734, // #3590 + 4, 157837, 157837, 509, 509, // #3591 + 40, 157888, 157888, 3376, 3376, // #3592 + 47, 157964, 157964, 3420, 3420, // #3593 + 2, 158024, 158024, 632, 632, // #3594 + 3, 158046, 158046, 2734, 2734, // #3595 + 4, 158093, 158093, 509, 509, // #3596 + 40, 158144, 158144, 3376, 3376, // #3597 + 47, 158220, 158220, 3420, 3420, // #3598 + 2, 158272, 158272, 1040, 1040, // #3599 + 3, 158302, 158302, 2734, 2734, // #3600 + 4, 158349, 158349, 509, 509, // #3601 + 40, 158400, 158400, 3376, 3376, // #3602 + 47, 158476, 158476, 3420, 3420, // #3603 + 2, 158528, 158528, 1040, 1040, // #3604 + 3, 158558, 158558, 2734, 2734, // #3605 + 4, 158605, 158605, 509, 509, // #3606 + 40, 158656, 158656, 3376, 3376, // #3607 + 47, 158732, 158732, 3420, 3420, // #3608 + 2, 158784, 158784, 1040, 1040, // #3609 + 3, 158814, 158814, 2734, 2734, // #3610 + 4, 158861, 158861, 509, 509, // #3611 + 40, 158912, 158912, 3376, 3376, // #3612 + 47, 158988, 158988, 3420, 3420, // #3613 + 2, 159040, 159040, 1440, 1440, // #3614 + 3, 159070, 159070, 2734, 2734, // #3615 + 4, 159117, 159117, 509, 509, // #3616 + 40, 159168, 159168, 3376, 3376, // #3617 + 47, 159244, 159244, 3420, 3420, // #3618 + 2, 159296, 159296, 1440, 1440, // #3619 + 3, 159326, 159326, 2734, 2734, // #3620 + 4, 159373, 159373, 509, 509, // #3621 + 40, 159424, 159424, 3376, 3376, // #3622 + 47, 159500, 159500, 3420, 3420, // #3623 + 2, 159552, 159552, 1840, 1840, // #3624 + 3, 159582, 159582, 2734, 2734, // #3625 + 4, 159629, 159629, 509, 509, // #3626 + 40, 159680, 159680, 3376, 3376, // #3627 + 47, 159756, 159756, 3420, 3420, // #3628 + 2, 159808, 159808, 1840, 1840, // #3629 + 3, 159838, 159838, 2734, 2734, // #3630 + 4, 159885, 159885, 509, 509, // #3631 + 40, 159936, 159936, 3376, 3376, // #3632 + 47, 160012, 160012, 3420, 3420, // #3633 + 2, 160072, 160072, 2248, 2248, // #3634 + 3, 160094, 160094, 2734, 2734, // #3635 + 4, 160141, 160141, 509, 509, // #3636 + 40, 160192, 160192, 3376, 3376, // #3637 + 47, 160268, 160268, 3420, 3420, // #3638 + 2, 160328, 160328, 2248, 2248, // #3639 + 3, 160350, 160350, 2734, 2734, // #3640 + 4, 160397, 160397, 509, 509, // #3641 + 40, 160448, 160448, 3376, 3376, // #3642 + 47, 160524, 160524, 3420, 3420, // #3643 + 2, 160576, 160576, 2656, 2656, // #3644 + 3, 160606, 160606, 2734, 2734, // #3645 + 4, 160653, 160653, 509, 509, // #3646 + 40, 160704, 160704, 3376, 3376, // #3647 + 47, 160780, 160780, 3420, 3420, // #3648 + 2, 160832, 160832, 2656, 2656, // #3649 + 3, 160862, 160862, 2734, 2734, // #3650 + 4, 160909, 160909, 509, 509, // #3651 + 40, 160960, 160960, 3376, 3376, // #3652 + 47, 161036, 161036, 3420, 3420, // #3653 + 2, 161088, 161088, 3072, 3072, // #3654 + 3, 161118, 161118, 2734, 2734, // #3655 + 4, 161165, 161165, 509, 509, // #3656 + 40, 161216, 161216, 3376, 3376, // #3657 + 47, 161292, 161292, 3420, 3420, // #3658 + 2, 161344, 161344, 3072, 3072, // #3659 + 3, 161374, 161374, 2734, 2734, // #3660 + 4, 161421, 161421, 509, 509, // #3661 + 40, 161472, 161472, 3376, 3376, // #3662 + 47, 161548, 161548, 3420, 3420, // #3663 + 2, 161608, 161608, 3480, 3480, // #3664 + 3, 161630, 161630, 2734, 2734, // #3665 + 4, 161677, 161677, 509, 509, // #3666 + 40, 161728, 161728, 3376, 3376, // #3667 + 47, 161804, 161804, 3420, 3420, // #3668 + 2, 161864, 161864, 3480, 3480, // #3669 + 3, 161886, 161886, 2734, 2734, // #3670 + 4, 161933, 161933, 509, 509, // #3671 + 40, 161984, 161984, 3376, 3376, // #3672 + 47, 162060, 162060, 3420, 3420, // #3673 + 2, 162120, 162120, 3880, 3880, // #3674 + 3, 162142, 162142, 2734, 2734, // #3675 + 4, 162189, 162189, 509, 509, // #3676 + 40, 162240, 162240, 3376, 3376, // #3677 + 47, 162316, 162316, 3420, 3420, // #3678 + 2, 162376, 162376, 3880, 3880, // #3679 + 3, 162398, 162398, 2734, 2734, // #3680 + 4, 162445, 162445, 509, 509, // #3681 + 40, 162496, 162496, 3376, 3376, // #3682 + 47, 162572, 162572, 3420, 3420, // #3683 + 2, 162632, 162632, 184, 184, // #3684 + 3, 162654, 162654, 2734, 2734, // #3685 + 4, 162701, 162701, 509, 509, // #3686 + 40, 162752, 162752, 3376, 3376, // #3687 + 47, 162828, 162828, 3420, 3420, // #3688 + 2, 162888, 162888, 184, 184, // #3689 + 3, 162910, 162910, 2734, 2734, // #3690 + 4, 162957, 162957, 509, 509, // #3691 + 40, 163008, 163008, 3376, 3376, // #3692 + 47, 163084, 163084, 3420, 3420, // #3693 + 2, 163144, 163144, 584, 584, // #3694 + 3, 163166, 163166, 2734, 2734, // #3695 + 4, 163213, 163213, 509, 509, // #3696 + 40, 163264, 163264, 3376, 3376, // #3697 + 47, 163340, 163340, 3420, 3420, // #3698 + 2, 163400, 163400, 584, 584, // #3699 + 3, 163422, 163422, 2734, 2734, // #3700 + 4, 163469, 163469, 509, 509, // #3701 + 40, 163520, 163520, 3376, 3376, // #3702 + 47, 163596, 163596, 3420, 3420, // #3703 + 2, 163648, 163648, 992, 992, // #3704 + 3, 163678, 163678, 2734, 2734, // #3705 + 4, 163725, 163725, 509, 509, // #3706 + 40, 163776, 163776, 3376, 3376, // #3707 + 47, 163852, 163852, 3420, 3420, // #3708 + 2, 163904, 163904, 992, 992, // #3709 + 3, 163934, 163934, 2734, 2734, // #3710 + 4, 163981, 163981, 509, 509, // #3711 + 40, 164032, 164032, 3376, 3376, // #3712 + 47, 164108, 164108, 3420, 3420, // #3713 + 2, 164160, 164160, 992, 992, // #3714 + 3, 164190, 164190, 2734, 2734, // #3715 + 4, 164237, 164237, 509, 509, // #3716 + 40, 164288, 164288, 3376, 3376, // #3717 + 47, 164364, 164364, 3420, 3420, // #3718 + 2, 164424, 164424, 1400, 1400, // #3719 + 3, 164446, 164446, 2734, 2734, // #3720 + 4, 164493, 164493, 509, 509, // #3721 + 40, 164544, 164544, 3376, 3376, // #3722 + 47, 164620, 164620, 3420, 3420, // #3723 + 2, 164680, 164680, 1400, 1400, // #3724 + 3, 164702, 164702, 2734, 2734, // #3725 + 4, 164749, 164749, 509, 509, // #3726 + 40, 164800, 164800, 3376, 3376, // #3727 + 47, 164876, 164876, 3420, 3420, // #3728 + 2, 164936, 164936, 1400, 1400, // #3729 + 3, 164958, 164958, 2734, 2734, // #3730 + 4, 165005, 165005, 509, 509, // #3731 + 40, 165056, 165056, 3376, 3376, // #3732 + 47, 165132, 165132, 3420, 3420, // #3733 + 2, 165192, 165192, 1800, 1800, // #3734 + 3, 165214, 165214, 2734, 2734, // #3735 + 4, 165261, 165261, 509, 509, // #3736 + 40, 165312, 165312, 3376, 3376, // #3737 + 47, 165388, 165388, 3420, 3420, // #3738 + 2, 165448, 165448, 1800, 1800, // #3739 + 3, 165470, 165470, 2734, 2734, // #3740 + 4, 165517, 165517, 509, 509, // #3741 + 40, 165568, 165568, 3376, 3376, // #3742 + 47, 165644, 165644, 3420, 3420, // #3743 + 3, 165704, 165704, 2200, 2200, // #3744 + 3, 165726, 165726, 2734, 2734, // #3745 + 4, 165773, 165773, 509, 509, // #3746 + 40, 165824, 165824, 3376, 3376, // #3747 + 47, 165900, 165900, 3420, 3420, // #3748 + 3, 165960, 165960, 2200, 2200, // #3749 + 3, 165982, 165982, 2734, 2734, // #3750 + 4, 166029, 166029, 509, 509, // #3751 + 40, 166080, 166080, 3376, 3376, // #3752 + 47, 166156, 166156, 3420, 3420, // #3753 + 3, 166208, 166208, 2608, 2608, // #3754 + 3, 166238, 166238, 2734, 2734, // #3755 + 4, 166285, 166285, 509, 509, // #3756 + 40, 166336, 166336, 3376, 3376, // #3757 + 47, 166412, 166412, 3420, 3420, // #3758 + 3, 166464, 166464, 2608, 2608, // #3759 + 3, 166494, 166494, 2734, 2734, // #3760 + 4, 166541, 166541, 509, 509, // #3761 + 40, 166592, 166592, 3376, 3376, // #3762 + 47, 166668, 166668, 3420, 3420, // #3763 + 3, 166720, 166720, 3024, 3024, // #3764 + 3, 166750, 166750, 2734, 2734, // #3765 + 4, 166797, 166797, 509, 509, // #3766 + 40, 166848, 166848, 3376, 3376, // #3767 + 47, 166924, 166924, 3420, 3420, // #3768 + 3, 166976, 166976, 3024, 3024, // #3769 + 3, 167006, 167006, 2734, 2734, // #3770 + 4, 167053, 167053, 509, 509, // #3771 + 40, 167104, 167104, 3376, 3376, // #3772 + 47, 167180, 167180, 3420, 3420, // #3773 + 3, 167232, 167232, 3440, 3440, // #3774 + 3, 167262, 167262, 2734, 2734, // #3775 + 4, 167309, 167309, 509, 509, // #3776 + 40, 167360, 167360, 3376, 3376, // #3777 + 47, 167436, 167436, 3420, 3420, // #3778 + 3, 167488, 167488, 3440, 3440, // #3779 + 3, 167518, 167518, 2734, 2734, // #3780 + 4, 167565, 167565, 509, 509, // #3781 + 40, 167616, 167616, 3376, 3376, // #3782 + 47, 167692, 167692, 3420, 3420, // #3783 + 3, 167752, 167752, 3848, 3848, // #3784 + 3, 167774, 167774, 2734, 2734, // #3785 + 4, 167821, 167821, 509, 509, // #3786 + 40, 167872, 167872, 3376, 3376, // #3787 + 47, 167948, 167948, 3420, 3420, // #3788 + 3, 168008, 168008, 3848, 3848, // #3789 + 3, 168030, 168030, 2734, 2734, // #3790 + 4, 168077, 168077, 509, 509, // #3791 + 40, 168128, 168128, 3376, 3376, // #3792 + 47, 168204, 168204, 3420, 3420, // #3793 + 3, 168264, 168264, 152, 152, // #3794 + 3, 168286, 168286, 2734, 2734, // #3795 + 4, 168333, 168333, 509, 509, // #3796 + 40, 168384, 168384, 3376, 3376, // #3797 + 47, 168460, 168460, 3420, 3420, // #3798 + 3, 168520, 168520, 152, 152, // #3799 + 3, 168542, 168542, 2734, 2734, // #3800 + 4, 168589, 168589, 509, 509, // #3801 + 40, 168640, 168640, 3376, 3376, // #3802 + 47, 168716, 168716, 3420, 3420, // #3803 + 3, 168776, 168776, 552, 552, // #3804 + 3, 168798, 168798, 2734, 2734, // #3805 + 4, 168845, 168845, 509, 509, // #3806 + 40, 168896, 168896, 3376, 3376, // #3807 + 47, 168972, 168972, 3420, 3420, // #3808 + 3, 169032, 169032, 552, 552, // #3809 + 3, 169054, 169054, 2734, 2734, // #3810 + 4, 169101, 169101, 509, 509, // #3811 + 40, 169152, 169152, 3376, 3376, // #3812 + 47, 169228, 169228, 3420, 3420, // #3813 + 3, 169280, 169280, 960, 960, // #3814 + 3, 169310, 169310, 2734, 2734, // #3815 + 4, 169357, 169357, 509, 509, // #3816 + 40, 169408, 169408, 3376, 3376, // #3817 + 47, 169484, 169484, 3420, 3420, // #3818 + 3, 169536, 169536, 960, 960, // #3819 + 3, 169566, 169566, 2734, 2734, // #3820 + 4, 169613, 169613, 509, 509, // #3821 + 40, 169664, 169664, 3376, 3376, // #3822 + 47, 169740, 169740, 3420, 3420, // #3823 + 3, 169800, 169800, 1368, 1368, // #3824 + 3, 169822, 169822, 2734, 2734, // #3825 + 4, 169869, 169869, 509, 509, // #3826 + 40, 169920, 169920, 3376, 3376, // #3827 + 47, 169996, 169996, 3420, 3420, // #3828 + 3, 170056, 170056, 1368, 1368, // #3829 + 3, 170078, 170078, 2734, 2734, // #3830 + 4, 170125, 170125, 509, 509, // #3831 + 40, 170176, 170176, 3376, 3376, // #3832 + 47, 170252, 170252, 3420, 3420, // #3833 + 3, 170312, 170312, 1368, 1368, // #3834 + 3, 170334, 170334, 2734, 2734, // #3835 + 4, 170381, 170381, 509, 509, // #3836 + 40, 170432, 170432, 3376, 3376, // #3837 + 47, 170508, 170508, 3420, 3420, // #3838 + 3, 170560, 170560, 1776, 1776, // #3839 + 3, 170590, 170590, 2734, 2734, // #3840 + 4, 170637, 170637, 509, 509, // #3841 + 40, 170688, 170688, 3376, 3376, // #3842 + 47, 170764, 170764, 3420, 3420, // #3843 + 3, 170816, 170816, 1776, 1776, // #3844 + 3, 170846, 170846, 2734, 2734, // #3845 + 4, 170893, 170893, 509, 509, // #3846 + 40, 170944, 170944, 3376, 3376, // #3847 + 47, 171020, 171020, 3420, 3420, // #3848 + 3, 171072, 171072, 1776, 1776, // #3849 + 3, 171102, 171102, 2734, 2734, // #3850 + 4, 171149, 171149, 509, 509, // #3851 + 40, 171200, 171200, 3376, 3376, // #3852 + 47, 171276, 171276, 3420, 3420, // #3853 + 3, 171328, 171328, 2176, 2176, // #3854 + 3, 171358, 171358, 2734, 2734, // #3855 + 4, 171405, 171405, 509, 509, // #3856 + 40, 171456, 171456, 3376, 3376, // #3857 + 47, 171532, 171532, 3420, 3420, // #3858 + 3, 171584, 171584, 2176, 2176, // #3859 + 3, 171614, 171614, 2734, 2734, // #3860 + 4, 171661, 171661, 509, 509, // #3861 + 40, 171712, 171712, 3376, 3376, // #3862 + 47, 171788, 171788, 3420, 3420, // #3863 + 3, 171840, 171840, 2576, 2576, // #3864 + 3, 171870, 171870, 2734, 2734, // #3865 + 4, 171917, 171917, 509, 509, // #3866 + 40, 171968, 171968, 3376, 3376, // #3867 + 47, 172044, 172044, 3420, 3420, // #3868 + 3, 172096, 172096, 2576, 2576, // #3869 + 3, 172126, 172126, 2734, 2734, // #3870 + 4, 172173, 172173, 509, 509, // #3871 + 40, 172224, 172224, 3376, 3376, // #3872 + 47, 172300, 172300, 3420, 3420, // #3873 + 3, 172352, 172352, 2976, 2976, // #3874 + 3, 172382, 172382, 2734, 2734, // #3875 + 4, 172429, 172429, 509, 509, // #3876 + 40, 172480, 172480, 3376, 3376, // #3877 + 47, 172556, 172556, 3420, 3420, // #3878 + 3, 172608, 172608, 2976, 2976, // #3879 + 3, 172638, 172638, 2734, 2734, // #3880 + 4, 172685, 172685, 509, 509, // #3881 + 40, 172736, 172736, 3376, 3376, // #3882 + 47, 172812, 172812, 3420, 3420, // #3883 + 3, 172864, 172864, 3392, 3392, // #3884 + 3, 172894, 172894, 2734, 2734, // #3885 + 4, 172941, 172941, 509, 509, // #3886 + 40, 172992, 172992, 3376, 3376, // #3887 + 47, 173068, 173068, 3420, 3420, // #3888 + 3, 173120, 173120, 3392, 3392, // #3889 + 3, 173150, 173150, 2734, 2734, // #3890 + 4, 173197, 173197, 509, 509, // #3891 + 40, 173248, 173248, 3376, 3376, // #3892 + 47, 173324, 173324, 3420, 3420, // #3893 + 3, 173384, 173384, 3800, 3800, // #3894 + 3, 173406, 173406, 2734, 2734, // #3895 + 4, 173453, 173453, 509, 509, // #3896 + 40, 173504, 173504, 3376, 3376, // #3897 + 47, 173580, 173580, 3420, 3420, // #3898 + 3, 173640, 173640, 3800, 3800, // #3899 + 3, 173662, 173662, 2734, 2734, // #3900 + 4, 173709, 173709, 509, 509, // #3901 + 40, 173760, 173760, 3376, 3376, // #3902 + 47, 173836, 173836, 3420, 3420, // #3903 + 3, 173888, 173888, 112, 112, // #3904 + 3, 173918, 173918, 2734, 2734, // #3905 + 4, 173965, 173965, 509, 509, // #3906 + 40, 174016, 174016, 3376, 3376, // #3907 + 47, 174092, 174092, 3420, 3420, // #3908 + 3, 174144, 174144, 112, 112, // #3909 + 3, 174174, 174174, 2734, 2734, // #3910 + 4, 174221, 174221, 509, 509, // #3911 + 40, 174272, 174272, 3376, 3376, // #3912 + 47, 174348, 174348, 3420, 3420, // #3913 + 3, 174408, 174408, 520, 520, // #3914 + 3, 174430, 174430, 2734, 2734, // #3915 + 4, 174477, 174477, 509, 509, // #3916 + 40, 174528, 174528, 3376, 3376, // #3917 + 47, 174604, 174604, 3420, 3420, // #3918 + 3, 174664, 174664, 520, 520, // #3919 + 3, 174686, 174686, 2734, 2734, // #3920 + 4, 174733, 174733, 509, 509, // #3921 + 40, 174784, 174784, 3376, 3376, // #3922 + 47, 174860, 174860, 3420, 3420, // #3923 + 3, 174920, 174920, 520, 520, // #3924 + 3, 174942, 174942, 2734, 2734, // #3925 + 4, 174989, 174989, 509, 509, // #3926 + 40, 175040, 175040, 3376, 3376, // #3927 + 47, 175116, 175116, 3420, 3420, // #3928 + 3, 175176, 175176, 920, 920, // #3929 + 3, 175198, 175198, 2734, 2734, // #3930 + 4, 175245, 175245, 509, 509, // #3931 + 40, 175296, 175296, 3376, 3376, // #3932 + 47, 175372, 175372, 3420, 3420, // #3933 + 3, 175432, 175432, 920, 920, // #3934 + 3, 175454, 175454, 2734, 2734, // #3935 + 4, 175501, 175501, 509, 509, // #3936 + 40, 175552, 175552, 3376, 3376, // #3937 + 47, 175628, 175628, 3420, 3420, // #3938 + 7, 175684, 175684, 1684, 1684, // #3939 + 7, 175698, 175698, 386, 386, // #3940 + 11, 175724, 175724, 1692, 1692, // #3941 + 5, 175752, 175752, 1704, 1704, // #3942 + 5, 175774, 175774, 1710, 1710, // #3943 + 6, 175795, 175795, 131, 131, // #3944 + 7, 175808, 175808, 2464, 2464, // #3945 + 2, 175832, 175832, 4072, 4072, // #3946 + 3, 175854, 175854, 2734, 2734, // #3947 + 14, 175880, 175880, 2504, 2504, // #3948 + 40, 175936, 175936, 3376, 3376, // #3949 + 47, 176012, 176012, 3420, 3420, // #3950 + 5, 176064, 176064, 1872, 1872, // #3951 + 22, 176128, 176128, 2416, 2416, // #3952 + 12, 176165, 176165, 2789, 2789, // #3953 + 12, 176192, 176192, 2672, 2672, // #3954 + 40, 176256, 176256, 3376, 3376, // #3955 + 47, 176332, 176332, 3420, 3420, // #3956 + 7, 176384, 176384, 2464, 2464, // #3957 + 2, 176400, 176400, 48, 48, // #3958 + 3, 176430, 176430, 2734, 2734, // #3959 + 14, 176456, 176456, 2600, 2600, // #3960 + 40, 176512, 176512, 3376, 3376, // #3961 + 47, 176588, 176588, 3420, 3420, // #3962 + 5, 176640, 176640, 1872, 1872, // #3963 + 11, 176656, 176656, 2624, 2624, // #3964 + 12, 176677, 176677, 2789, 2789, // #3965 + 12, 176712, 176712, 2760, 2760, // #3966 + 40, 176768, 176768, 3376, 3376, // #3967 + 47, 176844, 176844, 3420, 3420, // #3968 + 7, 176896, 176896, 2464, 2464, // #3969 + 2, 176920, 176920, 2744, 2744, // #3970 + 3, 176942, 176942, 2734, 2734, // #3971 + 18, 176960, 176960, 2608, 2608, // #3972 + 40, 177024, 177024, 3376, 3376, // #3973 + 47, 177100, 177100, 3420, 3420, // #3974 + 5, 177152, 177152, 1872, 1872, // #3975 + 11, 177168, 177168, 2864, 2864, // #3976 + 12, 177189, 177189, 2789, 2789, // #3977 + 16, 177224, 177224, 2808, 2808, // #3978 + 40, 177280, 177280, 3376, 3376, // #3979 + 47, 177356, 177356, 3420, 3420, // #3980 + 7, 177408, 177408, 2464, 2464, // #3981 + 2, 177424, 177424, 2992, 2992, // #3982 + 3, 177454, 177454, 2734, 2734, // #3983 + 12, 177480, 177480, 2536, 2536, // #3984 + 40, 177536, 177536, 3376, 3376, // #3985 + 47, 177612, 177612, 3420, 3420, // #3986 + 5, 177664, 177664, 1872, 1872, // #3987 + 11, 177680, 177680, 3104, 3104, // #3988 + 12, 177701, 177701, 2789, 2789, // #3989 + 10, 177736, 177736, 2808, 2808, // #3990 + 40, 177792, 177792, 3376, 3376, // #3991 + 47, 177868, 177868, 3420, 3420, // #3992 + 7, 177920, 177920, 2464, 2464, // #3993 + 2, 177944, 177944, 3224, 3224, // #3994 + 3, 177966, 177966, 2734, 2734, // #3995 + 12, 177992, 177992, 2536, 2536, // #3996 + 40, 178048, 178048, 3376, 3376, // #3997 + 47, 178124, 178124, 3420, 3420, // #3998 + 5, 178176, 178176, 1872, 1872, // #3999 + 22, 178200, 178200, 3336, 3336, // #4000 + 12, 178229, 178229, 2789, 2789, // #4001 + 10, 178256, 178256, 3088, 3088, // #4002 + 40, 178304, 178304, 3376, 3376, // #4003 + 47, 178380, 178380, 3420, 3420, // #4004 + 7, 178432, 178432, 2464, 2464, // #4005 + 2, 178456, 178456, 3464, 3464, // #4006 + 3, 178478, 178478, 2734, 2734, // #4007 + 13, 178504, 178504, 2536, 2536, // #4008 + 40, 178560, 178560, 3376, 3376, // #4009 + 47, 178636, 178636, 3420, 3420, // #4010 + 5, 178688, 178688, 1872, 1872, // #4011 + 22, 178760, 178760, 3576, 3576, // #4012 + 12, 178789, 178789, 2789, 2789, // #4013 + 11, 178824, 178824, 2888, 2888, // #4014 + 40, 178880, 178880, 3376, 3376, // #4015 + 47, 178956, 178956, 3420, 3420, // #4016 + 6, 179011, 179011, 1491, 1491, // #4017 + 6, 179027, 179027, 1491, 1491, // #4018 + 7, 179051, 179051, 1739, 1739, // #4019 + 7, 179083, 179083, 1739, 1739, // #4020 + 7, 179115, 179115, 1739, 1739, // #4021 + 7, 179147, 179147, 1739, 1739, // #4022 + 7, 179179, 179179, 1739, 1739, // #4023 + 19, 179203, 179203, 1747, 1747, // #4024 + 11, 179232, 179232, 3072, 3072, // #4025 + 13, 179249, 179249, 3057, 3057, // #4026 + 11, 179264, 179264, 3072, 3072, // #4027 + 13, 179281, 179281, 3057, 3057, // #4028 + 11, 179296, 179296, 3072, 3072, // #4029 + 11, 179312, 179312, 3072, 3072, // #4030 + 10, 179339, 179339, 1771, 1771, // #4031 + 2, 179360, 179360, 64, 64, // #4032 + 3, 179390, 179390, 2734, 2734, // #4033 + 12, 179412, 179412, 1812, 1812, // #4034 + 40, 179456, 179456, 3376, 3376, // #4035 + 47, 179532, 179532, 3420, 3420, // #4036 + 6, 179587, 179587, 1491, 1491, // #4037 + 1, 179600, 179600, 3824, 3824, // #4038 + 3, 179630, 179630, 2734, 2734, // #4039 + 4, 179661, 179661, 509, 509, // #4040 + 40, 179712, 179712, 3376, 3376, // #4041 + 47, 179788, 179788, 3420, 3420, // #4042 + 1, 179840, 179840, 3824, 3824, // #4043 + 3, 179870, 179870, 2734, 2734, // #4044 + 4, 179917, 179917, 509, 509, // #4045 + 40, 179968, 179968, 3376, 3376, // #4046 + 47, 180044, 180044, 3420, 3420, // #4047 + 2, 180096, 180096, 4064, 4064, // #4048 + 3, 180126, 180126, 2734, 2734, // #4049 + 4, 180173, 180173, 509, 509, // #4050 + 40, 180224, 180224, 3376, 3376, // #4051 + 47, 180300, 180300, 3420, 3420, // #4052 + 2, 180352, 180352, 4064, 4064, // #4053 + 3, 180382, 180382, 2734, 2734, // #4054 + 4, 180429, 180429, 509, 509, // #4055 + 40, 180480, 180480, 3376, 3376, // #4056 + 47, 180556, 180556, 3420, 3420, // #4057 + 2, 180616, 180616, 376, 376, // #4058 + 3, 180638, 180638, 2734, 2734, // #4059 + 4, 180685, 180685, 509, 509, // #4060 + 40, 180736, 180736, 3376, 3376, // #4061 + 47, 180812, 180812, 3420, 3420, // #4062 + 2, 180872, 180872, 376, 376, // #4063 + 3, 180894, 180894, 2734, 2734, // #4064 + 4, 180941, 180941, 509, 509, // #4065 + 40, 180992, 180992, 3376, 3376, // #4066 + 47, 181068, 181068, 3420, 3420, // #4067 + 2, 181120, 181120, 784, 784, // #4068 + 3, 181150, 181150, 2734, 2734, // #4069 + 4, 181197, 181197, 509, 509, // #4070 + 40, 181248, 181248, 3376, 3376, // #4071 + 47, 181324, 181324, 3420, 3420, // #4072 + 2, 181376, 181376, 784, 784, // #4073 + 3, 181406, 181406, 2734, 2734, // #4074 + 4, 181453, 181453, 509, 509, // #4075 + 40, 181504, 181504, 3376, 3376, // #4076 + 47, 181580, 181580, 3420, 3420, // #4077 + 2, 181632, 181632, 1200, 1200, // #4078 + 3, 181662, 181662, 2734, 2734, // #4079 + 4, 181709, 181709, 509, 509, // #4080 + 40, 181760, 181760, 3376, 3376, // #4081 + 47, 181836, 181836, 3420, 3420, // #4082 + 2, 181888, 181888, 1200, 1200, // #4083 + 3, 181918, 181918, 2734, 2734, // #4084 + 4, 181965, 181965, 509, 509, // #4085 + 40, 182016, 182016, 3376, 3376, // #4086 + 47, 182092, 182092, 3420, 3420, // #4087 + 2, 182152, 182152, 1608, 1608, // #4088 + 3, 182174, 182174, 2734, 2734, // #4089 + 4, 182221, 182221, 509, 509, // #4090 + 40, 182272, 182272, 3376, 3376, // #4091 + 47, 182348, 182348, 3420, 3420, // #4092 + 2, 182408, 182408, 1608, 1608, // #4093 + 3, 182430, 182430, 2734, 2734, // #4094 + 4, 182477, 182477, 509, 509, // #4095 + 40, 182528, 182528, 3376, 3376, // #4096 + 47, 182604, 182604, 3420, 3420, // #4097 + 2, 182664, 182664, 2008, 2008, // #4098 + 3, 182686, 182686, 2734, 2734, // #4099 + 4, 182733, 182733, 509, 509, // #4100 + 40, 182784, 182784, 3376, 3376, // #4101 + 47, 182860, 182860, 3420, 3420, // #4102 + 2, 182920, 182920, 2008, 2008, // #4103 + 3, 182942, 182942, 2734, 2734, // #4104 + 4, 182989, 182989, 509, 509, // #4105 + 40, 183040, 183040, 3376, 3376, // #4106 + 47, 183116, 183116, 3420, 3420, // #4107 + 2, 183176, 183176, 2408, 2408, // #4108 + 3, 183198, 183198, 2734, 2734, // #4109 + 4, 183245, 183245, 509, 509, // #4110 + 40, 183296, 183296, 3376, 3376, // #4111 + 47, 183372, 183372, 3420, 3420, // #4112 + 2, 183432, 183432, 2408, 2408, // #4113 + 3, 183454, 183454, 2734, 2734, // #4114 + 4, 183501, 183501, 509, 509, // #4115 + 40, 183552, 183552, 3376, 3376, // #4116 + 47, 183628, 183628, 3420, 3420, // #4117 + 2, 183688, 183688, 2808, 2808, // #4118 + 3, 183710, 183710, 2734, 2734, // #4119 + 4, 183757, 183757, 509, 509, // #4120 + 40, 183808, 183808, 3376, 3376, // #4121 + 47, 183884, 183884, 3420, 3420, // #4122 + 2, 183944, 183944, 2808, 2808, // #4123 + 3, 183966, 183966, 2734, 2734, // #4124 + 4, 184013, 184013, 509, 509, // #4125 + 40, 184064, 184064, 3376, 3376, // #4126 + 47, 184140, 184140, 3420, 3420, // #4127 + 2, 184192, 184192, 3216, 3216, // #4128 + 3, 184222, 184222, 2734, 2734, // #4129 + 4, 184269, 184269, 509, 509, // #4130 + 40, 184320, 184320, 3376, 3376, // #4131 + 47, 184396, 184396, 3420, 3420, // #4132 + 2, 184448, 184448, 3216, 3216, // #4133 + 3, 184478, 184478, 2734, 2734, // #4134 + 4, 184525, 184525, 509, 509, // #4135 + 40, 184576, 184576, 3376, 3376, // #4136 + 47, 184652, 184652, 3420, 3420, // #4137 + 2, 184704, 184704, 3216, 3216, // #4138 + 3, 184734, 184734, 2734, 2734, // #4139 + 4, 184781, 184781, 509, 509, // #4140 + 40, 184832, 184832, 3376, 3376, // #4141 + 47, 184908, 184908, 3420, 3420, // #4142 + 2, 184968, 184968, 3624, 3624, // #4143 + 3, 184990, 184990, 2734, 2734, // #4144 + 4, 185037, 185037, 509, 509, // #4145 + 40, 185088, 185088, 3376, 3376, // #4146 + 47, 185164, 185164, 3420, 3420, // #4147 + 2, 185224, 185224, 3624, 3624, // #4148 + 3, 185246, 185246, 2734, 2734, // #4149 + 4, 185293, 185293, 509, 509, // #4150 + 40, 185344, 185344, 3376, 3376, // #4151 + 47, 185420, 185420, 3420, 3420, // #4152 + 2, 185480, 185480, 3624, 3624, // #4153 + 3, 185502, 185502, 2734, 2734, // #4154 + 4, 185549, 185549, 509, 509, // #4155 + 40, 185600, 185600, 3376, 3376, // #4156 + 47, 185676, 185676, 3420, 3420, // #4157 + 2, 185728, 185728, 496, 496, // #4158 + 3, 185758, 185758, 2734, 2734, // #4159 + 4, 185805, 185805, 509, 509, // #4160 + 40, 185856, 185856, 3376, 3376, // #4161 + 47, 185932, 185932, 3420, 3420, // #4162 + 2, 185984, 185984, 496, 496, // #4163 + 3, 186014, 186014, 2734, 2734, // #4164 + 4, 186061, 186061, 509, 509, // #4165 + 40, 186112, 186112, 3376, 3376, // #4166 + 47, 186188, 186188, 3420, 3420, // #4167 + 2, 186240, 186240, 896, 896, // #4168 + 3, 186270, 186270, 2734, 2734, // #4169 + 4, 186317, 186317, 509, 509, // #4170 + 40, 186368, 186368, 3376, 3376, // #4171 + 47, 186444, 186444, 3420, 3420, // #4172 + 2, 186496, 186496, 896, 896, // #4173 + 3, 186526, 186526, 2734, 2734, // #4174 + 4, 186573, 186573, 509, 509, // #4175 + 40, 186624, 186624, 3376, 3376, // #4176 + 47, 186700, 186700, 3420, 3420, // #4177 + 2, 186760, 186760, 1304, 1304, // #4178 + 3, 186782, 186782, 2734, 2734, // #4179 + 4, 186829, 186829, 509, 509, // #4180 + 40, 186880, 186880, 3376, 3376, // #4181 + 47, 186956, 186956, 3420, 3420, // #4182 + 2, 187016, 187016, 1304, 1304, // #4183 + 3, 187038, 187038, 2734, 2734, // #4184 + 4, 187085, 187085, 509, 509, // #4185 + 40, 187136, 187136, 3376, 3376, // #4186 + 47, 187212, 187212, 3420, 3420, // #4187 + 2, 187264, 187264, 1712, 1712, // #4188 + 3, 187294, 187294, 2734, 2734, // #4189 + 4, 187341, 187341, 509, 509, // #4190 + 40, 187392, 187392, 3376, 3376, // #4191 + 47, 187468, 187468, 3420, 3420, // #4192 + 2, 187520, 187520, 1712, 1712, // #4193 + 3, 187550, 187550, 2734, 2734, // #4194 + 4, 187597, 187597, 509, 509, // #4195 + 40, 187648, 187648, 3376, 3376, // #4196 + 47, 187724, 187724, 3420, 3420, // #4197 + 2, 187776, 187776, 2128, 2128, // #4198 + 3, 187806, 187806, 2734, 2734, // #4199 + 4, 187853, 187853, 509, 509, // #4200 + 40, 187904, 187904, 3376, 3376, // #4201 + 47, 187980, 187980, 3420, 3420, // #4202 + 2, 188032, 188032, 2128, 2128, // #4203 + 3, 188062, 188062, 2734, 2734, // #4204 + 4, 188109, 188109, 509, 509, // #4205 + 40, 188160, 188160, 3376, 3376, // #4206 + 47, 188236, 188236, 3420, 3420, // #4207 + 2, 188296, 188296, 2536, 2536, // #4208 + 3, 188318, 188318, 2734, 2734, // #4209 + 4, 188365, 188365, 509, 509, // #4210 + 40, 188416, 188416, 3376, 3376, // #4211 + 47, 188492, 188492, 3420, 3420, // #4212 + 2, 188552, 188552, 2536, 2536, // #4213 + 3, 188574, 188574, 2734, 2734, // #4214 + 4, 188621, 188621, 509, 509, // #4215 + 40, 188672, 188672, 3376, 3376, // #4216 + 47, 188748, 188748, 3420, 3420, // #4217 + 2, 188808, 188808, 2936, 2936, // #4218 + 3, 188830, 188830, 2734, 2734, // #4219 + 4, 188877, 188877, 509, 509, // #4220 + 40, 188928, 188928, 3376, 3376, // #4221 + 47, 189004, 189004, 3420, 3420, // #4222 + 2, 189064, 189064, 2936, 2936, // #4223 + 3, 189086, 189086, 2734, 2734, // #4224 + 4, 189133, 189133, 509, 509, // #4225 + 40, 189184, 189184, 3376, 3376, // #4226 + 47, 189260, 189260, 3420, 3420, // #4227 + 2, 189320, 189320, 3336, 3336, // #4228 + 3, 189342, 189342, 2734, 2734, // #4229 + 4, 189389, 189389, 509, 509, // #4230 + 40, 189440, 189440, 3376, 3376, // #4231 + 47, 189516, 189516, 3420, 3420, // #4232 + 2, 189576, 189576, 3336, 3336, // #4233 + 3, 189598, 189598, 2734, 2734, // #4234 + 4, 189645, 189645, 509, 509, // #4235 + 40, 189696, 189696, 3376, 3376, // #4236 + 47, 189772, 189772, 3420, 3420, // #4237 + 2, 189832, 189832, 3736, 3736, // #4238 + 3, 189854, 189854, 2734, 2734, // #4239 + 4, 189901, 189901, 509, 509, // #4240 + 40, 189952, 189952, 3376, 3376, // #4241 + 47, 190028, 190028, 3420, 3420, // #4242 + 2, 190088, 190088, 3736, 3736, // #4243 + 3, 190110, 190110, 2734, 2734, // #4244 + 4, 190157, 190157, 509, 509, // #4245 + 40, 190208, 190208, 3376, 3376, // #4246 + 47, 190284, 190284, 3420, 3420, // #4247 + 2, 190336, 190336, 48, 48, // #4248 + 3, 190366, 190366, 2734, 2734, // #4249 + 4, 190413, 190413, 509, 509, // #4250 + 40, 190464, 190464, 3376, 3376, // #4251 + 47, 190540, 190540, 3420, 3420, // #4252 + 2, 190592, 190592, 48, 48, // #4253 + 3, 190622, 190622, 2734, 2734, // #4254 + 4, 190669, 190669, 509, 509, // #4255 + 40, 190720, 190720, 3376, 3376, // #4256 + 47, 190796, 190796, 3420, 3420, // #4257 + 2, 190856, 190856, 456, 456, // #4258 + 3, 190878, 190878, 2734, 2734, // #4259 + 4, 190925, 190925, 509, 509, // #4260 + 40, 190976, 190976, 3376, 3376, // #4261 + 47, 191052, 191052, 3420, 3420, // #4262 + 2, 191112, 191112, 456, 456, // #4263 + 3, 191134, 191134, 2734, 2734, // #4264 + 4, 191181, 191181, 509, 509, // #4265 + 40, 191232, 191232, 3376, 3376, // #4266 + 47, 191308, 191308, 3420, 3420, // #4267 + 2, 191368, 191368, 456, 456, // #4268 + 3, 191390, 191390, 2734, 2734, // #4269 + 4, 191437, 191437, 509, 509, // #4270 + 40, 191488, 191488, 3376, 3376, // #4271 + 47, 191564, 191564, 3420, 3420, // #4272 + 2, 191624, 191624, 856, 856, // #4273 + 3, 191646, 191646, 2734, 2734, // #4274 + 4, 191693, 191693, 509, 509, // #4275 + 40, 191744, 191744, 3376, 3376, // #4276 + 47, 191820, 191820, 3420, 3420, // #4277 + 2, 191880, 191880, 856, 856, // #4278 + 3, 191902, 191902, 2734, 2734, // #4279 + 4, 191949, 191949, 509, 509, // #4280 + 40, 192000, 192000, 3376, 3376, // #4281 + 47, 192076, 192076, 3420, 3420, // #4282 + 2, 192136, 192136, 1256, 1256, // #4283 + 3, 192158, 192158, 2734, 2734, // #4284 + 4, 192205, 192205, 509, 509, // #4285 + 40, 192256, 192256, 3376, 3376, // #4286 + 47, 192332, 192332, 3420, 3420, // #4287 + 2, 192392, 192392, 1256, 1256, // #4288 + 3, 192414, 192414, 2734, 2734, // #4289 + 4, 192461, 192461, 509, 509, // #4290 + 40, 192512, 192512, 3376, 3376, // #4291 + 47, 192588, 192588, 3420, 3420, // #4292 + 2, 192640, 192640, 1664, 1664, // #4293 + 3, 192670, 192670, 2734, 2734, // #4294 + 4, 192717, 192717, 509, 509, // #4295 + 40, 192768, 192768, 3376, 3376, // #4296 + 47, 192844, 192844, 3420, 3420, // #4297 + 2, 192896, 192896, 1664, 1664, // #4298 + 3, 192926, 192926, 2734, 2734, // #4299 + 4, 192973, 192973, 509, 509, // #4300 + 40, 193024, 193024, 3376, 3376, // #4301 + 47, 193100, 193100, 3420, 3420, // #4302 + 2, 193160, 193160, 2072, 2072, // #4303 + 3, 193182, 193182, 2734, 2734, // #4304 + 4, 193229, 193229, 509, 509, // #4305 + 40, 193280, 193280, 3376, 3376, // #4306 + 47, 193356, 193356, 3420, 3420, // #4307 + 2, 193416, 193416, 2072, 2072, // #4308 + 3, 193438, 193438, 2734, 2734, // #4309 + 4, 193485, 193485, 509, 509, // #4310 + 40, 193536, 193536, 3376, 3376, // #4311 + 47, 193612, 193612, 3420, 3420, // #4312 + 2, 193672, 193672, 2488, 2488, // #4313 + 3, 193694, 193694, 2734, 2734, // #4314 + 4, 193741, 193741, 509, 509, // #4315 + 40, 193792, 193792, 3376, 3376, // #4316 + 47, 193868, 193868, 3420, 3420, // #4317 + 2, 193928, 193928, 2488, 2488, // #4318 + 3, 193950, 193950, 2734, 2734, // #4319 + 4, 193997, 193997, 509, 509, // #4320 + 40, 194048, 194048, 3376, 3376, // #4321 + 47, 194124, 194124, 3420, 3420, // #4322 + 2, 194184, 194184, 2904, 2904, // #4323 + 3, 194206, 194206, 2734, 2734, // #4324 + 4, 194253, 194253, 509, 509, // #4325 + 40, 194304, 194304, 3376, 3376, // #4326 + 47, 194380, 194380, 3420, 3420, // #4327 + 2, 194440, 194440, 2904, 2904, // #4328 + 3, 194462, 194462, 2734, 2734, // #4329 + 4, 194509, 194509, 509, 509, // #4330 + 40, 194560, 194560, 3376, 3376, // #4331 + 47, 194636, 194636, 3420, 3420, // #4332 + 2, 194688, 194688, 3152, 3152, // #4333 + 3, 194718, 194718, 2734, 2734, // #4334 + 4, 194765, 194765, 509, 509, // #4335 + 40, 194816, 194816, 3376, 3376, // #4336 + 47, 194892, 194892, 3420, 3420, // #4337 + 2, 194944, 194944, 3152, 3152, // #4338 + 3, 194974, 194974, 2734, 2734, // #4339 + 4, 195021, 195021, 509, 509, // #4340 + 40, 195072, 195072, 3376, 3376, // #4341 + 47, 195148, 195148, 3420, 3420, // #4342 + 2, 195200, 195200, 3552, 3552, // #4343 + 3, 195230, 195230, 2734, 2734, // #4344 + 4, 195277, 195277, 509, 509, // #4345 + 40, 195328, 195328, 3376, 3376, // #4346 + 47, 195404, 195404, 3420, 3420, // #4347 + 2, 195456, 195456, 3552, 3552, // #4348 + 3, 195486, 195486, 2734, 2734, // #4349 + 4, 195533, 195533, 509, 509, // #4350 + 40, 195584, 195584, 3376, 3376, // #4351 + 47, 195660, 195660, 3420, 3420, // #4352 + 2, 195712, 195712, 3952, 3952, // #4353 + 3, 195742, 195742, 2734, 2734, // #4354 + 4, 195789, 195789, 509, 509, // #4355 + 40, 195840, 195840, 3376, 3376, // #4356 + 47, 195916, 195916, 3420, 3420, // #4357 + 2, 195968, 195968, 3952, 3952, // #4358 + 3, 195998, 195998, 2734, 2734, // #4359 + 4, 196045, 196045, 509, 509, // #4360 + 40, 196096, 196096, 3376, 3376, // #4361 + 47, 196172, 196172, 3420, 3420, // #4362 + 2, 196232, 196232, 264, 264, // #4363 + 3, 196254, 196254, 2734, 2734, // #4364 + 4, 196301, 196301, 509, 509, // #4365 + 40, 196352, 196352, 3376, 3376, // #4366 + 47, 196428, 196428, 3420, 3420, // #4367 + 2, 196488, 196488, 264, 264, // #4368 + 3, 196510, 196510, 2734, 2734, // #4369 + 4, 196557, 196557, 509, 509, // #4370 + 40, 196608, 196608, 3376, 3376, // #4371 + 47, 196684, 196684, 3420, 3420, // #4372 + 2, 196744, 196744, 264, 264, // #4373 + 3, 196766, 196766, 2734, 2734, // #4374 + 4, 196813, 196813, 509, 509, // #4375 + 40, 196864, 196864, 3376, 3376, // #4376 + 47, 196940, 196940, 3420, 3420, // #4377 + 2, 196992, 196992, 672, 672, // #4378 + 3, 197022, 197022, 2734, 2734, // #4379 + 4, 197069, 197069, 509, 509, // #4380 + 40, 197120, 197120, 3376, 3376, // #4381 + 47, 197196, 197196, 3420, 3420, // #4382 + 2, 197248, 197248, 672, 672, // #4383 + 3, 197278, 197278, 2734, 2734, // #4384 + 4, 197325, 197325, 509, 509, // #4385 + 40, 197376, 197376, 3376, 3376, // #4386 + 47, 197452, 197452, 3420, 3420, // #4387 + 2, 197504, 197504, 672, 672, // #4388 + 3, 197534, 197534, 2734, 2734, // #4389 + 4, 197581, 197581, 509, 509, // #4390 + 40, 197632, 197632, 3376, 3376, // #4391 + 47, 197708, 197708, 3420, 3420, // #4392 + 2, 197760, 197760, 1072, 1072, // #4393 + 3, 197790, 197790, 2734, 2734, // #4394 + 4, 197837, 197837, 509, 509, // #4395 + 40, 197888, 197888, 3376, 3376, // #4396 + 47, 197964, 197964, 3420, 3420, // #4397 + 2, 198016, 198016, 1072, 1072, // #4398 + 3, 198046, 198046, 2734, 2734, // #4399 + 4, 198093, 198093, 509, 509, // #4400 + 40, 198144, 198144, 3376, 3376, // #4401 + 47, 198220, 198220, 3420, 3420, // #4402 + 2, 198272, 198272, 1472, 1472, // #4403 + 3, 198302, 198302, 2734, 2734, // #4404 + 4, 198349, 198349, 509, 509, // #4405 + 40, 198400, 198400, 3376, 3376, // #4406 + 47, 198476, 198476, 3420, 3420, // #4407 + 2, 198528, 198528, 1472, 1472, // #4408 + 3, 198558, 198558, 2734, 2734, // #4409 + 4, 198605, 198605, 509, 509, // #4410 + 40, 198656, 198656, 3376, 3376, // #4411 + 47, 198732, 198732, 3420, 3420, // #4412 + 2, 198792, 198792, 1880, 1880, // #4413 + 3, 198814, 198814, 2734, 2734, // #4414 + 4, 198861, 198861, 509, 509, // #4415 + 40, 198912, 198912, 3376, 3376, // #4416 + 47, 198988, 198988, 3420, 3420, // #4417 + 2, 199048, 199048, 1880, 1880, // #4418 + 3, 199070, 199070, 2734, 2734, // #4419 + 4, 199117, 199117, 509, 509, // #4420 + 40, 199168, 199168, 3376, 3376, // #4421 + 47, 199244, 199244, 3420, 3420, // #4422 + 2, 199296, 199296, 2288, 2288, // #4423 + 3, 199326, 199326, 2734, 2734, // #4424 + 4, 199373, 199373, 509, 509, // #4425 + 40, 199424, 199424, 3376, 3376, // #4426 + 47, 199500, 199500, 3420, 3420, // #4427 + 2, 199552, 199552, 2288, 2288, // #4428 + 3, 199582, 199582, 2734, 2734, // #4429 + 4, 199629, 199629, 509, 509, // #4430 + 40, 199680, 199680, 3376, 3376, // #4431 + 47, 199756, 199756, 3420, 3420, // #4432 + 2, 199808, 199808, 2704, 2704, // #4433 + 3, 199838, 199838, 2734, 2734, // #4434 + 4, 199885, 199885, 509, 509, // #4435 + 40, 199936, 199936, 3376, 3376, // #4436 + 47, 200012, 200012, 3420, 3420, // #4437 + 2, 200064, 200064, 2704, 2704, // #4438 + 3, 200094, 200094, 2734, 2734, // #4439 + 4, 200141, 200141, 509, 509, // #4440 + 40, 200192, 200192, 3376, 3376, // #4441 + 47, 200268, 200268, 3420, 3420, // #4442 + 2, 200328, 200328, 3112, 3112, // #4443 + 3, 200350, 200350, 2734, 2734, // #4444 + 4, 200397, 200397, 509, 509, // #4445 + 40, 200448, 200448, 3376, 3376, // #4446 + 47, 200524, 200524, 3420, 3420, // #4447 + 2, 200584, 200584, 3112, 3112, // #4448 + 3, 200606, 200606, 2734, 2734, // #4449 + 4, 200653, 200653, 509, 509, // #4450 + 40, 200704, 200704, 3376, 3376, // #4451 + 47, 200780, 200780, 3420, 3420, // #4452 + 2, 200840, 200840, 3512, 3512, // #4453 + 3, 200862, 200862, 2734, 2734, // #4454 + 4, 200909, 200909, 509, 509, // #4455 + 40, 200960, 200960, 3376, 3376, // #4456 + 47, 201036, 201036, 3420, 3420, // #4457 + 2, 201096, 201096, 3512, 3512, // #4458 + 3, 201118, 201118, 2734, 2734, // #4459 + 4, 201165, 201165, 509, 509, // #4460 + 40, 201216, 201216, 3376, 3376, // #4461 + 47, 201292, 201292, 3420, 3420, // #4462 + 2, 201352, 201352, 3912, 3912, // #4463 + 3, 201374, 201374, 2734, 2734, // #4464 + 4, 201421, 201421, 509, 509, // #4465 + 40, 201472, 201472, 3376, 3376, // #4466 + 47, 201548, 201548, 3420, 3420, // #4467 + 2, 201608, 201608, 3912, 3912, // #4468 + 3, 201630, 201630, 2734, 2734, // #4469 + 4, 201677, 201677, 509, 509, // #4470 + 40, 201728, 201728, 3376, 3376, // #4471 + 47, 201804, 201804, 3420, 3420, // #4472 + 2, 201864, 201864, 216, 216, // #4473 + 3, 201886, 201886, 2734, 2734, // #4474 + 4, 201933, 201933, 509, 509, // #4475 + 40, 201984, 201984, 3376, 3376, // #4476 + 47, 202060, 202060, 3420, 3420, // #4477 + 2, 202120, 202120, 216, 216, // #4478 + 3, 202142, 202142, 2734, 2734, // #4479 + 4, 202189, 202189, 509, 509, // #4480 + 40, 202240, 202240, 3376, 3376, // #4481 + 47, 202316, 202316, 3420, 3420, // #4482 + 2, 202376, 202376, 632, 632, // #4483 + 3, 202398, 202398, 2734, 2734, // #4484 + 4, 202445, 202445, 509, 509, // #4485 + 40, 202496, 202496, 3376, 3376, // #4486 + 47, 202572, 202572, 3420, 3420, // #4487 + 2, 202632, 202632, 632, 632, // #4488 + 3, 202654, 202654, 2734, 2734, // #4489 + 4, 202701, 202701, 509, 509, // #4490 + 40, 202752, 202752, 3376, 3376, // #4491 + 47, 202828, 202828, 3420, 3420, // #4492 + 2, 202888, 202888, 632, 632, // #4493 + 3, 202910, 202910, 2734, 2734, // #4494 + 4, 202957, 202957, 509, 509, // #4495 + 40, 203008, 203008, 3376, 3376, // #4496 + 47, 203084, 203084, 3420, 3420, // #4497 + 2, 203136, 203136, 1040, 1040, // #4498 + 3, 203166, 203166, 2734, 2734, // #4499 + 4, 203213, 203213, 509, 509, // #4500 + 40, 203264, 203264, 3376, 3376, // #4501 + 47, 203340, 203340, 3420, 3420, // #4502 + 2, 203392, 203392, 1040, 1040, // #4503 + 3, 203422, 203422, 2734, 2734, // #4504 + 4, 203469, 203469, 509, 509, // #4505 + 40, 203520, 203520, 3376, 3376, // #4506 + 47, 203596, 203596, 3420, 3420, // #4507 + 2, 203648, 203648, 1040, 1040, // #4508 + 3, 203678, 203678, 2734, 2734, // #4509 + 4, 203725, 203725, 509, 509, // #4510 + 40, 203776, 203776, 3376, 3376, // #4511 + 47, 203852, 203852, 3420, 3420, // #4512 + 2, 203904, 203904, 1440, 1440, // #4513 + 3, 203934, 203934, 2734, 2734, // #4514 + 4, 203981, 203981, 509, 509, // #4515 + 40, 204032, 204032, 3376, 3376, // #4516 + 47, 204108, 204108, 3420, 3420, // #4517 + 2, 204160, 204160, 1440, 1440, // #4518 + 3, 204190, 204190, 2734, 2734, // #4519 + 4, 204237, 204237, 509, 509, // #4520 + 40, 204288, 204288, 3376, 3376, // #4521 + 47, 204364, 204364, 3420, 3420, // #4522 + 2, 204416, 204416, 1840, 1840, // #4523 + 3, 204446, 204446, 2734, 2734, // #4524 + 4, 204493, 204493, 509, 509, // #4525 + 40, 204544, 204544, 3376, 3376, // #4526 + 47, 204620, 204620, 3420, 3420, // #4527 + 2, 204672, 204672, 1840, 1840, // #4528 + 3, 204702, 204702, 2734, 2734, // #4529 + 4, 204749, 204749, 509, 509, // #4530 + 40, 204800, 204800, 3376, 3376, // #4531 + 47, 204876, 204876, 3420, 3420, // #4532 + 2, 204936, 204936, 2248, 2248, // #4533 + 3, 204958, 204958, 2734, 2734, // #4534 + 4, 205005, 205005, 509, 509, // #4535 + 40, 205056, 205056, 3376, 3376, // #4536 + 47, 205132, 205132, 3420, 3420, // #4537 + 2, 205192, 205192, 2248, 2248, // #4538 + 3, 205214, 205214, 2734, 2734, // #4539 + 4, 205261, 205261, 509, 509, // #4540 + 40, 205312, 205312, 3376, 3376, // #4541 + 47, 205388, 205388, 3420, 3420, // #4542 + 2, 205440, 205440, 2656, 2656, // #4543 + 3, 205470, 205470, 2734, 2734, // #4544 + 4, 205517, 205517, 509, 509, // #4545 + 40, 205568, 205568, 3376, 3376, // #4546 + 47, 205644, 205644, 3420, 3420, // #4547 + 2, 205696, 205696, 2656, 2656, // #4548 + 3, 205726, 205726, 2734, 2734, // #4549 + 4, 205773, 205773, 509, 509, // #4550 + 40, 205824, 205824, 3376, 3376, // #4551 + 47, 205900, 205900, 3420, 3420, // #4552 + 2, 205952, 205952, 3072, 3072, // #4553 + 3, 205982, 205982, 2734, 2734, // #4554 + 4, 206029, 206029, 509, 509, // #4555 + 40, 206080, 206080, 3376, 3376, // #4556 + 47, 206156, 206156, 3420, 3420, // #4557 + 2, 206208, 206208, 3072, 3072, // #4558 + 3, 206238, 206238, 2734, 2734, // #4559 + 4, 206285, 206285, 509, 509, // #4560 + 40, 206336, 206336, 3376, 3376, // #4561 + 47, 206412, 206412, 3420, 3420, // #4562 + 2, 206472, 206472, 3480, 3480, // #4563 + 3, 206494, 206494, 2734, 2734, // #4564 + 4, 206541, 206541, 509, 509, // #4565 + 40, 206592, 206592, 3376, 3376, // #4566 + 47, 206668, 206668, 3420, 3420, // #4567 + 2, 206728, 206728, 3480, 3480, // #4568 + 3, 206750, 206750, 2734, 2734, // #4569 + 4, 206797, 206797, 509, 509, // #4570 + 40, 206848, 206848, 3376, 3376, // #4571 + 47, 206924, 206924, 3420, 3420, // #4572 + 2, 206984, 206984, 3880, 3880, // #4573 + 3, 207006, 207006, 2734, 2734, // #4574 + 4, 207053, 207053, 509, 509, // #4575 + 40, 207104, 207104, 3376, 3376, // #4576 + 47, 207180, 207180, 3420, 3420, // #4577 + 2, 207240, 207240, 3880, 3880, // #4578 + 3, 207262, 207262, 2734, 2734, // #4579 + 4, 207309, 207309, 509, 509, // #4580 + 40, 207360, 207360, 3376, 3376, // #4581 + 47, 207436, 207436, 3420, 3420, // #4582 + 2, 207496, 207496, 184, 184, // #4583 + 3, 207518, 207518, 2734, 2734, // #4584 + 4, 207565, 207565, 509, 509, // #4585 + 40, 207616, 207616, 3376, 3376, // #4586 + 47, 207692, 207692, 3420, 3420, // #4587 + 2, 207752, 207752, 184, 184, // #4588 + 3, 207774, 207774, 2734, 2734, // #4589 + 4, 207821, 207821, 509, 509, // #4590 + 40, 207872, 207872, 3376, 3376, // #4591 + 47, 207948, 207948, 3420, 3420, // #4592 + 2, 208008, 208008, 584, 584, // #4593 + 3, 208030, 208030, 2734, 2734, // #4594 + 4, 208077, 208077, 509, 509, // #4595 + 40, 208128, 208128, 3376, 3376, // #4596 + 47, 208204, 208204, 3420, 3420, // #4597 + 2, 208264, 208264, 584, 584, // #4598 + 3, 208286, 208286, 2734, 2734, // #4599 + 4, 208333, 208333, 509, 509, // #4600 + 40, 208384, 208384, 3376, 3376, // #4601 + 47, 208460, 208460, 3420, 3420, // #4602 + 2, 208512, 208512, 992, 992, // #4603 + 3, 208542, 208542, 2734, 2734, // #4604 + 4, 208589, 208589, 509, 509, // #4605 + 40, 208640, 208640, 3376, 3376, // #4606 + 47, 208716, 208716, 3420, 3420, // #4607 + 2, 208768, 208768, 992, 992, // #4608 + 3, 208798, 208798, 2734, 2734, // #4609 + 4, 208845, 208845, 509, 509, // #4610 + 40, 208896, 208896, 3376, 3376, // #4611 + 47, 208972, 208972, 3420, 3420, // #4612 + 2, 209024, 209024, 992, 992, // #4613 + 3, 209054, 209054, 2734, 2734, // #4614 + 4, 209101, 209101, 509, 509, // #4615 + 40, 209152, 209152, 3376, 3376, // #4616 + 47, 209228, 209228, 3420, 3420, // #4617 + 2, 209288, 209288, 1400, 1400, // #4618 + 3, 209310, 209310, 2734, 2734, // #4619 + 4, 209357, 209357, 509, 509, // #4620 + 40, 209408, 209408, 3376, 3376, // #4621 + 47, 209484, 209484, 3420, 3420, // #4622 + 2, 209544, 209544, 1400, 1400, // #4623 + 3, 209566, 209566, 2734, 2734, // #4624 + 4, 209613, 209613, 509, 509, // #4625 + 40, 209664, 209664, 3376, 3376, // #4626 + 47, 209740, 209740, 3420, 3420, // #4627 + 2, 209800, 209800, 1400, 1400, // #4628 + 3, 209822, 209822, 2734, 2734, // #4629 + 4, 209869, 209869, 509, 509, // #4630 + 40, 209920, 209920, 3376, 3376, // #4631 + 47, 209996, 209996, 3420, 3420, // #4632 + 2, 210056, 210056, 1800, 1800, // #4633 + 3, 210078, 210078, 2734, 2734, // #4634 + 4, 210125, 210125, 509, 509, // #4635 + 40, 210176, 210176, 3376, 3376, // #4636 + 47, 210252, 210252, 3420, 3420, // #4637 + 2, 210312, 210312, 1800, 1800, // #4638 + 3, 210334, 210334, 2734, 2734, // #4639 + 4, 210381, 210381, 509, 509, // #4640 + 40, 210432, 210432, 3376, 3376, // #4641 + 47, 210508, 210508, 3420, 3420, // #4642 + 3, 210568, 210568, 2200, 2200, // #4643 + 3, 210590, 210590, 2734, 2734, // #4644 + 4, 210637, 210637, 509, 509, // #4645 + 40, 210688, 210688, 3376, 3376, // #4646 + 47, 210764, 210764, 3420, 3420, // #4647 + 3, 210824, 210824, 2200, 2200, // #4648 + 3, 210846, 210846, 2734, 2734, // #4649 + 4, 210893, 210893, 509, 509, // #4650 + 40, 210944, 210944, 3376, 3376, // #4651 + 47, 211020, 211020, 3420, 3420, // #4652 + 3, 211072, 211072, 2608, 2608, // #4653 + 3, 211102, 211102, 2734, 2734, // #4654 + 4, 211149, 211149, 509, 509, // #4655 + 40, 211200, 211200, 3376, 3376, // #4656 + 47, 211276, 211276, 3420, 3420, // #4657 + 3, 211328, 211328, 2608, 2608, // #4658 + 3, 211358, 211358, 2734, 2734, // #4659 + 4, 211405, 211405, 509, 509, // #4660 + 40, 211456, 211456, 3376, 3376, // #4661 + 47, 211532, 211532, 3420, 3420, // #4662 + 3, 211584, 211584, 3024, 3024, // #4663 + 3, 211614, 211614, 2734, 2734, // #4664 + 4, 211661, 211661, 509, 509, // #4665 + 40, 211712, 211712, 3376, 3376, // #4666 + 47, 211788, 211788, 3420, 3420, // #4667 + 3, 211840, 211840, 3024, 3024, // #4668 + 3, 211870, 211870, 2734, 2734, // #4669 + 4, 211917, 211917, 509, 509, // #4670 + 40, 211968, 211968, 3376, 3376, // #4671 + 47, 212044, 212044, 3420, 3420, // #4672 + 3, 212096, 212096, 3440, 3440, // #4673 + 3, 212126, 212126, 2734, 2734, // #4674 + 4, 212173, 212173, 509, 509, // #4675 + 40, 212224, 212224, 3376, 3376, // #4676 + 47, 212300, 212300, 3420, 3420, // #4677 + 3, 212352, 212352, 3440, 3440, // #4678 + 3, 212382, 212382, 2734, 2734, // #4679 + 4, 212429, 212429, 509, 509, // #4680 + 40, 212480, 212480, 3376, 3376, // #4681 + 47, 212556, 212556, 3420, 3420, // #4682 + 3, 212616, 212616, 3848, 3848, // #4683 + 3, 212638, 212638, 2734, 2734, // #4684 + 4, 212685, 212685, 509, 509, // #4685 + 40, 212736, 212736, 3376, 3376, // #4686 + 47, 212812, 212812, 3420, 3420, // #4687 + 3, 212872, 212872, 3848, 3848, // #4688 + 3, 212894, 212894, 2734, 2734, // #4689 + 4, 212941, 212941, 509, 509, // #4690 + 40, 212992, 212992, 3376, 3376, // #4691 + 47, 213068, 213068, 3420, 3420, // #4692 + 3, 213128, 213128, 152, 152, // #4693 + 3, 213150, 213150, 2734, 2734, // #4694 + 4, 213197, 213197, 509, 509, // #4695 + 40, 213248, 213248, 3376, 3376, // #4696 + 47, 213324, 213324, 3420, 3420, // #4697 + 3, 213384, 213384, 152, 152, // #4698 + 3, 213406, 213406, 2734, 2734, // #4699 + 4, 213453, 213453, 509, 509, // #4700 + 40, 213504, 213504, 3376, 3376, // #4701 + 47, 213580, 213580, 3420, 3420, // #4702 + 3, 213640, 213640, 552, 552, // #4703 + 3, 213662, 213662, 2734, 2734, // #4704 + 4, 213709, 213709, 509, 509, // #4705 + 40, 213760, 213760, 3376, 3376, // #4706 + 47, 213836, 213836, 3420, 3420, // #4707 + 3, 213896, 213896, 552, 552, // #4708 + 3, 213918, 213918, 2734, 2734, // #4709 + 4, 213965, 213965, 509, 509, // #4710 + 40, 214016, 214016, 3376, 3376, // #4711 + 47, 214092, 214092, 3420, 3420, // #4712 + 3, 214144, 214144, 960, 960, // #4713 + 3, 214174, 214174, 2734, 2734, // #4714 + 4, 214221, 214221, 509, 509, // #4715 + 40, 214272, 214272, 3376, 3376, // #4716 + 47, 214348, 214348, 3420, 3420, // #4717 + 3, 214400, 214400, 960, 960, // #4718 + 3, 214430, 214430, 2734, 2734, // #4719 + 4, 214477, 214477, 509, 509, // #4720 + 40, 214528, 214528, 3376, 3376, // #4721 + 47, 214604, 214604, 3420, 3420, // #4722 + 3, 214664, 214664, 1368, 1368, // #4723 + 3, 214686, 214686, 2734, 2734, // #4724 + 4, 214733, 214733, 509, 509, // #4725 + 40, 214784, 214784, 3376, 3376, // #4726 + 47, 214860, 214860, 3420, 3420, // #4727 + 3, 214920, 214920, 1368, 1368, // #4728 + 3, 214942, 214942, 2734, 2734, // #4729 + 4, 214989, 214989, 509, 509, // #4730 + 40, 215040, 215040, 3376, 3376, // #4731 + 47, 215116, 215116, 3420, 3420, // #4732 + 3, 215176, 215176, 1368, 1368, // #4733 + 3, 215198, 215198, 2734, 2734, // #4734 + 4, 215245, 215245, 509, 509, // #4735 + 40, 215296, 215296, 3376, 3376, // #4736 + 47, 215372, 215372, 3420, 3420, // #4737 + 3, 215424, 215424, 1776, 1776, // #4738 + 3, 215454, 215454, 2734, 2734, // #4739 + 4, 215501, 215501, 509, 509, // #4740 + 40, 215552, 215552, 3376, 3376, // #4741 + 47, 215628, 215628, 3420, 3420, // #4742 + 3, 215680, 215680, 1776, 1776, // #4743 + 3, 215710, 215710, 2734, 2734, // #4744 + 4, 215757, 215757, 509, 509, // #4745 + 40, 215808, 215808, 3376, 3376, // #4746 + 47, 215884, 215884, 3420, 3420, // #4747 + 3, 215936, 215936, 1776, 1776, // #4748 + 3, 215966, 215966, 2734, 2734, // #4749 + 4, 216013, 216013, 509, 509, // #4750 + 40, 216064, 216064, 3376, 3376, // #4751 + 47, 216140, 216140, 3420, 3420, // #4752 + 3, 216192, 216192, 2176, 2176, // #4753 + 3, 216222, 216222, 2734, 2734, // #4754 + 4, 216269, 216269, 509, 509, // #4755 + 40, 216320, 216320, 3376, 3376, // #4756 + 47, 216396, 216396, 3420, 3420, // #4757 + 3, 216448, 216448, 2176, 2176, // #4758 + 3, 216478, 216478, 2734, 2734, // #4759 + 4, 216525, 216525, 509, 509, // #4760 + 40, 216576, 216576, 3376, 3376, // #4761 + 47, 216652, 216652, 3420, 3420, // #4762 + 3, 216704, 216704, 2576, 2576, // #4763 + 3, 216734, 216734, 2734, 2734, // #4764 + 4, 216781, 216781, 509, 509, // #4765 + 40, 216832, 216832, 3376, 3376, // #4766 + 47, 216908, 216908, 3420, 3420, // #4767 + 3, 216960, 216960, 2576, 2576, // #4768 + 3, 216990, 216990, 2734, 2734, // #4769 + 4, 217037, 217037, 509, 509, // #4770 + 40, 217088, 217088, 3376, 3376, // #4771 + 47, 217164, 217164, 3420, 3420, // #4772 + 3, 217216, 217216, 2976, 2976, // #4773 + 3, 217246, 217246, 2734, 2734, // #4774 + 4, 217293, 217293, 509, 509, // #4775 + 40, 217344, 217344, 3376, 3376, // #4776 + 47, 217420, 217420, 3420, 3420, // #4777 + 3, 217472, 217472, 2976, 2976, // #4778 + 3, 217502, 217502, 2734, 2734, // #4779 + 4, 217549, 217549, 509, 509, // #4780 + 40, 217600, 217600, 3376, 3376, // #4781 + 47, 217676, 217676, 3420, 3420, // #4782 + 3, 217728, 217728, 3392, 3392, // #4783 + 3, 217758, 217758, 2734, 2734, // #4784 + 4, 217805, 217805, 509, 509, // #4785 + 40, 217856, 217856, 3376, 3376, // #4786 + 47, 217932, 217932, 3420, 3420, // #4787 + 3, 217984, 217984, 3392, 3392, // #4788 + 3, 218014, 218014, 2734, 2734, // #4789 + 4, 218061, 218061, 509, 509, // #4790 + 40, 218112, 218112, 3376, 3376, // #4791 + 47, 218188, 218188, 3420, 3420, // #4792 + 3, 218248, 218248, 3800, 3800, // #4793 + 3, 218270, 218270, 2734, 2734, // #4794 + 4, 218317, 218317, 509, 509, // #4795 + 40, 218368, 218368, 3376, 3376, // #4796 + 47, 218444, 218444, 3420, 3420, // #4797 + 3, 218504, 218504, 3800, 3800, // #4798 + 3, 218526, 218526, 2734, 2734, // #4799 + 4, 218573, 218573, 509, 509, // #4800 + 40, 218624, 218624, 3376, 3376, // #4801 + 47, 218700, 218700, 3420, 3420, // #4802 + 3, 218752, 218752, 112, 112, // #4803 + 3, 218782, 218782, 2734, 2734, // #4804 + 4, 218829, 218829, 509, 509, // #4805 + 40, 218880, 218880, 3376, 3376, // #4806 + 47, 218956, 218956, 3420, 3420, // #4807 + 3, 219008, 219008, 112, 112, // #4808 + 3, 219038, 219038, 2734, 2734, // #4809 + 4, 219085, 219085, 509, 509, // #4810 + 40, 219136, 219136, 3376, 3376, // #4811 + 47, 219212, 219212, 3420, 3420, // #4812 + 3, 219272, 219272, 520, 520, // #4813 + 3, 219294, 219294, 2734, 2734, // #4814 + 4, 219341, 219341, 509, 509, // #4815 + 40, 219392, 219392, 3376, 3376, // #4816 + 47, 219468, 219468, 3420, 3420, // #4817 + 3, 219528, 219528, 520, 520, // #4818 + 3, 219550, 219550, 2734, 2734, // #4819 + 4, 219597, 219597, 509, 509, // #4820 + 40, 219648, 219648, 3376, 3376, // #4821 + 47, 219724, 219724, 3420, 3420, // #4822 + 3, 219784, 219784, 520, 520, // #4823 + 3, 219806, 219806, 2734, 2734, // #4824 + 4, 219853, 219853, 509, 509, // #4825 + 40, 219904, 219904, 3376, 3376, // #4826 + 47, 219980, 219980, 3420, 3420, // #4827 + 3, 220040, 220040, 920, 920, // #4828 + 3, 220062, 220062, 2734, 2734, // #4829 + 4, 220109, 220109, 509, 509, // #4830 + 40, 220160, 220160, 3376, 3376, // #4831 + 47, 220236, 220236, 3420, 3420, // #4832 + 3, 220296, 220296, 920, 920, // #4833 + 3, 220318, 220318, 2734, 2734, // #4834 + 4, 220365, 220365, 509, 509, // #4835 + 40, 220416, 220416, 3376, 3376, // #4836 + 47, 220492, 220492, 3420, 3420, // #4837 + 7, 220548, 220548, 1684, 1684, // #4838 + 7, 220562, 220562, 386, 386, // #4839 + 11, 220588, 220588, 1692, 1692, // #4840 + 5, 220616, 220616, 1704, 1704, // #4841 + 5, 220638, 220638, 1710, 1710, // #4842 + 6, 220659, 220659, 131, 131, // #4843 + 7, 220672, 220672, 2464, 2464, // #4844 + 2, 220696, 220696, 4072, 4072, // #4845 + 3, 220718, 220718, 2734, 2734, // #4846 + 14, 220736, 220736, 4032, 4032, // #4847 + 40, 220800, 220800, 3376, 3376, // #4848 + 47, 220876, 220876, 3420, 3420, // #4849 + 5, 220928, 220928, 1872, 1872, // #4850 + 22, 220992, 220992, 2416, 2416, // #4851 + 12, 221029, 221029, 2789, 2789, // #4852 + 12, 221064, 221064, 136, 136, // #4853 + 40, 221120, 221120, 3376, 3376, // #4854 + 47, 221196, 221196, 3420, 3420, // #4855 + 7, 221248, 221248, 2464, 2464, // #4856 + 2, 221264, 221264, 48, 48, // #4857 + 3, 221294, 221294, 2734, 2734, // #4858 + 14, 221312, 221312, 4080, 4080, // #4859 + 40, 221376, 221376, 3376, 3376, // #4860 + 47, 221452, 221452, 3420, 3420, // #4861 + 5, 221504, 221504, 1872, 1872, // #4862 + 11, 221520, 221520, 2624, 2624, // #4863 + 12, 221541, 221541, 2789, 2789, // #4864 + 12, 221568, 221568, 112, 112, // #4865 + 40, 221632, 221632, 3376, 3376, // #4866 + 47, 221708, 221708, 3420, 3420, // #4867 + 7, 221760, 221760, 2464, 2464, // #4868 + 2, 221784, 221784, 2744, 2744, // #4869 + 3, 221806, 221806, 2734, 2734, // #4870 + 18, 221832, 221832, 4088, 4088, // #4871 + 40, 221888, 221888, 3376, 3376, // #4872 + 47, 221964, 221964, 3420, 3420, // #4873 + 5, 222016, 222016, 1872, 1872, // #4874 + 11, 222032, 222032, 2864, 2864, // #4875 + 12, 222053, 222053, 2789, 2789, // #4876 + 16, 222080, 222080, 4016, 4016, // #4877 + 40, 222144, 222144, 3376, 3376, // #4878 + 47, 222220, 222220, 3420, 3420, // #4879 + 7, 222272, 222272, 2464, 2464, // #4880 + 2, 222288, 222288, 2992, 2992, // #4881 + 3, 222318, 222318, 2734, 2734, // #4882 + 12, 222336, 222336, 160, 160, // #4883 + 40, 222400, 222400, 3376, 3376, // #4884 + 47, 222476, 222476, 3420, 3420, // #4885 + 5, 222528, 222528, 1872, 1872, // #4886 + 11, 222544, 222544, 3104, 3104, // #4887 + 12, 222565, 222565, 2789, 2789, // #4888 + 10, 222600, 222600, 344, 344, // #4889 + 40, 222656, 222656, 3376, 3376, // #4890 + 47, 222732, 222732, 3420, 3420, // #4891 + 7, 222784, 222784, 2464, 2464, // #4892 + 2, 222808, 222808, 3224, 3224, // #4893 + 3, 222830, 222830, 2734, 2734, // #4894 + 12, 222856, 222856, 24, 24, // #4895 + 40, 222912, 222912, 3376, 3376, // #4896 + 47, 222988, 222988, 3420, 3420, // #4897 + 5, 223040, 223040, 1872, 1872, // #4898 + 22, 223064, 223064, 3336, 3336, // #4899 + 12, 223093, 223093, 2789, 2789, // #4900 + 10, 223128, 223128, 392, 392, // #4901 + 40, 223168, 223168, 3376, 3376, // #4902 + 47, 223244, 223244, 3420, 3420, // #4903 + 7, 223296, 223296, 2464, 2464, // #4904 + 2, 223320, 223320, 3464, 3464, // #4905 + 3, 223342, 223342, 2734, 2734, // #4906 + 13, 223360, 223360, 160, 160, // #4907 + 40, 223424, 223424, 3376, 3376, // #4908 + 47, 223500, 223500, 3420, 3420, // #4909 + 5, 223552, 223552, 1872, 1872, // #4910 + 22, 223624, 223624, 3576, 3576, // #4911 + 12, 223653, 223653, 2789, 2789, // #4912 + 11, 223688, 223688, 392, 392, // #4913 + 40, 223744, 223744, 3376, 3376, // #4914 + 47, 223820, 223820, 3420, 3420, // #4915 + 7, 223887, 223887, 2879, 2879, // #4916 + 6, 223907, 223907, 1491, 1491, // #4917 + 7, 223931, 223931, 1739, 1739, // #4918 + 7, 223963, 223963, 1739, 1739, // #4919 + 7, 223995, 223995, 1739, 1739, // #4920 + 7, 224027, 224027, 1739, 1739, // #4921 + 7, 224059, 224059, 1739, 1739, // #4922 + 19, 224083, 224083, 1747, 1747, // #4923 + 11, 224112, 224112, 3072, 3072, // #4924 + 11, 224128, 224128, 3072, 3072, // #4925 + 10, 224155, 224155, 1771, 1771, // #4926 + 10, 224180, 224180, 756, 756, // #4927 + 11, 224194, 224194, 642, 642, // #4928 + 3, 224216, 224216, 3000, 3000, // #4929 + 10, 224228, 224228, 756, 756, // #4930 + 17, 224253, 224253, 749, 749, // #4931 + 3, 224280, 224280, 3000, 3000, // #4932 + 3, 224296, 224296, 3000, 3000, // #4933 + 3, 224312, 224312, 3000, 3000, // #4934 + 3, 224328, 224328, 3000, 3000, // #4935 + 1, 224339, 224339, 2339, 2339, // #4936 + 2, 224360, 224360, 504, 504, // #4937 + 3, 224382, 224382, 2734, 2734, // #4938 + 12, 224404, 224404, 1812, 1812, // #4939 + 40, 224448, 224448, 3376, 3376, // #4940 + 47, 224524, 224524, 3420, 3420, // #4941 + 6, 224579, 224579, 1491, 1491, // #4942 + 4, 224600, 224600, 1576, 1576, // #4943 + 4, 224617, 224617, 2729, 2729, // #4944 + 6, 224634, 224634, 1834, 1834, // #4945 + 40, 224704, 224704, 3376, 3376, // #4946 + 47, 224780, 224780, 3420, 3420, // #4947 + 3, 224840, 224840, 616, 616, // #4948 + 3, 224862, 224862, 2734, 2734, // #4949 + 4, 224909, 224909, 509, 509, // #4950 + 40, 224960, 224960, 3376, 3376, // #4951 + 47, 225036, 225036, 3420, 3420, // #4952 + 3, 225096, 225096, 2664, 2664, // #4953 + 3, 225118, 225118, 2734, 2734, // #4954 + 4, 225165, 225165, 509, 509, // #4955 + 40, 225216, 225216, 3376, 3376, // #4956 + 47, 225292, 225292, 3420, 3420, // #4957 + 3, 225352, 225352, 2664, 2664, // #4958 + 3, 225374, 225374, 2734, 2734, // #4959 + 4, 225421, 225421, 509, 509, // #4960 + 40, 225472, 225472, 3376, 3376, // #4961 + 47, 225548, 225548, 3420, 3420, // #4962 + 3, 225608, 225608, 3064, 3064, // #4963 + 3, 225630, 225630, 2734, 2734, // #4964 + 4, 225677, 225677, 509, 509, // #4965 + 40, 225728, 225728, 3376, 3376, // #4966 + 47, 225804, 225804, 3420, 3420, // #4967 + 3, 225864, 225864, 3064, 3064, // #4968 + 3, 225886, 225886, 2734, 2734, // #4969 + 4, 225933, 225933, 509, 509, // #4970 + 40, 225984, 225984, 3376, 3376, // #4971 + 47, 226060, 226060, 3420, 3420, // #4972 + 3, 226112, 226112, 3472, 3472, // #4973 + 3, 226142, 226142, 2734, 2734, // #4974 + 4, 226189, 226189, 509, 509, // #4975 + 40, 226240, 226240, 3376, 3376, // #4976 + 47, 226316, 226316, 3420, 3420, // #4977 + 3, 226368, 226368, 3472, 3472, // #4978 + 3, 226398, 226398, 2734, 2734, // #4979 + 4, 226445, 226445, 509, 509, // #4980 + 40, 226496, 226496, 3376, 3376, // #4981 + 47, 226572, 226572, 3420, 3420, // #4982 + 3, 226632, 226632, 3880, 3880, // #4983 + 3, 226654, 226654, 2734, 2734, // #4984 + 4, 226701, 226701, 509, 509, // #4985 + 40, 226752, 226752, 3376, 3376, // #4986 + 47, 226828, 226828, 3420, 3420, // #4987 + 3, 226888, 226888, 200, 200, // #4988 + 3, 226910, 226910, 2734, 2734, // #4989 + 4, 226957, 226957, 509, 509, // #4990 + 40, 227008, 227008, 3376, 3376, // #4991 + 47, 227084, 227084, 3420, 3420, // #4992 + 3, 227144, 227144, 200, 200, // #4993 + 3, 227166, 227166, 2734, 2734, // #4994 + 4, 227213, 227213, 509, 509, // #4995 + 40, 227264, 227264, 3376, 3376, // #4996 + 47, 227340, 227340, 3420, 3420, // #4997 + 2, 227400, 227400, 632, 632, // #4998 + 3, 227422, 227422, 2734, 2734, // #4999 + 4, 227469, 227469, 509, 509, // #5000 + 40, 227520, 227520, 3376, 3376, // #5001 + 47, 227596, 227596, 3420, 3420, // #5002 + 2, 227656, 227656, 1032, 1032, // #5003 + 3, 227678, 227678, 2734, 2734, // #5004 + 4, 227725, 227725, 509, 509, // #5005 + 40, 227776, 227776, 3376, 3376, // #5006 + 47, 227852, 227852, 3420, 3420, // #5007 + 2, 227904, 227904, 1440, 1440, // #5008 + 3, 227934, 227934, 2734, 2734, // #5009 + 4, 227981, 227981, 509, 509, // #5010 + 40, 228032, 228032, 3376, 3376, // #5011 + 47, 228108, 228108, 3420, 3420, // #5012 + 2, 228168, 228168, 1848, 1848, // #5013 + 3, 228190, 228190, 2734, 2734, // #5014 + 4, 228237, 228237, 509, 509, // #5015 + 40, 228288, 228288, 3376, 3376, // #5016 + 47, 228364, 228364, 3420, 3420, // #5017 + 2, 228416, 228416, 2256, 2256, // #5018 + 3, 228446, 228446, 2734, 2734, // #5019 + 4, 228493, 228493, 509, 509, // #5020 + 40, 228544, 228544, 3376, 3376, // #5021 + 47, 228620, 228620, 3420, 3420, // #5022 + 2, 228672, 228672, 224, 224, // #5023 + 3, 228702, 228702, 2734, 2734, // #5024 + 4, 228749, 228749, 509, 509, // #5025 + 40, 228800, 228800, 3376, 3376, // #5026 + 47, 228876, 228876, 3420, 3420, // #5027 + 2, 228936, 228936, 1880, 1880, // #5028 + 3, 228958, 228958, 2734, 2734, // #5029 + 4, 229005, 229005, 509, 509, // #5030 + 40, 229056, 229056, 3376, 3376, // #5031 + 47, 229132, 229132, 3420, 3420, // #5032 + 2, 229192, 229192, 1880, 1880, // #5033 + 3, 229214, 229214, 2734, 2734, // #5034 + 4, 229261, 229261, 509, 509, // #5035 + 40, 229312, 229312, 3376, 3376, // #5036 + 47, 229388, 229388, 3420, 3420, // #5037 + 2, 229448, 229448, 2280, 2280, // #5038 + 3, 229470, 229470, 2734, 2734, // #5039 + 4, 229517, 229517, 509, 509, // #5040 + 40, 229568, 229568, 3376, 3376, // #5041 + 47, 229644, 229644, 3420, 3420, // #5042 + 2, 229704, 229704, 2280, 2280, // #5043 + 3, 229726, 229726, 2734, 2734, // #5044 + 4, 229773, 229773, 509, 509, // #5045 + 40, 229824, 229824, 3376, 3376, // #5046 + 47, 229900, 229900, 3420, 3420, // #5047 + 2, 229952, 229952, 2688, 2688, // #5048 + 3, 229982, 229982, 2734, 2734, // #5049 + 4, 230029, 230029, 509, 509, // #5050 + 40, 230080, 230080, 3376, 3376, // #5051 + 47, 230156, 230156, 3420, 3420, // #5052 + 2, 230208, 230208, 2688, 2688, // #5053 + 3, 230238, 230238, 2734, 2734, // #5054 + 4, 230285, 230285, 509, 509, // #5055 + 40, 230336, 230336, 3376, 3376, // #5056 + 47, 230412, 230412, 3420, 3420, // #5057 + 2, 230464, 230464, 3104, 3104, // #5058 + 3, 230494, 230494, 2734, 2734, // #5059 + 4, 230541, 230541, 509, 509, // #5060 + 40, 230592, 230592, 3376, 3376, // #5061 + 47, 230668, 230668, 3420, 3420, // #5062 + 2, 230728, 230728, 3512, 3512, // #5063 + 3, 230750, 230750, 2734, 2734, // #5064 + 4, 230797, 230797, 509, 509, // #5065 + 40, 230848, 230848, 3376, 3376, // #5066 + 47, 230924, 230924, 3420, 3420, // #5067 + 2, 230984, 230984, 3512, 3512, // #5068 + 3, 231006, 231006, 2734, 2734, // #5069 + 4, 231053, 231053, 509, 509, // #5070 + 40, 231104, 231104, 3376, 3376, // #5071 + 47, 231180, 231180, 3420, 3420, // #5072 + 2, 231232, 231232, 3920, 3920, // #5073 + 3, 231262, 231262, 2734, 2734, // #5074 + 4, 231309, 231309, 509, 509, // #5075 + 40, 231360, 231360, 3376, 3376, // #5076 + 47, 231436, 231436, 3420, 3420, // #5077 + 2, 231496, 231496, 3944, 3944, // #5078 + 3, 231518, 231518, 2734, 2734, // #5079 + 4, 231565, 231565, 509, 509, // #5080 + 40, 231616, 231616, 3376, 3376, // #5081 + 47, 231692, 231692, 3420, 3420, // #5082 + 2, 231752, 231752, 3944, 3944, // #5083 + 3, 231774, 231774, 2734, 2734, // #5084 + 4, 231821, 231821, 509, 509, // #5085 + 40, 231872, 231872, 3376, 3376, // #5086 + 47, 231948, 231948, 3420, 3420, // #5087 + 2, 232008, 232008, 248, 248, // #5088 + 3, 232030, 232030, 2734, 2734, // #5089 + 4, 232077, 232077, 509, 509, // #5090 + 40, 232128, 232128, 3376, 3376, // #5091 + 47, 232204, 232204, 3420, 3420, // #5092 + 2, 232264, 232264, 248, 248, // #5093 + 3, 232286, 232286, 2734, 2734, // #5094 + 4, 232333, 232333, 509, 509, // #5095 + 40, 232384, 232384, 3376, 3376, // #5096 + 47, 232460, 232460, 3420, 3420, // #5097 + 2, 232512, 232512, 656, 656, // #5098 + 3, 232542, 232542, 2734, 2734, // #5099 + 4, 232589, 232589, 509, 509, // #5100 + 40, 232640, 232640, 3376, 3376, // #5101 + 47, 232716, 232716, 3420, 3420, // #5102 + 2, 232768, 232768, 656, 656, // #5103 + 3, 232798, 232798, 2734, 2734, // #5104 + 4, 232845, 232845, 509, 509, // #5105 + 40, 232896, 232896, 3376, 3376, // #5106 + 47, 232972, 232972, 3420, 3420, // #5107 + 2, 233032, 233032, 1064, 1064, // #5108 + 3, 233054, 233054, 2734, 2734, // #5109 + 4, 233101, 233101, 509, 509, // #5110 + 40, 233152, 233152, 3376, 3376, // #5111 + 47, 233228, 233228, 3420, 3420, // #5112 + 2, 233280, 233280, 1472, 1472, // #5113 + 3, 233310, 233310, 2734, 2734, // #5114 + 4, 233357, 233357, 509, 509, // #5115 + 40, 233408, 233408, 3376, 3376, // #5116 + 47, 233484, 233484, 3420, 3420, // #5117 + 2, 233536, 233536, 1472, 1472, // #5118 + 3, 233566, 233566, 2734, 2734, // #5119 + 4, 233613, 233613, 509, 509, // #5120 + 40, 233664, 233664, 3376, 3376, // #5121 + 47, 233740, 233740, 3420, 3420, // #5122 + 2, 233792, 233792, 3536, 3536, // #5123 + 3, 233822, 233822, 2734, 2734, // #5124 + 4, 233869, 233869, 509, 509, // #5125 + 40, 233920, 233920, 3376, 3376, // #5126 + 47, 233996, 233996, 3420, 3420, // #5127 + 2, 234056, 234056, 24, 24, // #5128 + 3, 234078, 234078, 2734, 2734, // #5129 + 4, 234125, 234125, 509, 509, // #5130 + 40, 234176, 234176, 3376, 3376, // #5131 + 47, 234252, 234252, 3420, 3420, // #5132 + 2, 234312, 234312, 24, 24, // #5133 + 3, 234334, 234334, 2734, 2734, // #5134 + 4, 234381, 234381, 509, 509, // #5135 + 40, 234432, 234432, 3376, 3376, // #5136 + 47, 234508, 234508, 3420, 3420, // #5137 + 2, 234568, 234568, 424, 424, // #5138 + 3, 234590, 234590, 2734, 2734, // #5139 + 4, 234637, 234637, 509, 509, // #5140 + 40, 234688, 234688, 3376, 3376, // #5141 + 47, 234764, 234764, 3420, 3420, // #5142 + 2, 234824, 234824, 424, 424, // #5143 + 3, 234846, 234846, 2734, 2734, // #5144 + 4, 234893, 234893, 509, 509, // #5145 + 40, 234944, 234944, 3376, 3376, // #5146 + 47, 235020, 235020, 3420, 3420, // #5147 + 2, 235080, 235080, 424, 424, // #5148 + 3, 235102, 235102, 2734, 2734, // #5149 + 4, 235149, 235149, 509, 509, // #5150 + 40, 235200, 235200, 3376, 3376, // #5151 + 47, 235276, 235276, 3420, 3420, // #5152 + 2, 235328, 235328, 832, 832, // #5153 + 3, 235358, 235358, 2734, 2734, // #5154 + 4, 235405, 235405, 509, 509, // #5155 + 40, 235456, 235456, 3376, 3376, // #5156 + 47, 235532, 235532, 3420, 3420, // #5157 + 2, 235584, 235584, 832, 832, // #5158 + 3, 235614, 235614, 2734, 2734, // #5159 + 4, 235661, 235661, 509, 509, // #5160 + 40, 235712, 235712, 3376, 3376, // #5161 + 47, 235788, 235788, 3420, 3420, // #5162 + 2, 235848, 235848, 1240, 1240, // #5163 + 3, 235870, 235870, 2734, 2734, // #5164 + 4, 235917, 235917, 509, 509, // #5165 + 40, 235968, 235968, 3376, 3376, // #5166 + 47, 236044, 236044, 3420, 3420, // #5167 + 2, 236104, 236104, 2728, 2728, // #5168 + 3, 236126, 236126, 2734, 2734, // #5169 + 4, 236173, 236173, 509, 509, // #5170 + 40, 236224, 236224, 3376, 3376, // #5171 + 47, 236300, 236300, 3420, 3420, // #5172 + 2, 236360, 236360, 2728, 2728, // #5173 + 3, 236382, 236382, 2734, 2734, // #5174 + 4, 236429, 236429, 509, 509, // #5175 + 40, 236480, 236480, 3376, 3376, // #5176 + 47, 236556, 236556, 3420, 3420, // #5177 + 2, 236608, 236608, 3136, 3136, // #5178 + 3, 236638, 236638, 2734, 2734, // #5179 + 4, 236685, 236685, 509, 509, // #5180 + 40, 236736, 236736, 3376, 3376, // #5181 + 47, 236812, 236812, 3420, 3420, // #5182 + 2, 236864, 236864, 3712, 3712, // #5183 + 3, 236894, 236894, 2734, 2734, // #5184 + 4, 236941, 236941, 509, 509, // #5185 + 40, 236992, 236992, 3376, 3376, // #5186 + 47, 237068, 237068, 3420, 3420, // #5187 + 2, 237120, 237120, 3712, 3712, // #5188 + 3, 237150, 237150, 2734, 2734, // #5189 + 4, 237197, 237197, 509, 509, // #5190 + 40, 237248, 237248, 3376, 3376, // #5191 + 47, 237324, 237324, 3420, 3420, // #5192 + 2, 237384, 237384, 1272, 1272, // #5193 + 3, 237406, 237406, 2734, 2734, // #5194 + 4, 237453, 237453, 509, 509, // #5195 + 40, 237504, 237504, 3376, 3376, // #5196 + 47, 237580, 237580, 3420, 3420, // #5197 + 2, 237640, 237640, 1272, 1272, // #5198 + 3, 237662, 237662, 2734, 2734, // #5199 + 4, 237709, 237709, 509, 509, // #5200 + 40, 237760, 237760, 3376, 3376, // #5201 + 47, 237836, 237836, 3420, 3420, // #5202 + 2, 237896, 237896, 1672, 1672, // #5203 + 3, 237918, 237918, 2734, 2734, // #5204 + 4, 237965, 237965, 509, 509, // #5205 + 40, 238016, 238016, 3376, 3376, // #5206 + 47, 238092, 238092, 3420, 3420, // #5207 + 2, 238152, 238152, 1672, 1672, // #5208 + 3, 238174, 238174, 2734, 2734, // #5209 + 4, 238221, 238221, 509, 509, // #5210 + 40, 238272, 238272, 3376, 3376, // #5211 + 47, 238348, 238348, 3420, 3420, // #5212 + 2, 238400, 238400, 2080, 2080, // #5213 + 3, 238430, 238430, 2734, 2734, // #5214 + 4, 238477, 238477, 509, 509, // #5215 + 40, 238528, 238528, 3376, 3376, // #5216 + 47, 238604, 238604, 3420, 3420, // #5217 + 2, 238656, 238656, 2080, 2080, // #5218 + 3, 238686, 238686, 2734, 2734, // #5219 + 4, 238733, 238733, 509, 509, // #5220 + 40, 238784, 238784, 3376, 3376, // #5221 + 47, 238860, 238860, 3420, 3420, // #5222 + 2, 238920, 238920, 2488, 2488, // #5223 + 3, 238942, 238942, 2734, 2734, // #5224 + 4, 238989, 238989, 509, 509, // #5225 + 40, 239040, 239040, 3376, 3376, // #5226 + 47, 239116, 239116, 3420, 3420, // #5227 + 2, 239168, 239168, 2896, 2896, // #5228 + 3, 239198, 239198, 2734, 2734, // #5229 + 4, 239245, 239245, 509, 509, // #5230 + 40, 239296, 239296, 3376, 3376, // #5231 + 47, 239372, 239372, 3420, 3420, // #5232 + 2, 239424, 239424, 2896, 2896, // #5233 + 3, 239454, 239454, 2734, 2734, // #5234 + 4, 239501, 239501, 509, 509, // #5235 + 40, 239552, 239552, 3376, 3376, // #5236 + 47, 239628, 239628, 3420, 3420, // #5237 + 2, 239688, 239688, 3304, 3304, // #5238 + 3, 239710, 239710, 2734, 2734, // #5239 + 4, 239757, 239757, 509, 509, // #5240 + 40, 239808, 239808, 3376, 3376, // #5241 + 47, 239884, 239884, 3420, 3420, // #5242 + 2, 239944, 239944, 3304, 3304, // #5243 + 3, 239966, 239966, 2734, 2734, // #5244 + 4, 240013, 240013, 509, 509, // #5245 + 40, 240064, 240064, 3376, 3376, // #5246 + 47, 240140, 240140, 3420, 3420, // #5247 + 2, 240200, 240200, 1800, 1800, // #5248 + 3, 240222, 240222, 2734, 2734, // #5249 + 4, 240269, 240269, 509, 509, // #5250 + 40, 240320, 240320, 3376, 3376, // #5251 + 47, 240396, 240396, 3420, 3420, // #5252 + 2, 240456, 240456, 1800, 1800, // #5253 + 3, 240478, 240478, 2734, 2734, // #5254 + 4, 240525, 240525, 509, 509, // #5255 + 40, 240576, 240576, 3376, 3376, // #5256 + 47, 240652, 240652, 3420, 3420, // #5257 + 2, 240712, 240712, 2200, 2200, // #5258 + 3, 240734, 240734, 2734, 2734, // #5259 + 4, 240781, 240781, 509, 509, // #5260 + 40, 240832, 240832, 3376, 3376, // #5261 + 47, 240908, 240908, 3420, 3420, // #5262 + 2, 240968, 240968, 2200, 2200, // #5263 + 3, 240990, 240990, 2734, 2734, // #5264 + 4, 241037, 241037, 509, 509, // #5265 + 40, 241088, 241088, 3376, 3376, // #5266 + 47, 241164, 241164, 3420, 3420, // #5267 + 2, 241224, 241224, 2200, 2200, // #5268 + 3, 241246, 241246, 2734, 2734, // #5269 + 4, 241293, 241293, 509, 509, // #5270 + 40, 241344, 241344, 3376, 3376, // #5271 + 47, 241420, 241420, 3420, 3420, // #5272 + 2, 241472, 241472, 3744, 3744, // #5273 + 3, 241502, 241502, 2734, 2734, // #5274 + 4, 241549, 241549, 509, 509, // #5275 + 40, 241600, 241600, 3376, 3376, // #5276 + 47, 241676, 241676, 3420, 3420, // #5277 + 2, 241728, 241728, 3744, 3744, // #5278 + 3, 241758, 241758, 2734, 2734, // #5279 + 4, 241805, 241805, 509, 509, // #5280 + 40, 241856, 241856, 3376, 3376, // #5281 + 47, 241932, 241932, 3420, 3420, // #5282 + 2, 241992, 241992, 56, 56, // #5283 + 3, 242014, 242014, 2734, 2734, // #5284 + 4, 242061, 242061, 509, 509, // #5285 + 40, 242112, 242112, 3376, 3376, // #5286 + 47, 242188, 242188, 3420, 3420, // #5287 + 2, 242240, 242240, 464, 464, // #5288 + 3, 242270, 242270, 2734, 2734, // #5289 + 4, 242317, 242317, 509, 509, // #5290 + 40, 242368, 242368, 3376, 3376, // #5291 + 47, 242444, 242444, 3420, 3420, // #5292 + 2, 242496, 242496, 464, 464, // #5293 + 3, 242526, 242526, 2734, 2734, // #5294 + 4, 242573, 242573, 509, 509, // #5295 + 40, 242624, 242624, 3376, 3376, // #5296 + 47, 242700, 242700, 3420, 3420, // #5297 + 2, 242760, 242760, 872, 872, // #5298 + 3, 242782, 242782, 2734, 2734, // #5299 + 4, 242829, 242829, 509, 509, // #5300 + 40, 242880, 242880, 3376, 3376, // #5301 + 47, 242956, 242956, 3420, 3420, // #5302 + 3, 243016, 243016, 1176, 1176, // #5303 + 3, 243038, 243038, 2734, 2734, // #5304 + 4, 243085, 243085, 509, 509, // #5305 + 40, 243136, 243136, 3376, 3376, // #5306 + 47, 243212, 243212, 3420, 3420, // #5307 + 1, 243272, 243272, 1032, 1032, // #5308 + 3, 243294, 243294, 2734, 2734, // #5309 + 7, 243315, 243315, 1667, 1667, // #5310 + 40, 243328, 243328, 3376, 3376, // #5311 + 47, 243404, 243404, 3420, 3420, // #5312 + 3, 243456, 243456, 1280, 1280, // #5313 + 3, 243486, 243486, 2734, 2734, // #5314 + 7, 243507, 243507, 1699, 1699, // #5315 + 40, 243520, 243520, 3376, 3376, // #5316 + 47, 243596, 243596, 3420, 3420, // #5317 + 3, 243656, 243656, 1176, 1176, // #5318 + 3, 243678, 243678, 2734, 2734, // #5319 + 4, 243725, 243725, 509, 509, // #5320 + 40, 243776, 243776, 3376, 3376, // #5321 + 47, 243852, 243852, 3420, 3420, // #5322 + 1, 243912, 243912, 1032, 1032, // #5323 + 3, 243934, 243934, 2734, 2734, // #5324 + 7, 243955, 243955, 1667, 1667, // #5325 + 40, 243968, 243968, 3376, 3376, // #5326 + 47, 244044, 244044, 3420, 3420, // #5327 + 3, 244096, 244096, 1280, 1280, // #5328 + 3, 244126, 244126, 2734, 2734, // #5329 + 7, 244147, 244147, 1699, 1699, // #5330 + 40, 244160, 244160, 3376, 3376, // #5331 + 47, 244236, 244236, 3420, 3420, // #5332 + 3, 244296, 244296, 1784, 1784, // #5333 + 3, 244318, 244318, 2734, 2734, // #5334 + 4, 244365, 244365, 509, 509, // #5335 + 40, 244416, 244416, 3376, 3376, // #5336 + 47, 244492, 244492, 3420, 3420, // #5337 + 1, 244552, 244552, 1640, 1640, // #5338 + 3, 244574, 244574, 2734, 2734, // #5339 + 7, 244595, 244595, 1667, 1667, // #5340 + 40, 244608, 244608, 3376, 3376, // #5341 + 47, 244684, 244684, 3420, 3420, // #5342 + 3, 244736, 244736, 1888, 1888, // #5343 + 3, 244766, 244766, 2734, 2734, // #5344 + 7, 244787, 244787, 1699, 1699, // #5345 + 40, 244800, 244800, 3376, 3376, // #5346 + 47, 244876, 244876, 3420, 3420, // #5347 + 3, 244936, 244936, 1784, 1784, // #5348 + 3, 244958, 244958, 2734, 2734, // #5349 + 4, 245005, 245005, 509, 509, // #5350 + 40, 245056, 245056, 3376, 3376, // #5351 + 47, 245132, 245132, 3420, 3420, // #5352 + 1, 245192, 245192, 1640, 1640, // #5353 + 3, 245214, 245214, 2734, 2734, // #5354 + 7, 245235, 245235, 1667, 1667, // #5355 + 40, 245248, 245248, 3376, 3376, // #5356 + 47, 245324, 245324, 3420, 3420, // #5357 + 3, 245376, 245376, 1888, 1888, // #5358 + 3, 245406, 245406, 2734, 2734, // #5359 + 7, 245427, 245427, 1699, 1699, // #5360 + 40, 245440, 245440, 3376, 3376, // #5361 + 47, 245516, 245516, 3420, 3420, // #5362 + 3, 245576, 245576, 2408, 2408, // #5363 + 3, 245598, 245598, 2734, 2734, // #5364 + 4, 245645, 245645, 509, 509, // #5365 + 40, 245696, 245696, 3376, 3376, // #5366 + 47, 245772, 245772, 3420, 3420, // #5367 + 1, 245832, 245832, 2264, 2264, // #5368 + 3, 245854, 245854, 2734, 2734, // #5369 + 7, 245875, 245875, 1667, 1667, // #5370 + 40, 245888, 245888, 3376, 3376, // #5371 + 47, 245964, 245964, 3420, 3420, // #5372 + 3, 246016, 246016, 2512, 2512, // #5373 + 3, 246046, 246046, 2734, 2734, // #5374 + 7, 246067, 246067, 1699, 1699, // #5375 + 40, 246080, 246080, 3376, 3376, // #5376 + 47, 246156, 246156, 3420, 3420, // #5377 + 3, 246216, 246216, 2408, 2408, // #5378 + 3, 246238, 246238, 2734, 2734, // #5379 + 4, 246285, 246285, 509, 509, // #5380 + 40, 246336, 246336, 3376, 3376, // #5381 + 47, 246412, 246412, 3420, 3420, // #5382 + 1, 246472, 246472, 2264, 2264, // #5383 + 3, 246494, 246494, 2734, 2734, // #5384 + 7, 246515, 246515, 1667, 1667, // #5385 + 40, 246528, 246528, 3376, 3376, // #5386 + 47, 246604, 246604, 3420, 3420, // #5387 + 3, 246656, 246656, 2512, 2512, // #5388 + 3, 246686, 246686, 2734, 2734, // #5389 + 7, 246707, 246707, 1699, 1699, // #5390 + 40, 246720, 246720, 3376, 3376, // #5391 + 47, 246796, 246796, 3420, 3420, // #5392 + 3, 246848, 246848, 3024, 3024, // #5393 + 3, 246878, 246878, 2734, 2734, // #5394 + 4, 246925, 246925, 509, 509, // #5395 + 40, 246976, 246976, 3376, 3376, // #5396 + 47, 247052, 247052, 3420, 3420, // #5397 + 1, 247104, 247104, 2880, 2880, // #5398 + 3, 247134, 247134, 2734, 2734, // #5399 + 7, 247155, 247155, 1667, 1667, // #5400 + 40, 247168, 247168, 3376, 3376, // #5401 + 47, 247244, 247244, 3420, 3420, // #5402 + 3, 247304, 247304, 3128, 3128, // #5403 + 3, 247326, 247326, 2734, 2734, // #5404 + 7, 247347, 247347, 1699, 1699, // #5405 + 40, 247360, 247360, 3376, 3376, // #5406 + 47, 247436, 247436, 3420, 3420, // #5407 + 3, 247488, 247488, 3648, 3648, // #5408 + 3, 247518, 247518, 2734, 2734, // #5409 + 4, 247565, 247565, 509, 509, // #5410 + 40, 247616, 247616, 3376, 3376, // #5411 + 47, 247692, 247692, 3420, 3420, // #5412 + 1, 247744, 247744, 3504, 3504, // #5413 + 3, 247774, 247774, 2734, 2734, // #5414 + 7, 247795, 247795, 1667, 1667, // #5415 + 40, 247808, 247808, 3376, 3376, // #5416 + 47, 247884, 247884, 3420, 3420, // #5417 + 3, 247944, 247944, 3752, 3752, // #5418 + 3, 247966, 247966, 2734, 2734, // #5419 + 7, 247987, 247987, 1699, 1699, // #5420 + 40, 248000, 248000, 3376, 3376, // #5421 + 47, 248076, 248076, 3420, 3420, // #5422 + 3, 248128, 248128, 3648, 3648, // #5423 + 3, 248158, 248158, 2734, 2734, // #5424 + 4, 248205, 248205, 509, 509, // #5425 + 40, 248256, 248256, 3376, 3376, // #5426 + 47, 248332, 248332, 3420, 3420, // #5427 + 1, 248384, 248384, 3504, 3504, // #5428 + 3, 248414, 248414, 2734, 2734, // #5429 + 7, 248435, 248435, 1667, 1667, // #5430 + 40, 248448, 248448, 3376, 3376, // #5431 + 47, 248524, 248524, 3420, 3420, // #5432 + 3, 248584, 248584, 3752, 3752, // #5433 + 3, 248606, 248606, 2734, 2734, // #5434 + 7, 248627, 248627, 1699, 1699, // #5435 + 40, 248640, 248640, 3376, 3376, // #5436 + 47, 248716, 248716, 3420, 3420, // #5437 + 2, 248768, 248768, 32, 32, // #5438 + 3, 248798, 248798, 2734, 2734, // #5439 + 4, 248845, 248845, 509, 509, // #5440 + 40, 248896, 248896, 3376, 3376, // #5441 + 47, 248972, 248972, 3420, 3420, // #5442 + 2, 249032, 249032, 440, 440, // #5443 + 3, 249054, 249054, 2734, 2734, // #5444 + 4, 249101, 249101, 509, 509, // #5445 + 40, 249152, 249152, 3376, 3376, // #5446 + 47, 249228, 249228, 3420, 3420, // #5447 + 2, 249280, 249280, 848, 848, // #5448 + 3, 249310, 249310, 2734, 2734, // #5449 + 4, 249357, 249357, 509, 509, // #5450 + 40, 249408, 249408, 3376, 3376, // #5451 + 47, 249484, 249484, 3420, 3420, // #5452 + 2, 249536, 249536, 1664, 1664, // #5453 + 3, 249566, 249566, 2734, 2734, // #5454 + 4, 249613, 249613, 509, 509, // #5455 + 40, 249664, 249664, 3376, 3376, // #5456 + 47, 249740, 249740, 3420, 3420, // #5457 + 2, 249792, 249792, 2480, 2480, // #5458 + 3, 249822, 249822, 2734, 2734, // #5459 + 4, 249869, 249869, 509, 509, // #5460 + 40, 249920, 249920, 3376, 3376, // #5461 + 47, 249996, 249996, 3420, 3420, // #5462 + 2, 250048, 250048, 2880, 2880, // #5463 + 3, 250078, 250078, 2734, 2734, // #5464 + 4, 250125, 250125, 509, 509, // #5465 + 40, 250176, 250176, 3376, 3376, // #5466 + 47, 250252, 250252, 3420, 3420, // #5467 + 2, 250304, 250304, 3296, 3296, // #5468 + 3, 250334, 250334, 2734, 2734, // #5469 + 4, 250381, 250381, 509, 509, // #5470 + 40, 250432, 250432, 3376, 3376, // #5471 + 47, 250508, 250508, 3420, 3420, // #5472 + 2, 250568, 250568, 3704, 3704, // #5473 + 3, 250590, 250590, 2734, 2734, // #5474 + 4, 250637, 250637, 509, 509, // #5475 + 40, 250688, 250688, 3376, 3376, // #5476 + 47, 250764, 250764, 3420, 3420, // #5477 + 2, 250824, 250824, 8, 8, // #5478 + 3, 250846, 250846, 2734, 2734, // #5479 + 4, 250893, 250893, 509, 509, // #5480 + 40, 250944, 250944, 3376, 3376, // #5481 + 47, 251020, 251020, 3420, 3420, // #5482 + 2, 251072, 251072, 416, 416, // #5483 + 3, 251102, 251102, 2734, 2734, // #5484 + 4, 251149, 251149, 509, 509, // #5485 + 40, 251200, 251200, 3376, 3376, // #5486 + 47, 251276, 251276, 3420, 3420, // #5487 + 2, 251336, 251336, 824, 824, // #5488 + 3, 251358, 251358, 2734, 2734, // #5489 + 4, 251405, 251405, 509, 509, // #5490 + 40, 251456, 251456, 3376, 3376, // #5491 + 47, 251532, 251532, 3420, 3420, // #5492 + 2, 251584, 251584, 1232, 1232, // #5493 + 3, 251614, 251614, 2734, 2734, // #5494 + 4, 251661, 251661, 509, 509, // #5495 + 40, 251712, 251712, 3376, 3376, // #5496 + 47, 251788, 251788, 3420, 3420, // #5497 + 2, 251848, 251848, 1640, 1640, // #5498 + 3, 251870, 251870, 2734, 2734, // #5499 + 4, 251917, 251917, 509, 509, // #5500 + 40, 251968, 251968, 3376, 3376, // #5501 + 47, 252044, 252044, 3420, 3420, // #5502 + 2, 252096, 252096, 2048, 2048, // #5503 + 3, 252126, 252126, 2734, 2734, // #5504 + 4, 252173, 252173, 509, 509, // #5505 + 40, 252224, 252224, 3376, 3376, // #5506 + 47, 252300, 252300, 3420, 3420, // #5507 + 2, 252360, 252360, 2456, 2456, // #5508 + 3, 252382, 252382, 2734, 2734, // #5509 + 4, 252429, 252429, 509, 509, // #5510 + 40, 252480, 252480, 3376, 3376, // #5511 + 47, 252556, 252556, 3420, 3420, // #5512 + 2, 252616, 252616, 3272, 3272, // #5513 + 3, 252638, 252638, 2734, 2734, // #5514 + 4, 252685, 252685, 509, 509, // #5515 + 40, 252736, 252736, 3376, 3376, // #5516 + 47, 252812, 252812, 3420, 3420, // #5517 + 2, 252872, 252872, 4088, 4088, // #5518 + 3, 252894, 252894, 2734, 2734, // #5519 + 4, 252941, 252941, 509, 509, // #5520 + 40, 252992, 252992, 3376, 3376, // #5521 + 47, 253068, 253068, 3420, 3420, // #5522 + 2, 253128, 253128, 392, 392, // #5523 + 3, 253150, 253150, 2734, 2734, // #5524 + 4, 253197, 253197, 509, 509, // #5525 + 40, 253248, 253248, 3376, 3376, // #5526 + 47, 253324, 253324, 3420, 3420, // #5527 + 2, 253376, 253376, 800, 800, // #5528 + 3, 253406, 253406, 2734, 2734, // #5529 + 4, 253453, 253453, 509, 509, // #5530 + 40, 253504, 253504, 3376, 3376, // #5531 + 47, 253580, 253580, 3420, 3420, // #5532 + 2, 253640, 253640, 1208, 1208, // #5533 + 3, 253662, 253662, 2734, 2734, // #5534 + 4, 253709, 253709, 509, 509, // #5535 + 40, 253760, 253760, 3376, 3376, // #5536 + 47, 253836, 253836, 3420, 3420, // #5537 + 2, 253888, 253888, 1616, 1616, // #5538 + 3, 253918, 253918, 2734, 2734, // #5539 + 4, 253965, 253965, 509, 509, // #5540 + 40, 254016, 254016, 3376, 3376, // #5541 + 47, 254092, 254092, 3420, 3420, // #5542 + 2, 254152, 254152, 2024, 2024, // #5543 + 3, 254174, 254174, 2734, 2734, // #5544 + 4, 254221, 254221, 509, 509, // #5545 + 40, 254272, 254272, 3376, 3376, // #5546 + 47, 254348, 254348, 3420, 3420, // #5547 + 2, 254400, 254400, 2432, 2432, // #5548 + 3, 254430, 254430, 2734, 2734, // #5549 + 4, 254477, 254477, 509, 509, // #5550 + 40, 254528, 254528, 3376, 3376, // #5551 + 47, 254604, 254604, 3420, 3420, // #5552 + 2, 254664, 254664, 2840, 2840, // #5553 + 3, 254686, 254686, 2734, 2734, // #5554 + 4, 254733, 254733, 509, 509, // #5555 + 40, 254784, 254784, 3376, 3376, // #5556 + 47, 254860, 254860, 3420, 3420, // #5557 + 2, 254912, 254912, 3248, 3248, // #5558 + 3, 254942, 254942, 2734, 2734, // #5559 + 4, 254989, 254989, 509, 509, // #5560 + 40, 255040, 255040, 3376, 3376, // #5561 + 47, 255116, 255116, 3420, 3420, // #5562 + 2, 255176, 255176, 3656, 3656, // #5563 + 3, 255198, 255198, 2734, 2734, // #5564 + 4, 255245, 255245, 509, 509, // #5565 + 40, 255296, 255296, 3376, 3376, // #5566 + 47, 255372, 255372, 3420, 3420, // #5567 + 2, 255424, 255424, 4064, 4064, // #5568 + 3, 255454, 255454, 2734, 2734, // #5569 + 4, 255501, 255501, 509, 509, // #5570 + 40, 255552, 255552, 3376, 3376, // #5571 + 47, 255628, 255628, 3420, 3420, // #5572 + 2, 255680, 255680, 784, 784, // #5573 + 3, 255710, 255710, 2734, 2734, // #5574 + 4, 255757, 255757, 509, 509, // #5575 + 40, 255808, 255808, 3376, 3376, // #5576 + 47, 255884, 255884, 3420, 3420, // #5577 + 2, 255936, 255936, 1600, 1600, // #5578 + 3, 255966, 255966, 2734, 2734, // #5579 + 4, 256013, 256013, 509, 509, // #5580 + 40, 256064, 256064, 3376, 3376, // #5581 + 47, 256140, 256140, 3420, 3420, // #5582 + 2, 256192, 256192, 2000, 2000, // #5583 + 3, 256222, 256222, 2734, 2734, // #5584 + 4, 256269, 256269, 509, 509, // #5585 + 40, 256320, 256320, 3376, 3376, // #5586 + 47, 256396, 256396, 3420, 3420, // #5587 + 2, 256456, 256456, 2408, 2408, // #5588 + 3, 256478, 256478, 2734, 2734, // #5589 + 4, 256525, 256525, 509, 509, // #5590 + 40, 256576, 256576, 3376, 3376, // #5591 + 47, 256652, 256652, 3420, 3420, // #5592 + 2, 256704, 256704, 2816, 2816, // #5593 + 3, 256734, 256734, 2734, 2734, // #5594 + 4, 256781, 256781, 509, 509, // #5595 + 40, 256832, 256832, 3376, 3376, // #5596 + 47, 256908, 256908, 3420, 3420, // #5597 + 2, 256960, 256960, 3216, 3216, // #5598 + 3, 256990, 256990, 2734, 2734, // #5599 + 4, 257037, 257037, 509, 509, // #5600 + 40, 257088, 257088, 3376, 3376, // #5601 + 47, 257164, 257164, 3420, 3420, // #5602 + 2, 257224, 257224, 3624, 3624, // #5603 + 3, 257246, 257246, 2734, 2734, // #5604 + 4, 257293, 257293, 509, 509, // #5605 + 40, 257344, 257344, 3376, 3376, // #5606 + 47, 257420, 257420, 3420, 3420, // #5607 + 2, 257480, 257480, 4040, 4040, // #5608 + 3, 257502, 257502, 2734, 2734, // #5609 + 4, 257549, 257549, 509, 509, // #5610 + 40, 257600, 257600, 3376, 3376, // #5611 + 47, 257676, 257676, 3420, 3420, // #5612 + 2, 257728, 257728, 352, 352, // #5613 + 3, 257758, 257758, 2734, 2734, // #5614 + 4, 257805, 257805, 509, 509, // #5615 + 40, 257856, 257856, 3376, 3376, // #5616 + 47, 257932, 257932, 3420, 3420, // #5617 + 2, 257992, 257992, 760, 760, // #5618 + 3, 258014, 258014, 2734, 2734, // #5619 + 4, 258061, 258061, 509, 509, // #5620 + 40, 258112, 258112, 3376, 3376, // #5621 + 47, 258188, 258188, 3420, 3420, // #5622 + 2, 258240, 258240, 1168, 1168, // #5623 + 3, 258270, 258270, 2734, 2734, // #5624 + 4, 258317, 258317, 509, 509, // #5625 + 40, 258368, 258368, 3376, 3376, // #5626 + 47, 258444, 258444, 3420, 3420, // #5627 + 2, 258504, 258504, 1576, 1576, // #5628 + 3, 258526, 258526, 2734, 2734, // #5629 + 4, 258573, 258573, 509, 509, // #5630 + 40, 258624, 258624, 3376, 3376, // #5631 + 47, 258700, 258700, 3420, 3420, // #5632 + 2, 258760, 258760, 2392, 2392, // #5633 + 3, 258782, 258782, 2734, 2734, // #5634 + 4, 258829, 258829, 509, 509, // #5635 + 40, 258880, 258880, 3376, 3376, // #5636 + 47, 258956, 258956, 3420, 3420, // #5637 + 2, 259016, 259016, 3208, 3208, // #5638 + 3, 259038, 259038, 2734, 2734, // #5639 + 4, 259085, 259085, 509, 509, // #5640 + 40, 259136, 259136, 3376, 3376, // #5641 + 47, 259212, 259212, 3420, 3420, // #5642 + 2, 259272, 259272, 3608, 3608, // #5643 + 3, 259294, 259294, 2734, 2734, // #5644 + 4, 259341, 259341, 509, 509, // #5645 + 40, 259392, 259392, 3376, 3376, // #5646 + 47, 259468, 259468, 3420, 3420, // #5647 + 2, 259520, 259520, 4016, 4016, // #5648 + 3, 259550, 259550, 2734, 2734, // #5649 + 4, 259597, 259597, 509, 509, // #5650 + 40, 259648, 259648, 3376, 3376, // #5651 + 47, 259724, 259724, 3420, 3420, // #5652 + 2, 259784, 259784, 328, 328, // #5653 + 3, 259806, 259806, 2734, 2734, // #5654 + 4, 259853, 259853, 509, 509, // #5655 + 40, 259904, 259904, 3376, 3376, // #5656 + 47, 259980, 259980, 3420, 3420, // #5657 + 2, 260040, 260040, 728, 728, // #5658 + 3, 260062, 260062, 2734, 2734, // #5659 + 4, 260109, 260109, 509, 509, // #5660 + 40, 260160, 260160, 3376, 3376, // #5661 + 47, 260236, 260236, 3420, 3420, // #5662 + 2, 260288, 260288, 1136, 1136, // #5663 + 3, 260318, 260318, 2734, 2734, // #5664 + 4, 260365, 260365, 509, 509, // #5665 + 40, 260416, 260416, 3376, 3376, // #5666 + 47, 260492, 260492, 3420, 3420, // #5667 + 2, 260552, 260552, 1544, 1544, // #5668 + 3, 260574, 260574, 2734, 2734, // #5669 + 4, 260621, 260621, 509, 509, // #5670 + 40, 260672, 260672, 3376, 3376, // #5671 + 47, 260748, 260748, 3420, 3420, // #5672 + 2, 260800, 260800, 1952, 1952, // #5673 + 3, 260830, 260830, 2734, 2734, // #5674 + 4, 260877, 260877, 509, 509, // #5675 + 40, 260928, 260928, 3376, 3376, // #5676 + 47, 261004, 261004, 3420, 3420, // #5677 + 2, 261056, 261056, 2368, 2368, // #5678 + 3, 261086, 261086, 2734, 2734, // #5679 + 4, 261133, 261133, 509, 509, // #5680 + 40, 261184, 261184, 3376, 3376, // #5681 + 47, 261260, 261260, 3420, 3420, // #5682 + 2, 261320, 261320, 2776, 2776, // #5683 + 3, 261342, 261342, 2734, 2734, // #5684 + 4, 261389, 261389, 509, 509, // #5685 + 40, 261440, 261440, 3376, 3376, // #5686 + 47, 261516, 261516, 3420, 3420, // #5687 + 2, 261568, 261568, 3184, 3184, // #5688 + 3, 261598, 261598, 2734, 2734, // #5689 + 4, 261645, 261645, 509, 509, // #5690 + 40, 261696, 261696, 3376, 3376, // #5691 + 47, 261772, 261772, 3420, 3420, // #5692 + 2, 261824, 261824, 4000, 4000, // #5693 + 3, 261854, 261854, 2734, 2734, // #5694 + 4, 261901, 261901, 509, 509, // #5695 + 40, 261952, 261952, 3376, 3376, // #5696 + 47, 262028, 262028, 3420, 3420, // #5697 + 2, 262080, 262080, 720, 720, // #5698 + 3, 262110, 262110, 2734, 2734, // #5699 + 4, 262157, 262157, 509, 509, // #5700 + 40, 262208, 262208, 3376, 3376, // #5701 + 47, 262284, 262284, 3420, 3420, // #5702 + 2, 262336, 262336, 1120, 1120, // #5703 + 3, 262366, 262366, 2734, 2734, // #5704 + 4, 262413, 262413, 509, 509, // #5705 + 40, 262464, 262464, 3376, 3376, // #5706 + 47, 262540, 262540, 3420, 3420, // #5707 + 2, 262600, 262600, 1528, 1528, // #5708 + 3, 262622, 262622, 2734, 2734, // #5709 + 4, 262669, 262669, 509, 509, // #5710 + 40, 262720, 262720, 3376, 3376, // #5711 + 47, 262796, 262796, 3420, 3420, // #5712 + 2, 262848, 262848, 1936, 1936, // #5713 + 3, 262878, 262878, 2734, 2734, // #5714 + 4, 262925, 262925, 509, 509, // #5715 + 40, 262976, 262976, 3376, 3376, // #5716 + 47, 263052, 263052, 3420, 3420, // #5717 + 2, 263104, 263104, 2336, 2336, // #5718 + 3, 263134, 263134, 2734, 2734, // #5719 + 4, 263181, 263181, 509, 509, // #5720 + 40, 263232, 263232, 3376, 3376, // #5721 + 47, 263308, 263308, 3420, 3420, // #5722 + 2, 263368, 263368, 2744, 2744, // #5723 + 3, 263390, 263390, 2734, 2734, // #5724 + 4, 263437, 263437, 509, 509, // #5725 + 40, 263488, 263488, 3376, 3376, // #5726 + 47, 263564, 263564, 3420, 3420, // #5727 + 2, 263616, 263616, 3152, 3152, // #5728 + 3, 263646, 263646, 2734, 2734, // #5729 + 4, 263693, 263693, 509, 509, // #5730 + 40, 263744, 263744, 3376, 3376, // #5731 + 47, 263820, 263820, 3420, 3420, // #5732 + 2, 263880, 263880, 3560, 3560, // #5733 + 3, 263902, 263902, 2734, 2734, // #5734 + 4, 263949, 263949, 509, 509, // #5735 + 40, 264000, 264000, 3376, 3376, // #5736 + 47, 264076, 264076, 3420, 3420, // #5737 + 7, 264132, 264132, 1684, 1684, // #5738 + 7, 264146, 264146, 386, 386, // #5739 + 11, 264172, 264172, 1692, 1692, // #5740 + 5, 264200, 264200, 1704, 1704, // #5741 + 5, 264222, 264222, 1710, 1710, // #5742 + 6, 264243, 264243, 131, 131, // #5743 + 7, 264256, 264256, 2464, 2464, // #5744 + 2, 264280, 264280, 2856, 2856, // #5745 + 3, 264302, 264302, 2734, 2734, // #5746 + 14, 264320, 264320, 2416, 2416, // #5747 + 40, 264384, 264384, 3376, 3376, // #5748 + 47, 264460, 264460, 3420, 3420, // #5749 + 5, 264512, 264512, 1872, 1872, // #5750 + 11, 264536, 264536, 3016, 3016, // #5751 + 12, 264565, 264565, 2789, 2789, // #5752 + 12, 264592, 264592, 624, 624, // #5753 + 40, 264640, 264640, 3376, 3376, // #5754 + 47, 264716, 264716, 3420, 3420, // #5755 + 7, 264768, 264768, 2464, 2464, // #5756 + 2, 264784, 264784, 3136, 3136, // #5757 + 3, 264814, 264814, 2734, 2734, // #5758 + 14, 264832, 264832, 1488, 1488, // #5759 + 40, 264896, 264896, 3376, 3376, // #5760 + 47, 264972, 264972, 3420, 3420, // #5761 + 5, 265024, 265024, 1872, 1872, // #5762 + 8, 265040, 265040, 752, 752, // #5763 + 12, 265061, 265061, 2789, 2789, // #5764 + 12, 265088, 265088, 3072, 3072, // #5765 + 40, 265152, 265152, 3376, 3376, // #5766 + 47, 265228, 265228, 3420, 3420, // #5767 + 7, 265280, 265280, 2464, 2464, // #5768 + 2, 265304, 265304, 872, 872, // #5769 + 3, 265326, 265326, 2734, 2734, // #5770 + 18, 265344, 265344, 3600, 3600, // #5771 + 40, 265408, 265408, 3376, 3376, // #5772 + 47, 265484, 265484, 3420, 3420, // #5773 + 5, 265536, 265536, 1872, 1872, // #5774 + 8, 265552, 265552, 992, 992, // #5775 + 12, 265573, 265573, 2789, 2789, // #5776 + 16, 265600, 265600, 3744, 3744, // #5777 + 40, 265664, 265664, 3376, 3376, // #5778 + 47, 265740, 265740, 3420, 3420, // #5779 + 7, 265792, 265792, 2464, 2464, // #5780 + 2, 265808, 265808, 1120, 1120, // #5781 + 3, 265838, 265838, 2734, 2734, // #5782 + 12, 265864, 265864, 280, 280, // #5783 + 40, 265920, 265920, 3376, 3376, // #5784 + 47, 265996, 265996, 3420, 3420, // #5785 + 5, 266048, 266048, 1872, 1872, // #5786 + 2, 266064, 266064, 1232, 1232, // #5787 + 12, 266085, 266085, 2789, 2789, // #5788 + 10, 266112, 266112, 2944, 2944, // #5789 + 40, 266176, 266176, 3376, 3376, // #5790 + 47, 266252, 266252, 3420, 3420, // #5791 + 7, 266304, 266304, 2464, 2464, // #5792 + 2, 266320, 266320, 1344, 1344, // #5793 + 3, 266350, 266350, 2734, 2734, // #5794 + 12, 266376, 266376, 3224, 3224, // #5795 + 40, 266432, 266432, 3376, 3376, // #5796 + 47, 266508, 266508, 3420, 3420, // #5797 + 5, 266560, 266560, 1872, 1872, // #5798 + 11, 266576, 266576, 1456, 1456, // #5799 + 12, 266597, 266597, 2789, 2789, // #5800 + 10, 266632, 266632, 3000, 3000, // #5801 + 40, 266688, 266688, 3376, 3376, // #5802 + 47, 266764, 266764, 3420, 3420, // #5803 + 7, 266816, 266816, 2464, 2464, // #5804 + 5, 266832, 266832, 1872, 1872, // #5805 + 6, 266862, 266862, 414, 414, // #5806 + 4, 266888, 266888, 376, 376, // #5807 + 9, 266909, 266909, 2989, 2989, // #5808 + 4, 266936, 266936, 376, 376, // #5809 + 1, 266954, 266954, 1226, 1226, // #5810 + 1, 266972, 266972, 1228, 1228, // #5811 + 18, 266980, 266980, 3012, 3012, // #5812 + 7, 267012, 267012, 1684, 1684, // #5813 + 5, 267033, 267033, 2889, 2889, // #5814 + 2, 267048, 267048, 3512, 3512, // #5815 + 3, 267070, 267070, 2734, 2734, // #5816 + 4, 267149, 267149, 509, 509, // #5817 + 40, 267200, 267200, 3376, 3376, // #5818 + 47, 267276, 267276, 3420, 3420, // #5819 + 7, 267330, 267330, 386, 386, // #5820 + 5, 267353, 267353, 2889, 2889, // #5821 + 2, 267368, 267368, 4008, 4008, // #5822 + 3, 267390, 267390, 2734, 2734, // #5823 + 4, 267469, 267469, 509, 509, // #5824 + 40, 267520, 267520, 3376, 3376, // #5825 + 47, 267596, 267596, 3420, 3420, // #5826 + 11, 267660, 267660, 1692, 1692, // #5827 + 5, 267689, 267689, 2889, 2889, // #5828 + 2, 267704, 267704, 3400, 3400, // #5829 + 3, 267726, 267726, 2734, 2734, // #5830 + 4, 267789, 267789, 509, 509, // #5831 + 40, 267840, 267840, 3376, 3376, // #5832 + 47, 267916, 267916, 3420, 3420, // #5833 + 5, 267976, 267976, 1704, 1704, // #5834 + 5, 267993, 267993, 2889, 2889, // #5835 + 2, 268008, 268008, 1160, 1160, // #5836 + 3, 268030, 268030, 2734, 2734, // #5837 + 4, 268109, 268109, 509, 509, // #5838 + 40, 268160, 268160, 3376, 3376, // #5839 + 47, 268236, 268236, 3420, 3420, // #5840 + 5, 268302, 268302, 1710, 1710, // #5841 + 5, 268329, 268329, 2889, 2889, // #5842 + 2, 268336, 268336, 2768, 2768, // #5843 + 3, 268366, 268366, 2734, 2734, // #5844 + 4, 268429, 268429, 509, 509, // #5845 + 40, 268480, 268480, 3376, 3376, // #5846 + 47, 268556, 268556, 3420, 3420, // #5847 + 6, 268611, 268611, 131, 131, // #5848 + 5, 268633, 268633, 2889, 2889, // #5849 + 1, 268648, 268648, 920, 920, // #5850 + 1, 268658, 268658, 4018, 4018, // #5851 + 13, 268673, 268673, 673, 673, // #5852 + 9, 268688, 268688, 832, 832, // #5853 + 5, 268713, 268713, 1433, 1433, // #5854 + 25, 268743, 268743, 631, 631, // #5855 + 1, 268794, 268794, 842, 842, // #5856 + 1, 268812, 268812, 1228, 1228, // #5857 + 1, 268828, 268828, 1228, 1228, // #5858 + 1, 268838, 268838, 2390, 2390, // #5859 + 8, 268849, 268849, 577, 577, // #5860 + 5, 268867, 268867, 1747, 1747, // #5861 + 27, 268882, 268882, 2018, 2018, // #5862 + 48, 268928, 268928, 2416, 2416, // #5863 + 29, 269006, 269006, 910, 910, // #5864 + 33, 269040, 269040, 1984, 1984, // #5865 + 8, 269089, 269089, 577, 577, // #5866 + 5, 269107, 269107, 1747, 1747, // #5867 + 27, 269122, 269122, 2018, 2018, // #5868 + 48, 269184, 269184, 2416, 2416, // #5869 + 29, 269262, 269262, 910, 910, // #5870 + 33, 269296, 269296, 1984, 1984, // #5871 + 8, 269345, 269345, 577, 577, // #5872 + 5, 269363, 269363, 1747, 1747, // #5873 + 27, 269378, 269378, 2018, 2018, // #5874 + 48, 269440, 269440, 2416, 2416, // #5875 + 29, 269518, 269518, 910, 910, // #5876 + 33, 269552, 269552, 1984, 1984, // #5877 + 8, 269601, 269601, 577, 577, // #5878 + 5, 269619, 269619, 1747, 1747, // #5879 + 27, 269634, 269634, 2018, 2018, // #5880 + 48, 269696, 269696, 2416, 2416, // #5881 + 29, 269774, 269774, 910, 910, // #5882 + 33, 269808, 269808, 1984, 1984, // #5883 + 8, 269857, 269857, 577, 577, // #5884 + 5, 269875, 269875, 1747, 1747, // #5885 + 27, 269890, 269890, 2018, 2018, // #5886 + 48, 269952, 269952, 2416, 2416, // #5887 + 29, 270030, 270030, 910, 910, // #5888 + 33, 270064, 270064, 1984, 1984, // #5889 + 8, 270113, 270113, 577, 577, // #5890 + 5, 270131, 270131, 1747, 1747, // #5891 + 27, 270146, 270146, 2018, 2018, // #5892 + 48, 270208, 270208, 2416, 2416, // #5893 + 29, 270286, 270286, 910, 910, // #5894 + 33, 270320, 270320, 1984, 1984, // #5895 + 1, 270378, 270378, 842, 842, // #5896 + 1, 270396, 270396, 1228, 1228, // #5897 + 1, 270412, 270412, 1228, 1228, // #5898 + 1, 270422, 270422, 2390, 2390, // #5899 + 8, 270433, 270433, 577, 577, // #5900 + 5, 270451, 270451, 1747, 1747, // #5901 + 27, 270466, 270466, 2018, 2018, // #5902 + 48, 270528, 270528, 2416, 2416, // #5903 + 29, 270606, 270606, 910, 910, // #5904 + 8, 270641, 270641, 577, 577, // #5905 + 5, 270659, 270659, 1747, 1747, // #5906 + 27, 270674, 270674, 2018, 2018, // #5907 + 48, 270720, 270720, 2416, 2416, // #5908 + 29, 270798, 270798, 910, 910, // #5909 + 8, 270833, 270833, 577, 577, // #5910 + 5, 270851, 270851, 1747, 1747, // #5911 + 27, 270866, 270866, 2018, 2018, // #5912 + 48, 270912, 270912, 2416, 2416, // #5913 + 29, 270990, 270990, 910, 910, // #5914 + 8, 271025, 271025, 577, 577, // #5915 + 5, 271043, 271043, 1747, 1747, // #5916 + 27, 271058, 271058, 2018, 2018, // #5917 + 48, 271104, 271104, 2416, 2416, // #5918 + 29, 271182, 271182, 910, 910, // #5919 + 8, 271217, 271217, 577, 577, // #5920 + 5, 271235, 271235, 1747, 1747, // #5921 + 27, 271250, 271250, 2018, 2018, // #5922 + 48, 271296, 271296, 2416, 2416, // #5923 + 29, 271374, 271374, 910, 910, // #5924 + 8, 271409, 271409, 577, 577, // #5925 + 5, 271427, 271427, 1747, 1747, // #5926 + 27, 271442, 271442, 2018, 2018, // #5927 + 48, 271488, 271488, 2416, 2416, // #5928 + 29, 271566, 271566, 910, 910, // #5929 + 1, 271610, 271610, 842, 842, // #5930 + 1, 271628, 271628, 1228, 1228, // #5931 + 1, 271644, 271644, 1228, 1228, // #5932 + 1, 271654, 271654, 2390, 2390, // #5933 + 8, 271665, 271665, 577, 577, // #5934 + 5, 271683, 271683, 1747, 1747, // #5935 + 27, 271698, 271698, 2018, 2018, // #5936 + 48, 271744, 271744, 2416, 2416, // #5937 + 29, 271822, 271822, 910, 910, // #5938 + 8, 271857, 271857, 577, 577, // #5939 + 5, 271875, 271875, 1747, 1747, // #5940 + 27, 271890, 271890, 2018, 2018, // #5941 + 48, 271936, 271936, 2416, 2416, // #5942 + 29, 272014, 272014, 910, 910, // #5943 + 8, 272049, 272049, 577, 577, // #5944 + 5, 272067, 272067, 1747, 1747, // #5945 + 27, 272082, 272082, 2018, 2018, // #5946 + 48, 272128, 272128, 2416, 2416, // #5947 + 29, 272206, 272206, 910, 910, // #5948 + 8, 272241, 272241, 577, 577, // #5949 + 5, 272259, 272259, 1747, 1747, // #5950 + 27, 272274, 272274, 2018, 2018, // #5951 + 48, 272320, 272320, 2416, 2416, // #5952 + 29, 272398, 272398, 910, 910, // #5953 + 8, 272433, 272433, 577, 577, // #5954 + 5, 272451, 272451, 1747, 1747, // #5955 + 27, 272466, 272466, 2018, 2018, // #5956 + 48, 272512, 272512, 2416, 2416, // #5957 + 29, 272590, 272590, 910, 910, // #5958 + 8, 272625, 272625, 577, 577, // #5959 + 5, 272643, 272643, 1747, 1747, // #5960 + 27, 272658, 272658, 2018, 2018, // #5961 + 48, 272704, 272704, 2416, 2416, // #5962 + 29, 272782, 272782, 910, 910, // #5963 + 8, 272817, 272817, 577, 577, // #5964 + 5, 272835, 272835, 1747, 1747, // #5965 + 27, 272850, 272850, 2018, 2018, // #5966 + 48, 272896, 272896, 2416, 2416, // #5967 + 29, 272974, 272974, 910, 910, // #5968 + 8, 273009, 273009, 577, 577, // #5969 + 5, 273027, 273027, 1747, 1747, // #5970 + 27, 273042, 273042, 2018, 2018, // #5971 + 48, 273088, 273088, 2416, 2416, // #5972 + 29, 273166, 273166, 910, 910, // #5973 + 8, 273201, 273201, 577, 577, // #5974 + 5, 273219, 273219, 1747, 1747, // #5975 + 27, 273234, 273234, 2018, 2018, // #5976 + 48, 273280, 273280, 2416, 2416, // #5977 + 29, 273358, 273358, 910, 910, // #5978 + 8, 273393, 273393, 577, 577, // #5979 + 5, 273411, 273411, 1747, 1747, // #5980 + 27, 273426, 273426, 2018, 2018, // #5981 + 48, 273472, 273472, 2416, 2416, // #5982 + 29, 273550, 273550, 910, 910, // #5983 + 8, 273585, 273585, 577, 577, // #5984 + 5, 273603, 273603, 1747, 1747, // #5985 + 27, 273618, 273618, 2018, 2018, // #5986 + 48, 273664, 273664, 2416, 2416, // #5987 + 29, 273742, 273742, 910, 910, // #5988 + 8, 273777, 273777, 577, 577, // #5989 + 5, 273795, 273795, 1747, 1747, // #5990 + 27, 273810, 273810, 2018, 2018, // #5991 + 48, 273856, 273856, 2416, 2416, // #5992 + 29, 273934, 273934, 910, 910, // #5993 + 1, 273978, 273978, 842, 842, // #5994 + 1, 273996, 273996, 1228, 1228, // #5995 + 1, 274012, 274012, 1228, 1228, // #5996 + 1, 274022, 274022, 2390, 2390, // #5997 + 8, 274033, 274033, 577, 577, // #5998 + 5, 274051, 274051, 1747, 1747, // #5999 + 27, 274066, 274066, 2018, 2018, // #6000 + 48, 274112, 274112, 2416, 2416, // #6001 + 29, 274190, 274190, 910, 910, // #6002 + 8, 274225, 274225, 577, 577, // #6003 + 5, 274243, 274243, 1747, 1747, // #6004 + 27, 274258, 274258, 2018, 2018, // #6005 + 48, 274304, 274304, 2416, 2416, // #6006 + 29, 274382, 274382, 910, 910, // #6007 + 8, 274417, 274417, 577, 577, // #6008 + 5, 274435, 274435, 1747, 1747, // #6009 + 27, 274450, 274450, 2018, 2018, // #6010 + 48, 274496, 274496, 2416, 2416, // #6011 + 29, 274574, 274574, 910, 910, // #6012 + 8, 274609, 274609, 577, 577, // #6013 + 5, 274627, 274627, 1747, 1747, // #6014 + 27, 274642, 274642, 2018, 2018, // #6015 + 48, 274688, 274688, 2416, 2416, // #6016 + 29, 274766, 274766, 910, 910, // #6017 + 8, 274801, 274801, 577, 577, // #6018 + 5, 274819, 274819, 1747, 1747, // #6019 + 27, 274834, 274834, 2018, 2018, // #6020 + 48, 274880, 274880, 2416, 2416, // #6021 + 29, 274958, 274958, 910, 910, // #6022 + 8, 274993, 274993, 577, 577, // #6023 + 5, 275011, 275011, 1747, 1747, // #6024 + 27, 275026, 275026, 2018, 2018, // #6025 + 48, 275072, 275072, 2416, 2416, // #6026 + 29, 275150, 275150, 910, 910, // #6027 + 8, 275185, 275185, 577, 577, // #6028 + 5, 275203, 275203, 1747, 1747, // #6029 + 27, 275218, 275218, 2018, 2018, // #6030 + 48, 275264, 275264, 2416, 2416, // #6031 + 29, 275342, 275342, 910, 910, // #6032 + 8, 275377, 275377, 577, 577, // #6033 + 5, 275395, 275395, 1747, 1747, // #6034 + 27, 275410, 275410, 2018, 2018, // #6035 + 48, 275456, 275456, 2416, 2416, // #6036 + 29, 275534, 275534, 910, 910, // #6037 + 8, 275569, 275569, 577, 577, // #6038 + 5, 275587, 275587, 1747, 1747, // #6039 + 27, 275602, 275602, 2018, 2018, // #6040 + 48, 275648, 275648, 2416, 2416, // #6041 + 29, 275726, 275726, 910, 910, // #6042 + 8, 275761, 275761, 577, 577, // #6043 + 5, 275779, 275779, 1747, 1747, // #6044 + 27, 275794, 275794, 2018, 2018, // #6045 + 48, 275840, 275840, 2416, 2416, // #6046 + 29, 275918, 275918, 910, 910, // #6047 + 8, 275953, 275953, 577, 577, // #6048 + 5, 275971, 275971, 1747, 1747, // #6049 + 27, 275986, 275986, 2018, 2018, // #6050 + 48, 276032, 276032, 2416, 2416, // #6051 + 29, 276110, 276110, 910, 910, // #6052 + 8, 276145, 276145, 577, 577, // #6053 + 5, 276163, 276163, 1747, 1747, // #6054 + 27, 276178, 276178, 2018, 2018, // #6055 + 48, 276224, 276224, 2416, 2416, // #6056 + 29, 276302, 276302, 910, 910, // #6057 + 1, 276346, 276346, 842, 842, // #6058 + 1, 276364, 276364, 1228, 1228, // #6059 + 8, 276372, 276372, 3492, 3492, // #6060 + 6, 276384, 276384, 1568, 1568, // #6061 + 8, 276404, 276404, 3492, 3492, // #6062 + 6, 276416, 276416, 128, 128, // #6063 + 8, 276436, 276436, 3492, 3492, // #6064 + 6, 276456, 276456, 104, 104, // #6065 + 8, 276468, 276468, 3492, 3492, // #6066 + 6, 276480, 276480, 496, 496, // #6067 + 8, 276500, 276500, 3492, 3492, // #6068 + 6, 276520, 276520, 3928, 3928, // #6069 + 8, 276532, 276532, 3492, 3492, // #6070 + 6, 276544, 276544, 1968, 1968, // #6071 + 8, 276564, 276564, 3492, 3492, // #6072 + 6, 276584, 276584, 312, 312, // #6073 + 8, 276596, 276596, 3492, 3492, // #6074 + 6, 276608, 276608, 448, 448, // #6075 + 8, 276624, 276624, 1552, 1552, // #6076 + 16, 276680, 276680, 1528, 1528, // #6077 + 1, 276706, 276706, 4018, 4018, // #6078 + 8, 276724, 276724, 3492, 3492, // #6079 + 6, 276744, 276744, 104, 104, // #6080 + 8, 276756, 276756, 3492, 3492, // #6081 + 6, 276776, 276776, 312, 312, // #6082 + 8, 276788, 276788, 3492, 3492, // #6083 + 6, 276800, 276800, 3920, 3920, // #6084 + 8, 276820, 276820, 3492, 3492, // #6085 + 6, 276840, 276840, 40, 40, // #6086 + 8, 276852, 276852, 3492, 3492, // #6087 + 6, 276864, 276864, 128, 128, // #6088 + 8, 276884, 276884, 3492, 3492, // #6089 + 6, 276896, 276896, 2144, 2144, // #6090 + 8, 276916, 276916, 3492, 3492, // #6091 + 6, 276936, 276936, 3912, 3912, // #6092 + 8, 276948, 276948, 3492, 3492, // #6093 + 6, 276960, 276960, 448, 448, // #6094 + 8, 276976, 276976, 2608, 2608, // #6095 + 16, 277000, 277000, 1528, 1528, // #6096 + 1, 277026, 277026, 4018, 4018, // #6097 + 8, 277044, 277044, 3492, 3492, // #6098 + 6, 277064, 277064, 104, 104, // #6099 + 8, 277076, 277076, 3492, 3492, // #6100 + 6, 277088, 277088, 1968, 1968, // #6101 + 8, 277108, 277108, 3492, 3492, // #6102 + 6, 277120, 277120, 128, 128, // #6103 + 8, 277140, 277140, 3492, 3492, // #6104 + 6, 277152, 277152, 2144, 2144, // #6105 + 8, 277172, 277172, 3492, 3492, // #6106 + 6, 277184, 277184, 3152, 3152, // #6107 + 8, 277204, 277204, 3492, 3492, // #6108 + 6, 277224, 277224, 40, 40, // #6109 + 8, 277236, 277236, 3492, 3492, // #6110 + 6, 277248, 277248, 2880, 2880, // #6111 + 8, 277268, 277268, 3492, 3492, // #6112 + 6, 277288, 277288, 312, 312, // #6113 + 8, 277296, 277296, 1440, 1440, // #6114 + 16, 277320, 277320, 1528, 1528, // #6115 + 1, 277346, 277346, 4018, 4018, // #6116 + 8, 277364, 277364, 3492, 3492, // #6117 + 6, 277376, 277376, 448, 448, // #6118 + 8, 277396, 277396, 3492, 3492, // #6119 + 6, 277416, 277416, 104, 104, // #6120 + 8, 277428, 277428, 3492, 3492, // #6121 + 6, 277440, 277440, 1968, 1968, // #6122 + 8, 277460, 277460, 3492, 3492, // #6123 + 6, 277480, 277480, 3928, 3928, // #6124 + 8, 277492, 277492, 3492, 3492, // #6125 + 6, 277504, 277504, 2144, 2144, // #6126 + 8, 277524, 277524, 3492, 3492, // #6127 + 6, 277536, 277536, 3152, 3152, // #6128 + 8, 277556, 277556, 3492, 3492, // #6129 + 6, 277576, 277576, 3912, 3912, // #6130 + 8, 277588, 277588, 3492, 3492, // #6131 + 6, 277600, 277600, 2880, 2880, // #6132 + 8, 277616, 277616, 2608, 2608, // #6133 + 16, 277640, 277640, 1528, 1528, // #6134 + 1, 277666, 277666, 4018, 4018, // #6135 + 1, 277692, 277692, 1228, 1228, // #6136 + 44, 277704, 277704, 1512, 1512, // #6137 + 16, 277764, 277764, 1924, 1924, // #6138 + 16, 277796, 277796, 1924, 1924, // #6139 + 12, 277836, 277836, 3916, 3916, // #6140 + 23, 277865, 277865, 3929, 3929, // #6141 + 16, 277953, 277953, 3953, 3953, // #6142 + 14, 277985, 277985, 1569, 1569, // #6143 + 8, 278000, 278000, 1584, 1584, // #6144 + 4, 278016, 278016, 1600, 1600, // #6145 + 9, 278037, 278037, 1605, 1605, // #6146 + 6, 278063, 278063, 1615, 1615, // #6147 + 11, 278086, 278086, 246, 246, // #6148 + 16, 278113, 278113, 2433, 2433, // #6149 + 6, 278150, 278150, 3734, 3734, // #6150 + 7, 278173, 278173, 3741, 3741, // #6151 + 20, 278221, 278221, 45, 45, // #6152 + 1, 278266, 278266, 1226, 1226, // #6153 + 1, 278284, 278284, 1228, 1228, // #6154 + 1, 278288, 278288, 2752, 2752, // #6155 + 1, 278304, 278304, 2752, 2752, // #6156 + 8, 278321, 278321, 2945, 2945, // #6157 + 20, 278345, 278345, 2025, 2025, // #6158 + 20, 278377, 278377, 2025, 2025, // #6159 + 20, 278409, 278409, 2025, 2025, // #6160 + 8, 278443, 278443, 1243, 1243, // #6161 + 20, 278473, 278473, 2025, 2025, // #6162 + 3, 278498, 278498, 1778, 1778, // #6163 + 5, 278520, 278520, 1800, 1800, // #6164 + 9, 278542, 278542, 1806, 1806, // #6165 + 8, 278568, 278568, 1816, 1816, // #6166 + 7, 278593, 278593, 1825, 1825, // #6167 + 4, 278617, 278617, 1833, 1833, // #6168 + 3, 278638, 278638, 1838, 1838, // #6169 + 6, 278658, 278658, 1842, 1842, // #6170 + 4, 278735, 278735, 1919, 1919, // #6171 + 3, 278761, 278761, 1849, 1849, // #6172 + 5, 278797, 278797, 1853, 1853, // #6173 + 3, 278819, 278819, 1859, 1859, // #6174 + 6, 278839, 278839, 1863, 1863, // #6175 + 4, 278862, 278862, 1870, 1870, // #6176 + 5, 278883, 278883, 1875, 1875, // #6177 + 3, 278905, 278905, 1881, 1881, // #6178 + 6, 278925, 278925, 1885, 1885, // #6179 + 4, 278948, 278948, 1892, 1892, // #6180 + 4, 278969, 278969, 1897, 1897, // #6181 + 4, 278990, 278990, 1902, 1902, // #6182 + 7, 279011, 279011, 1907, 1907, // #6183 + 8, 279051, 279051, 1915, 1915, // #6184 + 6, 279076, 279076, 1924, 1924, // #6185 + 6, 279099, 279099, 1931, 1931, // #6186 + 4, 279122, 279122, 1938, 1938, // #6187 + 10, 279143, 279143, 1943, 1943, // #6188 + 11, 279170, 279170, 1954, 1954, // #6189 + 6, 279198, 279198, 1966, 1966, // #6190 + 6, 279221, 279221, 1973, 1973, // #6191 + 5, 279244, 279244, 1980, 1980, // #6192 + 10, 279266, 279266, 1986, 1986, // #6193 + 5, 279293, 279293, 1997, 1997, // #6194 + 5, 279315, 279315, 2003, 2003, // #6195 + 5, 279337, 279337, 2009, 2009, // #6196 + 6, 279359, 279359, 2015, 2015, // #6197 + 3, 279382, 279382, 2022, 2022, // #6198 + 2, 279400, 279400, 1928, 1928, // #6199 + 3, 279418, 279418, 2026, 2026, // #6200 + 3, 279438, 279438, 2030, 2030, // #6201 + 8, 279467, 279467, 1243, 1243, // #6202 + 20, 279497, 279497, 2025, 2025, // #6203 + 3, 279522, 279522, 1778, 1778, // #6204 + 5, 279544, 279544, 1800, 1800, // #6205 + 9, 279566, 279566, 1806, 1806, // #6206 + 8, 279592, 279592, 1816, 1816, // #6207 + 7, 279617, 279617, 1825, 1825, // #6208 + 4, 279641, 279641, 1833, 1833, // #6209 + 3, 279662, 279662, 1838, 1838, // #6210 + 6, 279682, 279682, 1842, 1842, // #6211 + 4, 279759, 279759, 1919, 1919, // #6212 + 3, 279785, 279785, 1849, 1849, // #6213 + 5, 279821, 279821, 1853, 1853, // #6214 + 3, 279843, 279843, 1859, 1859, // #6215 + 6, 279863, 279863, 1863, 1863, // #6216 + 4, 279886, 279886, 1870, 1870, // #6217 + 5, 279907, 279907, 1875, 1875, // #6218 + 3, 279929, 279929, 1881, 1881, // #6219 + 6, 279949, 279949, 1885, 1885, // #6220 + 4, 279972, 279972, 1892, 1892, // #6221 + 4, 279993, 279993, 1897, 1897, // #6222 + 4, 280014, 280014, 1902, 1902, // #6223 + 7, 280035, 280035, 1907, 1907, // #6224 + 8, 280075, 280075, 1915, 1915, // #6225 + 6, 280100, 280100, 1924, 1924, // #6226 + 6, 280123, 280123, 1931, 1931, // #6227 + 4, 280146, 280146, 1938, 1938, // #6228 + 10, 280167, 280167, 1943, 1943, // #6229 + 11, 280194, 280194, 1954, 1954, // #6230 + 6, 280222, 280222, 1966, 1966, // #6231 + 6, 280245, 280245, 1973, 1973, // #6232 + 5, 280268, 280268, 1980, 1980, // #6233 + 10, 280290, 280290, 1986, 1986, // #6234 + 5, 280317, 280317, 1997, 1997, // #6235 + 5, 280339, 280339, 2003, 2003, // #6236 + 5, 280361, 280361, 2009, 2009, // #6237 + 6, 280383, 280383, 2015, 2015, // #6238 + 3, 280406, 280406, 2022, 2022, // #6239 + 2, 280424, 280424, 1928, 1928, // #6240 + 3, 280442, 280442, 2026, 2026, // #6241 + 3, 280462, 280462, 2030, 2030, // #6242 + 10, 280484, 280484, 756, 756, // #6243 + 17, 280509, 280509, 749, 749, // #6244 + 3, 280536, 280536, 3000, 3000, // #6245 + 3, 280552, 280552, 3000, 3000, // #6246 + 3, 280568, 280568, 3000, 3000, // #6247 + 3, 280584, 280584, 3000, 3000, // #6248 + 2, 280596, 280596, 36, 36, // #6249 + 2, 280614, 280614, 854, 854, // #6250 + 2, 280635, 280635, 43, 43, // #6251 + 2, 280647, 280647, 1175, 1175, // #6252 + 2, 280662, 280662, 3142, 3142, // #6253 + 2, 280687, 280687, 1503, 1503, // #6254 + 2, 280717, 280717, 1181, 1181, // #6255 + 2, 280730, 280730, 1178, 1178, // #6256 + 2, 280749, 280749, 4061, 4061, // #6257 + 2, 280760, 280760, 1752, 1752, // #6258 + 2, 280781, 280781, 1181, 1181, // #6259 + 2, 280784, 280784, 1184, 1184, // #6260 + 2, 280803, 280803, 1859, 1859, // #6261 + 2, 280824, 280824, 952, 952, // #6262 + 2, 280845, 280845, 2269, 2269, // #6263 + 2, 280848, 280848, 2480, 2480, // #6264 + 2, 280869, 280869, 3813, 3813, // #6265 + 9, 280892, 280892, 1228, 1228, // #6266 + 4, 280918, 280918, 1238, 1238, // #6267 + 8, 280939, 280939, 1243, 1243, // #6268 + 5, 280964, 280964, 1252, 1252, // #6269 + 8, 280986, 280986, 1258, 1258, // #6270 + 18, 281027, 281027, 1267, 1267, // #6271 + 20, 281065, 281065, 2025, 2025, // #6272 + 20, 281097, 281097, 2025, 2025, // #6273 + 20, 281129, 281129, 2025, 2025, // #6274 + 20, 281161, 281161, 2025, 2025, // #6275 + 20, 281193, 281193, 2025, 2025, // #6276 + 20, 281225, 281225, 2025, 2025, // #6277 + 20, 281257, 281257, 2025, 2025, // #6278 + 20, 281289, 281289, 2025, 2025, // #6279 + 20, 281321, 281321, 2025, 2025, // #6280 + 20, 281353, 281353, 2025, 2025, // #6281 + 20, 281385, 281385, 2025, 2025, // #6282 + 20, 281417, 281417, 2025, 2025, // #6283 + 20, 281449, 281449, 2025, 2025, // #6284 + 20, 281481, 281481, 2025, 2025, // #6285 + 3, 281519, 281519, 495, 495, // #6286 + 3, 281551, 281551, 495, 495, // #6287 + 3, 281583, 281583, 495, 495, // #6288 + 3, 281615, 281615, 495, 495, // #6289 + 3, 281647, 281647, 495, 495, // #6290 + 3, 281679, 281679, 495, 495, // #6291 + 3, 281711, 281711, 495, 495, // #6292 + 3, 281743, 281743, 495, 495, // #6293 + 3, 281775, 281775, 495, 495, // #6294 + 3, 281807, 281807, 495, 495, // #6295 + 3, 281839, 281839, 495, 495, // #6296 + 3, 281871, 281871, 495, 495, // #6297 + 3, 281903, 281903, 495, 495, // #6298 + 3, 281935, 281935, 495, 495, // #6299 + 21, 281959, 281959, 599, 599, // #6300 + 10, 281988, 281988, 756, 756, // #6301 + 11, 282002, 282002, 642, 642, // #6302 + 3, 282024, 282024, 3000, 3000, // #6303 + 10, 282036, 282036, 756, 756, // #6304 + 17, 282061, 282061, 749, 749, // #6305 + 3, 282088, 282088, 3000, 3000, // #6306 + 3, 282104, 282104, 3000, 3000, // #6307 + 3, 282120, 282120, 3000, 3000, // #6308 + 3, 282136, 282136, 3000, 3000, // #6309 + 1, 282147, 282147, 2339, 2339, // #6310 + 10, 282164, 282164, 756, 756, // #6311 + 17, 282189, 282189, 749, 749, // #6312 + 3, 282216, 282216, 3000, 3000, // #6313 + 3, 282232, 282232, 3000, 3000, // #6314 + 3, 282248, 282248, 3000, 3000, // #6315 + 3, 282264, 282264, 3000, 3000, // #6316 + 1, 282275, 282275, 2339, 2339, // #6317 + 2, 282290, 282290, 674, 674, // #6318 + 19, 282314, 282314, 2650, 2650, // #6319 + 10, 282340, 282340, 756, 756, // #6320 + 11, 282354, 282354, 642, 642, // #6321 + 3, 282376, 282376, 3000, 3000, // #6322 + 10, 282388, 282388, 756, 756, // #6323 + 17, 282413, 282413, 749, 749, // #6324 + 3, 282440, 282440, 3000, 3000, // #6325 + 3, 282456, 282456, 3000, 3000, // #6326 + 3, 282472, 282472, 3000, 3000, // #6327 + 3, 282488, 282488, 3000, 3000, // #6328 + 1, 282499, 282499, 2339, 2339, // #6329 + 10, 282512, 282512, 1120, 1120, // #6330 + 5, 282539, 282539, 2843, 2843, // #6331 + 22, 282572, 282572, 2460, 2460, // #6332 + 40, 282624, 282624, 3376, 3376, // #6333 + 47, 282700, 282700, 3420, 3420, // #6334 + 19, 282762, 282762, 2650, 2650, // #6335 + 10, 282788, 282788, 756, 756, // #6336 + 11, 282802, 282802, 642, 642, // #6337 + 3, 282824, 282824, 3000, 3000, // #6338 + 10, 282836, 282836, 756, 756, // #6339 + 17, 282861, 282861, 749, 749, // #6340 + 3, 282888, 282888, 3000, 3000, // #6341 + 3, 282904, 282904, 3000, 3000, // #6342 + 3, 282920, 282920, 3000, 3000, // #6343 + 3, 282936, 282936, 3000, 3000, // #6344 + 1, 282947, 282947, 2339, 2339, // #6345 + 10, 282964, 282964, 756, 756, // #6346 + 17, 282989, 282989, 749, 749, // #6347 + 3, 283016, 283016, 3000, 3000, // #6348 + 3, 283032, 283032, 3000, 3000, // #6349 + 3, 283048, 283048, 3000, 3000, // #6350 + 3, 283064, 283064, 3000, 3000, // #6351 + 1, 283075, 283075, 2339, 2339, // #6352 + 10, 283088, 283088, 3488, 3488, // #6353 + 5, 283115, 283115, 2843, 2843, // #6354 + 22, 283148, 283148, 2460, 2460, // #6355 + 40, 283200, 283200, 3376, 3376, // #6356 + 47, 283276, 283276, 3420, 3420, // #6357 + 2, 283330, 283330, 674, 674, // #6358 + 4, 283352, 283352, 2504, 2504, // #6359 + 4, 283369, 283369, 2729, 2729, // #6360 + 28, 283400, 283400, 808, 808, // #6361 + 40, 283456, 283456, 3376, 3376, // #6362 + 47, 283532, 283532, 3420, 3420, // #6363 + 5, 283584, 283584, 3600, 3600, // #6364 + 4, 283609, 283609, 2729, 2729, // #6365 + 28, 283656, 283656, 808, 808, // #6366 + 40, 283712, 283712, 3376, 3376, // #6367 + 47, 283788, 283788, 3420, 3420, // #6368 + 4, 283848, 283848, 2632, 2632, // #6369 + 4, 283865, 283865, 2729, 2729, // #6370 + 28, 283877, 283877, 837, 837, // #6371 + 40, 283968, 283968, 3376, 3376, // #6372 + 47, 284044, 284044, 3420, 3420, // #6373 + 5, 284096, 284096, 3808, 3808, // #6374 + 4, 284121, 284121, 2729, 2729, // #6375 + 28, 284133, 284133, 837, 837, // #6376 + 40, 284224, 284224, 3376, 3376, // #6377 + 47, 284300, 284300, 3420, 3420, // #6378 + 1, 284360, 284360, 2760, 2760, // #6379 + 3, 284382, 284382, 2734, 2734, // #6380 + 28, 284402, 284402, 866, 866, // #6381 + 40, 284480, 284480, 3376, 3376, // #6382 + 47, 284556, 284556, 3420, 3420, // #6383 + 1, 284616, 284616, 2888, 2888, // #6384 + 3, 284638, 284638, 2734, 2734, // #6385 + 28, 284687, 284687, 895, 895, // #6386 + 40, 284736, 284736, 3376, 3376, // #6387 + 47, 284812, 284812, 3420, 3420, // #6388 + 1, 284864, 284864, 752, 752, // #6389 + 3, 284894, 284894, 2734, 2734, // #6390 + 17, 284925, 284925, 941, 941, // #6391 + 40, 284992, 284992, 3376, 3376, // #6392 + 47, 285068, 285068, 3420, 3420, // #6393 + 1, 285120, 285120, 3376, 3376, // #6394 + 3, 285150, 285150, 2734, 2734, // #6395 + 12, 285169, 285169, 1025, 1025, // #6396 + 40, 285184, 285184, 3376, 3376, // #6397 + 47, 285260, 285260, 3420, 3420, // #6398 + 1, 285312, 285312, 3488, 3488, // #6399 + 3, 285342, 285342, 2734, 2734, // #6400 + 8, 285391, 285391, 1087, 1087, // #6401 + 40, 285440, 285440, 3376, 3376, // #6402 + 47, 285516, 285516, 3420, 3420, // #6403 + 1, 285568, 285568, 3600, 3600, // #6404 + 3, 285598, 285598, 2734, 2734, // #6405 + 13, 285624, 285624, 1096, 1096, // #6406 + 40, 285696, 285696, 3376, 3376, // #6407 + 47, 285772, 285772, 3420, 3420, // #6408 + 16, 285836, 285836, 604, 604, // #6409 + 10, 285860, 285860, 756, 756, // #6410 + 11, 285874, 285874, 642, 642, // #6411 + 3, 285896, 285896, 3000, 3000, // #6412 + 10, 285908, 285908, 756, 756, // #6413 + 17, 285933, 285933, 749, 749, // #6414 + 3, 285960, 285960, 3000, 3000, // #6415 + 3, 285976, 285976, 3000, 3000, // #6416 + 3, 285992, 285992, 3000, 3000, // #6417 + 3, 286008, 286008, 3000, 3000, // #6418 + 1, 286019, 286019, 2339, 2339, // #6419 + 10, 286039, 286039, 1431, 1431, // #6420 + 4, 286066, 286066, 3106, 3106, // #6421 + 4, 286082, 286082, 3106, 3106, // #6422 + 4, 286103, 286103, 3111, 3111, // #6423 + 4, 286119, 286119, 3111, 3111, // #6424 + 5, 286129, 286129, 673, 673, // #6425 + 5, 286145, 286145, 673, 673, // #6426 + 8, 286172, 286172, 3116, 3116, // #6427 + 8, 286204, 286204, 3116, 3116, // #6428 + 4, 286228, 286228, 1588, 1588, // #6429 + 4, 286244, 286244, 1588, 1588, // #6430 + 4, 286256, 286256, 2560, 2560, // #6431 + 4, 286272, 286272, 2560, 2560, // #6432 + 4, 286296, 286296, 1384, 1384, // #6433 + 4, 286312, 286312, 1384, 1384, // #6434 + 4, 286325, 286325, 3125, 3125, // #6435 + 4, 286341, 286341, 3125, 3125, // #6436 + 7, 286410, 286410, 3130, 3130, // #6437 + 7, 286474, 286474, 3130, 3130, // #6438 + 8, 286498, 286498, 3138, 3138, // #6439 + 8, 286514, 286514, 3138, 3138, // #6440 + 4, 286540, 286540, 588, 588, // #6441 + 4, 286572, 286572, 588, 588, // #6442 + 11, 286603, 286603, 3147, 3147, // #6443 + 11, 286635, 286635, 3147, 3147, // #6444 + 7, 286663, 286663, 3159, 3159, // #6445 + 7, 286679, 286679, 3159, 3159, // #6446 + 8, 286703, 286703, 3167, 3167, // #6447 + 8, 286735, 286735, 3167, 3167, // #6448 + 5, 286758, 286758, 1078, 1078, // #6449 + 5, 286774, 286774, 1078, 1078, // #6450 + 5, 286792, 286792, 3176, 3176, // #6451 + 5, 286808, 286808, 3176, 3176, // #6452 + 8, 286830, 286830, 3182, 3182, // #6453 + 8, 286862, 286862, 3182, 3182, // #6454 + 9, 286887, 286887, 3191, 3191, // #6455 + 9, 286919, 286919, 3191, 3191, // #6456 + 8, 286945, 286945, 3201, 3201, // #6457 + 8, 286961, 286961, 3201, 3201, // #6458 + 11, 286986, 286986, 3210, 3210, // #6459 + 11, 287018, 287018, 3210, 3210, // #6460 + 5, 287046, 287046, 3222, 3222, // #6461 + 5, 287062, 287062, 3222, 3222, // #6462 + 5, 287084, 287084, 3228, 3228, // #6463 + 5, 287116, 287116, 3228, 3228, // #6464 + 7, 287138, 287138, 3234, 3234, // #6465 + 7, 287154, 287154, 3234, 3234, // #6466 + 5, 287178, 287178, 3242, 3242, // #6467 + 5, 287194, 287194, 3242, 3242, // #6468 + 2, 287200, 287200, 3248, 3248, // #6469 + 2, 287216, 287216, 3248, 3248, // #6470 + 7, 287239, 287239, 487, 487, // #6471 + 7, 287255, 287255, 487, 487, // #6472 + 7, 287279, 287279, 479, 479, // #6473 + 7, 287311, 287311, 479, 479, // #6474 + 3, 287331, 287331, 3251, 3251, // #6475 + 3, 287351, 287351, 3255, 3255, // #6476 + 7, 287365, 287365, 2901, 2901, // #6477 + 7, 287435, 287435, 3259, 3259, // #6478 + 5, 287459, 287459, 3267, 3267, // #6479 + 6, 287481, 287481, 3273, 3273, // #6480 + 5, 287488, 287488, 3280, 3280, // #6481 + 4, 287510, 287510, 3286, 3286, // #6482 + 5, 287528, 287528, 2136, 2136, // #6483 + 4, 287550, 287550, 2158, 2158, // #6484 + 4, 287572, 287572, 3892, 3892, // #6485 + 6, 287595, 287595, 203, 203, // #6486 + 5, 287617, 287617, 673, 673, // #6487 + 5, 287635, 287635, 3267, 3267, // #6488 + 6, 287659, 287659, 3291, 3291, // #6489 + 4, 287688, 287688, 1384, 1384, // #6490 + 4, 287702, 287702, 774, 774, // #6491 + 6, 287714, 287714, 3298, 3298, // #6492 + 6, 287737, 287737, 3305, 3305, // #6493 + 9, 287744, 287744, 3312, 3312, // #6494 + 6, 287770, 287770, 3322, 3322, // #6495 + 4, 287796, 287796, 388, 388, // #6496 + 3, 287810, 287810, 3970, 3970, // #6497 + 5, 287827, 287827, 1539, 1539, // #6498 + 6, 287841, 287841, 3329, 3329, // #6499 + 3, 287864, 287864, 3336, 3336, // #6500 + 6, 287884, 287884, 3340, 3340, // #6501 + 7, 287907, 287907, 3347, 3347, // #6502 + 7, 287923, 287923, 3379, 3379, // #6503 + 7, 287947, 287947, 3355, 3355, // #6504 + 7, 287971, 287971, 3363, 3363, // #6505 + 5, 287997, 287997, 781, 781, // #6506 + 5, 288027, 288027, 3371, 3371, // #6507 + 9, 288049, 288049, 3377, 3377, // #6508 + 7, 288075, 288075, 3387, 3387, // #6509 + 7, 288099, 288099, 3395, 3395, // #6510 + 6, 288113, 288113, 3825, 3825, // #6511 + 7, 288139, 288139, 3403, 3403, // #6512 + 9, 288163, 288163, 3411, 3411, // #6513 + 6, 288189, 288189, 3421, 3421, // #6514 + 8, 288212, 288212, 3428, 3428, // #6515 + 11, 288237, 288237, 3437, 3437, // #6516 + 6, 288265, 288265, 3449, 3449, // #6517 + 5, 288272, 288272, 3456, 3456, // #6518 + 3, 288300, 288300, 1196, 1196, // #6519 + 2, 288318, 288318, 2206, 2206, // #6520 + 1, 288339, 288339, 3779, 3779, // #6521 + 2, 288358, 288358, 3462, 3462, // #6522 + 2, 288377, 288377, 3465, 3465, // #6523 + 5, 288385, 288385, 673, 673, // #6524 + 5, 288412, 288412, 3468, 3468, // #6525 + 2, 288437, 288437, 3813, 3813, // #6526 + 5, 288450, 288450, 3474, 3474, // #6527 + 2, 288472, 288472, 3480, 3480, // #6528 + 5, 288491, 288491, 3483, 3483, // #6529 + 5, 288525, 288525, 3389, 3389, // #6530 + 3, 288559, 288559, 1567, 1567, // #6531 + 3, 288586, 288586, 2122, 2122, // #6532 + 6, 288601, 288601, 3273, 3273, // #6533 + 4, 288609, 288609, 3489, 3489, // #6534 + 5, 288630, 288630, 1862, 1862, // #6535 + 4, 288646, 288646, 3494, 3494, // #6536 + 1, 288660, 288660, 2740, 2740, // #6537 + 2, 288672, 288672, 1264, 1264, // #6538 + 3, 288699, 288699, 3499, 3499, // #6539 + 1, 288714, 288714, 3642, 3642, // #6540 + 2, 288730, 288730, 778, 778, // #6541 + 4, 288751, 288751, 3503, 3503, // #6542 + 2, 288768, 288768, 3968, 3968, // #6543 + 4, 288788, 288788, 3508, 3508, // #6544 + 3, 288809, 288809, 3513, 3513, // #6545 + 3, 288829, 288829, 3517, 3517, // #6546 + 1, 288848, 288848, 848, 848, // #6547 + 4, 288875, 288875, 827, 827, // #6548 + 2, 288885, 288885, 1301, 1301, // #6549 + 4, 288909, 288909, 3469, 3469, // #6550 + 2, 288929, 288929, 3521, 3521, // #6551 + 2, 288948, 288948, 3524, 3524, // #6552 + 2, 288967, 288967, 3527, 3527, // #6553 + 2, 288986, 288986, 3530, 3530, // #6554 + 2, 289005, 289005, 3533, 3533, // #6555 + 2, 289008, 289008, 3536, 3536, // #6556 + 4, 289029, 289029, 1925, 1925, // #6557 + 2, 289053, 289053, 1325, 1325, // #6558 + 2, 289059, 289059, 3539, 3539, // #6559 + 2, 289078, 289078, 3542, 3542, // #6560 + 3, 289097, 289097, 3545, 3545, // #6561 + 3, 289117, 289117, 3549, 3549, // #6562 + 2, 289138, 289138, 2802, 2802, // #6563 + 4, 289161, 289161, 3177, 3177, // #6564 + 4, 289169, 289169, 3553, 3553, // #6565 + 6, 289188, 289188, 852, 852, // #6566 + 2, 289201, 289201, 3505, 3505, // #6567 + 4, 289228, 289228, 3484, 3484, // #6568 + 10, 289254, 289254, 3558, 3558, // #6569 + 3, 289281, 289281, 3569, 3569, // #6570 + 1, 289302, 289302, 3830, 3830, // #6571 + 7, 289317, 289317, 2901, 2901, // #6572 + 1, 289337, 289337, 3881, 3881, // #6573 + 2, 289347, 289347, 1779, 1779, // #6574 + 2, 289362, 289362, 2066, 2066, // #6575 + 3, 289383, 289383, 3495, 3495, // #6576 + 4, 289405, 289405, 2141, 2141, // #6577 + 4, 289436, 289436, 2284, 2284, // #6578 + 2, 289459, 289459, 1779, 1779, // #6579 + 2, 289474, 289474, 2066, 2066, // #6580 + 3, 289495, 289495, 3495, 3495, // #6581 + 4, 289517, 289517, 2141, 2141, // #6582 + 4, 289548, 289548, 2284, 2284, // #6583 + 33, 289576, 289576, 392, 392, // #6584 + 13, 289627, 289627, 2027, 2027, // #6585 + 9, 289649, 289649, 2225, 2225, // #6586 + 4, 289677, 289677, 2333, 2333, // #6587 + 9, 289697, 289697, 2401, 2401, // #6588 + 6, 289725, 289725, 2477, 2477, // #6589 + 6, 289757, 289757, 2477, 2477, // #6590 + 6, 289789, 289789, 2477, 2477, // #6591 + 6, 289821, 289821, 2477, 2477, // #6592 + 14, 289845, 289845, 2469, 2469, // #6593 + 4, 289874, 289874, 306, 306, // #6594 + 10, 289893, 289893, 3333, 3333, // #6595 + 14, 289909, 289909, 3349, 3349, // #6596 + 11, 289945, 289945, 3369, 3369, // #6597 + 12, 289996, 289996, 3388, 3388, // #6598 + 13, 290016, 290016, 3408, 3408, // #6599 + 12, 290035, 290035, 3427, 3427, // #6600 + 12, 290054, 290054, 3446, 3446, // #6601 + 12, 290090, 290090, 3466, 3466, // #6602 + 19, 290112, 290112, 3488, 3488, // #6603 + 23, 290145, 290145, 3521, 3521, // #6604 + 13, 290190, 290190, 3550, 3550, // #6605 + 7, 290208, 290208, 3568, 3568, // #6606 + 16, 290226, 290226, 3586, 3586, // #6607 + 15, 290269, 290269, 3613, 3613, // #6608 + 3, 290289, 290289, 3633, 3633, // #6609 + 9, 290316, 290316, 3644, 3644, // #6610 + 17, 290336, 290336, 3664, 3664, // #6611 + 17, 290375, 290375, 3687, 3687, // #6612 + 15, 290403, 290403, 3715, 3715, // #6613 + 12, 290432, 290432, 3744, 3744, // #6614 + 5, 290458, 290458, 3770, 3770, // #6615 + 7, 290479, 290479, 3791, 3791, // #6616 + 19, 290500, 290500, 3812, 3812, // #6617 + 4, 290537, 290537, 3545, 3545, // #6618 + 5, 290546, 290546, 3858, 3858, // #6619 + 9, 290570, 290570, 3882, 3882, // #6620 + 12, 290596, 290596, 2484, 2484, // #6621 + 3, 290632, 290632, 1432, 1432, // #6622 + 1, 290643, 290643, 2339, 2339, // #6623 + 17, 290662, 290662, 2502, 2502, // #6624 + 15, 290696, 290696, 2520, 2520, // #6625 + 4, 290732, 290732, 3132, 3132, // #6626 + 10, 290756, 290756, 756, 756, // #6627 + 11, 290770, 290770, 642, 642, // #6628 + 2, 290788, 290788, 3428, 3428, // #6629 + 3, 290808, 290808, 3000, 3000, // #6630 + 10, 290820, 290820, 756, 756, // #6631 + 1, 290842, 290842, 1226, 1226, // #6632 + 1, 290860, 290860, 1228, 1228, // #6633 + 17, 290877, 290877, 749, 749, // #6634 + 3, 290904, 290904, 3000, 3000, // #6635 + 3, 290920, 290920, 3000, 3000, // #6636 + 11, 290936, 290936, 2536, 2536, // #6637 + 7, 291018, 291018, 2618, 2618, // #6638 + 14, 291075, 291075, 2675, 2675, // #6639 + 8, 291112, 291112, 2376, 2376, // #6640 + 6, 291143, 291143, 2663, 2663, // #6641 + 8, 291160, 291160, 2376, 2376, // #6642 + 6, 291191, 291191, 2663, 2663, // #6643 + 1, 291210, 291210, 1226, 1226, // #6644 + 1, 291228, 291228, 1228, 1228, // #6645 + 10, 291236, 291236, 756, 756, // #6646 + 17, 291261, 291261, 749, 749, // #6647 + 3, 291288, 291288, 3000, 3000, // #6648 + 3, 291304, 291304, 3000, 3000, // #6649 + 3, 291320, 291320, 3000, 3000, // #6650 + 3, 291336, 291336, 3000, 3000, // #6651 + 22, 291407, 291407, 2687, 2687, // #6652 + 12, 291452, 291452, 3916, 3916, // #6653 + 23, 291481, 291481, 3929, 3929, // #6654 + 16, 291521, 291521, 3953, 3953, // #6655 + 14, 291553, 291553, 1569, 1569, // #6656 + 8, 291568, 291568, 1584, 1584, // #6657 + 4, 291584, 291584, 1600, 1600, // #6658 + 9, 291605, 291605, 1605, 1605, // #6659 + 6, 291631, 291631, 1615, 1615, // #6660 + 6, 291651, 291651, 1491, 1491, // #6661 + 10, 291664, 291664, 1728, 1728, // #6662 + 31, 291720, 291720, 488, 488, // #6663 + 5, 291762, 291762, 2978, 2978, // #6664 + 4, 291784, 291784, 1176, 1176, // #6665 + 40, 291840, 291840, 3376, 3376, // #6666 + 47, 291916, 291916, 3420, 3420, // #6667 + 10, 291968, 291968, 1728, 1728, // #6668 + 31, 291992, 291992, 584, 584, // #6669 + 5, 292034, 292034, 2978, 2978, // #6670 + 8, 292052, 292052, 932, 932, // #6671 + 40, 292096, 292096, 3376, 3376, // #6672 + 47, 292172, 292172, 3420, 3420, // #6673 + 10, 292224, 292224, 1728, 1728, // #6674 + 30, 292296, 292296, 952, 952, // #6675 + 5, 292338, 292338, 2978, 2978, // #6676 + 11, 292360, 292360, 920, 920, // #6677 + 40, 292416, 292416, 3376, 3376, // #6678 + 47, 292492, 292492, 3420, 3420, // #6679 + 3, 292544, 292544, 2496, 2496, // #6680 + 3, 292574, 292574, 2734, 2734, // #6681 + 19, 292603, 292603, 747, 747, // #6682 + 40, 292672, 292672, 3376, 3376, // #6683 + 47, 292748, 292748, 3420, 3420, // #6684 + 3, 292800, 292800, 2896, 2896, // #6685 + 3, 292830, 292830, 2734, 2734, // #6686 + 13, 292879, 292879, 767, 767, // #6687 + 40, 292928, 292928, 3376, 3376, // #6688 + 47, 293004, 293004, 3420, 3420, // #6689 + 1, 293056, 293056, 3104, 3104, // #6690 + 3, 293086, 293086, 2734, 2734, // #6691 + 13, 293130, 293130, 122, 122, // #6692 + 40, 293184, 293184, 3376, 3376, // #6693 + 47, 293260, 293260, 3420, 3420, // #6694 + 1, 293312, 293312, 2688, 2688, // #6695 + 3, 293342, 293342, 2734, 2734, // #6696 + 16, 293373, 293373, 781, 781, // #6697 + 40, 293440, 293440, 3376, 3376, // #6698 + 47, 293516, 293516, 3420, 3420, // #6699 + 4, 293568, 293568, 3936, 3936, // #6700 + 4, 293593, 293593, 2729, 2729, // #6701 + 20, 293614, 293614, 798, 798, // #6702 + 40, 293696, 293696, 3376, 3376, // #6703 + 47, 293772, 293772, 3420, 3420, // #6704 + 17, 293828, 293828, 3492, 3492, // #6705 + 5, 293859, 293859, 3395, 3395, // #6706 + 11, 293885, 293885, 3357, 3357, // #6707 + 12, 293912, 293912, 2712, 2712, // #6708 + 5, 293939, 293939, 563, 563, // #6709 + 10, 293952, 293952, 2816, 2816, // #6710 + 1, 293968, 293968, 1888, 1888, // #6711 + 3, 293998, 293998, 2734, 2734, // #6712 + 10, 294024, 294024, 1896, 1896, // #6713 + 40, 294080, 294080, 3376, 3376, // #6714 + 47, 294156, 294156, 3420, 3420, // #6715 + 7, 294208, 294208, 2256, 2256, // #6716 + 1, 294239, 294239, 3103, 3103, // #6717 + 1, 294257, 294257, 1361, 1361, // #6718 + 1, 294274, 294274, 978, 978, // #6719 + 32, 294293, 294293, 2309, 2309, // #6720 + 1, 294348, 294348, 380, 380, // #6721 + 17, 294359, 294359, 3351, 3351, // #6722 + 1, 294384, 294384, 3008, 3008, // #6723 + 6, 294406, 294406, 3414, 3414, // #6724 + 17, 294419, 294419, 291, 291, // #6725 + 3, 294457, 294457, 3369, 3369, // #6726 + 3, 294464, 294464, 3536, 3536, // #6727 + 19, 294488, 294488, 808, 808, // #6728 + 20, 294519, 294519, 1863, 1863, // #6729 + 12, 294551, 294551, 551, 551, // #6730 + 7, 294576, 294576, 2256, 2256, // #6731 + 1, 294607, 294607, 3103, 3103, // #6732 + 1, 294625, 294625, 1361, 1361, // #6733 + 1, 294642, 294642, 978, 978, // #6734 + 42, 294660, 294660, 2708, 2708, // #6735 + 1, 294716, 294716, 380, 380, // #6736 + 40, 294724, 294724, 932, 932, // #6737 + 12, 294775, 294775, 551, 551, // #6738 + 7, 294800, 294800, 2256, 2256, // #6739 + 1, 294831, 294831, 3103, 3103, // #6740 + 1, 294849, 294849, 1361, 1361, // #6741 + 1, 294866, 294866, 978, 978, // #6742 + 42, 294916, 294916, 2548, 2548, // #6743 + 1, 294972, 294972, 380, 380, // #6744 + 14, 294989, 294989, 589, 589, // #6745 + 7, 295008, 295008, 2256, 2256, // #6746 + 1, 295039, 295039, 3103, 3103, // #6747 + 1, 295057, 295057, 1361, 1361, // #6748 + 1, 295074, 295074, 978, 978, // #6749 + 42, 295108, 295108, 2724, 2724, // #6750 + 1, 295164, 295164, 380, 380, // #6751 + 18, 295180, 295180, 604, 604, // #6752 + 4, 295211, 295211, 2411, 2411, // #6753 + 6, 295227, 295227, 843, 843, // #6754 + 20, 295308, 295308, 124, 124, // #6755 + 1, 295354, 295354, 1226, 1226, // #6756 + 1, 295372, 295372, 1228, 1228, // #6757 + 1, 295386, 295386, 3610, 3610, // #6758 + 1, 295402, 295402, 3610, 3610, // #6759 + 2, 295413, 295413, 2885, 2885, // #6760 + 1, 295434, 295434, 3610, 3610, // #6761 + 2, 295445, 295445, 2885, 2885, // #6762 + 1, 295466, 295466, 3610, 3610, // #6763 + 2, 295477, 295477, 2885, 2885, // #6764 + 1, 295498, 295498, 3610, 3610, // #6765 + 2, 295509, 295509, 2885, 2885, // #6766 + 1, 295530, 295530, 3610, 3610, // #6767 + 1, 295546, 295546, 3610, 3610, // #6768 + 2, 295557, 295557, 2885, 2885, // #6769 + 1, 295578, 295578, 3610, 3610, // #6770 + 2, 295589, 295589, 2885, 2885, // #6771 + 1, 295610, 295610, 3610, 3610, // #6772 + 2, 295621, 295621, 2885, 2885, // #6773 + 1, 295642, 295642, 3610, 3610, // #6774 + 2, 295653, 295653, 2885, 2885, // #6775 + 10, 295668, 295668, 756, 756, // #6776 + 11, 295682, 295682, 642, 642, // #6777 + 3, 295704, 295704, 3000, 3000, // #6778 + 10, 295716, 295716, 756, 756, // #6779 + 17, 295741, 295741, 749, 749, // #6780 + 3, 295768, 295768, 3000, 3000, // #6781 + 3, 295784, 295784, 3000, 3000, // #6782 + 3, 295800, 295800, 3000, 3000, // #6783 + 3, 295816, 295816, 3000, 3000, // #6784 + 1, 295827, 295827, 2339, 2339, // #6785 + 10, 295844, 295844, 756, 756, // #6786 + 11, 295858, 295858, 642, 642, // #6787 + 3, 295880, 295880, 3000, 3000, // #6788 + 10, 295892, 295892, 756, 756, // #6789 + 17, 295917, 295917, 749, 749, // #6790 + 3, 295944, 295944, 3000, 3000, // #6791 + 3, 295960, 295960, 3000, 3000, // #6792 + 3, 295976, 295976, 3000, 3000, // #6793 + 3, 295992, 295992, 3000, 3000, // #6794 + 1, 296003, 296003, 2339, 2339, // #6795 + 10, 296020, 296020, 756, 756, // #6796 + 11, 296034, 296034, 642, 642, // #6797 + 3, 296056, 296056, 3000, 3000, // #6798 + 10, 296068, 296068, 756, 756, // #6799 + 17, 296093, 296093, 749, 749, // #6800 + 3, 296120, 296120, 3000, 3000, // #6801 + 3, 296136, 296136, 3000, 3000, // #6802 + 3, 296152, 296152, 3000, 3000, // #6803 + 3, 296168, 296168, 3000, 3000, // #6804 + 1, 296179, 296179, 2339, 2339, // #6805 + 3, 296204, 296204, 204, 204, // #6806 + 6, 296219, 296219, 843, 843, // #6807 + 20, 296247, 296247, 103, 103, // #6808 + 1, 296282, 296282, 3610, 3610, // #6809 + 1, 296298, 296298, 3610, 3610, // #6810 + 2, 296309, 296309, 2885, 2885, // #6811 + 1, 296330, 296330, 3610, 3610, // #6812 + 2, 296341, 296341, 2885, 2885, // #6813 + 1, 296362, 296362, 3610, 3610, // #6814 + 2, 296373, 296373, 2885, 2885, // #6815 + 1, 296394, 296394, 3610, 3610, // #6816 + 1, 296410, 296410, 3610, 3610, // #6817 + 2, 296421, 296421, 2885, 2885, // #6818 + 1, 296442, 296442, 3610, 3610, // #6819 + 2, 296453, 296453, 2885, 2885, // #6820 + 1, 296474, 296474, 3610, 3610, // #6821 + 2, 296485, 296485, 2885, 2885, // #6822 + 10, 296500, 296500, 756, 756, // #6823 + 11, 296514, 296514, 642, 642, // #6824 + 3, 296536, 296536, 3000, 3000, // #6825 + 10, 296548, 296548, 756, 756, // #6826 + 17, 296573, 296573, 749, 749, // #6827 + 3, 296600, 296600, 3000, 3000, // #6828 + 3, 296616, 296616, 3000, 3000, // #6829 + 3, 296632, 296632, 3000, 3000, // #6830 + 3, 296648, 296648, 3000, 3000, // #6831 + 1, 296659, 296659, 2339, 2339, // #6832 + 10, 296676, 296676, 756, 756, // #6833 + 11, 296690, 296690, 642, 642, // #6834 + 3, 296712, 296712, 3000, 3000, // #6835 + 10, 296724, 296724, 756, 756, // #6836 + 17, 296749, 296749, 749, 749, // #6837 + 3, 296776, 296776, 3000, 3000, // #6838 + 3, 296792, 296792, 3000, 3000, // #6839 + 3, 296808, 296808, 3000, 3000, // #6840 + 3, 296824, 296824, 3000, 3000, // #6841 + 1, 296835, 296835, 2339, 2339, // #6842 + 10, 296854, 296854, 326, 326, // #6843 + 7, 296880, 296880, 2256, 2256, // #6844 + 1, 296911, 296911, 3103, 3103, // #6845 + 1, 296929, 296929, 1361, 1361, // #6846 + 1, 296946, 296946, 978, 978, // #6847 + 13, 296964, 296964, 3732, 3732, // #6848 + 1, 297004, 297004, 380, 380, // #6849 + 31, 297020, 297020, 28, 28, // #6850 + 7, 297060, 297060, 1956, 1956, // #6851 + 9, 297080, 297080, 3304, 3304, // #6852 + 4, 297104, 297104, 3728, 3728, // #6853 + 4, 297129, 297129, 2729, 2729, // #6854 + 22, 297163, 297163, 555, 555, // #6855 + 40, 297216, 297216, 3376, 3376, // #6856 + 47, 297292, 297292, 3420, 3420, // #6857 + 13, 297353, 297353, 201, 201, // #6858 + 1, 297378, 297378, 4018, 4018, // #6859 + 1, 297394, 297394, 4018, 4018, // #6860 + 1, 297410, 297410, 4018, 4018, // #6861 + 1, 297426, 297426, 4018, 4018, // #6862 + 1, 297442, 297442, 4018, 4018, // #6863 + 42, 297472, 297472, 1824, 1824, // #6864 + 16, 297528, 297528, 2024, 2024, // #6865 + 1, 297554, 297554, 4018, 4018, // #6866 + 1, 297570, 297570, 4018, 4018, // #6867 + 1, 297586, 297586, 4018, 4018, // #6868 + 1, 297602, 297602, 4018, 4018, // #6869 + 1, 297618, 297618, 4018, 4018, // #6870 + 26, 297675, 297675, 683, 683, // #6871 + 19, 297736, 297736, 888, 888, // #6872 + 34, 297760, 297760, 2192, 2192, // #6873 + 2, 297812, 297812, 2228, 2228, // #6874 + 17, 297864, 297864, 2232, 2232, // #6875 + 2, 297899, 297899, 2251, 2251, // #6876 + 1, 297919, 297919, 2255, 2255, // #6877 + 6, 297939, 297939, 3155, 3155, // #6878 + 2, 297962, 297962, 2202, 2202, // #6879 + 5, 297968, 297968, 3696, 3696, // #6880 + 2, 297988, 297988, 3556, 3556, // #6881 + 19, 298011, 298011, 3659, 3659, // #6882 + 2, 298040, 298040, 3656, 3656, // #6883 + 3, 298054, 298054, 358, 358, // #6884 + 36, 298120, 298120, 568, 568, // #6885 + 1, 298171, 298171, 3131, 3131, // #6886 + 2, 298182, 298182, 2038, 2038, // #6887 + 1, 298205, 298205, 3133, 3133, // #6888 + 2, 298217, 298217, 2041, 2041, // #6889 + 1, 298239, 298239, 3135, 3135, // #6890 + 3, 298268, 298268, 2044, 2044, // #6891 + 1, 298275, 298275, 3139, 3139, // #6892 + 4, 298288, 298288, 2048, 2048, // #6893 + 1, 298309, 298309, 3141, 3141, // #6894 + 4, 298325, 298325, 2053, 2053, // #6895 + 2, 298346, 298346, 2202, 2202, // #6896 + 2, 298362, 298362, 2202, 2202, // #6897 + 7, 298377, 298377, 3641, 3641, // #6898 + 6, 298401, 298401, 3649, 3649, // #6899 + 5, 298420, 298420, 1860, 1860, // #6900 + 10, 298432, 298432, 1872, 1872, // #6901 + 9, 298454, 298454, 1894, 1894, // #6902 + 9, 298510, 298510, 1726, 1726, // #6903 + 5, 298536, 298536, 2840, 2840, // #6904 + 2, 298552, 298552, 3656, 3656, // #6905 + 3, 298566, 298566, 358, 358, // #6906 + 36, 298632, 298632, 568, 568, // #6907 + 1, 298683, 298683, 3131, 3131, // #6908 + 2, 298694, 298694, 2038, 2038, // #6909 + 1, 298717, 298717, 3133, 3133, // #6910 + 2, 298729, 298729, 2041, 2041, // #6911 + 1, 298751, 298751, 3135, 3135, // #6912 + 3, 298780, 298780, 2044, 2044, // #6913 + 1, 298787, 298787, 3139, 3139, // #6914 + 4, 298800, 298800, 2048, 2048, // #6915 + 1, 298821, 298821, 3141, 3141, // #6916 + 4, 298837, 298837, 2053, 2053, // #6917 + 2, 298858, 298858, 2202, 2202, // #6918 + 2, 298874, 298874, 2202, 2202, // #6919 + 2, 298890, 298890, 2202, 2202, // #6920 + 2, 298906, 298906, 2202, 2202, // #6921 + 2, 298922, 298922, 2202, 2202, // #6922 + 7, 298937, 298937, 3641, 3641, // #6923 + 6, 298961, 298961, 3649, 3649, // #6924 + 14, 298985, 298985, 1929, 1929, // #6925 + 5, 299011, 299011, 563, 563, // #6926 + 3, 299024, 299024, 832, 832, // #6927 + 8, 299048, 299048, 2808, 2808, // #6928 + 16, 299072, 299072, 880, 880, // #6929 + 6, 299104, 299104, 2800, 2800, // #6930 + 19, 299125, 299125, 101, 101, // #6931 + 2, 299162, 299162, 2202, 2202, // #6932 + 7, 299175, 299175, 487, 487, // #6933 + 4, 299194, 299194, 410, 410, // #6934 + 5, 299215, 299215, 415, 415, // #6935 + 2, 299242, 299242, 2202, 2202, // #6936 + 7, 299255, 299255, 487, 487, // #6937 + 4, 299274, 299274, 410, 410, // #6938 + 5, 299295, 299295, 415, 415, // #6939 + 5, 299320, 299320, 856, 856, // #6940 + 2, 299336, 299336, 3656, 3656, // #6941 + 3, 299350, 299350, 358, 358, // #6942 + 36, 299400, 299400, 568, 568, // #6943 + 1, 299451, 299451, 3131, 3131, // #6944 + 2, 299462, 299462, 2038, 2038, // #6945 + 1, 299485, 299485, 3133, 3133, // #6946 + 2, 299497, 299497, 2041, 2041, // #6947 + 1, 299519, 299519, 3135, 3135, // #6948 + 3, 299548, 299548, 2044, 2044, // #6949 + 1, 299555, 299555, 3139, 3139, // #6950 + 4, 299568, 299568, 2048, 2048, // #6951 + 1, 299589, 299589, 3141, 3141, // #6952 + 4, 299605, 299605, 2053, 2053, // #6953 + 2, 299626, 299626, 2202, 2202, // #6954 + 2, 299642, 299642, 2202, 2202, // #6955 + 2, 299658, 299658, 2202, 2202, // #6956 + 2, 299674, 299674, 2202, 2202, // #6957 + 2, 299690, 299690, 2202, 2202, // #6958 + 2, 299706, 299706, 2202, 2202, // #6959 + 7, 299721, 299721, 3641, 3641, // #6960 + 6, 299745, 299745, 3649, 3649, // #6961 + 30, 299760, 299760, 800, 800, // #6962 + 6, 299804, 299804, 3308, 3308, // #6963 + 6, 299836, 299836, 3308, 3308, // #6964 + 6, 299868, 299868, 3308, 3308, // #6965 + 6, 299900, 299900, 3308, 3308, // #6966 + 6, 299932, 299932, 3308, 3308, // #6967 + 1, 299960, 299960, 2760, 2760, // #6968 + 6, 299980, 299980, 3308, 3308, // #6969 + 6, 300012, 300012, 3308, 3308, // #6970 + 6, 300044, 300044, 3308, 3308, // #6971 + 9, 300110, 300110, 1726, 1726, // #6972 + 6, 300140, 300140, 3308, 3308, // #6973 + 9, 300174, 300174, 1726, 1726, // #6974 + 6, 300204, 300204, 3308, 3308, // #6975 + 6, 300236, 300236, 3308, 3308, // #6976 + 15, 300266, 300266, 2378, 2378, // #6977 + 4, 300293, 300293, 3269, 3269, // #6978 + 5, 300307, 300307, 563, 563, // #6979 + 3, 300320, 300320, 1136, 1136, // #6980 + 15, 300351, 300351, 4015, 4015, // #6981 + 4, 300373, 300373, 3269, 3269, // #6982 + 5, 300387, 300387, 563, 563, // #6983 + 22, 300428, 300428, 3564, 3564, // #6984 + 24, 300467, 300467, 3587, 3587, // #6985 + 24, 300504, 300504, 4008, 4008, // #6986 + 28, 300544, 300544, 3040, 3040, // #6987 + 20, 300618, 300618, 3002, 3002, // #6988 + 14, 300640, 300640, 288, 288, // #6989 + 9, 300663, 300663, 3639, 3639, // #6990 + 19, 300689, 300689, 3649, 3649, // #6991 + 6, 300725, 300725, 3669, 3669, // #6992 + 18, 300748, 300748, 3676, 3676, // #6993 + 16, 300783, 300783, 3695, 3695, // #6994 + 9, 300807, 300807, 3639, 3639, // #6995 + 8, 300832, 300832, 3712, 3712, // #6996 + 6, 300853, 300853, 3669, 3669, // #6997 + 6, 300873, 300873, 3721, 3721, // #6998 + 6, 300885, 300885, 3669, 3669, // #6999 + 6, 300896, 300896, 3728, 3728, // #7000 + 8, 300919, 300919, 3735, 3735, // #7001 + 10, 300928, 300928, 3744, 3744, // #7002 + 12, 300955, 300955, 3755, 3755, // #7003 + 9, 301000, 301000, 3768, 3768, // #7004 + 6, 301029, 301029, 3669, 3669, // #7005 + 8, 301042, 301042, 3778, 3778, // #7006 + 19, 301057, 301057, 3649, 3649, // #7007 + 6, 301093, 301093, 3669, 3669, // #7008 + 11, 301115, 301115, 3787, 3787, // #7009 + 11, 301143, 301143, 3799, 3799, // #7010 + 12, 301171, 301171, 3811, 3811, // #7011 + 18, 301196, 301196, 3676, 3676, // #7012 + 16, 301231, 301231, 3695, 3695, // #7013 + 9, 301248, 301248, 3824, 3824, // #7014 + 6, 301269, 301269, 3669, 3669, // #7015 + 18, 301292, 301292, 3676, 3676, // #7016 + 16, 301327, 301327, 3695, 3695, // #7017 + 19, 301386, 301386, 3834, 3834, // #7018 + 19, 301409, 301409, 3649, 3649, // #7019 + 16, 301453, 301453, 3901, 3901, // #7020 + 6, 301477, 301477, 3669, 3669, // #7021 + 18, 301500, 301500, 3676, 3676, // #7022 + 16, 301535, 301535, 3695, 3695, // #7023 + 19, 301553, 301553, 3649, 3649, // #7024 + 5, 301598, 301598, 3918, 3918, // #7025 + 19, 301617, 301617, 3649, 3649, // #7026 + 5, 301662, 301662, 3918, 3918, // #7027 + 4, 301684, 301684, 3924, 3924, // #7028 + 18, 301708, 301708, 3676, 3676, // #7029 + 16, 301743, 301743, 3695, 3695, // #7030 + 11, 301769, 301769, 3929, 3929, // #7031 + 19, 301793, 301793, 3649, 3649, // #7032 + 18, 301829, 301829, 3941, 3941, // #7033 + 7, 301864, 301864, 3960, 3960, // #7034 + 11, 301881, 301881, 3929, 3929, // #7035 + 7, 301912, 301912, 3960, 3960, // #7036 + 19, 301921, 301921, 3649, 3649, // #7037 + 18, 301964, 301964, 3676, 3676, // #7038 + 16, 301999, 301999, 3695, 3695, // #7039 + 6, 302021, 302021, 3669, 3669, // #7040 + 12, 302032, 302032, 3968, 3968, // #7041 + 19, 302049, 302049, 3649, 3649, // #7042 + 10, 302093, 302093, 3981, 3981, // #7043 + 19, 302113, 302113, 3649, 3649, // #7044 + 11, 302152, 302152, 3992, 3992, // #7045 + 6, 302181, 302181, 3669, 3669, // #7046 + 6, 302192, 302192, 128, 128, // #7047 + 6, 302208, 302208, 3776, 3776, // #7048 + 7, 302224, 302224, 1440, 1440, // #7049 + 7, 302240, 302240, 32, 32, // #7050 + 13, 302280, 302280, 2680, 2680, // #7051 + 7, 302313, 302313, 3641, 3641, // #7052 + 6, 302337, 302337, 3649, 3649, // #7053 + 12, 302415, 302415, 2111, 2111, // #7054 + 14, 302472, 302472, 2680, 2680, // #7055 + 13, 302504, 302504, 792, 792, // #7056 + 7, 302537, 302537, 3641, 3641, // #7057 + 6, 302561, 302561, 3649, 3649, // #7058 + 22, 302579, 302579, 35, 35, // #7059 + 14, 302616, 302616, 792, 792, // #7060 + 13, 302648, 302648, 2536, 2536, // #7061 + 7, 302681, 302681, 3641, 3641, // #7062 + 6, 302705, 302705, 3649, 3649, // #7063 + 9, 302729, 302729, 105, 105, // #7064 + 13, 302760, 302760, 2760, 2760, // #7065 + 7, 302793, 302793, 3641, 3641, // #7066 + 6, 302817, 302817, 3649, 3649, // #7067 + 13, 302836, 302836, 148, 148, // #7068 + 9, 302920, 302920, 3576, 3576, // #7069 + 1, 302946, 302946, 4018, 4018, // #7070 + 8, 302964, 302964, 3492, 3492, // #7071 + 6, 302976, 302976, 3600, 3600, // #7072 + 8, 302996, 302996, 3492, 3492, // #7073 + 6, 303008, 303008, 112, 112, // #7074 + 8, 303028, 303028, 3492, 3492, // #7075 + 6, 303040, 303040, 1184, 1184, // #7076 + 8, 303060, 303060, 3492, 3492, // #7077 + 6, 303080, 303080, 408, 408, // #7078 + 8, 303092, 303092, 3492, 3492, // #7079 + 6, 303104, 303104, 448, 448, // #7080 + 8, 303124, 303124, 3492, 3492, // #7081 + 6, 303144, 303144, 488, 488, // #7082 + 8, 303156, 303156, 3492, 3492, // #7083 + 6, 303168, 303168, 528, 528, // #7084 + 8, 303188, 303188, 3492, 3492, // #7085 + 6, 303208, 303208, 568, 568, // #7086 + 9, 303240, 303240, 3576, 3576, // #7087 + 1, 303264, 303264, 1808, 1808, // #7088 + 1, 303282, 303282, 4018, 4018, // #7089 + 8, 303300, 303300, 3492, 3492, // #7090 + 6, 303312, 303312, 64, 64, // #7091 + 8, 303332, 303332, 3492, 3492, // #7092 + 6, 303352, 303352, 984, 984, // #7093 + 8, 303364, 303364, 3492, 3492, // #7094 + 6, 303376, 303376, 1184, 1184, // #7095 + 8, 303396, 303396, 3492, 3492, // #7096 + 6, 303416, 303416, 2824, 2824, // #7097 + 8, 303428, 303428, 3492, 3492, // #7098 + 6, 303448, 303448, 3000, 3000, // #7099 + 8, 303460, 303460, 3492, 3492, // #7100 + 6, 303480, 303480, 3176, 3176, // #7101 + 8, 303492, 303492, 3492, 3492, // #7102 + 6, 303512, 303512, 888, 888, // #7103 + 8, 303524, 303524, 3492, 3492, // #7104 + 6, 303544, 303544, 1016, 1016, // #7105 + 12, 303554, 303554, 3586, 3586, // #7106 + 1, 303570, 303570, 4018, 4018, // #7107 + 8, 303588, 303588, 3492, 3492, // #7108 + 6, 303608, 303608, 1928, 1928, // #7109 + 8, 303620, 303620, 3492, 3492, // #7110 + 6, 303632, 303632, 64, 64, // #7111 + 8, 303652, 303652, 3492, 3492, // #7112 + 6, 303672, 303672, 4040, 4040, // #7113 + 8, 303684, 303684, 3492, 3492, // #7114 + 6, 303696, 303696, 208, 208, // #7115 + 8, 303716, 303716, 3492, 3492, // #7116 + 6, 303728, 303728, 1760, 1760, // #7117 + 8, 303748, 303748, 3492, 3492, // #7118 + 6, 303768, 303768, 1960, 1960, // #7119 + 8, 303780, 303780, 3492, 3492, // #7120 + 6, 303792, 303792, 2160, 2160, // #7121 + 8, 303812, 303812, 3492, 3492, // #7122 + 6, 303824, 303824, 3712, 3712, // #7123 + 8, 303840, 303840, 2224, 2224, // #7124 + 16, 303856, 303856, 1360, 1360, // #7125 + 9, 303893, 303893, 2005, 2005, // #7126 + 30, 303912, 303912, 392, 392, // #7127 + 5, 303954, 303954, 2978, 2978, // #7128 + 5, 303978, 303978, 2042, 2042, // #7129 + 40, 304000, 304000, 3376, 3376, // #7130 + 47, 304076, 304076, 3420, 3420, // #7131 + 10, 304136, 304136, 520, 520, // #7132 + 12, 304173, 304173, 461, 461, // #7133 + 13, 304200, 304200, 408, 408, // #7134 + 7, 304233, 304233, 3641, 3641, // #7135 + 6, 304257, 304257, 3649, 3649, // #7136 + 16, 304280, 304280, 2024, 2024, // #7137 + 14, 304312, 304312, 408, 408, // #7138 + 13, 304344, 304344, 920, 920, // #7139 + 7, 304377, 304377, 3641, 3641, // #7140 + 6, 304401, 304401, 3649, 3649, // #7141 + 24, 304448, 304448, 1968, 1968, // #7142 + 92, 304520, 304520, 1880, 1880, // #7143 + 24, 304640, 304640, 1968, 1968, // #7144 + 2, 304682, 304682, 2202, 2202, // #7145 + 37, 304688, 304688, 2816, 2816, // #7146 + 2, 304744, 304744, 3656, 3656, // #7147 + 3, 304758, 304758, 358, 358, // #7148 + 36, 304776, 304776, 568, 568, // #7149 + 1, 304827, 304827, 3131, 3131, // #7150 + 2, 304838, 304838, 2038, 2038, // #7151 + 1, 304861, 304861, 3133, 3133, // #7152 + 2, 304873, 304873, 2041, 2041, // #7153 + 1, 304895, 304895, 3135, 3135, // #7154 + 3, 304924, 304924, 2044, 2044, // #7155 + 1, 304931, 304931, 3139, 3139, // #7156 + 4, 304944, 304944, 2048, 2048, // #7157 + 1, 304965, 304965, 3141, 3141, // #7158 + 4, 304981, 304981, 2053, 2053, // #7159 + 2, 305002, 305002, 2202, 2202, // #7160 + 13, 305008, 305008, 1280, 1280, // #7161 + 7, 305033, 305033, 3641, 3641, // #7162 + 6, 305057, 305057, 3649, 3649, // #7163 + 13, 305073, 305073, 2145, 2145, // #7164 + 14, 305088, 305088, 1280, 1280, // #7165 + 13, 305104, 305104, 784, 784, // #7166 + 7, 305129, 305129, 3641, 3641, // #7167 + 6, 305153, 305153, 3649, 3649, // #7168 + 6, 305168, 305168, 128, 128, // #7169 + 6, 305184, 305184, 3776, 3776, // #7170 + 7, 305200, 305200, 1440, 1440, // #7171 + 7, 305216, 305216, 32, 32, // #7172 + 24, 305232, 305232, 2592, 2592, // #7173 + 7, 305264, 305264, 1440, 1440, // #7174 + 7, 305280, 305280, 32, 32, // #7175 + 4, 305307, 305307, 1099, 1099, // #7176 + 4, 305323, 305323, 1099, 1099, // #7177 + 4, 305328, 305328, 3728, 3728, // #7178 + 4, 305353, 305353, 2729, 2729, // #7179 + 22, 305419, 305419, 555, 555, // #7180 + 40, 305472, 305472, 3376, 3376, // #7181 + 47, 305548, 305548, 3420, 3420, // #7182 + 4, 305600, 305600, 3728, 3728, // #7183 + 4, 305625, 305625, 2729, 2729, // #7184 + 22, 305675, 305675, 555, 555, // #7185 + 40, 305728, 305728, 3376, 3376, // #7186 + 47, 305804, 305804, 3420, 3420, // #7187 + 4, 305856, 305856, 3728, 3728, // #7188 + 4, 305881, 305881, 2729, 2729, // #7189 + 22, 305931, 305931, 555, 555, // #7190 + 40, 305984, 305984, 3376, 3376, // #7191 + 47, 306060, 306060, 3420, 3420, // #7192 + 8, 306122, 306122, 3546, 3546, // #7193 + 3, 306144, 306144, 3440, 3440, // #7194 + 3, 306174, 306174, 2734, 2734, // #7195 + 10, 306192, 306192, 2416, 2416, // #7196 + 40, 306240, 306240, 3376, 3376, // #7197 + 47, 306316, 306316, 3420, 3420, // #7198 + 9, 306371, 306371, 3555, 3555, // #7199 + 3, 306392, 306392, 2008, 2008, // #7200 + 3, 306414, 306414, 2734, 2734, // #7201 + 11, 306440, 306440, 1608, 1608, // #7202 + 40, 306496, 306496, 3376, 3376, // #7203 + 47, 306572, 306572, 3420, 3420, // #7204 + 4, 306624, 306624, 3456, 3456, // #7205 + 6, 306645, 306645, 3461, 3461, // #7206 + 6, 306668, 306668, 3468, 3468, // #7207 + 6, 306691, 306691, 3475, 3475, // #7208 + 8, 306714, 306714, 3482, 3482, // #7209 + 13, 306740, 306740, 1572, 1572, // #7210 + 1, 306770, 306770, 4018, 4018, // #7211 + 8, 306788, 306788, 3492, 3492, // #7212 + 6, 306808, 306808, 216, 216, // #7213 + 8, 306820, 306820, 3492, 3492, // #7214 + 6, 306840, 306840, 2216, 2216, // #7215 + 8, 306852, 306852, 3492, 3492, // #7216 + 6, 306872, 306872, 952, 952, // #7217 + 8, 306884, 306884, 3492, 3492, // #7218 + 6, 306896, 306896, 2608, 2608, // #7219 + 8, 306916, 306916, 3492, 3492, // #7220 + 6, 306936, 306936, 616, 616, // #7221 + 8, 306948, 306948, 3492, 3492, // #7222 + 6, 306968, 306968, 3752, 3752, // #7223 + 8, 306980, 306980, 3492, 3492, // #7224 + 6, 306992, 306992, 384, 384, // #7225 + 8, 307012, 307012, 3492, 3492, // #7226 + 6, 307032, 307032, 424, 424, // #7227 + 1, 307042, 307042, 4018, 4018, // #7228 + 1, 307058, 307058, 4018, 4018, // #7229 + 8, 307076, 307076, 3492, 3492, // #7230 + 6, 307096, 307096, 3752, 3752, // #7231 + 8, 307108, 307108, 3492, 3492, // #7232 + 6, 307128, 307128, 2216, 2216, // #7233 + 8, 307140, 307140, 3492, 3492, // #7234 + 6, 307152, 307152, 1408, 1408, // #7235 + 8, 307172, 307172, 3492, 3492, // #7236 + 6, 307192, 307192, 1448, 1448, // #7237 + 8, 307204, 307204, 3492, 3492, // #7238 + 6, 307216, 307216, 1488, 1488, // #7239 + 8, 307236, 307236, 3492, 3492, // #7240 + 6, 307256, 307256, 1528, 1528, // #7241 + 8, 307268, 307268, 3492, 3492, // #7242 + 6, 307280, 307280, 1568, 1568, // #7243 + 8, 307300, 307300, 3492, 3492, // #7244 + 6, 307320, 307320, 1608, 1608, // #7245 + 1, 307330, 307330, 4018, 4018, // #7246 + 1, 307346, 307346, 4018, 4018, // #7247 + 1, 307360, 307360, 1072, 1072, // #7248 + 1, 307378, 307378, 4018, 4018, // #7249 + 8, 307396, 307396, 3492, 3492, // #7250 + 6, 307416, 307416, 3208, 3208, // #7251 + 8, 307428, 307428, 3492, 3492, // #7252 + 6, 307448, 307448, 392, 392, // #7253 + 8, 307460, 307460, 3492, 3492, // #7254 + 6, 307472, 307472, 3568, 3568, // #7255 + 8, 307492, 307492, 3492, 3492, // #7256 + 6, 307504, 307504, 496, 496, // #7257 + 8, 307524, 307524, 3492, 3492, // #7258 + 6, 307536, 307536, 2784, 2784, // #7259 + 8, 307556, 307556, 3492, 3492, // #7260 + 6, 307576, 307576, 2120, 2120, // #7261 + 8, 307588, 307588, 3492, 3492, // #7262 + 6, 307608, 307608, 2056, 2056, // #7263 + 8, 307620, 307620, 3492, 3492, // #7264 + 6, 307640, 307640, 1656, 1656, // #7265 + 1, 307650, 307650, 4018, 4018, // #7266 + 1, 307666, 307666, 4018, 4018, // #7267 + 1, 307682, 307682, 4018, 4018, // #7268 + 4, 307706, 307706, 2730, 2730, // #7269 + 4, 307727, 307727, 2735, 2735, // #7270 + 2, 307754, 307754, 2202, 2202, // #7271 + 2, 307770, 307770, 2202, 2202, // #7272 + 2, 307786, 307786, 2202, 2202, // #7273 + 4, 307802, 307802, 2730, 2730, // #7274 + 4, 307823, 307823, 2735, 2735, // #7275 + 4, 307850, 307850, 2730, 2730, // #7276 + 4, 307871, 307871, 2735, 2735, // #7277 + 4, 307898, 307898, 2730, 2730, // #7278 + 4, 307919, 307919, 2735, 2735, // #7279 + 4, 307946, 307946, 2730, 2730, // #7280 + 4, 307967, 307967, 2735, 2735, // #7281 + 1, 307988, 307988, 1876, 1876, // #7282 + 8, 308004, 308004, 2740, 2740, // #7283 + 10, 308045, 308045, 2749, 2749, // #7284 + 1, 308068, 308068, 1876, 1876, // #7285 + 1, 308084, 308084, 1876, 1876, // #7286 + 8, 308100, 308100, 2740, 2740, // #7287 + 10, 308173, 308173, 2749, 2749, // #7288 + 1, 308196, 308196, 1876, 1876, // #7289 + 4, 308208, 308208, 3728, 3728, // #7290 + 4, 308233, 308233, 2729, 2729, // #7291 + 22, 308299, 308299, 555, 555, // #7292 + 40, 308352, 308352, 3376, 3376, // #7293 + 47, 308428, 308428, 3420, 3420, // #7294 + 4, 308480, 308480, 3728, 3728, // #7295 + 4, 308505, 308505, 2729, 2729, // #7296 + 22, 308555, 308555, 555, 555, // #7297 + 40, 308608, 308608, 3376, 3376, // #7298 + 47, 308684, 308684, 3420, 3420, // #7299 + 1, 308738, 308738, 4018, 4018, // #7300 + 1, 308754, 308754, 4018, 4018, // #7301 + 1, 308770, 308770, 4018, 4018, // #7302 + 1, 308786, 308786, 4018, 4018, // #7303 + 4, 308810, 308810, 2730, 2730, // #7304 + 4, 308831, 308831, 2735, 2735, // #7305 + 4, 308858, 308858, 2730, 2730, // #7306 + 4, 308879, 308879, 2735, 2735, // #7307 + 4, 308906, 308906, 2730, 2730, // #7308 + 4, 308927, 308927, 2735, 2735, // #7309 + 4, 308954, 308954, 2730, 2730, // #7310 + 4, 308975, 308975, 2735, 2735, // #7311 + 4, 309002, 309002, 2730, 2730, // #7312 + 4, 309023, 309023, 2735, 2735, // #7313 + 1, 309042, 309042, 4018, 4018, // #7314 + 1, 309058, 309058, 4018, 4018, // #7315 + 1, 309074, 309074, 4018, 4018, // #7316 + 1, 309090, 309090, 4018, 4018, // #7317 + 1, 309106, 309106, 4018, 4018, // #7318 + 1, 309122, 309122, 4018, 4018, // #7319 + 1, 309138, 309138, 4018, 4018, // #7320 + 1, 309154, 309154, 4018, 4018, // #7321 + 1, 309170, 309170, 4018, 4018, // #7322 + 1, 309186, 309186, 4018, 4018, // #7323 + 1, 309202, 309202, 4018, 4018, // #7324 + 1, 309218, 309218, 4018, 4018, // #7325 + 1, 309234, 309234, 4018, 4018, // #7326 + 1, 309250, 309250, 4018, 4018, // #7327 + 1, 309266, 309266, 4018, 4018, // #7328 + 8, 309290, 309290, 3546, 3546, // #7329 + 9, 309315, 309315, 3555, 3555, // #7330 + 22, 309336, 309336, 3400, 3400, // #7331 }; struct StringData fromLatin1Data = { intData, { charData }, - 51, /* entryCount */ + 7332, /* entryCount */ 119 /* maxLength */ }; -// average comparison length: 8.0000 -// cache-line crosses: 6 (5.9%) +// average comparison length: 17.8291 +// cache-line crosses: 2902 (19.8%) // alignment histogram: -// 0xXXX0 = 6 (5.9%) strings, 3 (50.0%) of which same-aligned -// 0xXXX3 = 10 (9.8%) strings, 5 (50.0%) of which same-aligned -// 0xXXX4 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned -// 0xXXX5 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned -// 0xXXX7 = 10 (9.8%) strings, 5 (50.0%) of which same-aligned -// 0xXXX8 = 14 (13.7%) strings, 7 (50.0%) of which same-aligned -// 0xXXX9 = 16 (15.7%) strings, 8 (50.0%) of which same-aligned -// 0xXXXa = 2 (2.0%) strings, 1 (50.0%) of which same-aligned -// 0xXXXc = 8 (7.8%) strings, 4 (50.0%) of which same-aligned -// 0xXXXd = 4 (3.9%) strings, 2 (50.0%) of which same-aligned -// total = 102 (100%) strings, 51 (50.0%) of which same-aligned +// 0xXXX0 = 3786 (25.8%) strings, 1893 (50.0%) of which same-aligned +// 0xXXX1 = 300 (2.0%) strings, 150 (50.0%) of which same-aligned +// 0xXXX2 = 430 (2.9%) strings, 215 (50.0%) of which same-aligned +// 0xXXX3 = 326 (2.2%) strings, 163 (50.0%) of which same-aligned +// 0xXXX4 = 450 (3.1%) strings, 225 (50.0%) of which same-aligned +// 0xXXX5 = 292 (2.0%) strings, 146 (50.0%) of which same-aligned +// 0xXXX6 = 220 (1.5%) strings, 110 (50.0%) of which same-aligned +// 0xXXX7 = 806 (5.5%) strings, 403 (50.0%) of which same-aligned +// 0xXXX8 = 1748 (11.9%) strings, 874 (50.0%) of which same-aligned +// 0xXXX9 = 326 (2.2%) strings, 163 (50.0%) of which same-aligned +// 0xXXXa = 320 (2.2%) strings, 160 (50.0%) of which same-aligned +// 0xXXXb = 250 (1.7%) strings, 125 (50.0%) of which same-aligned +// 0xXXXc = 2506 (17.1%) strings, 1253 (50.0%) of which same-aligned +// 0xXXXd = 1128 (7.7%) strings, 564 (50.0%) of which same-aligned +// 0xXXXe = 1400 (9.5%) strings, 700 (50.0%) of which same-aligned +// 0xXXXf = 376 (2.6%) strings, 188 (50.0%) of which same-aligned +// total = 14664 (100%) strings, 7332 (50.0%) of which same-aligned diff --git a/tests/benchmarks/corelib/tools/qstring/fromutf8.cpp b/tests/benchmarks/corelib/tools/qstring/fromutf8.cpp new file mode 100644 index 0000000..48106dc --- /dev/null +++ b/tests/benchmarks/corelib/tools/qstring/fromutf8.cpp @@ -0,0 +1,28567 @@ +// This is a generated file - DO NOT EDIT + +#include "data.h" + +static const char charData[] __attribute__((aligned(64))) = { + // #0 + "\377\376\375\374\373\372\371\370" + "The KDE Crash Handler" + "\377\376\375" // 32 + + // #1 + "bieker@kde.org" + "\377\376" // 48 + + // #3 + "andresbajotierra@gmail.com" + "\377\376\375\374\373\372" // 80 + + // #5 + "gkiagia@users.sourceforge.net" + "\377\376\375" // 112 + + // #7 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "spehr@kde.org" + "\377\376\375\374\373\372\371\370\367\366\365" // 160+ + + // #54 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 176 + + // #55 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 192 + + // #56 + "\377\376\375\374\373\372\371\370" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 288+ + + // #57 + "prefixes" + "\377\376\375\374\373\372\371\370" // 304 + + // #58 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 416+ + + // #59 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "KDE Resource Restrictions" + "\377\376\375\374\373\372\371" // 480+ + + // #60 + "\377\376\375\374\373\372\371\370" + "oxygen" + "\377\376" // 496 + + // #61 + "\377\376\375\374\373\372\371\370" + "oxygen" + "\377\376" // 512 + + // #62 + "\377\376\375\374\373\372\371\370" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 608+ + + // #63 + "prefixes" + "\377\376\375\374\373\372\371\370" // 624 + + // #64 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 736+ + + // #65 + "KDE Resource Restrictions" + "\377\376\375\374\373\372\371" // 768 + + // #66 + "\377\376\375\374\373\372\371\370" + "Oxygen ( style )" + "\377\376\375\374\373\372\371\370" // 800 + + // #67 + ":1.1920" + "\377\376\375\374\373\372\371\370\367" // 816 + + // #68 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 832 + + // #69 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 848 + + // #70 + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 864 + + // #71 + "\377\376\375\374\373\372\371\370" + "togamma" + "\377" // 880 + + // #72 + "togray" + "\377\376\375\374\373\372\371\370\367\366" // 896 + + // #73 + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 912 + + // #74 + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 928 + + // #75 + "togray" + "\377\376\375\374\373\372\371\370\367\366" // 944 + + // #76 + "\377\376\375\374\373\372\371\370" + "none" + "\377\376\375\374" // 960 + + // #77 + "\377\376\375\374\373\372\371\370" + "none" + "\377\376\375\374" // 976 + + // #78 + "\377\376\375\374\373\372\371\370" + "togray" + "\377\376" // 992 + + // #79 + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 1008 + + // #80 + "none" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 1024 + + // #81 + "togray" + "\377\376\375\374\373\372\371\370\367\366" // 1040 + + // #82 + "\377\376\375\374\373\372\371\370" + "none" + "\377\376\375\374" // 1056 + + // #83 + "togamma" + "\377\376\375\374\373\372\371\370\367" // 1072 + + // #84 + "\377\376\375\374\373\372\371\370" + "togray" + "\377\376" // 1088 + + // #85 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 1104 + + // #86 + "\377\376\375\374\373\372\371\370" + "Oxygen" + "\377\376" // 1120 + + // #87 + "\377\376\375\374\373\372\371\370" + "Oxygen Team" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 1152 + + // #88 + "hicolor" + "\377\376\375\374\373\372\371\370\367" // 1168 + + // #89 + "\377\376\375\374\373\372\371\370" + "folder" + "\377\376" // 1184 + + // #90 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "8x8/emblems,16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,256x256/actions,256x256/apps,256x256/categories,256x256/devices,256x256/mimetypes,256x256/places,256x256/status" + "\377\376\375\374\373\372\371\370\367" // 2288+ + + // #91 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 2304 + + // #92 + "Threshold" + "\377\376\375\374\373\372\371" // 2320 + + // #93 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 2336 + + // #94 + "Threshold" + "\377\376\375\374\373\372\371" // 2352 + + // #95 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 2368 + + // #96 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2400+ + + // #97 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 2416 + + // #98 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2464+ + + // #99 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 2496 + + // #100 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2528 + + // #101 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 2560 + + // #102 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2592 + + // #103 + "Applications" + "\377\376\375\374" // 2608 + + // #104 + "Threshold" + "\377\376\375\374\373\372\371" // 2624 + + // #105 + "Applications" + "\377\376\375\374" // 2640 + + // #106 + "Threshold" + "\377\376\375\374\373\372\371" // 2656 + + // #107 + "Categories" + "\377\376\375\374\373\372" // 2672 + + // #108 + "Threshold" + "\377\376\375\374\373\372\371" // 2688 + + // #109 + "Categories" + "\377\376\375\374\373\372" // 2704 + + // #110 + "Threshold" + "\377\376\375\374\373\372\371" // 2720 + + // #111 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 2736 + + // #112 + "Threshold" + "\377\376\375\374\373\372\371" // 2752 + + // #113 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 2768 + + // #114 + "Threshold" + "\377\376\375\374\373\372\371" // 2784 + + // #115 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 2800 + + // #116 + "Threshold" + "\377\376\375\374\373\372\371" // 2816 + + // #117 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 2832 + + // #118 + "Threshold" + "\377\376\375\374\373\372\371" // 2848 + + // #119 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 2864 + + // #120 + "Threshold" + "\377\376\375\374\373\372\371" // 2880 + + // #121 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 2896 + + // #122 + "Threshold" + "\377\376\375\374\373\372\371" // 2912 + + // #123 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 2944 + + // #124 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 2976 + + // #125 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 3008 + + // #126 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3040 + + // #127 + "MimeTypes" + "\377\376\375\374\373\372\371" // 3056 + + // #128 + "Threshold" + "\377\376\375\374\373\372\371" // 3072 + + // #129 + "MimeTypes" + "\377\376\375\374\373\372\371" // 3088 + + // #130 + "Threshold" + "\377\376\375\374\373\372\371" // 3104 + + // #131 + "MimeTypes" + "\377\376\375\374\373\372\371" // 3120 + + // #132 + "Threshold" + "\377\376\375\374\373\372\371" // 3136 + + // #133 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 3152 + + // #134 + "Threshold" + "\377\376\375\374\373\372\371" // 3168 + + // #135 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 3184 + + // #136 + "Threshold" + "\377\376\375\374\373\372\371" // 3200 + + // #137 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 3216 + + // #138 + "Threshold" + "\377\376\375\374\373\372\371" // 3232 + + // #139 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 3248 + + // #140 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3280 + + // #141 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 3296 + + // #142 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3328 + + // #143 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 3344 + + // #144 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3376 + + // #145 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 3392 + + // #146 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3424 + + // #147 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 3456 + + // #148 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3488 + + // #149 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 3520 + + // #150 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3552 + + // #151 + "Applications" + "\377\376\375\374" // 3568 + + // #152 + "Threshold" + "\377\376\375\374\373\372\371" // 3584 + + // #153 + "Applications" + "\377\376\375\374" // 3600 + + // #154 + "Threshold" + "\377\376\375\374\373\372\371" // 3616 + + // #155 + "Categories" + "\377\376\375\374\373\372" // 3632 + + // #156 + "Threshold" + "\377\376\375\374\373\372\371" // 3648 + + // #157 + "Categories" + "\377\376\375\374\373\372" // 3664 + + // #158 + "Threshold" + "\377\376\375\374\373\372\371" // 3680 + + // #159 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 3696 + + // #160 + "Threshold" + "\377\376\375\374\373\372\371" // 3712 + + // #161 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 3728 + + // #162 + "Threshold" + "\377\376\375\374\373\372\371" // 3744 + + // #163 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 3760 + + // #164 + "Threshold" + "\377\376\375\374\373\372\371" // 3776 + + // #165 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 3792 + + // #166 + "Threshold" + "\377\376\375\374\373\372\371" // 3808 + + // #167 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 3824 + + // #168 + "Threshold" + "\377\376\375\374\373\372\371" // 3840 + + // #169 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 3856 + + // #170 + "Threshold" + "\377\376\375\374\373\372\371" // 3872 + + // #171 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 3904 + + // #172 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 3936 + + // #173 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 3968 + + // #174 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4000 + + // #175 + "MimeTypes" + "\377\376\375\374\373\372\371" // 4016 + + // #176 + "Threshold" + "\377\376\375\374\373\372\371" // 4032 + + // #177 + "MimeTypes" + "\377\376\375\374\373\372\371" // 4048 + + // #178 + "Threshold" + "\377\376\375\374\373\372\371" // 4064 + + // #179 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 4080 + + // #180 + "Threshold" + "\377\376\375\374\373\372\371" // 4096 + + // #181 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 4112 + + // #182 + "Threshold" + "\377\376\375\374\373\372\371" // 4128 + + // #183 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 4144 + + // #184 + "Threshold" + "\377\376\375\374\373\372\371" // 4160 + + // #185 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 4176 + + // #186 + "Threshold" + "\377\376\375\374\373\372\371" // 4192 + + // #187 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 4208 + + // #188 + "Threshold" + "\377\376\375\374\373\372\371" // 4224 + + // #189 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 4240 + + // #190 + "Threshold" + "\377\376\375\374\373\372\371" // 4256 + + // #191 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 4272 + + // #192 + "Threshold" + "\377\376\375\374\373\372\371" // 4288 + + // #193 + "Animations" + "\377\376\375\374\373\372" // 4304 + + // #194 + "Threshold" + "\377\376\375\374\373\372\371" // 4320 + + // #195 + "Animations" + "\377\376\375\374\373\372" // 4336 + + // #196 + "Threshold" + "\377\376\375\374\373\372\371" // 4352 + + // #197 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 4384 + + // #198 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4416 + + // #199 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 4448 + + // #200 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4480 + + // #201 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 4512+ + + // #202 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4544 + + // #203 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 4576+ + + // #204 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4608 + + // #205 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 4624 + + // #206 + "Threshold" + "\377\376\375\374\373\372\371" // 4640 + + // #207 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 4656 + + // #208 + "Threshold" + "\377\376\375\374\373\372\371" // 4672 + + // #209 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 4688 + + // #210 + "Threshold" + "\377\376\375\374\373\372\371" // 4704 + + // #211 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 4720 + + // #212 + "Threshold" + "\377\376\375\374\373\372\371" // 4736 + + // #213 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 4752 + + // #214 + "Threshold" + "\377\376\375\374\373\372\371" // 4768 + + // #215 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 4784 + + // #216 + "Threshold" + "\377\376\375\374\373\372\371" // 4800 + + // #217 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 4832 + + // #218 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4896+ + + // #219 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 4928 + + // #220 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 4960+ + + // #221 + "MimeTypes" + "\377\376\375\374\373\372\371" // 4976 + + // #222 + "Threshold" + "\377\376\375\374\373\372\371" // 4992 + + // #223 + "MimeTypes" + "\377\376\375\374\373\372\371" // 5008 + + // #224 + "Threshold" + "\377\376\375\374\373\372\371" // 5024 + + // #225 + "MimeTypes" + "\377\376\375\374\373\372\371" // 5040 + + // #226 + "Threshold" + "\377\376\375\374\373\372\371" // 5056 + + // #227 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 5072 + + // #228 + "Threshold" + "\377\376\375\374\373\372\371" // 5088 + + // #229 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 5104 + + // #230 + "Threshold" + "\377\376\375\374\373\372\371" // 5120 + + // #231 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 5136 + + // #232 + "Threshold" + "\377\376\375\374\373\372\371" // 5152 + + // #233 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 5168 + + // #234 + "Threshold" + "\377\376\375\374\373\372\371" // 5184 + + // #235 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 5200 + + // #236 + "Threshold" + "\377\376\375\374\373\372\371" // 5216 + + // #237 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 5232 + + // #238 + "Threshold" + "\377\376\375\374\373\372\371" // 5248 + + // #239 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 5264 + + // #240 + "Threshold" + "\377\376\375\374\373\372\371" // 5280 + + // #241 + "Animations" + "\377\376\375\374\373\372" // 5296 + + // #242 + "Threshold" + "\377\376\375\374\373\372\371" // 5312 + + // #243 + "Animations" + "\377\376\375\374\373\372" // 5328 + + // #244 + "Threshold" + "\377\376\375\374\373\372\371" // 5344 + + // #245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 5408+ + + // #246 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5440 + + // #247 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 5472+ + + // #248 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5504 + + // #249 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 5536 + + // #250 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5568 + + // #251 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 5600 + + // #252 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5632 + + // #253 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 5648 + + // #254 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5680 + + // #255 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 5696 + + // #256 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5728 + + // #257 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 5744 + + // #258 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5776 + + // #259 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 5792 + + // #260 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5824 + + // #261 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 5840 + + // #262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5920+ + + // #263 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 5936 + + // #264 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 5984+ + + // #265 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 6016 + + // #266 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6048 + + // #267 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 6080 + + // #268 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6112 + + // #269 + "MimeTypes" + "\377\376\375\374\373\372\371" // 6128 + + // #270 + "Threshold" + "\377\376\375\374\373\372\371" // 6144 + + // #271 + "MimeTypes" + "\377\376\375\374\373\372\371" // 6160 + + // #272 + "Threshold" + "\377\376\375\374\373\372\371" // 6176 + + // #273 + "MimeTypes" + "\377\376\375\374\373\372\371" // 6192 + + // #274 + "Threshold" + "\377\376\375\374\373\372\371" // 6208 + + // #275 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 6224 + + // #276 + "Threshold" + "\377\376\375\374\373\372\371" // 6240 + + // #277 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 6256 + + // #278 + "Threshold" + "\377\376\375\374\373\372\371" // 6272 + + // #279 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 6288 + + // #280 + "Threshold" + "\377\376\375\374\373\372\371" // 6304 + + // #281 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 6320 + + // #282 + "Threshold" + "\377\376\375\374\373\372\371" // 6336 + + // #283 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 6352 + + // #284 + "Threshold" + "\377\376\375\374\373\372\371" // 6368 + + // #285 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 6384 + + // #286 + "Threshold" + "\377\376\375\374\373\372\371" // 6400 + + // #287 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 6416 + + // #288 + "Threshold" + "\377\376\375\374\373\372\371" // 6432 + + // #289 + "Animations" + "\377\376\375\374\373\372" // 6448 + + // #290 + "Threshold" + "\377\376\375\374\373\372\371" // 6464 + + // #291 + "Animations" + "\377\376\375\374\373\372" // 6480 + + // #292 + "Threshold" + "\377\376\375\374\373\372\371" // 6496 + + // #293 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 6528 + + // #294 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6560 + + // #295 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 6592 + + // #296 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6624 + + // #297 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 6656 + + // #298 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6688+ + + // #299 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 6720 + + // #300 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6752+ + + // #301 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 6768 + + // #302 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6800 + + // #303 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 6816 + + // #304 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6848 + + // #305 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 6864 + + // #306 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6896 + + // #307 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 6912 + + // #308 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6944 + + // #309 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 6960 + + // #310 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 6992 + + // #311 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 7008 + + // #312 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7040 + + // #313 + "International" + "\377\376\375" // 7056 + + // #314 + "Threshold" + "\377\376\375\374\373\372\371" // 7072 + + // #315 + "International" + "\377\376\375" // 7088 + + // #316 + "Threshold" + "\377\376\375\374\373\372\371" // 7104 + + // #317 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7136 + + // #318 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7168 + + // #319 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7200 + + // #320 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7232 + + // #321 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7264 + + // #322 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7296 + + // #323 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 7312 + + // #324 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7344 + + // #325 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 7360 + + // #326 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7392 + + // #327 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 7408 + + // #328 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7440 + + // #329 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 7456 + + // #330 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7520+ + + // #331 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 7536 + + // #332 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7584+ + + // #333 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 7600 + + // #334 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7632 + + // #335 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 7648 + + // #336 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7680 + + // #337 + "Animations" + "\377\376\375\374\373\372" // 7696 + + // #338 + "Threshold" + "\377\376\375\374\373\372\371" // 7712 + + // #339 + "Animations" + "\377\376\375\374\373\372" // 7728 + + // #340 + "Threshold" + "\377\376\375\374\373\372\371" // 7744 + + // #341 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 7776 + + // #342 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7808 + + // #343 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 7840 + + // #344 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7872 + + // #345 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 7904+ + + // #346 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 7936 + + // #347 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 7968+ + + // #348 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8000 + + // #349 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 8016 + + // #350 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8096+ + + // #351 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 8112 + + // #352 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8160+ + + // #353 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 8176 + + // #354 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8208 + + // #355 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 8224 + + // #356 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8256 + + // #357 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 8272 + + // #358 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8304 + + // #359 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 8320 + + // #360 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8352 + + // #361 + "International" + "\377\376\375" // 8368 + + // #362 + "Threshold" + "\377\376\375\374\373\372\371" // 8384 + + // #363 + "International" + "\377\376\375" // 8400 + + // #364 + "Threshold" + "\377\376\375\374\373\372\371" // 8416 + + // #365 + "MimeTypes" + "\377\376\375\374\373\372\371" // 8432 + + // #366 + "Threshold" + "\377\376\375\374\373\372\371" // 8448 + + // #367 + "MimeTypes" + "\377\376\375\374\373\372\371" // 8464 + + // #368 + "Threshold" + "\377\376\375\374\373\372\371" // 8480 + + // #369 + "MimeTypes" + "\377\376\375\374\373\372\371" // 8496 + + // #370 + "Threshold" + "\377\376\375\374\373\372\371" // 8512 + + // #371 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 8528 + + // #372 + "Threshold" + "\377\376\375\374\373\372\371" // 8544 + + // #373 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 8560 + + // #374 + "Threshold" + "\377\376\375\374\373\372\371" // 8576 + + // #375 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 8592 + + // #376 + "Threshold" + "\377\376\375\374\373\372\371" // 8608 + + // #377 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 8624 + + // #378 + "Threshold" + "\377\376\375\374\373\372\371" // 8640 + + // #379 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 8656 + + // #380 + "Threshold" + "\377\376\375\374\373\372\371" // 8672 + + // #381 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 8688 + + // #382 + "Threshold" + "\377\376\375\374\373\372\371" // 8704 + + // #383 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 8720 + + // #384 + "Threshold" + "\377\376\375\374\373\372\371" // 8736 + + // #385 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 8768 + + // #386 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8800 + + // #387 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 8832 + + // #388 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8864 + + // #389 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 8896 + + // #390 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8928+ + + // #391 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 8960 + + // #392 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 8992+ + + // #393 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 9008 + + // #394 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9040 + + // #395 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 9056 + + // #396 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9088 + + // #397 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9120+ + + // #398 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9152 + + // #399 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9184+ + + // #400 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9216 + + // #401 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 9232 + + // #402 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9312+ + + // #403 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 9328 + + // #404 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9376+ + + // #405 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 9392 + + // #406 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 9440+ + + // #407 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 9456 + + // #408 + "Threshold" + "\377\376\375\374\373\372\371" // 9472 + + // #409 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 9488 + + // #410 + "Threshold" + "\377\376\375\374\373\372\371" // 9504 + + // #411 + "\377\376\375\374\373\372\371\370" + "16,22,32,48,64,128,256" + "\377\376" // 9536 + + // #412 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 9568+ + + // #413 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 9600 + + // #414 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 9632 + + // #415 + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 9664 + + // #416 + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 9696+ + + // #417 + "\377\376\375\374\373\372\371\370" + "Oxygen" + "\377\376" // 9712 + + // #418 + "\377\376\375\374\373\372\371\370" + "Oxygen Team" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 9744 + + // #419 + "hicolor" + "\377\376\375\374\373\372\371\370\367" // 9760 + + // #420 + "\377\376\375\374\373\372\371\370" + "folder" + "\377\376" // 9776 + + // #421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "8x8/emblems,16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,256x256/actions,256x256/apps,256x256/categories,256x256/devices,256x256/mimetypes,256x256/places,256x256/status" + "\377\376\375\374\373\372\371\370\367" // 10864+ + + // #422 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 10880 + + // #423 + "Threshold" + "\377\376\375\374\373\372\371" // 10896 + + // #424 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 10912 + + // #425 + "Threshold" + "\377\376\375\374\373\372\371" // 10928 + + // #426 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 10944 + + // #427 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 10976+ + + // #428 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 10992 + + // #429 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11040+ + + // #430 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 11072 + + // #431 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11104 + + // #432 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 11136 + + // #433 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11168 + + // #434 + "Applications" + "\377\376\375\374" // 11184 + + // #435 + "Threshold" + "\377\376\375\374\373\372\371" // 11200 + + // #436 + "Applications" + "\377\376\375\374" // 11216 + + // #437 + "Threshold" + "\377\376\375\374\373\372\371" // 11232 + + // #438 + "Categories" + "\377\376\375\374\373\372" // 11248 + + // #439 + "Threshold" + "\377\376\375\374\373\372\371" // 11264 + + // #440 + "Categories" + "\377\376\375\374\373\372" // 11280 + + // #441 + "Threshold" + "\377\376\375\374\373\372\371" // 11296 + + // #442 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 11312 + + // #443 + "Threshold" + "\377\376\375\374\373\372\371" // 11328 + + // #444 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 11344 + + // #445 + "Threshold" + "\377\376\375\374\373\372\371" // 11360 + + // #446 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 11376 + + // #447 + "Threshold" + "\377\376\375\374\373\372\371" // 11392 + + // #448 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 11408 + + // #449 + "Threshold" + "\377\376\375\374\373\372\371" // 11424 + + // #450 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 11440 + + // #451 + "Threshold" + "\377\376\375\374\373\372\371" // 11456 + + // #452 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 11472 + + // #453 + "Threshold" + "\377\376\375\374\373\372\371" // 11488 + + // #454 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 11520 + + // #455 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11552 + + // #456 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 11584 + + // #457 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11616 + + // #458 + "MimeTypes" + "\377\376\375\374\373\372\371" // 11632 + + // #459 + "Threshold" + "\377\376\375\374\373\372\371" // 11648 + + // #460 + "MimeTypes" + "\377\376\375\374\373\372\371" // 11664 + + // #461 + "Threshold" + "\377\376\375\374\373\372\371" // 11680 + + // #462 + "MimeTypes" + "\377\376\375\374\373\372\371" // 11696 + + // #463 + "Threshold" + "\377\376\375\374\373\372\371" // 11712 + + // #464 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 11728 + + // #465 + "Threshold" + "\377\376\375\374\373\372\371" // 11744 + + // #466 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 11760 + + // #467 + "Threshold" + "\377\376\375\374\373\372\371" // 11776 + + // #468 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 11792 + + // #469 + "Threshold" + "\377\376\375\374\373\372\371" // 11808 + + // #470 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 11824 + + // #471 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11856 + + // #472 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 11872 + + // #473 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11904 + + // #474 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 11920 + + // #475 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 11952 + + // #476 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 11968 + + // #477 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12000 + + // #478 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 12032 + + // #479 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12064 + + // #480 + "\377\376\375\374\373\372\371\370" + "Animations" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 12096 + + // #481 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12128 + + // #482 + "Applications" + "\377\376\375\374" // 12144 + + // #483 + "Threshold" + "\377\376\375\374\373\372\371" // 12160 + + // #484 + "Applications" + "\377\376\375\374" // 12176 + + // #485 + "Threshold" + "\377\376\375\374\373\372\371" // 12192 + + // #486 + "Categories" + "\377\376\375\374\373\372" // 12208 + + // #487 + "Threshold" + "\377\376\375\374\373\372\371" // 12224 + + // #488 + "Categories" + "\377\376\375\374\373\372" // 12240 + + // #489 + "Threshold" + "\377\376\375\374\373\372\371" // 12256 + + // #490 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 12272 + + // #491 + "Threshold" + "\377\376\375\374\373\372\371" // 12288 + + // #492 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 12304 + + // #493 + "Threshold" + "\377\376\375\374\373\372\371" // 12320 + + // #494 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 12336 + + // #495 + "Threshold" + "\377\376\375\374\373\372\371" // 12352 + + // #496 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 12368 + + // #497 + "Threshold" + "\377\376\375\374\373\372\371" // 12384 + + // #498 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 12400 + + // #499 + "Threshold" + "\377\376\375\374\373\372\371" // 12416 + + // #500 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 12432 + + // #501 + "Threshold" + "\377\376\375\374\373\372\371" // 12448 + + // #502 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 12480 + + // #503 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12512 + + // #504 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 12544 + + // #505 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12576 + + // #506 + "MimeTypes" + "\377\376\375\374\373\372\371" // 12592 + + // #507 + "Threshold" + "\377\376\375\374\373\372\371" // 12608 + + // #508 + "MimeTypes" + "\377\376\375\374\373\372\371" // 12624 + + // #509 + "Threshold" + "\377\376\375\374\373\372\371" // 12640 + + // #510 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 12656 + + // #511 + "Threshold" + "\377\376\375\374\373\372\371" // 12672 + + // #512 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 12688 + + // #513 + "Threshold" + "\377\376\375\374\373\372\371" // 12704 + + // #514 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 12720 + + // #515 + "Threshold" + "\377\376\375\374\373\372\371" // 12736 + + // #516 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 12752 + + // #517 + "Threshold" + "\377\376\375\374\373\372\371" // 12768 + + // #518 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 12784 + + // #519 + "Threshold" + "\377\376\375\374\373\372\371" // 12800 + + // #520 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 12816 + + // #521 + "Threshold" + "\377\376\375\374\373\372\371" // 12832 + + // #522 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 12848 + + // #523 + "Threshold" + "\377\376\375\374\373\372\371" // 12864 + + // #524 + "Animations" + "\377\376\375\374\373\372" // 12880 + + // #525 + "Threshold" + "\377\376\375\374\373\372\371" // 12896 + + // #526 + "Animations" + "\377\376\375\374\373\372" // 12912 + + // #527 + "Threshold" + "\377\376\375\374\373\372\371" // 12928 + + // #528 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 12960 + + // #529 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 12992 + + // #530 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 13024 + + // #531 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13056 + + // #532 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 13088+ + + // #533 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13120 + + // #534 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 13152+ + + // #535 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13184 + + // #536 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 13200 + + // #537 + "Threshold" + "\377\376\375\374\373\372\371" // 13216 + + // #538 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 13232 + + // #539 + "Threshold" + "\377\376\375\374\373\372\371" // 13248 + + // #540 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 13264 + + // #541 + "Threshold" + "\377\376\375\374\373\372\371" // 13280 + + // #542 + "\377\376\375\374\373\372\371\370" + "Emblems" + "\377" // 13296 + + // #543 + "Threshold" + "\377\376\375\374\373\372\371" // 13312 + + // #544 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 13328 + + // #545 + "Threshold" + "\377\376\375\374\373\372\371" // 13344 + + // #546 + "\377\376\375\374\373\372\371\370" + "Emotes" + "\377\376" // 13360 + + // #547 + "Threshold" + "\377\376\375\374\373\372\371" // 13376 + + // #548 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 13408 + + // #549 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13472+ + + // #550 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 13504 + + // #551 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 13536+ + + // #552 + "MimeTypes" + "\377\376\375\374\373\372\371" // 13552 + + // #553 + "Threshold" + "\377\376\375\374\373\372\371" // 13568 + + // #554 + "MimeTypes" + "\377\376\375\374\373\372\371" // 13584 + + // #555 + "Threshold" + "\377\376\375\374\373\372\371" // 13600 + + // #556 + "MimeTypes" + "\377\376\375\374\373\372\371" // 13616 + + // #557 + "Threshold" + "\377\376\375\374\373\372\371" // 13632 + + // #558 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 13648 + + // #559 + "Threshold" + "\377\376\375\374\373\372\371" // 13664 + + // #560 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 13680 + + // #561 + "Threshold" + "\377\376\375\374\373\372\371" // 13696 + + // #562 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 13712 + + // #563 + "Threshold" + "\377\376\375\374\373\372\371" // 13728 + + // #564 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 13744 + + // #565 + "Threshold" + "\377\376\375\374\373\372\371" // 13760 + + // #566 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 13776 + + // #567 + "Threshold" + "\377\376\375\374\373\372\371" // 13792 + + // #568 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 13808 + + // #569 + "Threshold" + "\377\376\375\374\373\372\371" // 13824 + + // #570 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 13840 + + // #571 + "Threshold" + "\377\376\375\374\373\372\371" // 13856 + + // #572 + "Animations" + "\377\376\375\374\373\372" // 13872 + + // #573 + "Threshold" + "\377\376\375\374\373\372\371" // 13888 + + // #574 + "Animations" + "\377\376\375\374\373\372" // 13904 + + // #575 + "Threshold" + "\377\376\375\374\373\372\371" // 13920 + + // #576 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 13984+ + + // #577 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14016 + + // #578 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 14048+ + + // #579 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14080 + + // #580 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 14112 + + // #581 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14144 + + // #582 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 14176 + + // #583 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14208 + + // #584 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 14224 + + // #585 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14256 + + // #586 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 14272 + + // #587 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14304 + + // #588 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 14320 + + // #589 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14352 + + // #590 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 14368 + + // #591 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14400 + + // #592 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 14416 + + // #593 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14496+ + + // #594 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 14512 + + // #595 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14560+ + + // #596 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 14592 + + // #597 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14624 + + // #598 + "\377\376\375\374\373\372\371\370" + "International" + "\377\376\375\374\373\372\371\370\367\366\365" // 14656 + + // #599 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 14688 + + // #600 + "MimeTypes" + "\377\376\375\374\373\372\371" // 14704 + + // #601 + "Threshold" + "\377\376\375\374\373\372\371" // 14720 + + // #602 + "MimeTypes" + "\377\376\375\374\373\372\371" // 14736 + + // #603 + "Threshold" + "\377\376\375\374\373\372\371" // 14752 + + // #604 + "MimeTypes" + "\377\376\375\374\373\372\371" // 14768 + + // #605 + "Threshold" + "\377\376\375\374\373\372\371" // 14784 + + // #606 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 14800 + + // #607 + "Threshold" + "\377\376\375\374\373\372\371" // 14816 + + // #608 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 14832 + + // #609 + "Threshold" + "\377\376\375\374\373\372\371" // 14848 + + // #610 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 14864 + + // #611 + "Threshold" + "\377\376\375\374\373\372\371" // 14880 + + // #612 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 14896 + + // #613 + "Threshold" + "\377\376\375\374\373\372\371" // 14912 + + // #614 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 14928 + + // #615 + "Threshold" + "\377\376\375\374\373\372\371" // 14944 + + // #616 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 14960 + + // #617 + "Threshold" + "\377\376\375\374\373\372\371" // 14976 + + // #618 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 14992 + + // #619 + "Threshold" + "\377\376\375\374\373\372\371" // 15008 + + // #620 + "Animations" + "\377\376\375\374\373\372" // 15024 + + // #621 + "Threshold" + "\377\376\375\374\373\372\371" // 15040 + + // #622 + "Animations" + "\377\376\375\374\373\372" // 15056 + + // #623 + "Threshold" + "\377\376\375\374\373\372\371" // 15072 + + // #624 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 15104 + + // #625 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15136 + + // #626 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 15168 + + // #627 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15200 + + // #628 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 15232 + + // #629 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15264+ + + // #630 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 15296 + + // #631 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15328+ + + // #632 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 15344 + + // #633 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15376 + + // #634 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 15392 + + // #635 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15424 + + // #636 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 15440 + + // #637 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15472 + + // #638 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 15488 + + // #639 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15520 + + // #640 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 15536 + + // #641 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15568 + + // #642 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 15584 + + // #643 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15616 + + // #644 + "International" + "\377\376\375" // 15632 + + // #645 + "Threshold" + "\377\376\375\374\373\372\371" // 15648 + + // #646 + "International" + "\377\376\375" // 15664 + + // #647 + "Threshold" + "\377\376\375\374\373\372\371" // 15680 + + // #648 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15712 + + // #649 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15744 + + // #650 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15776 + + // #651 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15808 + + // #652 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15840 + + // #653 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15872 + + // #654 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 15888 + + // #655 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15920 + + // #656 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 15936 + + // #657 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 15968 + + // #658 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 15984 + + // #659 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16016 + + // #660 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 16032 + + // #661 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16096+ + + // #662 + "Status" + "\377\376\375\374\373\372\371\370\367\366" // 16112 + + // #663 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16160+ + + // #664 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 16176 + + // #665 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16208 + + // #666 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 16224 + + // #667 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16256 + + // #668 + "Animations" + "\377\376\375\374\373\372" // 16272 + + // #669 + "Threshold" + "\377\376\375\374\373\372\371" // 16288 + + // #670 + "Animations" + "\377\376\375\374\373\372" // 16304 + + // #671 + "Threshold" + "\377\376\375\374\373\372\371" // 16320 + + // #672 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 16352 + + // #673 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16384 + + // #674 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 16416 + + // #675 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16448 + + // #676 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 16480+ + + // #677 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16512 + + // #678 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 16544+ + + // #679 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16576 + + // #680 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 16592 + + // #681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16672+ + + // #682 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 16688 + + // #683 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16736+ + + // #684 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 16752 + + // #685 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16784 + + // #686 + "Emblems" + "\377\376\375\374\373\372\371\370\367" // 16800 + + // #687 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16832 + + // #688 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 16848 + + // #689 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16880 + + // #690 + "Emotes" + "\377\376\375\374\373\372\371\370\367\366" // 16896 + + // #691 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 16928 + + // #692 + "International" + "\377\376\375" // 16944 + + // #693 + "Threshold" + "\377\376\375\374\373\372\371" // 16960 + + // #694 + "International" + "\377\376\375" // 16976 + + // #695 + "Threshold" + "\377\376\375\374\373\372\371" // 16992 + + // #696 + "MimeTypes" + "\377\376\375\374\373\372\371" // 17008 + + // #697 + "Threshold" + "\377\376\375\374\373\372\371" // 17024 + + // #698 + "MimeTypes" + "\377\376\375\374\373\372\371" // 17040 + + // #699 + "Threshold" + "\377\376\375\374\373\372\371" // 17056 + + // #700 + "MimeTypes" + "\377\376\375\374\373\372\371" // 17072 + + // #701 + "Threshold" + "\377\376\375\374\373\372\371" // 17088 + + // #702 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 17104 + + // #703 + "Threshold" + "\377\376\375\374\373\372\371" // 17120 + + // #704 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 17136 + + // #705 + "Threshold" + "\377\376\375\374\373\372\371" // 17152 + + // #706 + "\377\376\375\374\373\372\371\370" + "Places" + "\377\376" // 17168 + + // #707 + "Threshold" + "\377\376\375\374\373\372\371" // 17184 + + // #708 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 17200 + + // #709 + "Threshold" + "\377\376\375\374\373\372\371" // 17216 + + // #710 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 17232 + + // #711 + "Threshold" + "\377\376\375\374\373\372\371" // 17248 + + // #712 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 17264 + + // #713 + "Threshold" + "\377\376\375\374\373\372\371" // 17280 + + // #714 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 17296 + + // #715 + "Threshold" + "\377\376\375\374\373\372\371" // 17312 + + // #716 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 17344 + + // #717 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17376 + + // #718 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 17408 + + // #719 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17440 + + // #720 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 17472 + + // #721 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17504+ + + // #722 + "\377\376\375\374\373\372\371\370" + "Categories" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 17536 + + // #723 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17568+ + + // #724 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 17584 + + // #725 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17616 + + // #726 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 17632 + + // #727 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17664 + + // #728 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17696+ + + // #729 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17728 + + // #730 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17760+ + + // #731 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17792 + + // #732 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 17808 + + // #733 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17888+ + + // #734 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 17904 + + // #735 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 17952+ + + // #736 + "Places" + "\377\376\375\374\373\372\371\370\367\366" // 17968 + + // #737 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 18016+ + + // #738 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 18032 + + // #739 + "Threshold" + "\377\376\375\374\373\372\371" // 18048 + + // #740 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 18064 + + // #741 + "Threshold" + "\377\376\375\374\373\372\371" // 18080 + + // #742 + "\377\376\375\374\373\372\371\370" + "16,22,32,48,64,128,256" + "\377\376" // 18112 + + // #743 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 18144+ + + // #744 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 18176 + + // #745 + "\377\376\375\374\373\372\371\370" + "16,22,32,48" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 18208 + + // #746 + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 18240 + + // #747 + "16,22,32,48,64,128,256" + "\377\376\375\374\373\372\371\370\367\366" // 18272+ + + // #748 + "KDE-HiColor" + "\377\376\375\374\373" // 18288 + + // #749 + "\377\376\375\374\373\372\371\370" + "Fallback icon theme" + "\377\376\375\374\373" // 18320 + + // #750 + "exec" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 18336 + + // #751 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "192x192/apps,128x128/actions,128x128/apps,128x128/devices,128x128/filesystems,128x128/mimetypes,96x96/actions,96x96/apps,96x96/devices,96x96/filesystems,96x96/mimetypes,72x72/apps,64x64/actions,64x64/apps,64x64/devices,64x64/filesystems,64x64/mimetypes,64x64/status,48x48/actions,48x48/apps,48x48/devices,48x48/filesystems,48x48/mimetypes,36x36/apps,32x32/actions,32x32/apps,32x32/devices,32x32/filesystems,32x32/mimetypes,32x32/status,24x24/apps,22x22/actions,22x22/apps,22x22/devices,22x22/filesystems,22x22/mimetypes,22x22/status,16x16/actions,16x16/apps,16x16/devices,16x16/filesystems,16x16/mimetypes,16x16/status,scalable/actions,scalable/apps,scalable/devices,scalable/filesystems,scalable/mimetypes,16x16/stock/chart,16x16/stock/code,16x16/stock/data,16x16/stock/document,16x16/stock/form,16x16/stock/generic,16x16/stock/image,16x16/stock/io,16x16/stock/media,16x16/stock/navigation,16x16/stock/net,16x16/stock/object,16x16/stock/table,16x16/stock/text,24x24/stock/chart,24x24/stock/code,24x24/stock/data,24x24/stock/document,24x24/stock/form,24x24/stock/generic,24x24/stock/image,24x24/stock/io,24x24/stock/media,24x24/stock/navigation,24x24/stock/net,24x24/stock/object,24x24/stock/table,24x24/stock/text,32x32/stock/chart,32x32/stock/code,32x32/stock/data,32x32/stock/document,32x32/stock/form,32x32/stock/generic,32x32/stock/image,32x32/stock/io,32x32/stock/media,32x32/stock/navigation,32x32/stock/net,32x32/stock/object,32x32/stock/table,32x32/stock/text,36x36/stock/chart,36x36/stock/code,36x36/stock/data,36x36/stock/document,36x36/stock/form,36x36/stock/generic,36x36/stock/image,36x36/stock/io,36x36/stock/media,36x36/stock/navigation,36x36/stock/net,36x36/stock/object,36x36/stock/table,36x36/stock/text,48x48/stock/chart,48x48/stock/code,48x48/stock/data,48x48/stock/document,48x48/stock/form,48x48/stock/generic,48x48/stock/image,48x48/stock/io,48x48/stock/media,48x48/stock/navigation,48x48/stock/net,48x48/stock/object,48x48/stock/table,48x48/stock/text" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 20368+ + + // #752 + "Applications" + "\377\376\375\374" // 20384 + + // #753 + "Threshold" + "\377\376\375\374\373\372\371" // 20400 + + // #754 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 20416 + + // #755 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20448 + + // #756 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 20464 + + // #757 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20496 + + // #758 + "Applications" + "\377\376\375\374" // 20512 + + // #759 + "Threshold" + "\377\376\375\374\373\372\371" // 20528 + + // #760 + "Applications" + "\377\376\375\374" // 20544 + + // #761 + "Threshold" + "\377\376\375\374\373\372\371" // 20560 + + // #762 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 20576 + + // #763 + "Threshold" + "\377\376\375\374\373\372\371" // 20592 + + // #764 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 20608 + + // #765 + "Threshold" + "\377\376\375\374\373\372\371" // 20624 + + // #766 + "FileSystems" + "\377\376\375\374\373" // 20640 + + // #767 + "Threshold" + "\377\376\375\374\373\372\371" // 20656 + + // #768 + "MimeTypes" + "\377\376\375\374\373\372\371" // 20672 + + // #769 + "Threshold" + "\377\376\375\374\373\372\371" // 20688 + + // #770 + "MimeTypes" + "\377\376\375\374\373\372\371" // 20704 + + // #771 + "Threshold" + "\377\376\375\374\373\372\371" // 20720 + + // #772 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 20736 + + // #773 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20768 + + // #774 + "Applications" + "\377\376\375\374" // 20784 + + // #775 + "Threshold" + "\377\376\375\374\373\372\371" // 20800 + + // #776 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 20816 + + // #777 + "Threshold" + "\377\376\375\374\373\372\371" // 20832 + + // #778 + "FileSystems" + "\377\376\375\374\373" // 20848 + + // #779 + "Threshold" + "\377\376\375\374\373\372\371" // 20864 + + // #780 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20896 + + // #781 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 20960+ + + // #782 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 20992 + + // #783 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21024 + + // #784 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 21040 + + // #785 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21088+ + + // #786 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 21104 + + // #787 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21152+ + + // #788 + "Applications" + "\377\376\375\374" // 21168 + + // #789 + "Threshold" + "\377\376\375\374\373\372\371" // 21184 + + // #790 + "Applications" + "\377\376\375\374" // 21200 + + // #791 + "Threshold" + "\377\376\375\374\373\372\371" // 21216 + + // #792 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 21232 + + // #793 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21264 + + // #794 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 21280 + + // #795 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21312 + + // #796 + "\377\376\375\374\373\372\371\370" + "FileSystems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 21344 + + // #797 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21376 + + // #798 + "MimeTypes" + "\377\376\375\374\373\372\371" // 21392 + + // #799 + "Threshold" + "\377\376\375\374\373\372\371" // 21408 + + // #800 + "MimeTypes" + "\377\376\375\374\373\372\371" // 21424 + + // #801 + "Threshold" + "\377\376\375\374\373\372\371" // 21440 + + // #802 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 21456 + + // #803 + "Threshold" + "\377\376\375\374\373\372\371" // 21472 + + // #804 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 21488 + + // #805 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21520 + + // #806 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 21536 + + // #807 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21568 + + // #808 + "Applications" + "\377\376\375\374" // 21584 + + // #809 + "Threshold" + "\377\376\375\374\373\372\371" // 21600 + + // #810 + "Applications" + "\377\376\375\374" // 21616 + + // #811 + "Threshold" + "\377\376\375\374\373\372\371" // 21632 + + // #812 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 21648 + + // #813 + "Threshold" + "\377\376\375\374\373\372\371" // 21664 + + // #814 + "\377\376\375\374\373\372\371\370" + "Devices" + "\377" // 21680 + + // #815 + "Threshold" + "\377\376\375\374\373\372\371" // 21696 + + // #816 + "FileSystems" + "\377\376\375\374\373" // 21712 + + // #817 + "Threshold" + "\377\376\375\374\373\372\371" // 21728 + + // #818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21792+ + + // #819 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21824 + + // #820 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21856+ + + // #821 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21888 + + // #822 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 21920 + + // #823 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 21984+ + + // #824 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 22000 + + // #825 + "Threshold" + "\377\376\375\374\373\372\371" // 22016 + + // #826 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 22032 + + // #827 + "Threshold" + "\377\376\375\374\373\372\371" // 22048 + + // #828 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 22080 + + // #829 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22112 + + // #830 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 22144 + + // #831 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22176 + + // #832 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 22208 + + // #833 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22240 + + // #834 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 22256 + + // #835 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22288 + + // #836 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 22304 + + // #837 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22336 + + // #838 + "\377\376\375\374\373\372\371\370" + "FileSystems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 22368 + + // #839 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22432+ + + // #840 + "MimeTypes" + "\377\376\375\374\373\372\371" // 22448 + + // #841 + "Threshold" + "\377\376\375\374\373\372\371" // 22464 + + // #842 + "MimeTypes" + "\377\376\375\374\373\372\371" // 22480 + + // #843 + "Threshold" + "\377\376\375\374\373\372\371" // 22496 + + // #844 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 22512 + + // #845 + "Threshold" + "\377\376\375\374\373\372\371" // 22528 + + // #846 + "Applications" + "\377\376\375\374" // 22544 + + // #847 + "Threshold" + "\377\376\375\374\373\372\371" // 22560 + + // #848 + "Applications" + "\377\376\375\374" // 22576 + + // #849 + "Threshold" + "\377\376\375\374\373\372\371" // 22592 + + // #850 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 22608 + + // #851 + "Threshold" + "\377\376\375\374\373\372\371" // 22624 + + // #852 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 22640 + + // #853 + "Threshold" + "\377\376\375\374\373\372\371" // 22656 + + // #854 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 22688+ + + // #855 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22720 + + // #856 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 22752+ + + // #857 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22784 + + // #858 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 22800 + + // #859 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22880+ + + // #860 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 22896 + + // #861 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 22944+ + + // #862 + "\377\376\375\374\373\372\371\370" + "FileSystems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 22976 + + // #863 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23008 + + // #864 + "MimeTypes" + "\377\376\375\374\373\372\371" // 23024 + + // #865 + "Threshold" + "\377\376\375\374\373\372\371" // 23040 + + // #866 + "MimeTypes" + "\377\376\375\374\373\372\371" // 23056 + + // #867 + "Threshold" + "\377\376\375\374\373\372\371" // 23072 + + // #868 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 23088 + + // #869 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23120 + + // #870 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 23136 + + // #871 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23168 + + // #872 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 23184 + + // #873 + "Threshold" + "\377\376\375\374\373\372\371" // 23200 + + // #874 + "\377\376\375\374\373\372\371\370" + "Actions" + "\377" // 23216 + + // #875 + "Threshold" + "\377\376\375\374\373\372\371" // 23232 + + // #876 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 23264 + + // #877 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23328+ + + // #878 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 23360 + + // #879 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23392+ + + // #880 + "\377\376\375\374\373\372\371\370" + "Applications" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 23424 + + // #881 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23456+ + + // #882 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 23472 + + // #883 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23520+ + + // #884 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 23536 + + // #885 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23584+ + + // #886 + "\377\376\375\374\373\372\371\370" + "FileSystems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 23616 + + // #887 + "\377\376\375\374\373\372\371\370" + "Threshold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 23648 + + // #888 + "MimeTypes" + "\377\376\375\374\373\372\371" // 23664 + + // #889 + "Threshold" + "\377\376\375\374\373\372\371" // 23680 + + // #890 + "MimeTypes" + "\377\376\375\374\373\372\371" // 23696 + + // #891 + "Threshold" + "\377\376\375\374\373\372\371" // 23712 + + // #892 + "\377\376\375\374\373\372\371\370" + "Status" + "\377\376" // 23728 + + // #893 + "Threshold" + "\377\376\375\374\373\372\371" // 23744 + + // #894 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 23760 + + // #895 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 23792 + + // #896 + "Actions" + "\377\376\375\374\373\372\371\370\367" // 23808 + + // #897 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 23840 + + // #898 + "Applications" + "\377\376\375\374" // 23856 + + // #899 + "Scalable" + "\377\376\375\374\373\372\371\370" // 23872 + + // #900 + "Applications" + "\377\376\375\374" // 23888 + + // #901 + "Scalable" + "\377\376\375\374\373\372\371\370" // 23904 + + // #902 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 23920 + + // #903 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 23952 + + // #904 + "Devices" + "\377\376\375\374\373\372\371\370\367" // 23968 + + // #905 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 24000 + + // #906 + "\377\376\375\374\373\372\371\370" + "FileSystems" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 24032 + + // #907 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 24064 + + // #908 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 24096+ + + // #909 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 24128 + + // #910 + "\377\376\375\374\373\372\371\370" + "MimeTypes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 24160+ + + // #911 + "\377\376\375\374\373\372\371\370" + "Scalable" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 24192 + + // #912 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24208 + + // #913 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24224 + + // #914 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24240 + + // #915 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24256 + + // #916 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24272 + + // #917 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24288 + + // #918 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24304 + + // #919 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24320 + + // #920 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24336 + + // #921 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24352 + + // #922 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24368 + + // #923 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24384 + + // #924 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24400 + + // #925 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24416 + + // #926 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24432 + + // #927 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24448 + + // #928 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24464 + + // #929 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24480 + + // #930 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24496 + + // #931 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24512 + + // #932 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24528 + + // #933 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24544 + + // #934 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24560 + + // #935 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24576 + + // #936 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24592 + + // #937 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24608 + + // #938 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24624 + + // #939 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24640 + + // #940 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24656 + + // #941 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24672 + + // #942 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24688 + + // #943 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24704 + + // #944 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24720 + + // #945 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24736 + + // #946 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24752 + + // #947 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24768 + + // #948 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24784 + + // #949 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24800 + + // #950 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24816 + + // #951 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24832 + + // #952 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24848 + + // #953 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24864 + + // #954 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24880 + + // #955 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24896 + + // #956 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24912 + + // #957 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24928 + + // #958 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24944 + + // #959 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24960 + + // #960 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 24976 + + // #961 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 24992 + + // #962 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25008 + + // #963 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25024 + + // #964 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25040 + + // #965 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25056 + + // #966 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 25072 + + // #967 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25088 + + // #968 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25104 + + // #969 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 25120 + + // #970 + "Stock" + "\377\376\375\374\373\372\371\370\367\366\365" // 25136 + + // #971 + "\377\376\375\374\373\372\371\370" + "Stock" + "\377\376\375" // 25152 + + // #972 + "\377\376\375\374\373\372\371\370" + "16,32,48,64" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 25184 + + // #973 + "16,22,32" + "\377\376\375\374\373\372\371\370" // 25200 + + // #974 + "16,22,32" + "\377\376\375\374\373\372\371\370" // 25216 + + // #975 + "16" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 25232 + + // #976 + "16,22,32,48" + "\377\376\375\374\373" // 25248 + + // #977 + "\377\376\375\374\373\372\371\370" + "org.freedesktop.DBus" + "\377\376\375\374" // 25280 + + // #978 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "u" + "\377\376" // 25296 + + // #979 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 25312 + + // #980 + "\377\376\375\374\373\372\371\370" + "no" + "\377\376\375\374\373\372" // 25328 + + // #981 + "\377\376\375\374\373\372\371\370" + "pt_BR" + "\377\376\375" // 25344 + + // #982 + "\377\376\375\374" + "== %1 ==" + "\377\376\375\374" // 25360 + + // #983 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "<h2>%1</h2>" + "\377\376\375\374\373\372\371\370" // 25440+ + + // #984 + "\377" + "~ %1 ~" + "\377\376\375\374\373\372\371\370\367" // 25456 + + // #985 + "\377\376\375\374\373\372\371\370" + "<h3>%1</h3>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 25488 + + // #986 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 25504 + + // #987 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "<p>%1</p>" + "\377\376\375\374\373\372\371\370\367" // 25536 + + // #988 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 25552 + + // #989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301" + "<ul>%1</ul>" + "\377\376\375\374\373\372" // 25632+ + + // #990 + "\377\376\375\374\373\372\371\370\367\366" + " * %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 25664 + + // #991 + "\377" + "<li>%1</li>" + "\377\376\375\374" // 25680 + + // #992 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Nota: %1" + "\377\376\375\374\373\372\371\370\367\366" // 25712 + + // #993 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351" + "<i>Nota</i>: %1" + "\377\376\375\374\373\372\371\370\367\366" // 25760+ + + // #994 + "\377\376\375\374\373\372\371\370\367" + "%1: %2" + "\377" // 25776 + + // #995 + "<i>%1</i>: %2" + "\377\376\375" // 25792 + + // #996 + "\377\376\375" + "AVISO: %1" + "\377\376\375\374" // 25808 + + // #997 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303" + "<b>Aviso</b>: %1" + "\377\376\375" // 25888+ + + // #998 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "%1: %2" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 25920 + + // #999 + "\377\376\375\374\373" + "<b>%1</b>: %2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 25952 + + // #1000 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 25968 + + // #1001 + "\377\376\375\374\373\372\371\370\367\366\365" + "<a href=\42""%1\42"">%1</a>" + "\377\376" // 26000 + + // #1002 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "%2 (%1)" + "\377\376\375\374\373\372\371\370\367\366\365" // 26032 + + // #1003 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352" + "<a href=\42""%1\42"">%2</a>" + "\377\376\375\374\373\372\371" // 26080+ + + // #1004 + "\342""\200""\230""%1\342""\200""\231""" + "\377\376\375\374\373\372\371\370" // 26096 + + // #1005 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347" + "<tt>%1</tt>" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 26144+ + + // #1006 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%1" + "\377\376" // 26160 + + // #1007 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 26208+ + + // #1008 + "\377\376\375\374\373\372\371\370\367" + "%1" + "\377\376\375\374\373" // 26224 + + // #1009 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "<tt>%1</tt>" + "\377\376\375\374\373\372\371\370\367" // 26256 + + // #1010 + "\377\376" + "%1(%2)" + "\377\376\375\374\373\372\371\370" // 26272 + + // #1011 + "\377\376\375\374\373\372\371\370\367" + "<tt>%1(%2)</tt>" + "\377\376\375\374\373\372\371\370" // 26304 + + // #1012 + "\377\376" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375\374\373\372" // 26320 + + // #1013 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 26400+ + + // #1014 + "\377\376\375\374\373" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375" // 26416 + + // #1015 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "<tt>%1</tt>" + "\377\376\375\374\373\372\371" // 26448 + + // #1016 + "\377\376\375\374" + "\12""%1\12""" + "\377\376\375\374\373\372\371\370" // 26464 + + // #1017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "<pre>%1</pre>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 26528+ + + // #1018 + "\377\376\375\374" + "%1" + "\377\376\375\374\373\372\371\370\367\366" // 26544 + + // #1019 + "\377\376\375\374\373\372\371" + "<b>%1</b>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 26576 + + // #1020 + "\377\376\375\374\373\372" + "|%1|" + "\377\376\375\374\373\372" // 26592 + + // #1021 + "\377\376\375\374\373\372\371\370\367\366\365" + "<i>%1</i>" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 26624 + + // #1022 + "*%1*" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 26640 + + // #1023 + "\377\376\375\374\373" + "<i>%1</i>" + "\377\376" // 26656 + + // #1024 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "**%1**" + "\377\376\375\374\373\372\371\370\367\366\365" // 26720+ + + // #1025 + "\377\376\375\374\373\372" + "<b>%1</b>" + "\377" // 26736 + + // #1026 + "\377\376\375\374\373" + "<%1>" + "\377" // 26752 + + // #1027 + "<<i>%1</i>>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 26784 + + // #1028 + "\377" + "<%1>" + "\377\376\375\374\373" // 26800 + + // #1029 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "<<a href=\42""mailto:%1\42"">%1</a>>" + "\377\376" // 26848 + + // #1030 + "\377\376\375\374\373\372\371\370" + "%1 <%2>" + "\377\376\375\374\373\372\371\370\367\366\365" // 26880 + + // #1031 + "\377\376\375\374\373\372" + "<a href=\42""mailto:%2\42"">%1</a>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 26928+ + + // #1032 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "$%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 26960 + + // #1033 + "\377\376\375" + "<tt>$%1</tt>" + "\377" // 26976 + + // #1034 + "\377\376\375\374\373\372\371\370\367\366" + "/%1/" + "\377\376" // 26992 + + // #1035 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "<i>%1</i>" + "\377\376\375\374\373\372\371\370" // 27024 + + // #1036 + "\377\376\375\374\373" + "%1\12""" + "\377\376\375\374\373\372\371\370" // 27040 + + // #1037 + "\377" + "%1<br/>" + "\377\376\375\374\373\372\371\370" // 27056 + + // #1038 + "\377\376" + "+" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27072 + + // #1039 + "\377\376\375\374" + "+" + "\377\376\375\374\373\372\371\370\367\366\365" // 27088 + + // #1040 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "\342""\206""\222""" + "\377" // 27104 + + // #1041 + "\342""\206""\222""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27120 + + // #1042 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "Alt" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 27168+ + + // #1043 + "\377\376\375" + "AltGr" + "\377\376\375\374\373\372\371\370" // 27184 + + // #1044 + "\377\376\375\374\373\372\371\370\367" + "Backspace" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 27216 + + // #1045 + "\377\376\375" + "CapsLock" + "\377\376\375\374\373" // 27232 + + // #1046 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Control" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27264 + + // #1047 + "\377\376\375\374" + "Ctrl" + "\377\376\375\374\373\372\371\370" // 27280 + + // #1048 + "\377\376\375\374\373\372\371\370\367" + "Del" + "\377\376\375\374" // 27296 + + // #1049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Delete" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27328 + + // #1050 + "\377\376\375\374" + "Page Down" + "\377\376\375" // 27344 + + // #1051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "End" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 27424+ + + // #1052 + "\377\376" + "Enter" + "\377\376\375\374\373\372\371\370\367" // 27440 + + // #1053 + "\377\376\375\374\373\372\371\370" + "Esc" + "\377\376\375\374\373" // 27456 + + // #1054 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Escape" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 27488 + + // #1055 + "\377\376\375\374\373\372\371" + "Home" + "\377\376\375\374\373" // 27504 + + // #1056 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Hyper" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 27536 + + // #1057 + "\377\376" + "Ins" + "\377\376\375\374\373\372\371\370\367\366\365" // 27552 + + // #1058 + "\377\376\375\374\373\372" + "Insert" + "\377\376\375\374" // 27568 + + // #1059 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Esquerda" + "\377\376\375\374\373\372\371\370\367\366\365" // 27600 + + // #1060 + "\377\376\375\374\373\372" + "Menu" + "\377\376\375\374\373\372" // 27616 + + // #1061 + "\377\376\375\374\373\372\371\370\367\366\365" + "Meta" + "\377" // 27632 + + // #1062 + "NumLock" + "\377\376\375\374\373\372\371\370\367" // 27648 + + // #1063 + "\377\376\375\374\373\372\371\370" + "PageDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 27680 + + // #1064 + "\377" + "PageUp" + "\377\376\375\374\373\372\371\370\367" // 27696 + + // #1065 + "\377\376\375\374" + "Page Down" + "\377\376\375" // 27712 + + // #1066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Page Up" + "\377\376\375\374\373\372\371\370\367\366\365" // 27744 + + // #1067 + "\377\376\375\374\373\372\371\370" + "Pause/Break" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 27776 + + // #1068 + "\377\376\375\374\373\372" + "Print Screen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 27808+ + + // #1069 + "\377\376\375" + "PrtScr" + "\377\376\375\374\373\372\371" // 27824 + + // #1070 + "\377\376\375\374\373\372\371\370\367\366" + "Return" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 27856 + + // #1071 + "\377" + "Direita" + "\377\376\375\374\373\372\371\370" // 27872 + + // #1072 + "\377\376\375\374\373\372\371\370\367" + "Scroll Lock" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 27904 + + // #1073 + "\377\376\375\374\373" + "Shift" + "\377\376\375\374\373\372" // 27920 + + // #1074 + "\377\376\375\374\373\372\371\370\367\366\365" + "Espa\303""\247""o" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 27952 + + // #1075 + "\377\376\375" + "Super" + "\377\376\375\374\373\372\371\370" // 27968 + + // #1076 + "\377\376\375\374\373\372\371\370\367" + "SysReq" + "\377" // 27984 + + // #1077 + "Tab" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 28000 + + // #1078 + "\377\376\375\374" + "Acima" + "\377\376\375\374\373\372\371" // 28016 + + // #1079 + "\377\376\375\374\373\372\371\370\367\366" + "Win" + "\377\376\375" // 28032 + + // #1080 + "\377\376\375" + "F%1" + "\377\376\375\374\373\372\371\370\367\366" // 28048 + + // #1081 + "\377\376" + "== %1 ==" + "\377\376\375\374\373\372" // 28064 + + // #1082 + "\377\376\375\374\373\372\371\370" + "<h2>%1</h2>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 28096 + + // #1083 + "~ %1 ~" + "\377\376\375\374\373\372\371\370\367\366" // 28112 + + // #1084 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311" + "<h3>%1</h3>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 28192+ + + // #1085 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28208 + + // #1086 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "<p>%1</p>" + "\377\376\375\374\373\372\371\370\367" // 28240 + + // #1087 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28256 + + // #1088 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321" + "<ul>%1</ul>" + "\377\376\375\374\373\372" // 28320+ + + // #1089 + "\377\376\375\374\373\372" + " * %1" + "\377\376\375\374" // 28336 + + // #1090 + "\377\376\375\374\373\372\371\370\367" + "<li>%1</li>" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 28368 + + // #1091 + "Note: %1" + "\377\376\375\374\373\372\371\370" // 28384 + + // #1092 + "\377\376\375\374\373" + "<i>Note</i>: %1" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 28416 + + // #1093 + "%1: %2" + "\377\376\375\374\373\372\371\370\367\366" // 28432 + + // #1094 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311" + "<i>%1</i>: %2" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 28512+ + + // #1095 + "\377\376\375\374\373" + "WARNING: %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 28544 + + // #1096 + "<b>Warning</b>: %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 28576 + + // #1097 + "%1: %2" + "\377\376\375\374\373\372\371\370\367\366" // 28592 + + // #1098 + "\377" + "<b>%1</b>: %2" + "\377\376" // 28608 + + // #1099 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28624 + + // #1100 + "\377\376\375\374\373\372\371\370\367\366\365" + "<a href=\42""%1\42"">%1</a>" + "\377\376" // 28656 + + // #1101 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "%2 (%1)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 28704+ + + // #1102 + "\377\376" + "<a href=\42""%1\42"">%2</a>" + "\377\376\375\374\373\372\371\370\367\366\365" // 28736 + + // #1103 + "\377\376\375\374\373\372" + "\342""\200""\230""%1\342""\200""\231""" + "\377\376" // 28752 + + // #1104 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "<tt>%1</tt>" + "\377\376\375\374\373\372" // 28784 + + // #1105 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28800 + + // #1106 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28816 + + // #1107 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 28832 + + // #1108 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "<tt>%1</tt>" + "\377\376\375\374\373\372" // 28864 + + // #1109 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "%1(%2)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 28896 + + // #1110 + "\377\376\375" + "<tt>%1(%2)</tt>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 28928 + + // #1111 + "\377\376\375" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375\374\373" // 28944 + + // #1112 + "\377\376\375" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375\374\373" // 28960 + + // #1113 + "\377\376\375" + "\342""\200""\234""%1\342""\200""\235""" + "\377\376\375\374\373" // 28976 + + // #1114 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "<tt>%1</tt>" + "\377\376\375\374\373\372" // 29008 + + // #1115 + "\377\376\375\374" + "\12""%1\12""" + "\377\376\375\374\373\372\371\370" // 29024 + + // #1116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "<pre>%1</pre>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 29088+ + + // #1117 + "\377\376\375\374\373\372\371\370\367\366" + "%1" + "\377\376\375\374" // 29104 + + // #1118 + "\377\376\375\374\373" + "<b>%1</b>" + "\377\376" // 29120 + + // #1119 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "|%1|" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 29152 + + // #1120 + "\377\376\375\374\373" + "<i>%1</i>" + "\377\376" // 29168 + + // #1121 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "*%1*" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 29200 + + // #1122 + "\377\376\375\374\373" + "<i>%1</i>" + "\377\376" // 29216 + + // #1123 + "\377\376\375" + "**%1**" + "\377\376\375\374\373\372\371" // 29232 + + // #1124 + "\377\376\375\374\373" + "<b>%1</b>" + "\377\376" // 29248 + + // #1125 + "\377\376\375\374\373\372\371" + "<%1>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 29280+ + + // #1126 + "\377\376\375\374\373" + "<<i>%1</i>>" + "\377\376\375\374\373\372\371\370\367\366" // 29312 + + // #1127 + "\377\376\375\374\373\372\371" + "<%1>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 29344+ + + // #1128 + "\377\376\375\374\373\372\371\370" + "<<a href=\42""mailto:%1\42"">%1</a>>" + "\377\376\375\374\373\372" // 29392 + + // #1129 + "\377\376" + "%1 <%2>" + "\377" // 29408 + + // #1130 + "<a href=\42""mailto:%2\42"">%1</a>" + "\377\376\375\374\373\372" // 29440 + + // #1131 + "\377\376\375\374\373\372\371\370\367\366\365" + "$%1" + "\377\376" // 29456 + + // #1132 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "<tt>$%1</tt>" + "\377\376\375\374\373\372\371\370" // 29488 + + // #1133 + "\377\376\375\374\373" + "/%1/" + "\377\376\375\374\373\372\371" // 29504 + + // #1134 + "\377\376\375\374\373" + "<i>%1</i>" + "\377\376" // 29520 + + // #1135 + "\377\376\375\374\373" + "%1\12""" + "\377\376\375\374\373\372\371\370" // 29536 + + // #1136 + "\377" + "%1<br/>" + "\377\376\375\374\373\372\371\370" // 29552 + + // #1137 + "\377\376\375\374\373\372\371\370" + "+" + "\377\376\375\374\373\372\371" // 29568 + + // #1138 + "\377\376\375\374\373\372\371\370" + "+" + "\377\376\375\374\373\372\371" // 29584 + + // #1139 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "\342""\206""\222""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 29616 + + // #1140 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "\342""\206""\222""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 29648 + + // #1141 + "\377\376" + "Alt" + "\377\376\375\374\373\372\371\370\367\366\365" // 29664 + + // #1142 + "\377\376\375\374\373\372\371\370" + "AltGr" + "\377\376\375" // 29680 + + // #1143 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Backspace" + "\377\376\375\374\373\372\371\370\367" // 29712 + + // #1144 + "\377\376\375\374\373\372\371\370" + "CapsLock" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 29744 + + // #1145 + "\377" + "Control" + "\377\376\375\374\373\372\371\370" // 29760 + + // #1146 + "\377\376\375\374\373\372\371\370\367" + "Ctrl" + "\377\376\375" // 29776 + + // #1147 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Del" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 29808 + + // #1148 + "\377\376" + "Delete" + "\377\376\375\374\373\372\371\370" // 29824 + + // #1149 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Down" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 29856+ + + // #1150 + "\377\376\375\374\373\372\371\370\367" + "End" + "\377\376\375\374" // 29872 + + // #1151 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Enter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 29920+ + + // #1152 + "\377\376\375" + "Esc" + "\377\376\375\374\373\372\371\370\367\366" // 29936 + + // #1153 + "\377\376\375\374\373\372\371" + "Escape" + "\377\376\375" // 29952 + + // #1154 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Home" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 29984 + + // #1155 + "\377\376\375" + "Hyper" + "\377\376\375\374\373\372\371\370" // 30000 + + // #1156 + "\377\376\375\374\373\372\371\370\367" + "Ins" + "\377\376\375\374" // 30016 + + // #1157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Insert" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30048 + + // #1158 + "\377\376\375\374" + "Left" + "\377\376\375\374\373\372\371\370" // 30064 + + // #1159 + "\377\376\375\374\373\372\371\370\367" + "Menu" + "\377\376\375" // 30080 + + // #1160 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Meta" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 30112 + + // #1161 + "\377\376\375" + "NumLock" + "\377\376\375\374\373\372" // 30128 + + // #1162 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "PageDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30176+ + + // #1163 + "\377\376\375\374" + "PageUp" + "\377\376\375\374\373\372" // 30192 + + // #1164 + "\377\376\375\374\373\372\371\370\367\366\365" + "PgDown" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30224 + + // #1165 + "\377\376" + "PgUp" + "\377\376\375\374\373\372\371\370\367\366" // 30240 + + // #1166 + "\377\376\375\374\373\372\371" + "PauseBreak" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30272 + + // #1167 + "\377\376" + "PrintScreen" + "\377\376\375" // 30288 + + // #1168 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "PrtScr" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 30320 + + // #1169 + "\377\376\375\374\373" + "Return" + "\377\376\375\374\373" // 30336 + + // #1170 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Right" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30368+ + + // #1171 + "\377\376" + "ScrollLock" + "\377\376\375\374" // 30384 + + // #1172 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "Shift" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 30416 + + // #1173 + "\377\376\375" + "Space" + "\377\376\375\374\373\372\371\370" // 30432 + + // #1174 + "\377\376\375\374\373\372\371\370\367" + "Super" + "\377\376" // 30448 + + // #1175 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "SysReq" + "\377\376\375\374\373\372\371\370\367\366\365" // 30480 + + // #1176 + "\377\376\375\374\373\372" + "Tab" + "\377\376\375\374\373\372\371" // 30496 + + // #1177 + "\377\376\375\374\373\372\371\370" + "Up" + "\377\376\375\374\373\372" // 30512 + + // #1178 + "\377\376\375\374\373\372\371\370\367\366" + "Win" + "\377\376\375" // 30528 + + // #1179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "F%1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 30560 + + // #1180 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 30576 + + // #1181 + "\377\376\375\374\373\372\371\370" + "," + "\377\376\375\374\373\372\371" // 30592 + + // #1182 + "\377\376\375\374\373\372\371\370\367\366" + "," + "\377\376\375\374\373" // 30608 + + // #1183 + "\377\376\375\374\373\372\371\370" + "$0\302""\240""$0" + "\377\376" // 30624 + + // #1184 + "$0.$0" + "\377\376\375\374\373\372\371\370\367\366\365" // 30640 + + // #1187 + "\377\376\375" + "-" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 30656 + + // #1188 + "\342""\210""\222""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30672 + + // #1189 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "USD" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 30704 + + // #1190 + "NOK" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30720 + + // #1191 + "\377\376\375\374\373\372\371\370" + "NOK" + "\377\376\375\374\373" // 30736 + + // #1192 + "\377\376\375\374\373\372\371\370" + "578" + "\377\376\375\374\373" // 30752 + + // #1193 + "Norwegian krone" + "\377" // 30768 + + // #1194 + "\377\376\375\374\373\372\371\370" + "Norwegian Krone" + "\377\376\375\374\373\372\371\370\367" // 30800 + + // #1195 + "kr,NOK" + "\377\376\375\374\373\372\371\370\367\366" // 30816 + + // #1196 + "\377\376\375\374\373\372\371\370" + "kr" + "\377\376\375\374\373\372" // 30832 + + // #1197 + "\377\376\375\374\373\372\371\370" + "DKK" + "\377\376\375\374\373" // 30848 + + // #1198 + "\377\376\375\374\373\372\371\370" + "krone" + "\377\376\375" // 30864 + + // #1199 + "kroner" + "\377\376\375\374\373\372\371\370\367\366" // 30880 + + // #1201 + "\303""\270""re" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 30896 + + // #1202 + "\377\376\375\374\373\372\371\370" + "\303""\270""re" + "\377\376\375\374" // 30912 + + // #1203 + "NO,BV" + "\377\376\375\374\373\372\371\370\367\366\365" // 30928 + + // #1204 + "NOK" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30944 + + // #1205 + "578" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 30960 + + // #1206 + "Norwegian krone" + "\377" // 30976 + + // #1207 + "\377\376\375\374\373\372\371\370" + "Coroa norueguesa" + "\377\376\375\374\373\372\371\370" // 31008+ + + // #1208 + "\377\376\375\374\373\372\371\370" + "kr,NOK" + "\377\376" // 31024 + + // #1209 + "\377\376\375\374\373\372\371\370" + "kr" + "\377\376\375\374\373\372" // 31040 + + // #1210 + "\377\376\375\374\373\372\371\370" + "DKK" + "\377\376\375\374\373" // 31056 + + // #1211 + "krone" + "\377\376\375\374\373\372\371\370\367\366\365" // 31072 + + // #1212 + "\377\376\375\374\373\372\371\370" + "kroner" + "\377\376" // 31088 + + // #1214 + "\377\376\375\374\373\372\371\370" + "\303""\270""re" + "\377\376\375\374" // 31104 + + // #1215 + "\303""\270""re" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 31120 + + // #1216 + "\377\376\375\374\373\372\371\370" + "NO,BV" + "\377\376\375" // 31136 + + // #1217 + "\377\376\375\374\373\372\371\370" + "NOK" + "\377\376\375\374\373" // 31152 + + // #1218 + "\377\376\375\374\373\372\371\370\367\366" + "." + "\377\376\375\374\373" // 31168 + + // #1219 + "," + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31184 + + // #1220 + "\377\376\375\374\373\372\371\370\367\366" + "," + "\377\376\375\374\373" // 31200 + + // #1221 + "\377\376\375\374\373\372\371\370" + "$0\302""\240""$0" + "\377\376" // 31216 + + // #1222 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "%H:%M:%S" + "\377\376\375\374\373\372\371\370\367" // 31264+ + + // #1223 + "%H.%M.%S" + "\377\376\375\374\373\372\371\370" // 31280 + + // #1224 + "%H:%M:%S" + "\377\376\375\374\373\372\371\370" // 31296 + + // #1225 + "\377\376\375" + "%A %d %B %Y" + "\377\376" // 31312 + + // #1226 + "%A %e. %B %Y" + "\377\376\375\374" // 31328 + + // #1227 + "\377\376\375\374\373\372\371\370" + "%A, %e de %B de %Y" + "\377\376\375\374\373\372" // 31360 + + // #1228 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "%Y-%m-%d" + "\377\376\375\374\373\372\371\370\367" // 31392 + + // #1229 + "\377\376\375\374\373\372\371\370" + "%d.%m.%Y" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 31424 + + // #1230 + "%e/%n/%Y" + "\377\376\375\374\373\372\371\370" // 31440 + + // #1231 + "\377\376\375\374\373\372\371\370" + "gregorian" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 31472 + + // #1232 + "\377\376\375\374\373\372\371\370" + "The KDE Crash Handler" + "\377\376\375" // 31504 + + // #1234 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316" + "O manipulador de exce\303""\247""\303""\265""es do KDE" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 31600+ + + // #1235 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "QT_LAYOUT_DIRECTION" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 31648 + + // #1236 + "LTR" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 31664 + + // #1237 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 31680 + + // #1238 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 31696 + + // #1239 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 31840+ + + // #1240 + "\377\376\375\374\373\372\371\370" + "prefixes" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 31872 + + // #1241 + "\377\376\375\374\373\372\371\370" + "/var/lib/mandriva/kde4-profiles/common,/var/lib/mandriva/kde4-profiles/powerpack" + "\377\376\375\374\373\372\371\370" // 31968+ + + // #1242 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "KDE Resource Restrictions" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 32048+ + + // #1243 + "oxygen" + "\377\376\375\374\373\372\371\370\367\366" // 32064 + + // #1244 + "Sans Serif,10,-1,5,50,0,0,0,0,0" + "\377" // 32096+ + + // #1245 + "Sans Serif,10,-1,5,50,0,0,0,0,0" + "\377" // 32128 + + // #1246 + "Sans Serif,8,-1,5,50,0,0,0,0,0" + "\377\376" // 32160 + + // #1248 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 32176 + + // #1249 + "\377\376\375\374\373\372\371\370" + "drkonqi" + "\377" // 32192 + + // #1250 + "InfoOutput" + "\377\376\375\374\373\372" // 32208 + + // #1251 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32224 + + // #1252 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32240 + + // #1253 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32256 + + // #1254 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32272 + + // #1255 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32288 + + // #1256 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32304 + + // #1257 + "dbx" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 32320 + + // #1258 + "dbx" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 32336 + + // #1259 + "\377\376\375\374\373\372\371\370" + "gdb" + "\377\376\375\374\373" // 32352 + + // #1260 + "\377\376\375\374\373\372\371\370" + "gdb" + "\377\376\375\374\373" // 32368 + + // #1261 + "\377\376\375\374\373\372\371\370" + "gdb" + "\377\376\375\374\373" // 32384 + + // #1262 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32400 + + // #1263 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32416 + + // #1264 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32432 + + // #1265 + "\377\376\375\374\373\372\371\370" + "KCrash" + "\377\376" // 32448 + + // #1266 + "\377\376\375\374\373\372\371\370" + "gdb" + "\377\376\375\374\373" // 32464 + + // #1267 + "\377\376\375\374\373\372\371\370" + "gdb" + "\377\376\375\374\373" // 32480 + + // #1268 + "\377\376\375\374\373\372\371\370" + "kdbg" + "\377\376\375\374" // 32496 + + // #1269 + "\377\376\375\374\373\372\371\370" + "&OK" + "\377\376\375\374\373" // 32512 + + // #1271 + "\377\376\375" + "&OK" + "\377\376\375\374\373\372\371\370\367\366" // 32528 + + // #1272 + "&Cancel" + "\377\376\375\374\373\372\371\370\367" // 32544 + + // #1274 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "&Cancelar" + "\377\376\375\374\373\372\371\370" // 32576 + + // #1275 + "\377\376\375\374\373\372\371\370" + "The KDE Crash Handler" + "\377\376\375" // 32608 + + // #1277 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336" + "O manipulador de exce\303""\247""\303""\265""es do KDE" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 32688+ + + // #1278 + "\377\376\375\374\373\372\371\370" + "The KDE Crash Handler" + "\377\376\375" // 32720 + + // #1280 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316" + "O manipulador de exce\303""\247""\303""\265""es do KDE" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 32816+ + + // #1281 + "\377\376\375\374\373\372\371\370" + " \342""\200""\223"" " + "\377\376\375" // 32832 + + // #1283 + "\377\376\375\374" + " \342""\200""\223"" " + "\377\376\375\374\373\372\371" // 32848 + + // #1284 + "QTabBar" + "\377\376\375\374\373\372\371\370\367" // 32864 + + // #1285 + "\377\376\375" + "tabCloseRequested(int)" + "\377\376\375\374\373\372\371" // 32896 + + // #1286 + "KTabBar" + "\377\376\375\374\373\372\371\370\367" // 32912 + + // #1287 + "\377\376\375" + "closeRequest(int)" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 32944 + + // #1288 + "\377\376" + "MainWidget" + "\377\376\375\374" // 32960 + + // #1289 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "verticalLayout_3" + "\377\376\375" // 32992 + + // #1290 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "horizontalLayout_2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 33040 + + // #1291 + "\377" + "verticalLayout" + "\377" // 33056 + + // #1292 + "\377\376\375\374\373\372\371\370\367\366" + "titleLabel" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 33088 + + // #1294 + "infoLabel" + "\377\376\375\374\373\372\371" // 33104 + + // #1296 + "\377\376\375\374\373\372\371\370\367\366" + "verticalLayout_2" + "\377\376\375\374\373\372" // 33136 + + // #1297 + "\377\376\375\374\373\372\371\370\367\366\365" + "iconLabel" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 33168 + + // #1299 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313" + "detailsTitleLabel" + "\377\376\375\374\373\372\371\370\367\366" // 33248+ + + // #1301 + "\377\376\375" + "detailsLabel" + "\377" // 33264 + + // #1303 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "<para>We are sorry, <application>%1</application> closed unexpectedly.</para>" + "\377\376\375\374\373\372\371\370\367\366\365" // 33376+ + + // #1305 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "<para>Desculpe-nos, mas o <application>%1</application> fechou inesperadamente.</para>" + "\377\376\375\374" // 33504+ + + // #1306 + "pt-BR" + "\377\376\375\374\373\372\371\370\367\366\365" // 33520 + + // #1307 + "Helvetica" + "\377\376\375\374\373\372\371" // 33536 + + // #1308 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 33552 + + // #1309 + "Helvetica" + "\377\376\375\374\373\372\371" // 33568 + + // #1310 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 33584 + + // #1311 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 33600 + + // #1312 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 33616 + + // #1313 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 33648 + + // #1314 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 33664 + + // #1315 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 33696 + + // #1316 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 33712 + + // #1317 + "NokiaSansCnGre" + "\377\376" // 33728 + + // #1318 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 33744 + + // #1319 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 33760 + + // #1320 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 33776 + + // #1321 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 33808 + + // #1322 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 33824 + + // #1323 + "NokiaSansCnGre" + "\377\376" // 33840 + + // #1324 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 33856 + + // #1325 + "LucidaBright" + "\377\376\375\374" // 33872 + + // #1326 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 33888 + + // #1327 + "Lucida Sans" + "\377\376\375\374\373" // 33904 + + // #1328 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 33920 + + // #1329 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 33952 + + // #1330 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 33968 + + // #1331 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 33984 + + // #1332 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34000 + + // #1333 + "Gulim" + "\377\376\375\374\373\372\371\370\367\366\365" // 34016 + + // #1334 + "microsoft" + "\377\376\375\374\373\372\371" // 34032 + + // #1335 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 34064 + + // #1336 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34080 + + // #1337 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 34096 + + // #1338 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 34112 + + // #1339 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 34144 + + // #1340 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 34160 + + // #1341 + "Helvetica" + "\377\376\375\374\373\372\371" // 34176 + + // #1342 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34192 + + // #1343 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 34208 + + // #1344 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34224 + + // #1345 + "\377\376\375\374\373\372\371\370" + "HYPost-Light" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 34256 + + // #1346 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 34272 + + // #1347 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 34304 + + // #1348 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34320 + + // #1349 + "Teletext" + "\377\376\375\374\373\372\371\370" // 34336 + + // #1350 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 34352 + + // #1351 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "GungsuhChe" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 34400+ + + // #1352 + "microsoft" + "\377\376\375\374\373\372\371" // 34416 + + // #1353 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 34448 + + // #1354 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34464 + + // #1355 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 34496 + + // #1356 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34512 + + // #1357 + "Lucida Sans" + "\377\376\375\374\373" // 34528 + + // #1358 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 34544 + + // #1359 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 34576 + + // #1360 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34592 + + // #1361 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 34608 + + // #1362 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 34624 + + // #1363 + "Liberation Mono" + "\377" // 34640 + + // #1364 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34656 + + // #1365 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 34720+ + + // #1366 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 34752 + + // #1367 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 34768 + + // #1368 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 34784 + + // #1369 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 34800 + + // #1370 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 34816 + + // #1371 + "NokiaSansGre" + "\377\376\375\374" // 34832 + + // #1372 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34848 + + // #1373 + "NokiaSansTitleGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 34880 + + // #1374 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34896 + + // #1375 + "NokiaSansTitleGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 34928 + + // #1376 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 34944 + + // #1377 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 34960 + + // #1378 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 34976 + + // #1379 + "NokiaSansGre" + "\377\376\375\374" // 34992 + + // #1380 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35008 + + // #1381 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 35040 + + // #1382 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35056 + + // #1383 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 35072 + + // #1384 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35088 + + // #1385 + "msam10" + "\377\376\375\374\373\372\371\370\367\366" // 35104 + + // #1386 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35120 + + // #1387 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 35152 + + // #1388 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35168 + + // #1389 + "Lucida Sans" + "\377\376\375\374\373" // 35184 + + // #1390 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 35200 + + // #1391 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 35216 + + // #1392 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 35232 + + // #1393 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 35264 + + // #1394 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 35280 + + // #1395 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35296 + + // #1396 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35312 + + // #1397 + "\377\376\375\374\373\372\371\370" + "Palatino Linotype" + "\377\376\375\374\373\372\371" // 35344 + + // #1398 + "linotype" + "\377\376\375\374\373\372\371\370" // 35360 + + // #1399 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35376 + + // #1400 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35392 + + // #1401 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35408 + + // #1402 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35424 + + // #1403 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 35488+ + + // #1404 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 35520 + + // #1405 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35536 + + // #1406 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35552 + + // #1407 + "Lucida Sans" + "\377\376\375\374\373" // 35568 + + // #1408 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 35584 + + // #1409 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35600 + + // #1410 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35616 + + // #1411 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 35632 + + // #1412 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35648 + + // #1413 + "Lucida Sans" + "\377\376\375\374\373" // 35664 + + // #1414 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 35680 + + // #1415 + "NokiaSerifBal" + "\377\376\375" // 35696 + + // #1416 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35712 + + // #1417 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 35744 + + // #1418 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 35760 + + // #1419 + "NokiaSerifBal" + "\377\376\375" // 35776 + + // #1420 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 35792 + + // #1421 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 35808 + + // #1422 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 35872+ + + // #1423 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 35904 + + // #1424 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 35920 + + // #1425 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 35936 + + // #1426 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36000+ + + // #1427 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 36032 + + // #1428 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36048 + + // #1429 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 36064 + + // #1430 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36080 + + // #1431 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 36096 + + // #1432 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 36128+ + + // #1433 + "Helvetica" + "\377\376\375\374\373\372\371" // 36144 + + // #1434 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36160 + + // #1435 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 36192 + + // #1436 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36208 + + // #1437 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 36224 + + // #1438 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36240 + + // #1439 + "NokiaSerifCyr" + "\377\376\375" // 36256 + + // #1440 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36272 + + // #1441 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 36288 + + // #1442 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36304 + + // #1443 + "NokiaSerifCyr" + "\377\376\375" // 36320 + + // #1444 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36336 + + // #1445 + "NokiaSerifGre" + "\377\376\375" // 36352 + + // #1446 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36368 + + // #1447 + "NokiaSerifGre" + "\377\376\375" // 36384 + + // #1448 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36400 + + // #1449 + "Helvetica" + "\377\376\375\374\373\372\371" // 36416 + + // #1450 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36432 + + // #1451 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 36448 + + // #1452 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36464 + + // #1453 + "Lucida Sans" + "\377\376\375\374\373" // 36480 + + // #1454 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36496 + + // #1455 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 36528 + + // #1456 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36544 + + // #1457 + "\377\376\375\374\373\372\371\370" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 36576+ + + // #1458 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36592 + + // #1459 + "\377\376\375\374\373\372\371\370" + "Hershey-Script-Complex" + "\377\376" // 36624 + + // #1460 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36640 + + // #1461 + "Lucida Sans" + "\377\376\375\374\373" // 36656 + + // #1462 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36672 + + // #1463 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 36688 + + // #1464 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36704 + + // #1465 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 36720 + + // #1466 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 36736 + + // #1467 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 36752 + + // #1468 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 36768 + + // #1469 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 36800 + + // #1470 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36816 + + // #1471 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 36848 + + // #1472 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 36864 + + // #1473 + "LucidaBright" + "\377\376\375\374" // 36880 + + // #1474 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 36896 + + // #1475 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 36928 + + // #1476 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 36944 + + // #1477 + "LucidaBright" + "\377\376\375\374" // 36960 + + // #1478 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 36976 + + // #1479 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 37008 + + // #1480 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 37024 + + // #1481 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 37056 + + // #1482 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37072 + + // #1483 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 37104 + + // #1484 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37120 + + // #1485 + "NokiaSerifGre" + "\377\376\375" // 37136 + + // #1486 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37152 + + // #1487 + "NokiaSerifGre" + "\377\376\375" // 37168 + + // #1488 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37184 + + // #1489 + "Helvetica" + "\377\376\375\374\373\372\371" // 37200 + + // #1490 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 37216 + + // #1491 + "NokiaSerifCE" + "\377\376\375\374" // 37232 + + // #1492 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37248 + + // #1493 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 37280 + + // #1494 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37296 + + // #1495 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 37312 + + // #1496 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 37344+ + + // #1497 + "NokiaSerifCE" + "\377\376\375\374" // 37360 + + // #1498 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37376 + + // #1499 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 37408 + + // #1500 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37424 + + // #1501 + "LucidaBright" + "\377\376\375\374" // 37440 + + // #1502 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 37456 + + // #1503 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 37472 + + // #1504 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 37488 + + // #1505 + "NokiaSansTur" + "\377\376\375\374" // 37504 + + // #1506 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37520 + + // #1507 + "NokiaSansTur" + "\377\376\375\374" // 37536 + + // #1508 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37552 + + // #1509 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 37584 + + // #1510 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 37600 + + // #1511 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 37632 + + // #1512 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 37648 + + // #1513 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 37680 + + // #1514 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37696 + + // #1515 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 37728 + + // #1516 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 37744 + + // #1517 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 37776 + + // #1518 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 37792 + + // #1519 + "NTC Logo" + "\377\376\375\374\373\372\371\370" // 37808 + + // #1520 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 37824 + + // #1521 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 37856 + + // #1522 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 37872 + + // #1523 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bookman Old Style" + "\377\376\375\374\373\372\371" // 37920+ + + // #1524 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 37952 + + // #1525 + "Nokia Sans Cn" + "\377\376\375" // 37968 + + // #1526 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38000 + + // #1527 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 38016 + + // #1528 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 38032 + + // #1529 + "LucidaBright" + "\377\376\375\374" // 38048 + + // #1530 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 38064 + + // #1531 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 38080 + + // #1532 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 38112+ + + // #1533 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 38176+ + + // #1534 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38208 + + // #1535 + "\377\376\375\374\373\372\371\370" + "cursor.pcf" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 38240 + + // #1536 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 38256 + + // #1537 + "\377\376\375\374\373\372\371\370" + "Monotype Corsiva" + "\377\376\375\374\373\372\371\370" // 38288 + + // #1538 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38320 + + // #1539 + "LucidaBright" + "\377\376\375\374" // 38336 + + // #1540 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 38352 + + // #1541 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bookman Old Style" + "\377\376\375\374\373\372\371" // 38432+ + + // #1542 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38464 + + // #1543 + "LucidaBright" + "\377\376\375\374" // 38480 + + // #1544 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 38496 + + // #1545 + "NokiaSansCnTur" + "\377\376" // 38512 + + // #1546 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 38528 + + // #1547 + "NokiaSansCnTur" + "\377\376" // 38544 + + // #1548 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 38560 + + // #1549 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 38592 + + // #1550 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 38608 + + // #1551 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 38640 + + // #1552 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 38656 + + // #1553 + "Helvetica" + "\377\376\375\374\373\372\371" // 38672 + + // #1554 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 38688 + + // #1555 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38720 + + // #1556 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 38736 + + // #1557 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bookman Old Style" + "\377\376\375\374\373\372\371" // 38816+ + + // #1558 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38848 + + // #1559 + "LucidaBright" + "\377\376\375\374" // 38864 + + // #1560 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 38880 + + // #1561 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 38912 + + // #1562 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 38928 + + // #1563 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 38944 + + // #1564 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 38960 + + // #1565 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 38976 + + // #1566 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 38992 + + // #1567 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 39024 + + // #1568 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 39040 + + // #1569 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 39072 + + // #1570 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 39088 + + // #1571 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 39104 + + // #1572 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39120 + + // #1573 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 39152 + + // #1574 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 39168 + + // #1575 + "Nokia Sans" + "\377\376\375\374\373\372" // 39184 + + // #1576 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 39200 + + // #1577 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 39216 + + // #1578 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39232 + + // #1579 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 39248 + + // #1580 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39264 + + // #1581 + "NokiaSansTur" + "\377\376\375\374" // 39280 + + // #1582 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 39296 + + // #1583 + "LucidaBright" + "\377\376\375\374" // 39312 + + // #1584 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39328 + + // #1585 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 39344 + + // #1586 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39360 + + // #1587 + "NokiaSansTur" + "\377\376\375\374" // 39376 + + // #1588 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 39392 + + // #1589 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 39424 + + // #1590 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39440 + + // #1591 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 39456 + + // #1592 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 39472 + + // #1593 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "SabonSerif Tur for Nokia" + "\377\376\375\374\373\372\371\370" // 39520+ + + // #1594 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 39552 + + // #1595 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 39568 + + // #1596 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39584 + + // #1597 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 39616 + + // #1598 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 39632 + + // #1599 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 39648 + + // #1600 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 39664 + + // #1601 + "Teletext" + "\377\376\375\374\373\372\371\370" // 39680 + + // #1602 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 39696 + + // #1603 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 39728 + + // #1604 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 39744 + + // #1605 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 39776 + + // #1606 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39792 + + // #1607 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 39824 + + // #1608 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39840 + + // #1609 + "NokiaSansGre" + "\377\376\375\374" // 39856 + + // #1610 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 39872 + + // #1611 + "NokiaSansGre" + "\377\376\375\374" // 39888 + + // #1612 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 39904 + + // #1613 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 39936 + + // #1614 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39952 + + // #1615 + "LucidaBright" + "\377\376\375\374" // 39968 + + // #1616 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 39984 + + // #1617 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 40016 + + // #1618 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 40032 + + // #1619 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 40048 + + // #1620 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 40064 + + // #1621 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 40080 + + // #1622 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 40096 + + // #1623 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 40112 + + // #1624 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 40128 + + // #1625 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40160 + + // #1626 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40176 + + // #1627 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 40192 + + // #1628 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 40208 + + // #1629 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40240 + + // #1630 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40256 + + // #1631 + "NokiaSans" + "\377\376\375\374\373\372\371" // 40272 + + // #1632 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40288 + + // #1633 + "NokiaSans" + "\377\376\375\374\373\372\371" // 40304 + + // #1634 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40320 + + // #1635 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 40352 + + // #1636 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40368 + + // #1637 + "NokiaSansTur" + "\377\376\375\374" // 40384 + + // #1638 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40400 + + // #1639 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 40416 + + // #1640 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 40432 + + // #1641 + "NokiaSansTur" + "\377\376\375\374" // 40448 + + // #1642 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 40464 + + // #1643 + "LucidaBright" + "\377\376\375\374" // 40480 + + // #1644 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 40496 + + // #1645 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 40512 + + // #1646 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 40528 + + // #1647 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 40544 + + // #1648 + "\377\376\375\374\373\372\371\370" + "adobe" + "\377\376\375" // 40560 + + // #1649 + "\377\376\375\374\373\372\371\370" + "Book Antiqua" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 40592 + + // #1650 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 40624 + + // #1651 + "LucidaBright" + "\377\376\375\374" // 40640 + + // #1652 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 40656 + + // #1653 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 40672 + + // #1654 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 40688 + + // #1655 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 40720 + + // #1656 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40736 + + // #1657 + "Nokia Sans Cn" + "\377\376\375" // 40752 + + // #1658 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 40784 + + // #1659 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 40816 + + // #1660 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 40832 + + // #1661 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 40864 + + // #1662 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 40880 + + // #1663 + "Arial Unicode MS" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 40912 + + // #1664 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 40944 + + // #1665 + "Helvetica" + "\377\376\375\374\373\372\371" // 40960 + + // #1666 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 40976 + + // #1667 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 41008 + + // #1668 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 41024 + + // #1669 + "NokiaSerifCyr" + "\377\376\375" // 41040 + + // #1670 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41056 + + // #1671 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 41088 + + // #1672 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 41104 + + // #1673 + "NokiaSerifCyr" + "\377\376\375" // 41120 + + // #1674 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41136 + + // #1675 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 41168 + + // #1676 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41184 + + // #1677 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 41216 + + // #1678 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41232 + + // #1679 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 41248 + + // #1680 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 41264 + + // #1681 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Sabon Serif for Nokia" + "\377\376\375" // 41312+ + + // #1682 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 41344 + + // #1683 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 41360 + + // #1684 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 41376 + + // #1685 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 41440+ + + // #1686 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 41472 + + // #1687 + "LucidaBright" + "\377\376\375\374" // 41488 + + // #1688 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 41504 + + // #1689 + "LucidaBright" + "\377\376\375\374" // 41520 + + // #1690 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 41536 + + // #1691 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 41568 + + // #1692 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 41584 + + // #1693 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 41616 + + // #1694 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 41632 + + // #1695 + "Tahoma" + "\377\376\375\374\373\372\371\370\367\366" // 41648 + + // #1696 + "microsoft" + "\377\376\375\374\373\372\371" // 41664 + + // #1697 + "Liberation Sans" + "\377" // 41680 + + // #1698 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41696 + + // #1699 + "NokiaSansTitleGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 41728 + + // #1700 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41744 + + // #1701 + "NokiaSansTitleGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 41776 + + // #1702 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 41792 + + // #1703 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Serif" + "\377\376\375\374" // 41824 + + // #1704 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 41856 + + // #1705 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 41872 + + // #1706 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 41888 + + // #1707 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 41904 + + // #1708 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 41920 + + // #1709 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 41952 + + // #1710 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 41968 + + // #1711 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 42000 + + // #1712 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42016 + + // #1713 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 42032 + + // #1714 + "\377\376\375\374\373\372\371\370" + "adobe" + "\377\376\375" // 42048 + + // #1715 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 42064 + + // #1716 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42080 + + // #1717 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 42096 + + // #1718 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42112 + + // #1719 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 42144 + + // #1720 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42160 + + // #1721 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 42192 + + // #1722 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 42208 + + // #1723 + "NokiaSansCyr" + "\377\376\375\374" // 42224 + + // #1724 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 42240 + + // #1725 + "LucidaBright" + "\377\376\375\374" // 42256 + + // #1726 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42272 + + // #1727 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 42304 + + // #1728 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 42320 + + // #1729 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 42352 + + // #1730 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 42368 + + // #1731 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 42400 + + // #1732 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42416 + + // #1733 + "NokiaSansCyr" + "\377\376\375\374" // 42432 + + // #1734 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 42448 + + // #1735 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 42480 + + // #1736 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42496 + + // #1737 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 42528 + + // #1738 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42544 + + // #1739 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 42576 + + // #1740 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42592 + + // #1741 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 42624 + + // #1742 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42640 + + // #1743 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 42672 + + // #1744 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 42688 + + // #1745 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 42704 + + // #1746 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42720 + + // #1747 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 42752 + + // #1748 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 42768 + + // #1749 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 42784 + + // #1750 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42800 + + // #1751 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 42816 + + // #1752 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 42832 + + // #1753 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 42864 + + // #1754 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 42880 + + // #1755 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 42896 + + // #1756 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 42976+ + + // #1757 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 42992 + + // #1758 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43008 + + // #1759 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 43040 + + // #1760 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43056 + + // #1761 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43088 + + // #1762 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 43104 + + // #1763 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43120 + + // #1764 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43136 + + // #1765 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 43152 + + // #1766 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 43168 + + // #1767 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 43200 + + // #1768 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43216 + + // #1769 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43232 + + // #1770 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43248 + + // #1771 + "Lucida Sans" + "\377\376\375\374\373" // 43264 + + // #1772 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43280 + + // #1773 + "Lucida Sans" + "\377\376\375\374\373" // 43296 + + // #1774 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43312 + + // #1775 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 43344 + + // #1776 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 43360 + + // #1777 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 43376 + + // #1778 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43392 + + // #1779 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43408 + + // #1780 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43424 + + // #1781 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 43440 + + // #1782 + "\377\376\375\374\373\372\371\370" + "adobe" + "\377\376\375" // 43456 + + // #1783 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43472 + + // #1784 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43488 + + // #1785 + "\377\376\375\374\373\372\371\370" + "Book Antiqua" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 43520 + + // #1786 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 43552 + + // #1787 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 43584 + + // #1788 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 43600 + + // #1789 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43616 + + // #1790 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43632 + + // #1791 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 43648 + + // #1792 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43664 + + // #1793 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "HGPSoeiKakugothicUB" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 43744+ + + // #1794 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 43760 + + // #1795 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 43792 + + // #1796 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 43808 + + // #1797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "MS Mincho" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 43872+ + + // #1798 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 43888 + + // #1799 + "\377\376\375\374\373\372\371\370" + "Haettenschweiler" + "\377\376\375\374\373\372\371\370" // 43920 + + // #1800 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 43936 + + // #1801 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 43952 + + // #1802 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 43968 + + // #1803 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 43984 + + // #1804 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 44000 + + // #1805 + "Lucida Sans" + "\377\376\375\374\373" // 44016 + + // #1806 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 44032 + + // #1807 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 44048 + + // #1808 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 44064 + + // #1809 + "NokiaSansCnGre" + "\377\376" // 44080 + + // #1810 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44096 + + // #1811 + "Helvetica" + "\377\376\375\374\373\372\371" // 44112 + + // #1812 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 44128 + + // #1813 + "NokiaSansCnGre" + "\377\376" // 44144 + + // #1814 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44160 + + // #1815 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 44176 + + // #1816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 44256+ + + // #1817 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 44288 + + // #1818 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 44304 + + // #1819 + "Lucida Sans" + "\377\376\375\374\373" // 44320 + + // #1820 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 44336 + + // #1821 + "NokiaSansGre" + "\377\376\375\374" // 44352 + + // #1822 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44368 + + // #1823 + "NokiaSansGre" + "\377\376\375\374" // 44384 + + // #1824 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44400 + + // #1825 + "Helvetica" + "\377\376\375\374\373\372\371" // 44416 + + // #1826 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 44432 + + // #1827 + "NokiaSansGre" + "\377\376\375\374" // 44448 + + // #1828 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44464 + + // #1829 + "NokiaSansGre" + "\377\376\375\374" // 44480 + + // #1830 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44496 + + // #1831 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 44528 + + // #1832 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 44544 + + // #1833 + "STZhongsong" + "\377\376\375\374\373" // 44560 + + // #1834 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44576 + + // #1835 + "NokiaSansCnBal" + "\377\376" // 44592 + + // #1836 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44608 + + // #1837 + "LucidaBright" + "\377\376\375\374" // 44624 + + // #1838 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 44640 + + // #1839 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 44672 + + // #1840 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 44688 + + // #1841 + "NokiaSansCnBal" + "\377\376" // 44704 + + // #1842 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44720 + + // #1843 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 44752 + + // #1844 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 44768 + + // #1845 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 44800 + + // #1846 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 44816 + + // #1847 + "Davis" + "\377\376\375\374\373\372\371\370\367\366\365" // 44832 + + // #1848 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44848 + + // #1849 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Golden Girdle" + "\377\376\375\374\373\372\371\370\367\366\365" // 44896+ + + // #1850 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 44912 + + // #1851 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 44928 + + // #1852 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 44944 + + // #1853 + "Indigo Joker" + "\377\376\375\374" // 44960 + + // #1854 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 44992 + + // #1855 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 45024 + + // #1856 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45040 + + // #1857 + "Tahoma" + "\377\376\375\374\373\372\371\370\367\366" // 45056 + + // #1858 + "microsoft" + "\377\376\375\374\373\372\371" // 45072 + + // #1859 + "\377\376\375\374\373\372\371\370" + "Die Nasty" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 45104 + + // #1860 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 45120 + + // #1861 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 45136 + + // #1862 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45152 + + // #1863 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 45168 + + // #1864 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 45184 + + // #1865 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 45200 + + // #1866 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45216 + + // #1867 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 45248 + + // #1868 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45264 + + // #1869 + "Century Gothic" + "\377\376" // 45280 + + // #1870 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 45312 + + // #1871 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 45344 + + // #1872 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45360 + + // #1873 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 45392 + + // #1874 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 45408 + + // #1875 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 45440 + + // #1876 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45456 + + // #1877 + "Ikarus Turbulence" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 45488 + + // #1878 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 45520 + + // #1879 + "Helvetica" + "\377\376\375\374\373\372\371" // 45536 + + // #1880 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45552 + + // #1881 + "LucidaBright" + "\377\376\375\374" // 45568 + + // #1882 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 45584 + + // #1883 + "NokiaSerifBal" + "\377\376\375" // 45600 + + // #1884 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 45616 + + // #1885 + "NokiaSerifBal" + "\377\376\375" // 45632 + + // #1886 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 45648 + + // #1887 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 45680 + + // #1888 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 45696 + + // #1889 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 45712 + + // #1890 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 45728 + + // #1891 + "Helvetica" + "\377\376\375\374\373\372\371" // 45744 + + // #1892 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45760 + + // #1893 + "NokiaSansBal" + "\377\376\375\374" // 45776 + + // #1894 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 45792 + + // #1895 + "NokiaSansBal" + "\377\376\375\374" // 45808 + + // #1896 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 45824 + + // #1897 + "Helvetica" + "\377\376\375\374\373\372\371" // 45840 + + // #1898 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45856 + + // #1899 + "HGSGothicM" + "\377\376\375\374\373\372" // 45872 + + // #1900 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 45888 + + // #1901 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 45920 + + // #1902 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 45936 + + // #1903 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 45952 + + // #1904 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 45968 + + // #1905 + "\377\376\375\374\373\372\371\370" + "HGSGothicE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 46000 + + // #1906 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 46016 + + // #1907 + "Lucida Sans" + "\377\376\375\374\373" // 46032 + + // #1908 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46048 + + // #1909 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 46064 + + // #1910 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 46080 + + // #1911 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 46112 + + // #1912 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 46128 + + // #1913 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 46144 + + // #1914 + "Led" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46160 + + // #1915 + "NokiaSansGre" + "\377\376\375\374" // 46176 + + // #1916 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 46192 + + // #1917 + "NokiaSansGre" + "\377\376\375\374" // 46208 + + // #1918 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 46224 + + // #1919 + "LucidaBright" + "\377\376\375\374" // 46240 + + // #1920 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 46256 + + // #1921 + "URW Chancery L" + "\377\376" // 46272 + + // #1922 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 46288 + + // #1923 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 46304 + + // #1924 + "Led" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46320 + + // #1925 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 46352 + + // #1926 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46368 + + // #1927 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 46384 + + // #1928 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 46432+ + + // #1929 + "SabonSerif CE for Nokia" + "\377\376\375\374\373\372\371\370\367" // 46464 + + // #1930 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 46496 + + // #1931 + "LucidaBright" + "\377\376\375\374" // 46512 + + // #1932 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 46528 + + // #1933 + "Helvetica" + "\377\376\375\374\373\372\371" // 46544 + + // #1934 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 46560 + + // #1935 + "Lucida Sans" + "\377\376\375\374\373" // 46576 + + // #1936 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46592 + + // #1937 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 46608 + + // #1938 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 46688+ + + // #1939 + "LucidaBright" + "\377\376\375\374" // 46704 + + // #1940 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 46720 + + // #1941 + "NokiaSansTur" + "\377\376\375\374" // 46736 + + // #1942 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 46752 + + // #1943 + "NokiaSansTur" + "\377\376\375\374" // 46768 + + // #1944 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 46784 + + // #1945 + "Helvetica" + "\377\376\375\374\373\372\371" // 46800 + + // #1946 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 46816 + + // #1947 + "Dotum" + "\377\376\375\374\373\372\371\370\367\366\365" // 46832 + + // #1948 + "microsoft" + "\377\376\375\374\373\372\371" // 46848 + + // #1949 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 46880 + + // #1950 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46896 + + // #1951 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 46928 + + // #1952 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 46944 + + // #1953 + "Helvetica" + "\377\376\375\374\373\372\371" // 46960 + + // #1954 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 46976 + + // #1955 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 46992 + + // #1956 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 47008 + + // #1957 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 47040 + + // #1958 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 47056 + + // #1959 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 47072 + + // #1960 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 47088 + + // #1961 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 47120 + + // #1962 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 47136 + + // #1963 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bookman Old Style" + "\377\376\375\374\373\372\371" // 47200+ + + // #1964 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 47232 + + // #1965 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 47248 + + // #1966 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 47264 + + // #1967 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 47296 + + // #1968 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 47312 + + // #1969 + "Lucida Sans" + "\377\376\375\374\373" // 47328 + + // #1970 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 47344 + + // #1971 + "NokiaSansCyr" + "\377\376\375\374" // 47360 + + // #1972 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 47376 + + // #1973 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 47392 + + // #1974 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 47408 + + // #1975 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 47424 + + // #1976 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 47440 + + // #1977 + "NokiaSansCyr" + "\377\376\375\374" // 47456 + + // #1978 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 47472 + + // #1979 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 47504 + + // #1980 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 47520 + + // #1981 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 47536 + + // #1982 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 47552 + + // #1983 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 47584 + + // #1984 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 47600 + + // #1985 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 47616 + + // #1986 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 47632 + + // #1987 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans Mono" + "\377\376\375\374\373\372\371\370" // 47664 + + // #1988 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 47680 + + // #1989 + "Helvetica" + "\377\376\375\374\373\372\371" // 47696 + + // #1990 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 47712 + + // #1991 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 47728 + + // #1992 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 47744 + + // #1993 + "LucidaBright" + "\377\376\375\374" // 47760 + + // #1994 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 47776 + + // #1995 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 47808 + + // #1996 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 47824 + + // #1997 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 47904+ + + // #1998 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 47920 + + // #1999 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 47968+ + + // #2000 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 47984 + + // #2001 + "\377\376\375\374\373\372\371\370" + "Batang" + "\377\376" // 48000 + + // #2002 + "microsoft" + "\377\376\375\374\373\372\371" // 48016 + + // #2003 + "\377\376\375\374\373\372\371\370" + "MS PGothic" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 48048 + + // #2004 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 48064 + + // #2005 + "Helvetica" + "\377\376\375\374\373\372\371" // 48080 + + // #2006 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 48096 + + // #2007 + "NokiaSerifBal" + "\377\376\375" // 48112 + + // #2008 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48128 + + // #2009 + "Helvetica" + "\377\376\375\374\373\372\371" // 48144 + + // #2010 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 48160 + + // #2011 + "NokiaSerifBal" + "\377\376\375" // 48176 + + // #2012 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48192 + + // #2013 + "NokiaSansTur" + "\377\376\375\374" // 48208 + + // #2014 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48224 + + // #2015 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 48272 + + // #2016 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 48288 + + // #2017 + "NokiaSansTur" + "\377\376\375\374" // 48304 + + // #2018 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48320 + + // #2019 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 48336 + + // #2020 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 48352 + + // #2021 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 48368 + + // #2022 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 48384 + + // #2023 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 48416 + + // #2024 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 48432 + + // #2025 + "NokiaSansTitleCE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 48464 + + // #2026 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48480 + + // #2027 + "NokiaSansTitleCE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 48512 + + // #2028 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48528 + + // #2029 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 48544 + + // #2030 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 48560 + + // #2031 + "\377\376\375\374\373\372\371\370" + "Blue Highway Condensed" + "\377\376" // 48592 + + // #2032 + "\377\376\375\374\373\372\371\370" + "larabiefonts" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 48624 + + // #2033 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 48640 + + // #2034 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 48656 + + // #2035 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 48672 + + // #2036 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 48688 + + // #2037 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 48704 + + // #2038 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 48736+ + + // #2039 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 48752 + + // #2040 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 48768 + + // #2041 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 48784 + + // #2042 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 48800 + + // #2043 + "Liberation Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 48832 + + // #2044 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 48848 + + // #2045 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 48864 + + // #2046 + "\377\376\375\374\373\372\371\370" + "adobe" + "\377\376\375" // 48880 + + // #2047 + "Lucida Sans" + "\377\376\375\374\373" // 48896 + + // #2048 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 48912 + + // #2049 + "Lucida Sans" + "\377\376\375\374\373" // 48928 + + // #2050 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 48944 + + // #2051 + "Lucida Sans" + "\377\376\375\374\373" // 48960 + + // #2052 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 48976 + + // #2053 + "\377\376\375\374\373\372\371\370" + "Independence" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 49008 + + // #2054 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 49024 + + // #2055 + "\346""\226""\260""\347""\264""\260""\346""\230""\216""\351""\253""\224""" + "\377\376\375\374" // 49040 + + // #2056 + "dynalab" + "\377\376\375\374\373\372\371\370\367" // 49056 + + // #2057 + "Lucida Sans" + "\377\376\375\374\373" // 49072 + + // #2058 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 49088 + + // #2059 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 49120 + + // #2060 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 49136 + + // #2061 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 49152 + + // #2062 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49168 + + // #2063 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 49184 + + // #2064 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49200 + + // #2065 + "SabonSerif Bal for Nokia" + "\377\376\375\374\373\372\371\370" // 49232 + + // #2066 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 49264 + + // #2067 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 49296 + + // #2068 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49312 + + // #2069 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 49344 + + // #2070 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 49360 + + // #2071 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 49376 + + // #2072 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49392 + + // #2073 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 49408 + + // #2074 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49424 + + // #2075 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 49440 + + // #2076 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49456 + + // #2077 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 49488 + + // #2078 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 49504 + + // #2079 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 49520 + + // #2080 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49536 + + // #2081 + "Bitstream Vera Sans Mono" + "\377\376\375\374\373\372\371\370" // 49568 + + // #2082 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 49600 + + // #2083 + "\377\376\375\374\373\372\371\370" + "STSong" + "\377\376" // 49616 + + // #2084 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 49632 + + // #2085 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 49664 + + // #2086 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 49680 + + // #2087 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 49712 + + // #2088 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49728 + + // #2089 + "Fadgod" + "\377\376\375\374\373\372\371\370\367\366" // 49744 + + // #2090 + "\377\376\375\374\373\372\371\370" + "larabiefonts" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 49776 + + // #2091 + "Teletext" + "\377\376\375\374\373\372\371\370" // 49792 + + // #2092 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 49808 + + // #2093 + "Lucida Sans" + "\377\376\375\374\373" // 49824 + + // #2094 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 49840 + + // #2095 + "Helvetica" + "\377\376\375\374\373\372\371" // 49856 + + // #2096 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49872 + + // #2097 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 49904 + + // #2098 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 49920 + + // #2099 + "Helvetica" + "\377\376\375\374\373\372\371" // 49936 + + // #2100 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49952 + + // #2101 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 49968 + + // #2102 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 49984 + + // #2103 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 50016 + + // #2104 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 50032 + + // #2105 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 50064 + + // #2106 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 50080 + + // #2107 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 50112 + + // #2108 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 50128 + + // #2109 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 50144 + + // #2110 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50160 + + // #2111 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "RotisSansSerifTur for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 50224+ + + // #2112 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 50240 + + // #2113 + "Helvetica" + "\377\376\375\374\373\372\371" // 50256 + + // #2114 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50272 + + // #2115 + "Helvetica" + "\377\376\375\374\373\372\371" // 50288 + + // #2116 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50304 + + // #2117 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 50336 + + // #2118 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 50352 + + // #2119 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 50384 + + // #2120 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 50400 + + // #2121 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 50432 + + // #2122 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 50448 + + // #2123 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 50480 + + // #2124 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50496 + + // #2125 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 50512 + + // #2126 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50528 + + // #2127 + "SAPIcons" + "\377\376\375\374\373\372\371\370" // 50544 + + // #2128 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 50560 + + // #2129 + "\377\376\375\374\373\372\371\370" + "Nokia Serif SCLF" + "\377\376\375\374\373\372\371\370" // 50592+ + + // #2130 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 50624 + + // #2131 + "Helvetica" + "\377\376\375\374\373\372\371" // 50640 + + // #2132 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50656 + + // #2133 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 50688 + + // #2134 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 50704 + + // #2135 + "Helvetica" + "\377\376\375\374\373\372\371" // 50720 + + // #2136 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50736 + + // #2137 + "Helvetica" + "\377\376\375\374\373\372\371" // 50752 + + // #2138 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50768 + + // #2139 + "Lucida Sans" + "\377\376\375\374\373" // 50784 + + // #2140 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 50800 + + // #2141 + "HYGothic-Extra" + "\377\376" // 50816 + + // #2142 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 50832 + + // #2143 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 50864 + + // #2144 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 50880 + + // #2145 + "Helvetica" + "\377\376\375\374\373\372\371" // 50896 + + // #2146 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50912 + + // #2147 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 50928 + + // #2148 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 50944 + + // #2149 + "\377\376\375\374\373\372\371\370" + "SimSun" + "\377\376" // 50960 + + // #2150 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 50976 + + // #2151 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 50992 + + // #2152 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51008 + + // #2153 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 51024 + + // #2154 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51040 + + // #2155 + "\377\376\375\374\373\372\371\370" + "SimSun" + "\377\376" // 51056 + + // #2156 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 51072 + + // #2157 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 51088 + + // #2158 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51104 + + // #2159 + "Helvetica" + "\377\376\375\374\373\372\371" // 51120 + + // #2160 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51136 + + // #2161 + "Teletext" + "\377\376\375\374\373\372\371\370" // 51152 + + // #2162 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 51168 + + // #2163 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 51184 + + // #2164 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51200 + + // #2165 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 51232 + + // #2166 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 51248 + + // #2167 + "LucidaBright" + "\377\376\375\374" // 51264 + + // #2168 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 51280 + + // #2169 + "LucidaBright" + "\377\376\375\374" // 51296 + + // #2170 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 51312 + + // #2171 + "Helvetica" + "\377\376\375\374\373\372\371" // 51328 + + // #2172 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51344 + + // #2173 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 51376 + + // #2174 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 51392 + + // #2175 + "FZYaoTi" + "\377\376\375\374\373\372\371\370\367" // 51408 + + // #2176 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 51424 + + // #2177 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 51440 + + // #2178 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51456 + + // #2179 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 51488 + + // #2180 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 51504 + + // #2181 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 51520 + + // #2182 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51536 + + // #2183 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "RotisSansSerifCE for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 51632+ + + // #2184 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 51648 + + // #2185 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 51664 + + // #2186 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51680 + + // #2187 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 51696 + + // #2188 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 51744+ + + // #2189 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 51760 + + // #2190 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51776 + + // #2191 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 51808 + + // #2192 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 51824 + + // #2193 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 51840 + + // #2194 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 51856 + + // #2195 + "NokiaSansWide" + "\377\376\375" // 51872 + + // #2196 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 51888 + + // #2197 + "NokiaSansWide" + "\377\376\375" // 51904 + + // #2198 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 51920 + + // #2199 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 51952 + + // #2200 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 51968 + + // #2201 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 52000 + + // #2202 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 52016 + + // #2203 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 52032 + + // #2204 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 52048 + + // #2205 + "Helvetica" + "\377\376\375\374\373\372\371" // 52064 + + // #2206 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 52080 + + // #2207 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 52096 + + // #2208 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 52128+ + + // #2209 + "NokiaSerif" + "\377\376\375\374\373\372" // 52144 + + // #2210 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52160 + + // #2211 + "NokiaSerif" + "\377\376\375\374\373\372" // 52176 + + // #2212 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52192 + + // #2213 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 52224 + + // #2214 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 52240 + + // #2215 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 52272 + + // #2216 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 52288 + + // #2217 + "\377\376\375\374\373\372\371\370" + "Palatino Linotype" + "\377\376\375\374\373\372\371" // 52320 + + // #2218 + "linotype" + "\377\376\375\374\373\372\371\370" // 52336 + + // #2219 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 52352 + + // #2220 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 52368 + + // #2221 + "\377\376\375\374\373\372\371\370" + "Palatino Linotype" + "\377\376\375\374\373\372\371" // 52400 + + // #2222 + "linotype" + "\377\376\375\374\373\372\371\370" // 52416 + + // #2223 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 52432 + + // #2224 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 52448 + + // #2225 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 52480 + + // #2226 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52496 + + // #2227 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 52528 + + // #2228 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 52544 + + // #2229 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 52576 + + // #2230 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52592 + + // #2231 + "NokiaSansCyr" + "\377\376\375\374" // 52608 + + // #2232 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52624 + + // #2233 + "Helvetica" + "\377\376\375\374\373\372\371" // 52640 + + // #2234 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 52656 + + // #2235 + "NokiaSansCyr" + "\377\376\375\374" // 52672 + + // #2236 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52688 + + // #2237 + "LucidaBright" + "\377\376\375\374" // 52704 + + // #2238 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 52720 + + // #2239 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 52752 + + // #2240 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 52768 + + // #2241 + "NokiaSansCnCyr" + "\377\376" // 52784 + + // #2242 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52800 + + // #2243 + "NokiaSansGre" + "\377\376\375\374" // 52816 + + // #2244 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52832 + + // #2245 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 52896+ + + // #2246 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 52912 + + // #2247 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 52944 + + // #2248 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 52960 + + // #2249 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 52992 + + // #2250 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 53008 + + // #2251 + "\377\376\375\374\373\372\371\370" + "Caption" + "\377" // 53024 + + // #2252 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 53040 + + // #2253 + "NokiaSansCnCyr" + "\377\376" // 53056 + + // #2254 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 53072 + + // #2255 + "NokiaSansGre" + "\377\376\375\374" // 53088 + + // #2256 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 53104 + + // #2257 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 53136 + + // #2258 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53152 + + // #2259 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53184 + + // #2260 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 53200 + + // #2261 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 53232 + + // #2262 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 53248 + + // #2263 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 53264 + + // #2264 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 53280 + + // #2265 + "Ikarus" + "\377\376\375\374\373\372\371\370\367\366" // 53296 + + // #2266 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 53328 + + // #2267 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "RotisSansSerifTur for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53424+ + + // #2268 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 53440 + + // #2269 + "\377\376\375\374\373\372\371\370" + "Bazaronite" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 53472+ + + // #2270 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 53504 + + // #2271 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Sans" + "\377\376\375\374\373" // 53536 + + // #2272 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 53568 + + // #2273 + "Helvetica" + "\377\376\375\374\373\372\371" // 53584 + + // #2274 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53600 + + // #2275 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 53632 + + // #2276 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53648 + + // #2277 + "Lucida Sans" + "\377\376\375\374\373" // 53664 + + // #2278 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53680 + + // #2279 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 53712 + + // #2280 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53728 + + // #2281 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 53760 + + // #2282 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53776 + + // #2283 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 53792 + + // #2284 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53808 + + // #2285 + "NokiaSansCn" + "\377\376\375\374\373" // 53824 + + // #2286 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 53840 + + // #2287 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 53856 + + // #2288 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53872 + + // #2289 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 53904 + + // #2290 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 53920 + + // #2291 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 53936 + + // #2292 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53952 + + // #2293 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 53968 + + // #2294 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 53984 + + // #2295 + "NokiaSansCn" + "\377\376\375\374\373" // 54000 + + // #2296 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 54016 + + // #2297 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 54048 + + // #2298 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 54064 + + // #2299 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 54096 + + // #2300 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54112 + + // #2301 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 54128 + + // #2302 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54144 + + // #2303 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54176 + + // #2304 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 54192 + + // #2305 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 54208 + + // #2306 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54224 + + // #2307 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 54256 + + // #2308 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54272 + + // #2309 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 54304 + + // #2310 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 54320 + + // #2311 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54352 + + // #2312 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 54368 + + // #2313 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 54384 + + // #2314 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54400 + + // #2315 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54432 + + // #2316 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 54448 + + // #2317 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 54480 + + // #2318 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 54496 + + // #2319 + "\377\376\375\374\373\372\371\370" + "Hershey-Script-Simplex" + "\377\376" // 54528 + + // #2320 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 54544 + + // #2321 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 54576 + + // #2322 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 54592 + + // #2323 + "SabonSerif CE for Nokia" + "\377\376\375\374\373\372\371\370\367" // 54624 + + // #2324 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54656 + + // #2325 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54688 + + // #2326 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 54704 + + // #2327 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 54736 + + // #2328 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54752 + + // #2329 + "Lucida Sans" + "\377\376\375\374\373" // 54768 + + // #2330 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 54784 + + // #2331 + "LucidaBright" + "\377\376\375\374" // 54800 + + // #2332 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 54816 + + // #2333 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 54832 + + // #2334 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 54848 + + // #2335 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 54880 + + // #2336 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 54896 + + // #2337 + "NokiaSansGre" + "\377\376\375\374" // 54912 + + // #2338 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 54928 + + // #2339 + "Lucida Sans" + "\377\376\375\374\373" // 54944 + + // #2340 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 54960 + + // #2341 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Sabon Serif for Nokia" + "\377\376\375" // 55008+ + + // #2342 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 55040 + + // #2343 + "NokiaSansGre" + "\377\376\375\374" // 55056 + + // #2344 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 55072 + + // #2345 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 55104 + + // #2346 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 55120 + + // #2347 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 55136 + + // #2348 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 55152 + + // #2349 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 55184 + + // #2350 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 55200 + + // #2351 + "Helvetica" + "\377\376\375\374\373\372\371" // 55216 + + // #2352 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55232 + + // #2353 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 55248 + + // #2354 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 55328+ + + // #2355 + "Helvetica" + "\377\376\375\374\373\372\371" // 55344 + + // #2356 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55360 + + // #2357 + "Helvetica" + "\377\376\375\374\373\372\371" // 55376 + + // #2358 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55392 + + // #2359 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 55408 + + // #2360 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 55456+ + + // #2361 + "Lucida Sans" + "\377\376\375\374\373" // 55472 + + // #2362 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 55488 + + // #2363 + "\377\376\375\374\373\372\371\370" + "MS Outlook" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 55520 + + // #2364 + "microsoft" + "\377\376\375\374\373\372\371" // 55536 + + // #2365 + "NokiaSerifCE" + "\377\376\375\374" // 55552 + + // #2366 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 55568 + + // #2367 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L" + "\377\376\375\374\373\372\371\370\367\366\365" // 55600 + + // #2368 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 55616 + + // #2369 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 55648 + + // #2370 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55664 + + // #2371 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 55680 + + // #2372 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 55696 + + // #2373 + "NokiaSansCnBal" + "\377\376" // 55712 + + // #2374 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 55728 + + // #2375 + "NokiaSerifCE" + "\377\376\375\374" // 55744 + + // #2376 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 55760 + + // #2377 + "Teletext" + "\377\376\375\374\373\372\371\370" // 55776 + + // #2378 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 55792 + + // #2379 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 55808 + + // #2380 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55824 + + // #2381 + "NokiaSansCnBal" + "\377\376" // 55840 + + // #2382 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 55856 + + // #2383 + "Helvetica" + "\377\376\375\374\373\372\371" // 55872 + + // #2384 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55888 + + // #2385 + "Helvetica" + "\377\376\375\374\373\372\371" // 55904 + + // #2386 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55920 + + // #2387 + "Helvetica" + "\377\376\375\374\373\372\371" // 55936 + + // #2388 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 55952 + + // #2389 + "LucidaBright" + "\377\376\375\374" // 55968 + + // #2390 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 55984 + + // #2391 + "Bitstream Vera Sans Mono" + "\377\376\375\374\373\372\371\370" // 56016 + + // #2392 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 56048 + + // #2393 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "HGSSoeiKakugothicUB" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56096+ + + // #2394 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 56112 + + // #2395 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 56128 + + // #2396 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56144 + + // #2397 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 56176 + + // #2398 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56192 + + // #2399 + "LucidaBright" + "\377\376\375\374" // 56208 + + // #2400 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56224 + + // #2401 + "LucidaBright" + "\377\376\375\374" // 56240 + + // #2402 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56256 + + // #2403 + "LucidaBright" + "\377\376\375\374" // 56272 + + // #2404 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56288 + + // #2405 + "LucidaBright" + "\377\376\375\374" // 56304 + + // #2406 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56320 + + // #2407 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 56336 + + // #2408 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56352 + + // #2409 + "NokiaSansCE" + "\377\376\375\374\373" // 56368 + + // #2410 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56384 + + // #2411 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 56416 + + // #2412 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56432 + + // #2413 + "NokiaSansBal" + "\377\376\375\374" // 56448 + + // #2414 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56464 + + // #2415 + "NokiaSansCE" + "\377\376\375\374\373" // 56480 + + // #2416 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56496 + + // #2417 + "NokiaSansBal" + "\377\376\375\374" // 56512 + + // #2418 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56528 + + // #2419 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 56560 + + // #2420 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56576 + + // #2421 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 56608 + + // #2422 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 56624 + + // #2423 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 56656 + + // #2424 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56672 + + // #2425 + "NokiaSansBal" + "\377\376\375\374" // 56688 + + // #2426 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56704 + + // #2427 + "NokiaSansBal" + "\377\376\375\374" // 56720 + + // #2428 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 56736 + + // #2429 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 56768 + + // #2430 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56784 + + // #2431 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 56800 + + // #2432 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56816 + + // #2433 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 56832 + + // #2434 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56848 + + // #2435 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 56880 + + // #2436 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 56896 + + // #2437 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 56912 + + // #2438 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56928 + + // #2439 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 56944 + + // #2440 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56960 + + // #2441 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 56976 + + // #2442 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 56992 + + // #2443 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 57024 + + // #2444 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 57040 + + // #2445 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 57056 + + // #2446 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 57072 + + // #2447 + "Bitstream Vera Sans Mono" + "\377\376\375\374\373\372\371\370" // 57104 + + // #2448 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 57136 + + // #2449 + "LucidaBright" + "\377\376\375\374" // 57152 + + // #2450 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57168 + + // #2451 + "LucidaBright" + "\377\376\375\374" // 57184 + + // #2452 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57200 + + // #2453 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 57232 + + // #2454 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57248 + + // #2455 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 57280 + + // #2456 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 57296 + + // #2457 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 57312 + + // #2458 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 57328 + + // #2459 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 57360 + + // #2460 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 57376 + + // #2461 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 57392 + + // #2462 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57408 + + // #2463 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Serif" + "\377\376\375\374" // 57440 + + // #2464 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 57472 + + // #2465 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 57488 + + // #2466 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57504 + + // #2467 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 57520 + + // #2468 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57536 + + // #2469 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 57568 + + // #2470 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 57584 + + // #2471 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 57600 + + // #2472 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57616 + + // #2473 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 57648 + + // #2474 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 57664 + + // #2475 + "LucidaBright" + "\377\376\375\374" // 57680 + + // #2476 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 57696 + + // #2477 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Sans" + "\377\376\375\374\373" // 57728 + + // #2478 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 57760 + + // #2479 + "Helvetica" + "\377\376\375\374\373\372\371" // 57776 + + // #2480 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 57792 + + // #2481 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 57824 + + // #2482 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 57840 + + // #2483 + "NokiaSansGre" + "\377\376\375\374" // 57856 + + // #2484 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 57872 + + // #2485 + "NokiaSansGre" + "\377\376\375\374" // 57888 + + // #2486 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 57904 + + // #2487 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 57936 + + // #2488 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 57952 + + // #2489 + "NokiaSansGre" + "\377\376\375\374" // 57968 + + // #2490 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 57984 + + // #2491 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 58016 + + // #2492 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58032 + + // #2493 + "Lucida Sans" + "\377\376\375\374\373" // 58048 + + // #2494 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 58064 + + // #2495 + "NokiaSansGre" + "\377\376\375\374" // 58080 + + // #2496 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58096 + + // #2497 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 58128 + + // #2498 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 58144 + + // #2499 + "NokiaSansCnCyr" + "\377\376" // 58160 + + // #2500 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58176 + + // #2501 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 58192 + + // #2502 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 58208 + + // #2503 + "NokiaSansCnCyr" + "\377\376" // 58224 + + // #2504 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58240 + + // #2505 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 58272 + + // #2506 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 58288 + + // #2507 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 58304 + + // #2508 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 58320 + + // #2509 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Nokia Serif SCLF" + "\377\376\375\374\373\372\371\370" // 58400+ + + // #2510 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 58432 + + // #2511 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 58464 + + // #2512 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 58480 + + // #2513 + "Ikarus Vulture" + "\377\376" // 58496 + + // #2514 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 58528 + + // #2515 + "LucidaBright" + "\377\376\375\374" // 58544 + + // #2516 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58560 + + // #2517 + "LucidaBright" + "\377\376\375\374" // 58576 + + // #2518 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58592 + + // #2519 + "SimHei" + "\377\376\375\374\373\372\371\370\367\366" // 58608 + + // #2520 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58624 + + // #2521 + "LucidaBright" + "\377\376\375\374" // 58640 + + // #2522 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58656 + + // #2523 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 58672 + + // #2524 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58688 + + // #2525 + "\377\376\375\374\373\372\371\370" + "HGSoeiKakupoptai" + "\377\376\375\374\373\372\371\370" // 58720+ + + // #2526 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 58736 + + // #2527 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 58752 + + // #2528 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58768 + + // #2529 + "NokiaSansCyr" + "\377\376\375\374" // 58784 + + // #2530 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58800 + + // #2531 + "NokiaSansCyr" + "\377\376\375\374" // 58816 + + // #2532 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58832 + + // #2533 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 58864 + + // #2534 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58880 + + // #2535 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 58912 + + // #2536 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 58928 + + // #2537 + "A.D. MONO" + "\377\376\375\374\373\372\371" // 58944 + + // #2538 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 58960 + + // #2539 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 58976 + + // #2540 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 58992 + + // #2541 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 59024 + + // #2542 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59040 + + // #2543 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Sans" + "\377\376\375\374\373" // 59072 + + // #2544 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 59104 + + // #2545 + "Helvetica" + "\377\376\375\374\373\372\371" // 59120 + + // #2546 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59136 + + // #2547 + "Helvetica" + "\377\376\375\374\373\372\371" // 59152 + + // #2548 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59168 + + // #2549 + "Century" + "\377\376\375\374\373\372\371\370\367" // 59184 + + // #2550 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 59216 + + // #2551 + "\377\376\375\374\373\372\371\370" + "Symbol" + "\377\376" // 59232 + + // #2552 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 59264 + + // #2553 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 59296+ + + // #2554 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 59312 + + // #2555 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 59360+ + + // #2556 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 59376 + + // #2557 + "LucidaBright" + "\377\376\375\374" // 59392 + + // #2558 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 59408 + + // #2559 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 59424 + + // #2560 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59440 + + // #2561 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 59472 + + // #2562 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59488 + + // #2563 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 59504 + + // #2564 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59520 + + // #2565 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 59536 + + // #2566 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 59552 + + // #2567 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 59584 + + // #2568 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59600 + + // #2569 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 59632 + + // #2570 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59648 + + // #2571 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 59680 + + // #2572 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 59696 + + // #2573 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 59728 + + // #2574 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59744 + + // #2575 + "Helvetica" + "\377\376\375\374\373\372\371" // 59760 + + // #2576 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59776 + + // #2577 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 59808 + + // #2578 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59824 + + // #2579 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 59840 + + // #2580 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 59856 + + // #2581 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "RotisSansSerifTur for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 59952+ + + // #2582 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 59968 + + // #2583 + "LucidaBright" + "\377\376\375\374" // 59984 + + // #2584 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 60000 + + // #2585 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 60016 + + // #2586 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 60032 + + // #2587 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 60048 + + // #2588 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 60064 + + // #2589 + "NokiaSerifCE" + "\377\376\375\374" // 60080 + + // #2590 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60096 + + // #2591 + "NokiaSerifCE" + "\377\376\375\374" // 60112 + + // #2592 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60128 + + // #2593 + "Lucida Sans" + "\377\376\375\374\373" // 60144 + + // #2594 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60160 + + // #2595 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 60176 + + // #2596 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 60192 + + // #2597 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 60224 + + // #2598 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60240 + + // #2599 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 60272 + + // #2600 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 60288 + + // #2601 + "Lucida Sans" + "\377\376\375\374\373" // 60304 + + // #2602 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60320 + + // #2603 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 60336 + + // #2604 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 60352 + + // #2605 + "NokiaSansBal" + "\377\376\375\374" // 60368 + + // #2606 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60384 + + // #2607 + "NokiaSansBal" + "\377\376\375\374" // 60400 + + // #2608 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60416 + + // #2609 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 60432 + + // #2610 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 60448 + + // #2611 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 60480 + + // #2612 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60496 + + // #2613 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 60512 + + // #2614 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 60528 + + // #2615 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 60560 + + // #2616 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60576 + + // #2617 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 60608 + + // #2618 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60624 + + // #2619 + "Lucida Sans" + "\377\376\375\374\373" // 60640 + + // #2620 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 60656 + + // #2621 + "Bitstream Vera Sans Mono" + "\377\376\375\374\373\372\371\370" // 60688 + + // #2622 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 60720 + + // #2623 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 60736 + + // #2624 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 60752 + + // #2625 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 60832+ + + // #2626 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60848 + + // #2627 + "\377\376\375\374\373\372\371\370" + "Hershey-Plain-Duplex" + "\377\376\375\374" // 60880 + + // #2628 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 60896 + + // #2629 + "Teletext" + "\377\376\375\374\373\372\371\370" // 60912 + + // #2630 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 60928 + + // #2631 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 60960 + + // #2632 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 60976 + + // #2633 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 61008 + + // #2634 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61024 + + // #2635 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 61056 + + // #2636 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61072 + + // #2637 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 61104 + + // #2638 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61120 + + // #2639 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 61152 + + // #2640 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61168 + + // #2641 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 61184 + + // #2642 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61200 + + // #2643 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61232 + + // #2644 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61248 + + // #2645 + "NokiaSansCE" + "\377\376\375\374\373" // 61264 + + // #2646 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 61280 + + // #2647 + "NokiaSansCE" + "\377\376\375\374\373" // 61296 + + // #2648 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 61312 + + // #2649 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61344 + + // #2650 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61360 + + // #2651 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61392 + + // #2652 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61408 + + // #2653 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61440 + + // #2654 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61456 + + // #2655 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61488 + + // #2656 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61504 + + // #2657 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 61536 + + // #2658 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 61552 + + // #2659 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 61568 + + // #2660 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61584 + + // #2661 + "\377\376\375\374\373\372\371\370" + "Hershey-Gothic-German" + "\377\376\375" // 61616 + + // #2662 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 61632 + + // #2663 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 61664 + + // #2664 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 61680 + + // #2665 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 61712 + + // #2666 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61728 + + // #2667 + "LucidaBright" + "\377\376\375\374" // 61744 + + // #2668 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 61760 + + // #2669 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 61776 + + // #2670 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61792 + + // #2671 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 61824 + + // #2672 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61840 + + // #2673 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 61872 + + // #2674 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 61888 + + // #2675 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 61920 + + // #2676 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 61936 + + // #2677 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 61968 + + // #2678 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 61984 + + // #2679 + "Helvetica" + "\377\376\375\374\373\372\371" // 62000 + + // #2680 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62016 + + // #2681 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 62032 + + // #2682 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62048 + + // #2683 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 62080 + + // #2684 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62096 + + // #2685 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 62128 + + // #2686 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62144 + + // #2687 + "NokiaSansCnCE" + "\377\376\375" // 62160 + + // #2688 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62176 + + // #2689 + "NokiaSansCnCE" + "\377\376\375" // 62192 + + // #2690 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62208 + + // #2691 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 62224 + + // #2692 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62240 + + // #2693 + "NokiaSerifGre" + "\377\376\375" // 62256 + + // #2694 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62272 + + // #2695 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 62304 + + // #2696 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62320 + + // #2697 + "NokiaSerifGre" + "\377\376\375" // 62336 + + // #2698 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62352 + + // #2699 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleBal" + "\377\376\375\374\373\372\371" // 62384 + + // #2700 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62400 + + // #2701 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 62432 + + // #2702 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62448 + + // #2703 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleBal" + "\377\376\375\374\373\372\371" // 62480 + + // #2704 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 62496 + + // #2705 + "Helvetica" + "\377\376\375\374\373\372\371" // 62512 + + // #2706 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62528 + + // #2707 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 62544 + + // #2708 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62560 + + // #2709 + "Helvetica" + "\377\376\375\374\373\372\371" // 62576 + + // #2710 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62592 + + // #2711 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 62624 + + // #2712 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62640 + + // #2713 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 62672 + + // #2714 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62688 + + // #2715 + "Lucida Sans" + "\377\376\375\374\373" // 62704 + + // #2716 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 62720 + + // #2717 + "\377\376\375\374\373\372\371\370" + "HYHeadLine-Medium" + "\377\376\375\374\373\372\371" // 62752 + + // #2718 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 62768 + + // #2719 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 62784 + + // #2720 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62800 + + // #2721 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 62816 + + // #2722 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 62832 + + // #2723 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 62848 + + // #2724 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62864 + + // #2725 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 62880 + + // #2726 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62896 + + // #2727 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 62912 + + // #2728 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 62928 + + // #2729 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 63008+ + + // #2730 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63024 + + // #2731 + "Liberation Sans" + "\377" // 63040 + + // #2732 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63056 + + // #2733 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 63136+ + + // #2734 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63152 + + // #2735 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "HYMyeongJo-Extra" + "\377\376\375\374\373\372\371\370" // 63200+ + + // #2736 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 63216 + + // #2737 + "Helvetica" + "\377\376\375\374\373\372\371" // 63232 + + // #2738 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 63248 + + // #2739 + "Lucida Sans" + "\377\376\375\374\373" // 63264 + + // #2740 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 63280 + + // #2741 + "NokiaSerifBal" + "\377\376\375" // 63296 + + // #2742 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63312 + + // #2743 + "NokiaSerifBal" + "\377\376\375" // 63328 + + // #2744 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63344 + + // #2745 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 63376 + + // #2746 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 63392 + + // #2747 + "\377\376\375\374\373\372\371\370" + "Nokia Large" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 63424 + + // #2748 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 63456 + + // #2749 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 63472 + + // #2750 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 63488 + + // #2751 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 63520 + + // #2752 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63536 + + // #2753 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 63552 + + // #2754 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 63568 + + // #2755 + "LucidaBright" + "\377\376\375\374" // 63584 + + // #2756 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 63600 + + // #2757 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 63632 + + // #2758 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63648 + + // #2759 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 63680 + + // #2760 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 63696 + + // #2761 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 63712 + + // #2762 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 63728 + + // #2763 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 63744 + + // #2764 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 63760 + + // #2765 + "NokiaSansCnTur" + "\377\376" // 63776 + + // #2766 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63792 + + // #2767 + "NokiaSansCnTur" + "\377\376" // 63808 + + // #2768 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63824 + + // #2769 + "NokiaSerifBal" + "\377\376\375" // 63840 + + // #2770 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63856 + + // #2771 + "NokiaSerifBal" + "\377\376\375" // 63872 + + // #2772 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 63888 + + // #2773 + "\377\376\375\374\373\372\371\370" + "Book Antiqua" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 63920 + + // #2774 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 63952 + + // #2775 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 63984 + + // #2776 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64000 + + // #2777 + "MS PMincho" + "\377\376\375\374\373\372" // 64016 + + // #2778 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 64032 + + // #2779 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 64064 + + // #2780 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64080 + + // #2781 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 64096 + + // #2782 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 64112 + + // #2783 + "Liberation Sans" + "\377" // 64128 + + // #2784 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64144 + + // #2785 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 64176 + + // #2786 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64192 + + // #2787 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 64208 + + // #2788 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 64224 + + // #2789 + "Helvetica" + "\377\376\375\374\373\372\371" // 64240 + + // #2790 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64256 + + // #2791 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 64272 + + // #2792 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64288 + + // #2793 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 64304 + + // #2794 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64320 + + // #2795 + "\377\376\375\374\373\372\371\370" + "HGSeikaishotaiPRO" + "\377\376\375\374\373\372\371" // 64352 + + // #2796 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 64368 + + // #2797 + "NokiaSansCn" + "\377\376\375\374\373" // 64384 + + // #2798 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64400 + + // #2799 + "NokiaSansCn" + "\377\376\375\374\373" // 64416 + + // #2800 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64432 + + // #2801 + "\377\376\375\374\373\372\371\370" + "Book Antiqua" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 64464 + + // #2802 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 64496 + + // #2803 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleTur" + "\377\376\375\374\373\372\371" // 64528 + + // #2804 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64544 + + // #2805 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleTur" + "\377\376\375\374\373\372\371" // 64576 + + // #2806 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64592 + + // #2807 + "Helvetica" + "\377\376\375\374\373\372\371" // 64608 + + // #2808 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64624 + + // #2809 + "AgfaRotisSansSerif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 64656 + + // #2810 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64672 + + // #2811 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 64688 + + // #2812 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64704 + + // #2813 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 64720 + + // #2814 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64736 + + // #2815 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 64752 + + // #2816 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64768 + + // #2817 + "Lucida Sans" + "\377\376\375\374\373" // 64784 + + // #2818 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64800 + + // #2819 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 64832 + + // #2820 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64848 + + // #2821 + "ActionIs" + "\377\376\375\374\373\372\371\370" // 64864 + + // #2822 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64880 + + // #2823 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 64912 + + // #2824 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 64928 + + // #2825 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 64960 + + // #2826 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 64976 + + // #2827 + "Lucida Sans" + "\377\376\375\374\373" // 64992 + + // #2828 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65008 + + // #2829 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 65024 + + // #2830 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65040 + + // #2831 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 65056 + + // #2832 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 65072 + + // #2833 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 65088 + + // #2834 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 65104 + + // #2835 + "Liberation Mono" + "\377" // 65120 + + // #2836 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65136 + + // #2837 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 65168 + + // #2838 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65184 + + // #2839 + "NokiaSerifGre" + "\377\376\375" // 65200 + + // #2840 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65216 + + // #2841 + "NokiaSansBal" + "\377\376\375\374" // 65232 + + // #2842 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65248 + + // #2843 + "NokiaSerifGre" + "\377\376\375" // 65264 + + // #2844 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65280 + + // #2845 + "NokiaSansBal" + "\377\376\375\374" // 65296 + + // #2846 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65312 + + // #2847 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 65344 + + // #2848 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65360 + + // #2849 + "Lucida Sans" + "\377\376\375\374\373" // 65376 + + // #2850 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65392 + + // #2851 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 65424 + + // #2852 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65440 + + // #2853 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 65456 + + // #2854 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65472 + + // #2855 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65488 + + // #2856 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65504 + + // #2857 + "Marlett" + "\377\376\375\374\373\372\371\370\367" // 65520 + + // #2858 + "microsoft" + "\377\376\375\374\373\372\371" // 65536 + + // #2859 + "Lucida Sans" + "\377\376\375\374\373" // 65552 + + // #2860 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 65568 + + // #2861 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 65584 + + // #2862 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 65632+ + + // #2863 + "NokiaSansBal" + "\377\376\375\374" // 65648 + + // #2864 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65664 + + // #2865 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65680 + + // #2866 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65696 + + // #2867 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 65712 + + // #2868 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 65760+ + + // #2869 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65776 + + // #2870 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65792 + + // #2871 + "NokiaSansBal" + "\377\376\375\374" // 65808 + + // #2872 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65824 + + // #2873 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65840 + + // #2874 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65856 + + // #2875 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65872 + + // #2876 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65888 + + // #2877 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 65904 + + // #2878 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 65920 + + // #2879 + "Liberation Mono" + "\377" // 65936 + + // #2880 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 65952 + + // #2881 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 65984 + + // #2882 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66000 + + // #2883 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 66016 + + // #2884 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 66032 + + // #2885 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 66064 + + // #2886 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66080 + + // #2887 + "Lucida Sans" + "\377\376\375\374\373" // 66096 + + // #2888 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66112 + + // #2889 + "Helvetica" + "\377\376\375\374\373\372\371" // 66128 + + // #2890 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 66144 + + // #2891 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 66176 + + // #2892 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66192 + + // #2893 + "LucidaBright" + "\377\376\375\374" // 66208 + + // #2894 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 66224 + + // #2895 + "LucidaBright" + "\377\376\375\374" // 66240 + + // #2896 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 66256 + + // #2897 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 66288 + + // #2898 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66304 + + // #2899 + "\377\376\375\374\373\372\371\370" + "Adventure" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 66336+ + + // #2900 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 66352 + + // #2901 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 66384 + + // #2902 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66400 + + // #2903 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Sabon Serif for Nokia" + "\377\376\375" // 66464+ + + // #2904 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 66496 + + // #2905 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 66512 + + // #2906 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 66528 + + // #2907 + "LucidaBright" + "\377\376\375\374" // 66544 + + // #2908 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 66560 + + // #2909 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 66592 + + // #2910 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66608 + + // #2911 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 66624 + + // #2912 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 66656+ + + // #2913 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 66688 + + // #2914 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 66704 + + // #2915 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 66736 + + // #2916 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66752 + + // #2917 + "LucidaBright" + "\377\376\375\374" // 66768 + + // #2918 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 66784 + + // #2919 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 66816 + + // #2920 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 66832 + + // #2921 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 66864 + + // #2922 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 66880 + + // #2923 + "NokiaSansWideGre" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 66912 + + // #2924 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 66928 + + // #2925 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "NokiaSansTitleCyr" + "\377\376\375\374\373\372\371" // 66976+ + + // #2926 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 66992 + + // #2927 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "NokiaSansTitleCyr" + "\377\376\375\374\373\372\371" // 67040+ + + // #2928 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 67056 + + // #2929 + "\377\376\375\374\373\372\371\370" + "Gungsuh" + "\377" // 67072 + + // #2930 + "microsoft" + "\377\376\375\374\373\372\371" // 67088 + + // #2931 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 67104 + + // #2932 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67120 + + // #2933 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 67152 + + // #2934 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 67168 + + // #2935 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 67184 + + // #2936 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67200 + + // #2937 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 67216 + + // #2938 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 67232 + + // #2939 + "LucidaBright" + "\377\376\375\374" // 67248 + + // #2940 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 67264 + + // #2941 + "URW Chancery L" + "\377\376" // 67280 + + // #2942 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 67296 + + // #2943 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 67328 + + // #2944 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 67344 + + // #2945 + "Helvetica" + "\377\376\375\374\373\372\371" // 67360 + + // #2946 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67376 + + // #2947 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 67392 + + // #2948 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 67424+ + + // #2949 + "Helvetica" + "\377\376\375\374\373\372\371" // 67440 + + // #2950 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67456 + + // #2951 + "Helvetica" + "\377\376\375\374\373\372\371" // 67472 + + // #2952 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67488 + + // #2953 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 67504 + + // #2954 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67520 + + // #2955 + "Lucida Sans" + "\377\376\375\374\373" // 67536 + + // #2956 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 67552 + + // #2957 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 67584 + + // #2958 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 67600 + + // #2959 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 67632 + + // #2960 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 67648 + + // #2961 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 67680 + + // #2962 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 67696 + + // #2963 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 67712 + + // #2964 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67728 + + // #2965 + "Blue Highway" + "\377\376\375\374" // 67744 + + // #2966 + "\377\376\375\374\373\372\371\370" + "larabiefonts" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 67776 + + // #2967 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 67808 + + // #2968 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 67824 + + // #2969 + "Blue Highway" + "\377\376\375\374" // 67840 + + // #2970 + "\377\376\375\374\373\372\371\370" + "larabiefonts" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 67872 + + // #2971 + "NokiaSansCnCE" + "\377\376\375" // 67888 + + // #2972 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 67904 + + // #2973 + "NokiaSansCnCE" + "\377\376\375" // 67920 + + // #2974 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 67936 + + // #2975 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 67952 + + // #2976 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 67968 + + // #2977 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 67984 + + // #2978 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68000 + + // #2979 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 68016 + + // #2980 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68032 + + // #2981 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 68064 + + // #2982 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68080 + + // #2983 + "\377\376\375\374\373\372\371\370" + "Arial Narrow" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 68112 + + // #2984 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 68144 + + // #2985 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 68160 + + // #2986 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68176 + + // #2987 + "Lucida Sans" + "\377\376\375\374\373" // 68192 + + // #2988 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68208 + + // #2989 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 68240 + + // #2990 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68256 + + // #2991 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 68272 + + // #2992 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68288 + + // #2993 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 68304 + + // #2994 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68320 + + // #2995 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 68336 + + // #2996 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 68384+ + + // #2997 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 68416 + + // #2998 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68432 + + // #2999 + "Lucida Sans" + "\377\376\375\374\373" // 68448 + + // #3000 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68464 + + // #3001 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 68496 + + // #3002 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68512 + + // #3003 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 68528 + + // #3004 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68544 + + // #3005 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 68576 + + // #3006 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68592 + + // #3007 + "Lucida Sans" + "\377\376\375\374\373" // 68608 + + // #3008 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68624 + + // #3009 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 68656 + + // #3010 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 68672 + + // #3011 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 68688 + + // #3012 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 68704 + + // #3013 + "\377\376\375\374\373\372\371\370" + "Arial Narrow" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 68736 + + // #3014 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 68768 + + // #3015 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 68784 + + // #3016 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68800 + + // #3017 + "LucidaBright" + "\377\376\375\374" // 68816 + + // #3018 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68832 + + // #3019 + "LucidaBright" + "\377\376\375\374" // 68848 + + // #3020 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68864 + + // #3021 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 68880 + + // #3022 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68896 + + // #3023 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 68912 + + // #3024 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 68928 + + // #3025 + "LucidaBright" + "\377\376\375\374" // 68944 + + // #3026 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 68960 + + // #3027 + "NokiaSansCyr" + "\377\376\375\374" // 68976 + + // #3028 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 68992 + + // #3029 + "NokiaSansCyr" + "\377\376\375\374" // 69008 + + // #3030 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69024 + + // #3031 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 69056 + + // #3032 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 69072 + + // #3033 + "\377\376\375\374\373\372\371\370" + "Terminal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 69104 + + // #3034 + "DEC" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 69120 + + // #3035 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 69152 + + // #3036 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 69168 + + // #3037 + "\377\376\375\374\373\372\371\370" + "Tengwar Annatar" + "\377\376\375\374\373\372\371\370\367" // 69200 + + // #3038 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69216 + + // #3039 + "\377\376\375\374\373\372\371\370" + "Tengwar Annatar" + "\377\376\375\374\373\372\371\370\367" // 69248 + + // #3040 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69264 + + // #3041 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 69296 + + // #3042 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 69312 + + // #3043 + "Helvetica" + "\377\376\375\374\373\372\371" // 69328 + + // #3044 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69344 + + // #3045 + "LucidaBright" + "\377\376\375\374" // 69360 + + // #3046 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69376 + + // #3047 + "\377\376\375\374\373\372\371\370" + "Babelfish" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 69408 + + // #3048 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 69440 + + // #3049 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 69456 + + // #3050 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69472 + + // #3051 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 69504 + + // #3052 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 69520 + + // #3053 + "NokiaSerifTur" + "\377\376\375" // 69536 + + // #3054 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69552 + + // #3055 + "LucidaBright" + "\377\376\375\374" // 69568 + + // #3056 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69584 + + // #3057 + "NokiaSerifTur" + "\377\376\375" // 69600 + + // #3058 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69616 + + // #3059 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 69648 + + // #3060 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69664 + + // #3061 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 69680 + + // #3062 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69696 + + // #3063 + "STXingkai" + "\377\376\375\374\373\372\371" // 69712 + + // #3064 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69728 + + // #3065 + "LucidaBright" + "\377\376\375\374" // 69744 + + // #3066 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69760 + + // #3067 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 69776 + + // #3068 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69792 + + // #3069 + "LucidaBright" + "\377\376\375\374" // 69808 + + // #3070 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69824 + + // #3071 + "Hershey-Plain-Duplex-Italic" + "\377\376\375\374\373" // 69856 + + // #3072 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 69872 + + // #3073 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 69888 + + // #3074 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 69904 + + // #3075 + "LucidaBright" + "\377\376\375\374" // 69920 + + // #3076 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69936 + + // #3077 + "LucidaBright" + "\377\376\375\374" // 69952 + + // #3078 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 69968 + + // #3079 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 69984 + + // #3080 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 70000 + + // #3081 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 70032 + + // #3082 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70048 + + // #3083 + "LucidaBright" + "\377\376\375\374" // 70064 + + // #3084 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70080 + + // #3085 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 70112 + + // #3086 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70128 + + // #3087 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 70160 + + // #3088 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70176 + + // #3089 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 70208 + + // #3090 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70224 + + // #3091 + "LucidaBright" + "\377\376\375\374" // 70240 + + // #3092 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70256 + + // #3093 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 70272 + + // #3094 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 70304+ + + // #3095 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 70320 + + // #3096 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70336 + + // #3097 + "\377\376\375\374\373\372\371\370" + "Arial Narrow" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 70368 + + // #3098 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 70400 + + // #3099 + "Lucida Sans" + "\377\376\375\374\373" // 70416 + + // #3100 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 70432 + + // #3101 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 70464 + + // #3102 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70480 + + // #3103 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 70560+ + + // #3104 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70576 + + // #3105 + "AgfaRotisSansSerif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 70608 + + // #3106 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70624 + + // #3107 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 70640 + + // #3108 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70656 + + // #3109 + "\377\376\375\374\373\372\371\370" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 70688+ + + // #3110 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70704 + + // #3111 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 70736 + + // #3112 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 70752 + + // #3113 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 70768 + + // #3114 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 70784 + + // #3115 + "Liberation Sans" + "\377" // 70800 + + // #3116 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 70816 + + // #3117 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 70848 + + // #3118 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 70864 + + // #3119 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 70880 + + // #3120 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 70896 + + // #3121 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 70912 + + // #3122 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 70944+ + + // #3123 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 70960 + + // #3124 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 71008+ + + // #3125 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 71040 + + // #3126 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71056 + + // #3127 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 71088 + + // #3128 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 71104 + + // #3129 + "NokiaSans" + "\377\376\375\374\373\372\371" // 71120 + + // #3130 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71136 + + // #3131 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 71168 + + // #3132 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71184 + + // #3133 + "NokiaSans" + "\377\376\375\374\373\372\371" // 71200 + + // #3134 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71216 + + // #3135 + "NokiaSans" + "\377\376\375\374\373\372\371" // 71232 + + // #3136 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71248 + + // #3137 + "LucidaBright" + "\377\376\375\374" // 71264 + + // #3138 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 71280 + + // #3139 + "NokiaSans" + "\377\376\375\374\373\372\371" // 71296 + + // #3140 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71312 + + // #3141 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 71344 + + // #3142 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71360 + + // #3143 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 71376 + + // #3144 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 71392 + + // #3145 + "Helvetica" + "\377\376\375\374\373\372\371" // 71408 + + // #3146 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71424 + + // #3147 + "NokiaSansBal" + "\377\376\375\374" // 71440 + + // #3148 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71456 + + // #3149 + "NokiaSansBal" + "\377\376\375\374" // 71472 + + // #3150 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71488 + + // #3151 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 71520 + + // #3152 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71536 + + // #3153 + "Lucida Console" + "\377\376" // 71552 + + // #3154 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71568 + + // #3155 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 71584 + + // #3156 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71600 + + // #3157 + "NokiaSansBal" + "\377\376\375\374" // 71616 + + // #3158 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71632 + + // #3159 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 71664 + + // #3160 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71680 + + // #3161 + "NokiaSansBal" + "\377\376\375\374" // 71696 + + // #3162 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 71712 + + // #3163 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 71744 + + // #3164 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71760 + + // #3165 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 71792 + + // #3166 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71808 + + // #3167 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 71824 + + // #3168 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 71840 + + // #3169 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 71856 + + // #3170 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 71872 + + // #3171 + "SabonSerif Tur for Nokia" + "\377\376\375\374\373\372\371\370" // 71904+ + + // #3172 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 71936 + + // #3173 + "Lucida Sans" + "\377\376\375\374\373" // 71952 + + // #3174 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 71968 + + // #3175 + "Brand New" + "\377\376\375\374\373\372\371" // 71984 + + // #3176 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 72016 + + // #3177 + "NokiaSansTitle" + "\377\376" // 72032 + + // #3178 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72048 + + // #3179 + "NokiaSansTitle" + "\377\376" // 72064 + + // #3180 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72080 + + // #3181 + "NokiaSansCnTur" + "\377\376" // 72096 + + // #3182 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72112 + + // #3183 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 72144 + + // #3184 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 72160 + + // #3185 + "Wingdings" + "\377\376\375\374\373\372\371" // 72176 + + // #3186 + "microsoft" + "\377\376\375\374\373\372\371" // 72192 + + // #3187 + "Lucida Sans" + "\377\376\375\374\373" // 72208 + + // #3188 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72224 + + // #3189 + "NokiaSansCnTur" + "\377\376" // 72240 + + // #3190 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72256 + + // #3191 + "\377\376\375\374\373\372\371\370" + "Sabon Serif for Nokia" + "\377\376\375" // 72288+ + + // #3192 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 72320 + + // #3193 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 72336 + + // #3194 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72352 + + // #3195 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 72384 + + // #3196 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72400 + + // #3197 + "NokiaSansCnCE" + "\377\376\375" // 72416 + + // #3198 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72432 + + // #3199 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 72464 + + // #3200 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72480 + + // #3201 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "Hershey-Plain-Triplex-Italic" + "\377\376\375\374" // 72544+ + + // #3202 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72560 + + // #3203 + "NokiaSansCnCE" + "\377\376\375" // 72576 + + // #3204 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 72592 + + // #3205 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 72608 + + // #3206 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72624 + + // #3207 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 72640 + + // #3208 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 72656 + + // #3209 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 72688 + + // #3210 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72704 + + // #3211 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 72736 + + // #3212 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72752 + + // #3213 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 72784 + + // #3214 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 72800 + + // #3215 + "Wingdings 2" + "\377\376\375\374\373" // 72816 + + // #3216 + "microsoft" + "\377\376\375\374\373\372\371" // 72832 + + // #3217 + "MS Gothic" + "\377\376\375\374\373\372\371" // 72848 + + // #3218 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 72864 + + // #3219 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 72880 + + // #3220 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72896 + + // #3221 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 72928 + + // #3222 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72944 + + // #3223 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 72976 + + // #3224 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 72992 + + // #3225 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 73008 + + // #3226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 73056+ + + // #3227 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 73072 + + // #3228 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 73088 + + // #3229 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 73104 + + // #3230 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 73184+ + + // #3231 + "LucidaBright" + "\377\376\375\374" // 73200 + + // #3232 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 73216 + + // #3233 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 73232 + + // #3234 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 73312+ + + // #3235 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 73328 + + // #3236 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 73344 + + // #3237 + "\377\376\375\374\373\372\371\370" + "HGGothicE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 73376+ + + // #3238 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 73392 + + // #3239 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 73424 + + // #3240 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 73440 + + // #3241 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 73472 + + // #3242 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 73488 + + // #3243 + "LucidaBright" + "\377\376\375\374" // 73504 + + // #3244 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 73520 + + // #3245 + "NokiaSansCyr" + "\377\376\375\374" // 73536 + + // #3246 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 73552 + + // #3247 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 73568 + + // #3248 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 73584 + + // #3249 + "HGGothicM" + "\377\376\375\374\373\372\371" // 73600 + + // #3250 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 73616 + + // #3251 + "NokiaSansCyr" + "\377\376\375\374" // 73632 + + // #3252 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 73648 + + // #3253 + "Lucida Sans" + "\377\376\375\374\373" // 73664 + + // #3254 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 73680 + + // #3255 + "\377\376\375\374\373\372\371\370" + "Betsy Flanagan" + "\377\376\375\374\373\372\371\370\367\366" // 73712 + + // #3256 + "\377\376\375\374\373\372\371\370" + "larabiefonts" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 73744 + + // #3257 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 73760 + + // #3258 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 73776 + + // #3259 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 73792 + + // #3260 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 73808 + + // #3261 + "NokiaSansWide" + "\377\376\375" // 73824 + + // #3262 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 73840 + + // #3263 + "Lucida Sans" + "\377\376\375\374\373" // 73856 + + // #3264 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 73872 + + // #3265 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 73904 + + // #3266 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 73920 + + // #3267 + "NokiaSansWide" + "\377\376\375" // 73936 + + // #3268 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 73952 + + // #3269 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 73984 + + // #3270 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 74000 + + // #3271 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 74032 + + // #3272 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74048 + + // #3273 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 74080 + + // #3274 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 74096 + + // #3275 + "Helvetica" + "\377\376\375\374\373\372\371" // 74112 + + // #3276 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 74128 + + // #3277 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 74160 + + // #3278 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74176 + + // #3279 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 74192 + + // #3280 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 74208 + + // #3281 + "\377\376\375\374\373\372\371\370" + "HYShortSamul-Medium" + "\377\376\375\374\373" // 74240 + + // #3282 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 74256 + + // #3283 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 74336+ + + // #3284 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 74368 + + // #3285 + "Lucida Sans" + "\377\376\375\374\373" // 74384 + + // #3286 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74400 + + // #3287 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 74416 + + // #3288 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 74432 + + // #3289 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 74464 + + // #3290 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74480 + + // #3291 + "LucidaBright" + "\377\376\375\374" // 74496 + + // #3292 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 74512 + + // #3293 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 74528 + + // #3294 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 74544 + + // #3295 + "STLiti" + "\377\376\375\374\373\372\371\370\367\366" // 74560 + + // #3296 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 74576 + + // #3297 + "NokiaSansCyr" + "\377\376\375\374" // 74592 + + // #3298 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 74608 + + // #3299 + "NokiaSansCyr" + "\377\376\375\374" // 74624 + + // #3300 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 74640 + + // #3301 + "LucidaBright" + "\377\376\375\374" // 74656 + + // #3302 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 74672 + + // #3303 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 74704 + + // #3304 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74720 + + // #3305 + "\377\376\375\374\373\372\371\370" + "Arial Narrow" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 74752 + + // #3306 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 74784 + + // #3307 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 74816 + + // #3308 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 74832 + + // #3309 + "\377\376\375\374\373\372\371\370" + "Bitstream Charter" + "\377\376\375\374\373\372\371" // 74864 + + // #3310 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 74896 + + // #3311 + "HYGungSo-Bold" + "\377\376\375" // 74912 + + // #3312 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 74928 + + // #3313 + "Helvetica" + "\377\376\375\374\373\372\371" // 74944 + + // #3314 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 74960 + + // #3315 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 74976 + + // #3316 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 74992 + + // #3317 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75024 + + // #3318 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75040 + + // #3319 + "\377\376\375\374\373\372\371\370" + "Nokia Sans Title SemiBold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 75088 + + // #3320 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 75120 + + // #3321 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75152 + + // #3322 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75168 + + // #3323 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75200 + + // #3324 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75216 + + // #3325 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 75264 + + // #3326 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 75280 + + // #3327 + "Lucida Sans" + "\377\376\375\374\373" // 75296 + + // #3328 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75312 + + // #3329 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 75328 + + // #3330 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 75344 + + // #3331 + "Helvetica" + "\377\376\375\374\373\372\371" // 75360 + + // #3332 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75376 + + // #3333 + "Wingdings 3" + "\377\376\375\374\373" // 75392 + + // #3334 + "microsoft" + "\377\376\375\374\373\372\371" // 75408 + + // #3335 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75440 + + // #3336 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75456 + + // #3337 + "\377\376\375\374\373\372\371\370" + "\355""\234""\264""\353""\250""\274""\353""\247""\244""\354""\247""\201""\354""\262""\264""" + "\377\376\375\374\373\372\371\370\367" // 75488 + + // #3338 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 75504 + + // #3339 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75536 + + // #3340 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75552 + + // #3341 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75584 + + // #3342 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75600 + + // #3343 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 75632 + + // #3344 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 75648 + + // #3345 + "SAPDings" + "\377\376\375\374\373\372\371\370" // 75664 + + // #3346 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 75680 + + // #3347 + "Lucida Sans" + "\377\376\375\374\373" // 75696 + + // #3348 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75712 + + // #3349 + "\377\376\375\374\373\372\371\370" + "\347""\264""\260""\346""\230""\216""\351""\253""\224""" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 75744+ + + // #3350 + "dynalab" + "\377\376\375\374\373\372\371\370\367" // 75760 + + // #3351 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 75792 + + // #3352 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75808 + + // #3353 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 75824 + + // #3354 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 75840 + + // #3355 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 75872 + + // #3356 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75888 + + // #3357 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 75920 + + // #3358 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 75936 + + // #3359 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 75952 + + // #3360 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 75968 + + // #3361 + "Helvetica" + "\377\376\375\374\373\372\371" // 75984 + + // #3362 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 76000 + + // #3363 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 76016 + + // #3364 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 76032 + + // #3365 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 76048 + + // #3366 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 76064 + + // #3367 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 76128+ + + // #3368 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 76160 + + // #3369 + "Lucida Sans" + "\377\376\375\374\373" // 76176 + + // #3370 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 76192 + + // #3371 + "Helvetica" + "\377\376\375\374\373\372\371" // 76208 + + // #3372 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 76224 + + // #3373 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 76240 + + // #3374 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 76320+ + + // #3375 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 76336 + + // #3376 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 76384+ + + // #3377 + "HYSinMyeongJo-Medium" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 76416 + + // #3378 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 76432 + + // #3379 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 76448 + + // #3380 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 76464 + + // #3381 + "cmr10" + "\377\376\375\374\373\372\371\370\367\366\365" // 76480 + + // #3382 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 76496 + + // #3383 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 76512 + + // #3384 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 76528 + + // #3385 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 76560 + + // #3386 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 76576 + + // #3387 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 76592 + + // #3388 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 76608 + + // #3389 + "Nokia Sans" + "\377\376\375\374\373\372" // 76624 + + // #3390 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 76656 + + // #3391 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 76688 + + // #3392 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 76704 + + // #3393 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 76720 + + // #3394 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 76768+ + + // #3395 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 76784 + + // #3396 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 76800 + + // #3397 + "NokiaSans" + "\377\376\375\374\373\372\371" // 76816 + + // #3398 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 76832 + + // #3399 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 76864 + + // #3400 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 76880 + + // #3401 + "Nokia Logo" + "\377\376\375\374\373\372" // 76896 + + // #3402 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 76912 + + // #3403 + "Flubber" + "\377\376\375\374\373\372\371\370\367" // 76928 + + // #3404 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 76960 + + // #3405 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 76992 + + // #3406 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77008 + + // #3407 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 77040 + + // #3408 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77056 + + // #3409 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 77072 + + // #3410 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 77088 + + // #3411 + "NokiaSansCyr" + "\377\376\375\374" // 77104 + + // #3412 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77120 + + // #3413 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 77152+ + + // #3414 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77168 + + // #3415 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 77200 + + // #3416 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77216 + + // #3417 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 77232 + + // #3418 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 77248 + + // #3419 + "NokiaSansCyr" + "\377\376\375\374" // 77264 + + // #3420 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77280 + + // #3421 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "NokiaSansWideCE" + "\377\376\375\374\373\372\371\370\367" // 77344+ + + // #3422 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77360 + + // #3423 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 77376 + + // #3424 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 77392 + + // #3425 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 77408 + + // #3426 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77424 + + // #3427 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 77440 + + // #3428 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77456 + + // #3429 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 77472 + + // #3430 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 77488 + + // #3431 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 77520 + + // #3432 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77536 + + // #3433 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 77552 + + // #3434 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77568 + + // #3435 + "\377\376\375\374\373\372\371\370" + "Tengwar Annatar" + "\377\376\375\374\373\372\371\370\367" // 77600 + + // #3436 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77616 + + // #3437 + "STXihei" + "\377\376\375\374\373\372\371\370\367" // 77632 + + // #3438 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77648 + + // #3439 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 77664 + + // #3440 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77680 + + // #3441 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 77712 + + // #3442 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77728 + + // #3443 + "NokiaSerifCE" + "\377\376\375\374" // 77744 + + // #3444 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77760 + + // #3445 + "NokiaSerifCE" + "\377\376\375\374" // 77776 + + // #3446 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 77792 + + // #3447 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 77808 + + // #3448 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77824 + + // #3449 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 77856 + + // #3450 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 77872 + + // #3451 + "Nokia Sans Cn" + "\377\376\375" // 77888 + + // #3452 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 77920 + + // #3453 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 77936 + + // #3454 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77952 + + // #3455 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 77968 + + // #3456 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 77984 + + // #3457 + "\377\376\375\374\373\372\371\370" + "Nokia Sans SC" + "\377\376\375\374\373\372\371\370\367\366\365" // 78016 + + // #3458 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 78048 + + // #3459 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 78064 + + // #3460 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 78080 + + // #3461 + "\377\376\375\374\373\372\371\370" + "STFangsong" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 78112 + + // #3462 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78128 + + // #3463 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 78144 + + // #3464 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 78160 + + // #3465 + "Liberation Mono" + "\377" // 78176 + + // #3466 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78192 + + // #3467 + "\377\376\375\374\373\372\371\370" + "Palatino Linotype" + "\377\376\375\374\373\372\371" // 78224 + + // #3468 + "linotype" + "\377\376\375\374\373\372\371\370" // 78240 + + // #3469 + "RotisSansSerifBal for Nokia" + "\377\376\375\374\373" // 78272 + + // #3470 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 78288 + + // #3471 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 78320 + + // #3472 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78336 + + // #3473 + "NokiaSansWide" + "\377\376\375" // 78352 + + // #3474 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78368 + + // #3475 + "NokiaSansWide" + "\377\376\375" // 78384 + + // #3476 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78400 + + // #3477 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 78416 + + // #3478 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 78432 + + // #3479 + "Lucida Sans" + "\377\376\375\374\373" // 78448 + + // #3480 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78464 + + // #3481 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 78496 + + // #3482 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78512 + + // #3483 + "NokiaSerifTur" + "\377\376\375" // 78528 + + // #3484 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78544 + + // #3485 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 78576 + + // #3486 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78592 + + // #3487 + "NokiaSerifTur" + "\377\376\375" // 78608 + + // #3488 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78624 + + // #3489 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 78640 + + // #3490 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 78656 + + // #3491 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 78688 + + // #3492 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78704 + + // #3493 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 78752+ + + // #3494 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 78768 + + // #3495 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 78800 + + // #3496 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 78816 + + // #3497 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 78864 + + // #3498 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 78880 + + // #3499 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 78896 + + // #3500 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 78912 + + // #3501 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 78928 + + // #3502 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 78944 + + // #3503 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 78976 + + // #3504 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 78992 + + // #3505 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 79024 + + // #3506 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 79040 + + // #3507 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 79056 + + // #3508 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79072 + + // #3509 + "NokiaSansWide" + "\377\376\375" // 79088 + + // #3510 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 79104 + + // #3511 + "NokiaSansWide" + "\377\376\375" // 79120 + + // #3512 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 79136 + + // #3513 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 79152 + + // #3514 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79168 + + // #3515 + "\377\376\375\374\373\372\371\370" + "HYGraphic-Medium" + "\377\376\375\374\373\372\371\370" // 79200+ + + // #3516 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 79216 + + // #3517 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 79248 + + // #3518 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79264 + + // #3519 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 79296 + + // #3520 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79312 + + // #3521 + "Lucida Sans" + "\377\376\375\374\373" // 79328 + + // #3522 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79344 + + // #3523 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 79376 + + // #3524 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79392 + + // #3525 + "\377\376\375\374\373\372\371\370" + "Dingbats" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 79424 + + // #3526 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 79440 + + // #3527 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 79472 + + // #3528 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79488 + + // #3529 + "Microsoft Sans Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 79520+ + + // #3530 + "microsoft" + "\377\376\375\374\373\372\371" // 79536 + + // #3531 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 79584 + + // #3532 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 79600 + + // #3533 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 79616 + + // #3534 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79632 + + // #3535 + "cmex10" + "\377\376\375\374\373\372\371\370\367\366" // 79648 + + // #3536 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 79664 + + // #3537 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 79696 + + // #3538 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79712 + + // #3539 + "STKaiti" + "\377\376\375\374\373\372\371\370\367" // 79728 + + // #3540 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 79744 + + // #3541 + "\377\376\375\374\373\372\371\370" + "FakeReceipt" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79776 + + // #3542 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 79808 + + // #3543 + "GulimChe" + "\377\376\375\374\373\372\371\370" // 79824 + + // #3544 + "microsoft" + "\377\376\375\374\373\372\371" // 79840 + + // #3545 + "Lucida Sans" + "\377\376\375\374\373" // 79856 + + // #3546 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79872 + + // #3547 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 79904 + + // #3548 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 79920 + + // #3549 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 79952 + + // #3550 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 79968 + + // #3551 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 80000 + + // #3552 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80016 + + // #3553 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 80032 + + // #3554 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 80048 + + // #3555 + "Nokia Standard Multiscript" + "\377\376\375\374\373\372" // 80080 + + // #3556 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 80112 + + // #3557 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 80128 + + // #3558 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 80144 + + // #3559 + "NokiaSansCnGre" + "\377\376" // 80160 + + // #3560 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 80176 + + // #3561 + "FZShuTi" + "\377\376\375\374\373\372\371\370\367" // 80192 + + // #3562 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 80208 + + // #3563 + "NokiaSansCnGre" + "\377\376" // 80224 + + // #3564 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 80240 + + // #3565 + "\377\376\375\374\373\372\371\370" + "Edgewater" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 80272 + + // #3566 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 80304 + + // #3567 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 80320 + + // #3568 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 80336 + + // #3569 + "\377\376\375\374\373\372\371\370" + "Terminal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 80368 + + // #3570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 80416+ + + // #3571 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 80432 + + // #3572 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 80448 + + // #3573 + "Liberation Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 80480 + + // #3574 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 80496 + + // #3575 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 80512 + + // #3576 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 80528 + + // #3577 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 80544 + + // #3578 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 80560 + + // #3579 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 80592 + + // #3580 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80608 + + // #3581 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 80624 + + // #3582 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 80672+ + + // #3583 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 80688 + + // #3584 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 80704 + + // #3585 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 80720 + + // #3586 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 80800+ + + // #3587 + "Lucida Sans" + "\377\376\375\374\373" // 80816 + + // #3588 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80832 + + // #3589 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 80848 + + // #3590 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 80864 + + // #3591 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 80880 + + // #3592 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 80896 + + // #3593 + "Nokia Serif" + "\377\376\375\374\373" // 80912 + + // #3594 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 80944 + + // #3595 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 80976 + + // #3596 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 80992 + + // #3597 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81008 + + // #3598 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81024 + + // #3599 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 81056 + + // #3600 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 81072 + + // #3601 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81088 + + // #3602 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81104 + + // #3603 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 81120 + + // #3604 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 81136 + + // #3605 + "Helvetica" + "\377\376\375\374\373\372\371" // 81152 + + // #3606 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 81168 + + // #3607 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 81184 + + // #3608 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 81200 + + // #3609 + "Lucida Sans" + "\377\376\375\374\373" // 81216 + + // #3610 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 81232 + + // #3611 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "Nokia Sans Title Bold" + "\377\376\375\374\373\372\371\370\367\366\365" // 81312+ + + // #3612 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 81344 + + // #3613 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81360 + + // #3614 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81376 + + // #3615 + "\377\376\375\374\373\372\371\370" + "cmmi10" + "\377\376" // 81392 + + // #3616 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 81408 + + // #3617 + "Helvetica" + "\377\376\375\374\373\372\371" // 81424 + + // #3618 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 81440 + + // #3619 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81456 + + // #3620 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81472 + + // #3621 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81488 + + // #3622 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81504 + + // #3623 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81520 + + // #3624 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81536 + + // #3625 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 81568 + + // #3626 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 81584 + + // #3627 + "Liberation Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 81616 + + // #3628 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 81632 + + // #3629 + "NokiaSansBal" + "\377\376\375\374" // 81648 + + // #3630 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 81664 + + // #3631 + "NokiaSansBal" + "\377\376\375\374" // 81680 + + // #3632 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 81696 + + // #3633 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 81728 + + // #3634 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 81744 + + // #3635 + "HydrogenWhiskey" + "\377" // 81760 + + // #3636 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 81792 + + // #3637 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 81808 + + // #3638 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 81824 + + // #3639 + "\377\376\375\374\373\372\371\370" + "Bitstream Charter" + "\377\376\375\374\373\372\371" // 81856 + + // #3640 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 81888 + + // #3641 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 81920 + + // #3642 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 81936 + + // #3643 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 81968 + + // #3644 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 81984 + + // #3645 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 82016 + + // #3646 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82032 + + // #3647 + "NokiaSansBal" + "\377\376\375\374" // 82048 + + // #3648 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 82064 + + // #3649 + "NokiaSansBal" + "\377\376\375\374" // 82080 + + // #3650 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 82096 + + // #3651 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 82128 + + // #3652 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82144 + + // #3653 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 82160 + + // #3654 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82176 + + // #3655 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 82192 + + // #3656 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82208 + + // #3657 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 82224 + + // #3658 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82240 + + // #3659 + "LucidaBright" + "\377\376\375\374" // 82256 + + // #3660 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 82272 + + // #3661 + "Nokia Serif" + "\377\376\375\374\373" // 82288 + + // #3662 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 82320 + + // #3663 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 82352 + + // #3664 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82368 + + // #3665 + "LucidaBright" + "\377\376\375\374" // 82384 + + // #3666 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 82400 + + // #3667 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 82416 + + // #3668 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 82432 + + // #3669 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 82448 + + // #3670 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 82464 + + // #3671 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 82480 + + // #3672 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82496 + + // #3673 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 82512 + + // #3674 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82528 + + // #3675 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 82544 + + // #3676 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 82560 + + // #3677 + "NSimSun" + "\377\376\375\374\373\372\371\370\367" // 82576 + + // #3678 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 82592 + + // #3679 + "Lucida Sans" + "\377\376\375\374\373" // 82608 + + // #3680 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82624 + + // #3681 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 82640 + + // #3682 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 82720+ + + // #3683 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 82752 + + // #3684 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82768 + + // #3685 + "STXinwei" + "\377\376\375\374\373\372\371\370" // 82784 + + // #3686 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 82800 + + // #3687 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans Mono" + "\377\376\375\374\373\372\371\370" // 82832 + + // #3688 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 82848 + + // #3689 + "Lucida Sans" + "\377\376\375\374\373" // 82864 + + // #3690 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82880 + + // #3691 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 82912 + + // #3692 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 82928 + + // #3693 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 82944 + + // #3694 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 82960 + + // #3695 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 82992 + + // #3696 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 83008 + + // #3697 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 83040 + + // #3698 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 83056 + + // #3699 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 83088 + + // #3700 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 83104 + + // #3701 + "NokiaSerifTur" + "\377\376\375" // 83120 + + // #3702 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 83136 + + // #3703 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 83168 + + // #3704 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 83184 + + // #3705 + "NokiaSerifTur" + "\377\376\375" // 83200 + + // #3706 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 83216 + + // #3707 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 83248 + + // #3708 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83264 + + // #3709 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83280 + + // #3710 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83296 + + // #3711 + "LucidaBright" + "\377\376\375\374" // 83312 + + // #3712 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83328 + + // #3713 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 83344 + + // #3714 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 83360 + + // #3715 + "LucidaBright" + "\377\376\375\374" // 83376 + + // #3716 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83392 + + // #3717 + "LucidaBright" + "\377\376\375\374" // 83408 + + // #3718 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83424 + + // #3719 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 83456 + + // #3720 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 83472 + + // #3721 + "NokiaSerifCE" + "\377\376\375\374" // 83488 + + // #3722 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 83504 + + // #3723 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83520 + + // #3724 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83536 + + // #3725 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 83552 + + // #3726 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 83568 + + // #3727 + "Larabiefont" + "\377\376\375\374\373" // 83584 + + // #3728 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 83616 + + // #3729 + "NokiaSerifCE" + "\377\376\375\374" // 83632 + + // #3730 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 83648 + + // #3731 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 83664 + + // #3732 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 83680 + + // #3733 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83696 + + // #3734 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83712 + + // #3735 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83728 + + // #3736 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83744 + + // #3737 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83760 + + // #3738 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83776 + + // #3739 + "Nokia Serif" + "\377\376\375\374\373" // 83792 + + // #3740 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 83824 + + // #3741 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 83840 + + // #3742 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 83856 + + // #3743 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 83888 + + // #3744 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 83904 + + // #3745 + "OCRB" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 83920 + + // #3746 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 83936 + + // #3747 + "HGSoeiKakugothicUB" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 83968 + + // #3748 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 83984 + + // #3749 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 84016 + + // #3750 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 84032 + + // #3751 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 84048 + + // #3752 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84064 + + // #3753 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 84096 + + // #3754 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 84112 + + // #3755 + "LucidaBright" + "\377\376\375\374" // 84128 + + // #3756 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84144 + + // #3757 + "LucidaBright" + "\377\376\375\374" // 84160 + + // #3758 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84176 + + // #3759 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 84208 + + // #3760 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 84224 + + // #3761 + "NokiaSansCE" + "\377\376\375\374\373" // 84240 + + // #3762 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 84256 + + // #3763 + "NokiaSansCE" + "\377\376\375\374\373" // 84272 + + // #3764 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 84288 + + // #3765 + "Helvetica" + "\377\376\375\374\373\372\371" // 84304 + + // #3766 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 84320 + + // #3767 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 84336 + + // #3768 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84352 + + // #3769 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 84384 + + // #3770 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 84400 + + // #3771 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 84416 + + // #3772 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 84432 + + // #3773 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 84448 + + // #3774 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 84512+ + + // #3775 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 84544 + + // #3776 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 84560 + + // #3777 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 84592 + + // #3778 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 84608 + + // #3779 + "SabonSerif CE for Nokia" + "\377\376\375\374\373\372\371\370\367" // 84640 + + // #3780 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 84672 + + // #3781 + "HYGothic-Medium" + "\377" // 84688 + + // #3782 + "hanyang" + "\377\376\375\374\373\372\371\370\367" // 84704 + + // #3783 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 84736 + + // #3784 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84752 + + // #3785 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 84768 + + // #3786 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84784 + + // #3787 + "LucidaBright" + "\377\376\375\374" // 84800 + + // #3788 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84816 + + // #3789 + "LucidaBright" + "\377\376\375\374" // 84832 + + // #3790 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84848 + + // #3791 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 84880 + + // #3792 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 84896 + + // #3793 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 84928 + + // #3794 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 84944 + + // #3795 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 84960 + + // #3796 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 84976 + + // #3797 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 84992 + + // #3798 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85008 + + // #3799 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 85024 + + // #3800 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85040 + + // #3801 + "\377\376\375\374\373\372\371\370" + "Hershey-Plain-Triplex" + "\377\376\375" // 85072 + + // #3802 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85088 + + // #3803 + "NokiaSans" + "\377\376\375\374\373\372\371" // 85104 + + // #3804 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85120 + + // #3805 + "LucidaBright" + "\377\376\375\374" // 85136 + + // #3806 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85152 + + // #3807 + "NokiaSans" + "\377\376\375\374\373\372\371" // 85168 + + // #3808 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85184 + + // #3809 + "LucidaBright" + "\377\376\375\374" // 85200 + + // #3810 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85216 + + // #3811 + "LucidaBright" + "\377\376\375\374" // 85232 + + // #3812 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85248 + + // #3813 + "LucidaBright" + "\377\376\375\374" // 85264 + + // #3814 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85280 + + // #3815 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 85296 + + // #3816 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 85344+ + + // #3817 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "NokiaSansTitleCyr" + "\377\376\375\374\373\372\371" // 85408+ + + // #3818 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85424 + + // #3819 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "NokiaSansTitleCyr" + "\377\376\375\374\373\372\371" // 85472+ + + // #3820 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85488 + + // #3821 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 85504 + + // #3822 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 85536+ + + // #3823 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 85552 + + // #3824 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85568 + + // #3825 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 85584 + + // #3826 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85600 + + // #3827 + "LucidaBright" + "\377\376\375\374" // 85616 + + // #3828 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85632 + + // #3829 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 85648 + + // #3830 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85664 + + // #3831 + "\377\376\375\374\373\372\371\370" + "Arial Black" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 85696 + + // #3832 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 85728 + + // #3833 + "NokiaSerifTur" + "\377\376\375" // 85744 + + // #3834 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85760 + + // #3835 + "LucidaBright" + "\377\376\375\374" // 85776 + + // #3836 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85792 + + // #3837 + "NokiaSerifTur" + "\377\376\375" // 85808 + + // #3838 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 85824 + + // #3839 + "Eli 5.0b" + "\377\376\375\374\373\372\371\370" // 85840 + + // #3840 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 85872 + + // #3841 + "LucidaBright" + "\377\376\375\374" // 85888 + + // #3842 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 85904 + + // #3843 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 85936 + + // #3844 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 85952 + + // #3845 + "\377\376\375\374\373\372\371\370" + "Nokia Sans Light" + "\377\376\375\374\373\372\371\370" // 85984 + + // #3846 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 86016 + + // #3847 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 86032 + + // #3848 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 86048 + + // #3849 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 86064 + + // #3850 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 86080 + + // #3851 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 86096 + + // #3852 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 86112 + + // #3853 + "LucidaBright" + "\377\376\375\374" // 86128 + + // #3854 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 86144 + + // #3855 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86176 + + // #3856 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 86192 + + // #3857 + "\377\376\375\374\373\372\371\370" + "Caption" + "\377" // 86208 + + // #3858 + "\377\376\375\374\373\372\371\370" + "Ets" + "\377\376\375\374\373" // 86224 + + // #3859 + "LucidaBright" + "\377\376\375\374" // 86240 + + // #3860 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 86256 + + // #3861 + "\377\376\375\374\373\372\371\370" + "Nokia Sans SCLF" + "\377\376\375\374\373\372\371\370\367" // 86288 + + // #3862 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 86320 + + // #3863 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 86352 + + // #3864 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 86368 + + // #3865 + "NokiaSansTur" + "\377\376\375\374" // 86384 + + // #3866 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 86400 + + // #3867 + "Lucida Sans" + "\377\376\375\374\373" // 86416 + + // #3868 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86432 + + // #3869 + "NokiaSansTur" + "\377\376\375\374" // 86448 + + // #3870 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 86464 + + // #3871 + "LucidaBright" + "\377\376\375\374" // 86480 + + // #3872 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 86496 + + // #3873 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 86528 + + // #3874 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86544 + + // #3875 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 86560 + + // #3876 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 86576 + + // #3877 + "\377\376\375\374\373\372\371\370" + "HGSGyoshotai" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 86608 + + // #3878 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 86624 + + // #3879 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 86656 + + // #3880 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86672 + + // #3881 + "HGPGyoshotai" + "\377\376\375\374" // 86688 + + // #3882 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 86704 + + // #3883 + "Lucida Sans" + "\377\376\375\374\373" // 86720 + + // #3884 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86736 + + // #3885 + "LucidaBright" + "\377\376\375\374" // 86752 + + // #3886 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 86768 + + // #3887 + "\377\376\375\374\373\372\371\370" + "HGPSoeiKakupoptai" + "\377\376\375\374\373\372\371" // 86800 + + // #3888 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 86816 + + // #3889 + "Helvetica" + "\377\376\375\374\373\372\371" // 86832 + + // #3890 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 86848 + + // #3891 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 86880 + + // #3892 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86896 + + // #3893 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 86912 + + // #3894 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 86928 + + // #3895 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 86960 + + // #3896 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 86976 + + // #3897 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 87008 + + // #3898 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 87024 + + // #3899 + "Helvetica" + "\377\376\375\374\373\372\371" // 87040 + + // #3900 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87056 + + // #3901 + "LucidaBright" + "\377\376\375\374" // 87072 + + // #3902 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87088 + + // #3903 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 87104 + + // #3904 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87120 + + // #3905 + "Helvetica" + "\377\376\375\374\373\372\371" // 87136 + + // #3906 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87152 + + // #3907 + "URW Bookman L" + "\377\376\375" // 87168 + + // #3908 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 87184 + + // #3909 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 87200 + + // #3910 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87216 + + // #3911 + "der D\303""\244""monschriftkegel" + "\377\376\375\374\373\372\371\370\367\366" // 87248 + + // #3912 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 87280 + + // #3913 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 87296 + + // #3914 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87312 + + // #3915 + "Lucida Sans" + "\377\376\375\374\373" // 87328 + + // #3916 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 87344 + + // #3917 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 87360 + + // #3918 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87376 + + // #3919 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 87392 + + // #3920 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87408 + + // #3921 + "NokiaSans" + "\377\376\375\374\373\372\371" // 87424 + + // #3922 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 87440 + + // #3923 + "LucidaBright" + "\377\376\375\374" // 87456 + + // #3924 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87472 + + // #3925 + "Helvetica" + "\377\376\375\374\373\372\371" // 87488 + + // #3926 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87504 + + // #3927 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 87536 + + // #3928 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87552 + + // #3929 + "NokiaSans" + "\377\376\375\374\373\372\371" // 87568 + + // #3930 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 87584 + + // #3931 + "Lucida Sans" + "\377\376\375\374\373" // 87600 + + // #3932 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 87616 + + // #3933 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 87632 + + // #3934 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87648 + + // #3935 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 87680 + + // #3936 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 87696 + + // #3937 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 87728 + + // #3938 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87744 + + // #3939 + "\377\376\375\374\373\372\371\370" + "Hershey-Gothic-Italian" + "\377\376" // 87776 + + // #3940 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 87792 + + // #3941 + "NokiaSansCE" + "\377\376\375\374\373" // 87808 + + // #3942 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 87824 + + // #3943 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 87840 + + // #3944 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 87856 + + // #3945 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 87888 + + // #3946 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87904 + + // #3947 + "NokiaSansCE" + "\377\376\375\374\373" // 87920 + + // #3948 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 87936 + + // #3949 + "Helvetica" + "\377\376\375\374\373\372\371" // 87952 + + // #3950 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 87968 + + // #3951 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88000 + + // #3952 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88016 + + // #3953 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 88048 + + // #3954 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88064 + + // #3955 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 88080 + + // #3956 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 88096 + + // #3957 + "LucidaBright" + "\377\376\375\374" // 88112 + + // #3958 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 88128 + + // #3959 + "\377\376\375\374\373\372\371\370" + "cmsy10" + "\377\376" // 88144 + + // #3960 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 88160 + + // #3961 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88192 + + // #3962 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88208 + + // #3963 + "LucidaBright" + "\377\376\375\374" // 88224 + + // #3964 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 88240 + + // #3965 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 88256 + + // #3966 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 88272 + + // #3967 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 88288 + + // #3968 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 88304 + + // #3969 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 88320 + + // #3970 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 88336 + + // #3971 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88368 + + // #3972 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88384 + + // #3973 + "LucidaBright" + "\377\376\375\374" // 88400 + + // #3974 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 88416 + + // #3975 + "\377\376\375\374\373\372\371\370" + "HGGyoshotai" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88448 + + // #3976 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 88464 + + // #3977 + "Nokia Sans SemiBold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88496 + + // #3978 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 88528 + + // #3979 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88560 + + // #3980 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88576 + + // #3981 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans Mono" + "\377\376\375\374\373\372\371\370" // 88608 + + // #3982 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 88624 + + // #3983 + "LucidaBright" + "\377\376\375\374" // 88640 + + // #3984 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 88656 + + // #3985 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88688 + + // #3986 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88704 + + // #3987 + "\377\376\375\374\373\372\371\370" + "SabonMT" + "\377" // 88720 + + // #3988 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 88752 + + // #3989 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "RotisSansSerifCE for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 88816+ + + // #3990 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 88832 + + // #3991 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 88864 + + // #3992 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 88880 + + // #3993 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 88896 + + // #3994 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 88912 + + // #3995 + "Garamond" + "\377\376\375\374\373\372\371\370" // 88928 + + // #3996 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 88960 + + // #3997 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 88976 + + // #3998 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 88992 + + // #3999 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 89024 + + // #4000 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89040 + + // #4001 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 89072 + + // #4002 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 89088 + + // #4003 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 89120 + + // #4004 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89136 + + // #4005 + "LucidaBright" + "\377\376\375\374" // 89152 + + // #4006 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89168 + + // #4007 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 89200 + + // #4008 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89216 + + // #4009 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 89232 + + // #4010 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89248 + + // #4011 + "RotisSansSerifBal for Nokia" + "\377\376\375\374\373" // 89280 + + // #4012 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 89296 + + // #4013 + "LucidaBright" + "\377\376\375\374" // 89312 + + // #4014 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89328 + + // #4015 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 89360 + + // #4016 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89376 + + // #4017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Courier New" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89440+ + + // #4018 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 89472 + + // #4019 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 89488 + + // #4020 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89504 + + // #4021 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 89536 + + // #4022 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 89552 + + // #4023 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 89584 + + // #4024 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89600 + + // #4025 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 89616 + + // #4026 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89632 + + // #4027 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 89664 + + // #4028 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 89680 + + // #4029 + "Lucida Sans" + "\377\376\375\374\373" // 89696 + + // #4030 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 89712 + + // #4031 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 89744 + + // #4032 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 89760 + + // #4033 + "LucidaBright" + "\377\376\375\374" // 89776 + + // #4034 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89792 + + // #4035 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 89808 + + // #4036 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89824 + + // #4037 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 89840 + + // #4038 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89856 + + // #4039 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 89872 + + // #4040 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89888 + + // #4041 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 89904 + + // #4042 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 89920 + + // #4043 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 89936 + + // #4044 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89952 + + // #4045 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 89968 + + // #4046 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 89984 + + // #4047 + "Helvetica" + "\377\376\375\374\373\372\371" // 90000 + + // #4048 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90016 + + // #4049 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 90032 + + // #4050 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90048 + + // #4051 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 90080 + + // #4052 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 90096 + + // #4053 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 90128 + + // #4054 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 90144 + + // #4055 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 90176 + + // #4056 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 90192 + + // #4057 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 90208 + + // #4058 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90224 + + // #4059 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 90240 + + // #4060 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90256 + + // #4061 + "\377\376\375\374\373\372\371\370" + "HGMaruGothicMPRO" + "\377\376\375\374\373\372\371\370" // 90288 + + // #4062 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 90304 + + // #4063 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 90320 + + // #4064 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90336 + + // #4065 + "LucidaBright" + "\377\376\375\374" // 90352 + + // #4066 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 90368 + + // #4067 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 90400 + + // #4068 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 90416 + + // #4069 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 90448 + + // #4070 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90464 + + // #4071 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 90496 + + // #4072 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 90512 + + // #4073 + "URW Bookman L" + "\377\376\375" // 90528 + + // #4074 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 90544 + + // #4075 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 90560 + + // #4076 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90576 + + // #4077 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 90608 + + // #4078 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 90624 + + // #4079 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 90656 + + // #4080 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 90672 + + // #4081 + "Helvetica" + "\377\376\375\374\373\372\371" // 90688 + + // #4082 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90704 + + // #4083 + "Nokia Sans SemiBold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 90736 + + // #4084 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 90768 + + // #4085 + "\377\376\375\374\373\372\371\370" + "NokiaSansWideTur" + "\377\376\375\374\373\372\371\370" // 90800 + + // #4086 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 90816 + + // #4087 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 90848 + + // #4088 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 90864 + + // #4089 + "Helvetica" + "\377\376\375\374\373\372\371" // 90880 + + // #4090 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 90896 + + // #4091 + "URW Bookman L" + "\377\376\375" // 90912 + + // #4092 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 90928 + + // #4093 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 90960 + + // #4094 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 90976 + + // #4095 + "New Gulim" + "\377\376\375\374\373\372\371" // 90992 + + // #4096 + "microsoft" + "\377\376\375\374\373\372\371" // 91008 + + // #4097 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 91040 + + // #4098 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91056 + + // #4099 + "LucidaBright" + "\377\376\375\374" // 91072 + + // #4100 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 91088 + + // #4101 + "LucidaBright" + "\377\376\375\374" // 91104 + + // #4102 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 91120 + + // #4103 + "\377\376\375\374\373\372\371\370" + "AgfaRotisSansSerifExtraBold" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91168 + + // #4104 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 91184 + + // #4105 + "Lucida Sans" + "\377\376\375\374\373" // 91200 + + // #4106 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91216 + + // #4107 + "Helvetica" + "\377\376\375\374\373\372\371" // 91232 + + // #4108 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91248 + + // #4109 + "Beta Dance" + "\377\376\375\374\373\372" // 91264 + + // #4110 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 91296 + + // #4111 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 91328 + + // #4112 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91344 + + // #4113 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 91376 + + // #4114 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91392 + + // #4115 + "Helvetica" + "\377\376\375\374\373\372\371" // 91408 + + // #4116 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91424 + + // #4117 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 91456 + + // #4118 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91472 + + // #4119 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 91504 + + // #4120 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91520 + + // #4121 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 91552 + + // #4122 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 91568 + + // #4123 + "Helvetica" + "\377\376\375\374\373\372\371" // 91584 + + // #4124 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91600 + + // #4125 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 91632 + + // #4126 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91648 + + // #4127 + "Nokia Standard Multiscript" + "\377\376\375\374\373\372" // 91680 + + // #4128 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 91712 + + // #4129 + "NokiaSerifTur" + "\377\376\375" // 91728 + + // #4130 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 91744 + + // #4131 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 91760 + + // #4132 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 91776 + + // #4133 + "NokiaSerifTur" + "\377\376\375" // 91792 + + // #4134 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 91808 + + // #4135 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 91824 + + // #4136 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91840 + + // #4137 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 91856 + + // #4138 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 91872 + + // #4139 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 91904 + + // #4140 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 91920 + + // #4141 + "Nokia Sans" + "\377\376\375\374\373\372" // 91936 + + // #4142 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 91968 + + // #4143 + "Binary" + "\377\376\375\374\373\372\371\370\367\366" // 91984 + + // #4144 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 92016 + + // #4145 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 92048 + + // #4146 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 92064 + + // #4147 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 92096 + + // #4148 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92112 + + // #4149 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 92128 + + // #4150 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 92192+ + + // #4151 + "NokiaSansCyr" + "\377\376\375\374" // 92208 + + // #4152 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 92224 + + // #4153 + "NokiaSansCyr" + "\377\376\375\374" // 92240 + + // #4154 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 92256 + + // #4155 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 92272 + + // #4156 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 92288 + + // #4157 + "LucidaBright" + "\377\376\375\374" // 92304 + + // #4158 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92320 + + // #4159 + "LucidaBright" + "\377\376\375\374" // 92336 + + // #4160 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92352 + + // #4161 + "URW Bookman L" + "\377\376\375" // 92368 + + // #4162 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 92384 + + // #4163 + "LucidaBright" + "\377\376\375\374" // 92400 + + // #4164 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92416 + + // #4165 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 92432 + + // #4166 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92448 + + // #4167 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 92480 + + // #4168 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 92496 + + // #4169 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 92512 + + // #4170 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92528 + + // #4171 + "Lucida Sans" + "\377\376\375\374\373" // 92544 + + // #4172 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 92560 + + // #4173 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 92592 + + // #4174 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 92608 + + // #4175 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 92624 + + // #4176 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92640 + + // #4177 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 92656 + + // #4178 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92672 + + // #4179 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 92688 + + // #4180 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92704 + + // #4181 + "Nokia Sans" + "\377\376\375\374\373\372" // 92720 + + // #4182 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 92752 + + // #4183 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 92784 + + // #4184 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92800 + + // #4185 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 92816 + + // #4186 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92832 + + // #4187 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 92848 + + // #4188 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92864 + + // #4189 + "LucidaBright" + "\377\376\375\374" // 92880 + + // #4190 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 92896 + + // #4191 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 92912 + + // #4192 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92928 + + // #4193 + "Helvetica" + "\377\376\375\374\373\372\371" // 92944 + + // #4194 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 92960 + + // #4195 + "Garamond" + "\377\376\375\374\373\372\371\370" // 92976 + + // #4196 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 93008 + + // #4197 + "Lucida Sans Unicode" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93040 + + // #4198 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93056 + + // #4199 + "Helvetica" + "\377\376\375\374\373\372\371" // 93072 + + // #4200 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93088 + + // #4201 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 93104 + + // #4202 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93120 + + // #4203 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 93152 + + // #4204 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93168 + + // #4205 + "NokiaSansCE" + "\377\376\375\374\373" // 93184 + + // #4206 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93200 + + // #4207 + "NokiaSansCE" + "\377\376\375\374\373" // 93216 + + // #4208 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93232 + + // #4209 + "LucidaBright" + "\377\376\375\374" // 93248 + + // #4210 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 93264 + + // #4211 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 93296 + + // #4212 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93312 + + // #4213 + "\377\376\375\374\373\372\371\370" + "Hershey-Gothic-English" + "\377\376" // 93344+ + + // #4214 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93360 + + // #4215 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 93376 + + // #4216 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93392 + + // #4217 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 93424 + + // #4218 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93440 + + // #4219 + "Helvetica" + "\377\376\375\374\373\372\371" // 93456 + + // #4220 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93472 + + // #4221 + "NokiaSansTur" + "\377\376\375\374" // 93488 + + // #4222 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93504 + + // #4223 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 93520 + + // #4224 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 93536 + + // #4225 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 93552 + + // #4226 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93568 + + // #4227 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 93600 + + // #4228 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 93616 + + // #4229 + "Lucida Sans" + "\377\376\375\374\373" // 93632 + + // #4230 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 93648 + + // #4231 + "NokiaSans" + "\377\376\375\374\373\372\371" // 93664 + + // #4232 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93680 + + // #4233 + "NokiaSansTur" + "\377\376\375\374" // 93696 + + // #4234 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93712 + + // #4235 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 93744 + + // #4236 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 93760 + + // #4237 + "NCP Logo" + "\377\376\375\374\373\372\371\370" // 93776 + + // #4238 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93792 + + // #4239 + "NokiaSans" + "\377\376\375\374\373\372\371" // 93808 + + // #4240 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93824 + + // #4241 + "\377\376\375\374\373\372\371\370" + "Nokia Sans SC" + "\377\376\375\374\373\372\371\370\367\366\365" // 93856 + + // #4242 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 93888 + + // #4243 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 93904 + + // #4244 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 93920 + + // #4245 + "\377\376\375\374\373\372\371\370" + "Embargo" + "\377" // 93936 + + // #4246 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 93952 + + // #4247 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 93984 + + // #4248 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 94000 + + // #4249 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 94032 + + // #4250 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 94048 + + // #4251 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 94064 + + // #4252 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 94080 + + // #4253 + "NokiaSerif" + "\377\376\375\374\373\372" // 94096 + + // #4254 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94112 + + // #4255 + "NokiaSerif" + "\377\376\375\374\373\372" // 94128 + + // #4256 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94144 + + // #4257 + "NMP Logo" + "\377\376\375\374\373\372\371\370" // 94160 + + // #4258 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94176 + + // #4259 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 94208 + + // #4260 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 94224 + + // #4261 + "\377\376\375\374\373\372\371\370" + "STCaiyun" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 94256 + + // #4262 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94272 + + // #4263 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 94288 + + // #4264 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 94304 + + // #4265 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 94320 + + // #4266 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 94336 + + // #4267 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 94384 + + // #4268 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 94400 + + // #4269 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 94432 + + // #4270 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 94448 + + // #4271 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 94464 + + // #4272 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 94480 + + // #4273 + "Helvetica" + "\377\376\375\374\373\372\371" // 94496 + + // #4274 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 94512 + + // #4275 + "URW Bookman L" + "\377\376\375" // 94528 + + // #4276 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 94544 + + // #4277 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 94560 + + // #4278 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 94624+ + + // #4279 + "\377\376\375\374\373\372\371\370" + "Creature" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 94656 + + // #4280 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 94688 + + // #4281 + "NokiaSansCE" + "\377\376\375\374\373" // 94704 + + // #4282 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94720 + + // #4283 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 94736 + + // #4284 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 94752 + + // #4285 + "NokiaSansCE" + "\377\376\375\374\373" // 94768 + + // #4286 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94784 + + // #4287 + "NokiaSansCE" + "\377\376\375\374\373" // 94800 + + // #4288 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94816 + + // #4289 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 94848 + + // #4290 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 94864 + + // #4291 + "NokiaSansCE" + "\377\376\375\374\373" // 94880 + + // #4292 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 94896 + + // #4293 + "LucidaBright" + "\377\376\375\374" // 94912 + + // #4294 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 94928 + + // #4295 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 94960 + + // #4296 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 94976 + + // #4297 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 94992 + + // #4298 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95008 + + // #4299 + "Densmore" + "\377\376\375\374\373\372\371\370" // 95024 + + // #4300 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 95056 + + // #4301 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95072 + + // #4302 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95088 + + // #4303 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95104 + + // #4304 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95120 + + // #4305 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95136 + + // #4306 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95152 + + // #4307 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 95168 + + // #4308 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95184 + + // #4309 + "NokiaSansTur" + "\377\376\375\374" // 95200 + + // #4310 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95216 + + // #4311 + "Lucida Sans" + "\377\376\375\374\373" // 95232 + + // #4312 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 95248 + + // #4313 + "NokiaSansTur" + "\377\376\375\374" // 95264 + + // #4314 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95280 + + // #4315 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 95296 + + // #4316 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95312 + + // #4317 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95328 + + // #4318 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95344 + + // #4319 + "Helvetica" + "\377\376\375\374\373\372\371" // 95360 + + // #4320 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95376 + + // #4321 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 95392 + + // #4322 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95408 + + // #4323 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95424 + + // #4324 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95440 + + // #4325 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95456 + + // #4326 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95472 + + // #4327 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95488 + + // #4328 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95504 + + // #4329 + "\377\376\375\374\373\372\371\370" + "Captain Podd" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 95536 + + // #4330 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95552 + + // #4331 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95568 + + // #4332 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95584 + + // #4333 + "URW Bookman L" + "\377\376\375" // 95600 + + // #4334 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 95616 + + // #4335 + "NokiaSansCE" + "\377\376\375\374\373" // 95632 + + // #4336 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95648 + + // #4337 + "NokiaSansCE" + "\377\376\375\374\373" // 95664 + + // #4338 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95680 + + // #4339 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 95712 + + // #4340 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 95728 + + // #4341 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 95744 + + // #4342 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95760 + + // #4343 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95776 + + // #4344 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95792 + + // #4345 + "Helvetica" + "\377\376\375\374\373\372\371" // 95808 + + // #4346 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95824 + + // #4347 + "Nokia Sans" + "\377\376\375\374\373\372" // 95840 + + // #4348 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 95872 + + // #4349 + "YouYuan" + "\377\376\375\374\373\372\371\370\367" // 95888 + + // #4350 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95904 + + // #4351 + "NokiaSansTur" + "\377\376\375\374" // 95920 + + // #4352 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 95936 + + // #4353 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 95952 + + // #4354 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 95968 + + // #4355 + "NokiaSansTur" + "\377\376\375\374" // 95984 + + // #4356 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96000 + + // #4357 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 96032 + + // #4358 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 96048 + + // #4359 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 96064 + + // #4360 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96080 + + // #4361 + "NokiaSerifCyr" + "\377\376\375" // 96096 + + // #4362 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96112 + + // #4363 + "NokiaSerifCyr" + "\377\376\375" // 96128 + + // #4364 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96144 + + // #4365 + "NokiaSerif" + "\377\376\375\374\373\372" // 96160 + + // #4366 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96176 + + // #4367 + "HGPGothicM" + "\377\376\375\374\373\372" // 96192 + + // #4368 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 96208 + + // #4369 + "NokiaSerif" + "\377\376\375\374\373\372" // 96224 + + // #4370 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96240 + + // #4371 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans Mono" + "\377\376\375\374\373\372\371\370" // 96272 + + // #4372 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96288 + + // #4373 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 96320 + + // #4374 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 96336 + + // #4375 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 96352 + + // #4376 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 96368 + + // #4377 + "URW Bookman L" + "\377\376\375" // 96384 + + // #4378 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 96400 + + // #4379 + "\377\376\375\374\373\372\371\370" + "HGSSoeiKakupoptai" + "\377\376\375\374\373\372\371" // 96432 + + // #4380 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 96448 + + // #4381 + "\377\376\375\374\373\372\371\370" + "HGPGothicE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 96480 + + // #4382 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 96496 + + // #4383 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 96528 + + // #4384 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 96544 + + // #4385 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 96560 + + // #4386 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96576 + + // #4387 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 96608 + + // #4388 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 96624 + + // #4389 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 96640 + + // #4390 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 96656 + + // #4391 + "Lucida Sans" + "\377\376\375\374\373" // 96672 + + // #4392 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 96688 + + // #4393 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 96704 + + // #4394 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96720 + + // #4395 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 96736 + + // #4396 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96752 + + // #4397 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 96768 + + // #4398 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 96784 + + // #4399 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 96800 + + // #4400 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96816 + + // #4401 + "Helvetica" + "\377\376\375\374\373\372\371" // 96832 + + // #4402 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 96848 + + // #4403 + "\377\376\375\374\373\372\371\370" + "Nokia Serif SC" + "\377\376\375\374\373\372\371\370\367\366" // 96880 + + // #4404 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 96912 + + // #4405 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 96944 + + // #4406 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 96960 + + // #4407 + "NokiaSans" + "\377\376\375\374\373\372\371" // 96976 + + // #4408 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 96992 + + // #4409 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 97008 + + // #4410 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97024 + + // #4411 + "NokiaSans" + "\377\376\375\374\373\372\371" // 97040 + + // #4412 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97056 + + // #4413 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 97088 + + // #4414 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97104 + + // #4415 + "Helvetica" + "\377\376\375\374\373\372\371" // 97120 + + // #4416 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97136 + + // #4417 + "Helvetica" + "\377\376\375\374\373\372\371" // 97152 + + // #4418 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97168 + + // #4419 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 97200 + + // #4420 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97216 + + // #4421 + "Helvetica" + "\377\376\375\374\373\372\371" // 97232 + + // #4422 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97248 + + // #4423 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 97280 + + // #4424 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97296 + + // #4425 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 97312 + + // #4426 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97328 + + // #4427 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 97344 + + // #4428 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97360 + + // #4429 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 97392 + + // #4430 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 97408 + + // #4431 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 97424 + + // #4432 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97440 + + // #4433 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 97456 + + // #4434 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97472 + + // #4435 + "wasy10" + "\377\376\375\374\373\372\371\370\367\366" // 97488 + + // #4436 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97504 + + // #4437 + "Helvetica" + "\377\376\375\374\373\372\371" // 97520 + + // #4438 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97536 + + // #4439 + "NokiaSerif" + "\377\376\375\374\373\372" // 97552 + + // #4440 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97568 + + // #4441 + "NokiaSerif" + "\377\376\375\374\373\372" // 97584 + + // #4442 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97600 + + // #4443 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 97632 + + // #4444 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97648 + + // #4445 + "Helvetica" + "\377\376\375\374\373\372\371" // 97664 + + // #4446 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97680 + + // #4447 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 97696 + + // #4448 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97712 + + // #4449 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 97744 + + // #4450 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97760 + + // #4451 + "NokiaSans" + "\377\376\375\374\373\372\371" // 97776 + + // #4452 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97792 + + // #4453 + "Lucida Sans" + "\377\376\375\374\373" // 97808 + + // #4454 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 97824 + + // #4455 + "URW Bookman L" + "\377\376\375" // 97840 + + // #4456 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 97856 + + // #4457 + "NokiaSans" + "\377\376\375\374\373\372\371" // 97872 + + // #4458 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 97888 + + // #4459 + "Helvetica" + "\377\376\375\374\373\372\371" // 97904 + + // #4460 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 97920 + + // #4461 + "\377\376\375\374\373\372\371\370" + "Nokia Sans Light" + "\377\376\375\374\373\372\371\370" // 97952 + + // #4462 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 97984 + + // #4463 + "Lucida Sans" + "\377\376\375\374\373" // 98000 + + // #4464 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98016 + + // #4465 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 98048 + + // #4466 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 98064 + + // #4467 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 98080 + + // #4468 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98096 + + // #4469 + "\377\376\375\374\373\372\371\370" + "Fudd" + "\377\376\375\374" // 98112 + + // #4470 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 98128 + + // #4471 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 98160 + + // #4472 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98176 + + // #4473 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 98208 + + // #4474 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98224 + + // #4475 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 98240 + + // #4476 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 98256 + + // #4477 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 98272 + + // #4478 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98288 + + // #4479 + "Helvetica" + "\377\376\375\374\373\372\371" // 98304 + + // #4480 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98320 + + // #4481 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 98352 + + // #4482 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98368 + + // #4483 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 98384 + + // #4484 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 98464+ + + // #4485 + "\377\376\375\374\373\372\371\370" + "URW Gothic L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 98496 + + // #4486 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 98512 + + // #4487 + "Lucida Sans" + "\377\376\375\374\373" // 98528 + + // #4488 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98544 + + // #4489 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 98560 + + // #4490 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 98576 + + // #4491 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 98592 + + // #4492 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 98608 + + // #4493 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 98640 + + // #4494 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98656 + + // #4495 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 98688 + + // #4496 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98704 + + // #4497 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 98736 + + // #4498 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98752 + + // #4499 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 98784 + + // #4500 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 98800 + + // #4501 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 98832 + + // #4502 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 98848 + + // #4503 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 98864 + + // #4504 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 98912+ + + // #4505 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 98944 + + // #4506 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 98960 + + // #4507 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 98992 + + // #4508 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99008 + + // #4509 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 99024 + + // #4510 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99040 + + // #4511 + "Failed Attempt" + "\377\376" // 99056 + + // #4512 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 99088 + + // #4513 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 99120 + + // #4514 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99136 + + // #4515 + "\377\376\375\374\373\372\371\370" + "URW Palladio L" + "\377\376\375\374\373\372\371\370\367\366" // 99168 + + // #4516 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 99184 + + // #4517 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 99216 + + // #4518 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99232 + + // #4519 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 99248 + + // #4520 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 99264 + + // #4521 + "NokiaSansCE" + "\377\376\375\374\373" // 99280 + + // #4522 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99296 + + // #4523 + "NokiaSansCE" + "\377\376\375\374\373" // 99312 + + // #4524 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99328 + + // #4525 + "NokiaSansCnCyr" + "\377\376" // 99344 + + // #4526 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99360 + + // #4527 + "NokiaSansCnCyr" + "\377\376" // 99376 + + // #4528 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99392 + + // #4529 + "NokiaSansCE" + "\377\376\375\374\373" // 99408 + + // #4530 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99424 + + // #4531 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 99440 + + // #4532 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99456 + + // #4533 + "NokiaSansCE" + "\377\376\375\374\373" // 99472 + + // #4534 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99488 + + // #4535 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 99520 + + // #4536 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99536 + + // #4537 + "BatangChe" + "\377\376\375\374\373\372\371" // 99552 + + // #4538 + "microsoft" + "\377\376\375\374\373\372\371" // 99568 + + // #4539 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 99584 + + // #4540 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99600 + + // #4541 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 99632 + + // #4542 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99648 + + // #4543 + "Helvetica" + "\377\376\375\374\373\372\371" // 99664 + + // #4544 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99680 + + // #4545 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 99712 + + // #4546 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 99728 + + // #4547 + "NokiaSansTitle" + "\377\376" // 99744 + + // #4548 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99760 + + // #4549 + "Helvetica" + "\377\376\375\374\373\372\371" // 99776 + + // #4550 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99792 + + // #4551 + "NokiaSansTitle" + "\377\376" // 99808 + + // #4552 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99824 + + // #4553 + "Garamond" + "\377\376\375\374\373\372\371\370" // 99840 + + // #4554 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 99872 + + // #4555 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 99888 + + // #4556 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 99904 + + // #4557 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 99936 + + // #4558 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 99952 + + // #4559 + "NokiaSerifCyr" + "\377\376\375" // 99968 + + // #4560 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 99984 + + // #4561 + "NokiaSerifCyr" + "\377\376\375" // 100000 + + // #4562 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100016 + + // #4563 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 100032 + + // #4564 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 100048 + + // #4565 + "LucidaBright" + "\377\376\375\374" // 100064 + + // #4566 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 100080 + + // #4567 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 100096 + + // #4568 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 100112 + + // #4569 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 100128 + + // #4570 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 100192+ + + // #4571 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 100224 + + // #4572 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 100240 + + // #4573 + "Helvetica" + "\377\376\375\374\373\372\371" // 100256 + + // #4574 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 100272 + + // #4575 + "Helvetica" + "\377\376\375\374\373\372\371" // 100288 + + // #4576 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 100304 + + // #4577 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 100336 + + // #4578 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100352 + + // #4579 + "Distortia" + "\377\376\375\374\373\372\371" // 100368 + + // #4580 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 100400 + + // #4581 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 100416 + + // #4582 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 100432 + + // #4583 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 100464 + + // #4584 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 100480 + + // #4585 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 100496 + + // #4586 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 100512 + + // #4587 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleTur" + "\377\376\375\374\373\372\371" // 100544 + + // #4588 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100560 + + // #4589 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 100592 + + // #4590 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100608 + + // #4591 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleTur" + "\377\376\375\374\373\372\371" // 100640 + + // #4592 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100656 + + // #4593 + "NokiaSansCyr" + "\377\376\375\374" // 100672 + + // #4594 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100688 + + // #4595 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 100720 + + // #4596 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100736 + + // #4597 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 100768 + + // #4598 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100784 + + // #4599 + "NokiaSansCyr" + "\377\376\375\374" // 100800 + + // #4600 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100816 + + // #4601 + "Lucida Sans" + "\377\376\375\374\373" // 100832 + + // #4602 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 100848 + + // #4603 + "NokiaSansCnBal" + "\377\376" // 100864 + + // #4604 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100880 + + // #4605 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleBal" + "\377\376\375\374\373\372\371" // 100912 + + // #4606 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100928 + + // #4607 + "\377\376\375\374\373\372\371\370" + "NokiaSansTitleBal" + "\377\376\375\374\373\372\371" // 100960 + + // #4608 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 100976 + + // #4609 + "NokiaSansCnBal" + "\377\376" // 100992 + + // #4610 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 101008 + + // #4611 + "\377\376\375\374\373\372\371\370" + "MS UI Gothic" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 101040 + + // #4612 + "\377\376\375\374\373\372\371\370" + "ricoh" + "\377\376\375" // 101056 + + // #4613 + "Lucida Sans" + "\377\376\375\374\373" // 101072 + + // #4614 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101088 + + // #4615 + "\377\376\375\374\373\372\371\370" + "Tengwar Annatar" + "\377\376\375\374\373\372\371\370\367" // 101120 + + // #4616 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 101136 + + // #4617 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Nokia Standard" + "\377\376\375\374\373\372\371\370\367\366" // 101216+ + + // #4618 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 101248 + + // #4619 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 101280 + + // #4620 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101296 + + // #4621 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 101328 + + // #4622 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 101344 + + // #4623 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 101376 + + // #4624 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 101392 + + // #4625 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 101424 + + // #4626 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101440 + + // #4627 + "NokiaSerif" + "\377\376\375\374\373\372" // 101456 + + // #4628 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 101472 + + // #4629 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 101488 + + // #4630 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 101504 + + // #4631 + "NokiaSerif" + "\377\376\375\374\373\372" // 101520 + + // #4632 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 101536 + + // #4633 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 101552 + + // #4634 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 101568 + + // #4635 + "Liberation Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 101600 + + // #4636 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 101616 + + // #4637 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 101632 + + // #4638 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 101648 + + // #4639 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 101680 + + // #4640 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 101696 + + // #4641 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 101712 + + // #4642 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 101728 + + // #4643 + "Lucida Sans" + "\377\376\375\374\373" // 101744 + + // #4644 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101760 + + // #4645 + "LucidaBright" + "\377\376\375\374" // 101776 + + // #4646 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 101792 + + // #4647 + "LucidaBright" + "\377\376\375\374" // 101808 + + // #4648 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 101824 + + // #4649 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 101856 + + // #4650 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101872 + + // #4651 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 101888 + + // #4652 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 101904 + + // #4653 + "LucidaBright" + "\377\376\375\374" // 101920 + + // #4654 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 101936 + + // #4655 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 101968 + + // #4656 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 101984 + + // #4657 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 102016 + + // #4658 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102032 + + // #4659 + "Lucida Sans" + "\377\376\375\374\373" // 102048 + + // #4660 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102064 + + // #4661 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 102080 + + // #4662 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 102096 + + // #4663 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 102112 + + // #4664 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 102128 + + // #4665 + "Century Gothic" + "\377\376" // 102144 + + // #4666 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102176 + + // #4667 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 102208 + + // #4668 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102224 + + // #4669 + "Lucida Sans" + "\377\376\375\374\373" // 102240 + + // #4670 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102256 + + // #4671 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 102304+ + + // #4672 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 102320 + + // #4673 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 102352 + + // #4674 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 102368 + + // #4675 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 102384 + + // #4676 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 102400 + + // #4677 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102432 + + // #4678 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 102448 + + // #4679 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 102464 + + // #4680 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 102480 + + // #4681 + "NokiaSansWideBal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102512 + + // #4682 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 102528 + + // #4683 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 102544 + + // #4684 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 102560 + + // #4685 + "\377\376\375\374\373\372\371\370" + "msbm10" + "\377\376" // 102576 + + // #4686 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 102592 + + // #4687 + "Century Gothic" + "\377\376" // 102608 + + // #4688 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102640 + + // #4689 + "Lucida Sans" + "\377\376\375\374\373" // 102656 + + // #4690 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102672 + + // #4691 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 102704 + + // #4692 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102720 + + // #4693 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 102752 + + // #4694 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 102768 + + // #4695 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Sabon Serif for Nokia" + "\377\376\375" // 102816+ + + // #4696 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 102848 + + // #4697 + "LucidaBright" + "\377\376\375\374" // 102864 + + // #4698 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 102880 + + // #4699 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 102896 + + // #4700 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 102944+ + + // #4701 + "\377\376\375\374\373\372\371\370" + "Rotis Sans Serif for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 102992 + + // #4702 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 103008 + + // #4703 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 103024 + + // #4704 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 103072+ + + // #4705 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 103088 + + // #4706 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 103136+ + + // #4707 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 103152 + + // #4708 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 103200+ + + // #4709 + "\377\376\375\374\373\372\371\370" + "Arial monospaced for SAP" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 103248 + + // #4710 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 103280 + + // #4711 + "\377\376\375\374\373\372\371\370" + "Font in a Red Suit" + "\377\376\375\374\373\372" // 103312 + + // #4712 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 103344 + + // #4713 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 103360 + + // #4714 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 103376 + + // #4715 + "NokiaSansTitleCE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 103408 + + // #4716 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103424 + + // #4717 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 103456 + + // #4718 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103472 + + // #4719 + "Electroharmonix" + "\377" // 103488 + + // #4720 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 103520 + + // #4721 + "NokiaSans" + "\377\376\375\374\373\372\371" // 103536 + + // #4722 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103552 + + // #4723 + "NokiaSans" + "\377\376\375\374\373\372\371" // 103568 + + // #4724 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103584 + + // #4725 + "NokiaSansTitleCE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 103616 + + // #4726 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103632 + + // #4727 + "NokiaSerifGre" + "\377\376\375" // 103648 + + // #4728 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103664 + + // #4729 + "NokiaSerifGre" + "\377\376\375" // 103680 + + // #4730 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 103696 + + // #4731 + "\377\376\375\374\373\372\371\370" + "Dingbats" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 103728 + + // #4732 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 103744 + + // #4733 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 103776 + + // #4734 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103792 + + // #4735 + "RotisSansSerifBal for Nokia" + "\377\376\375\374\373" // 103824 + + // #4736 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 103840 + + // #4737 + "LucidaBright" + "\377\376\375\374" // 103856 + + // #4738 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 103872 + + // #4739 + "LucidaBright" + "\377\376\375\374" // 103888 + + // #4740 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 103904 + + // #4741 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 103936 + + // #4742 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 103952 + + // #4743 + "LucidaBright" + "\377\376\375\374" // 103968 + + // #4744 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 103984 + + // #4745 + "LucidaBright" + "\377\376\375\374" // 104000 + + // #4746 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104016 + + // #4747 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 104032 + + // #4748 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 104048 + + // #4749 + "\377\376\375\374\373\372\371\370" + "Nokia Serif SC" + "\377\376\375\374\373\372\371\370\367\366" // 104080 + + // #4750 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 104112 + + // #4751 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "RotisSansSerifCE for Nokia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 104176+ + + // #4752 + "\377\376\375\374\373\372\371\370" + "agfa" + "\377\376\375\374" // 104192 + + // #4753 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 104224 + + // #4754 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104240 + + // #4755 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 104256 + + // #4756 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 104272 + + // #4757 + "LucidaBright" + "\377\376\375\374" // 104288 + + // #4758 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104304 + + // #4759 + "NokiaSerif" + "\377\376\375\374\373\372" // 104320 + + // #4760 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 104336 + + // #4761 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Sabon Serif for Nokia" + "\377\376\375" // 104416+ + + // #4762 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 104448 + + // #4763 + "NokiaSerif" + "\377\376\375\374\373\372" // 104464 + + // #4764 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 104480 + + // #4765 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 104512 + + // #4766 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 104528 + + // #4767 + "Lucida Sans" + "\377\376\375\374\373" // 104544 + + // #4768 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 104560 + + // #4769 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 104592 + + // #4770 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 104608 + + // #4771 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 104640 + + // #4772 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 104656 + + // #4773 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 104672 + + // #4774 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104688 + + // #4775 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 104720 + + // #4776 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 104736 + + // #4777 + "DirtyBaker'sDozen" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 104768 + + // #4778 + "\377\376\375\374\373\372\371\370" + "macromedia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 104800 + + // #4779 + "\377\376\375\374\373\372\371\370" + "Terminal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 104832 + + // #4780 + "DEC" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 104848 + + // #4781 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 104864 + + // #4782 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104880 + + // #4783 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 104896 + + // #4784 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 104912 + + // #4785 + "NokiaSansTur" + "\377\376\375\374" // 104928 + + // #4786 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 104944 + + // #4787 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 104960 + + // #4788 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 104976 + + // #4789 + "NokiaSansTur" + "\377\376\375\374" // 104992 + + // #4790 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105008 + + // #4791 + "\377\376\375\374\373\372\371\370" + "Bitstream Vera Sans" + "\377\376\375\374\373" // 105040 + + // #4792 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 105072 + + // #4793 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 105104 + + // #4794 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 105120 + + // #4795 + "\377\376\375\374\373\372\371\370" + "Nimbus Mono L" + "\377\376\375\374\373\372\371\370\367\366\365" // 105152 + + // #4796 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 105168 + + // #4797 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 105248+ + + // #4798 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105280 + + // #4799 + "\377\376\375\374\373\372\371\370" + "Nimbus Sans L Condensed" + "\377" // 105312 + + // #4800 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 105328 + + // #4801 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Nokia Sans Wide" + "\377\376\375\374\373\372\371\370\367" // 105376+ + + // #4802 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105408 + + // #4803 + "NokiaSansCn" + "\377\376\375\374\373" // 105424 + + // #4804 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105440 + + // #4805 + "SabonSerif Bal for Nokia" + "\377\376\375\374\373\372\371\370" // 105472 + + // #4806 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105504 + + // #4807 + "NokiaSansCn" + "\377\376\375\374\373" // 105520 + + // #4808 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105536 + + // #4809 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 105552 + + // #4810 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 105568 + + // #4811 + "Lucida Sans" + "\377\376\375\374\373" // 105584 + + // #4812 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 105600 + + // #4813 + "\377\376\375\374\373\372\371\370" + "Standard Symbols L" + "\377\376\375\374\373\372" // 105632 + + // #4814 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 105648 + + // #4815 + "NokiaSans" + "\377\376\375\374\373\372\371" // 105664 + + // #4816 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105680 + + // #4817 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 105696 + + // #4818 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 105760+ + + // #4819 + "NokiaSans" + "\377\376\375\374\373\372\371" // 105776 + + // #4820 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105792 + + // #4821 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 105808 + + // #4822 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 105824 + + // #4823 + "LucidaBright" + "\377\376\375\374" // 105840 + + // #4824 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 105856 + + // #4825 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105888 + + // #4826 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 105904 + + // #4827 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 105936 + + // #4828 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 105952 + + // #4829 + "NokiaSansWideCyr" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 105984 + + // #4830 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106000 + + // #4831 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 106032 + + // #4832 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106048 + + // #4833 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 106064 + + // #4834 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106080 + + // #4835 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 106096 + + // #4836 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106112 + + // #4837 + "Lucida Sans" + "\377\376\375\374\373" // 106128 + + // #4838 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106144 + + // #4839 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 106176 + + // #4840 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106192 + + // #4841 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 106224 + + // #4842 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106240 + + // #4843 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 106256 + + // #4844 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 106272 + + // #4845 + "Helvetica" + "\377\376\375\374\373\372\371" // 106288 + + // #4846 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106304 + + // #4847 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 106336 + + // #4848 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 106352 + + // #4849 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 106384 + + // #4850 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106400 + + // #4851 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 106432 + + // #4852 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106448 + + // #4853 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 106480 + + // #4854 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106496 + + // #4855 + "\355""\234""\264""\353""\250""\274""\354""\230""\233""\354""\262""\264""" + "\377\376\375\374" // 106512 + + // #4856 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106528 + + // #4857 + "Helvetica" + "\377\376\375\374\373\372\371" // 106544 + + // #4858 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106560 + + // #4859 + "Lucida Sans" + "\377\376\375\374\373" // 106576 + + // #4860 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106592 + + // #4861 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 106608 + + // #4862 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 106624 + + // #4863 + "NokiaSerifCyr" + "\377\376\375" // 106640 + + // #4864 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106656 + + // #4865 + "NokiaSerifCyr" + "\377\376\375" // 106672 + + // #4866 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106688 + + // #4867 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106720 + + // #4868 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106736 + + // #4869 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 106752 + + // #4870 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106768 + + // #4871 + "Helvetica" + "\377\376\375\374\373\372\371" // 106784 + + // #4872 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106800 + + // #4873 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "DejaVu Serif" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 106848+ + + // #4874 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 106864 + + // #4875 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 106880 + + // #4876 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106896 + + // #4877 + "Lucida Sans" + "\377\376\375\374\373" // 106912 + + // #4878 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 106928 + + // #4879 + "\377\376\375\374\373\372\371\370" + "Fixed" + "\377\376\375" // 106944 + + // #4880 + "Misc" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 106960 + + // #4881 + "Helvetica" + "\377\376\375\374\373\372\371" // 106976 + + // #4882 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 106992 + + // #4883 + "Helvetica" + "\377\376\375\374\373\372\371" // 107008 + + // #4884 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107024 + + // #4885 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 107056 + + // #4886 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 107072 + + // #4887 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 107104 + + // #4888 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107120 + + // #4889 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 107136 + + // #4890 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 107168+ + + // #4891 + "NokiaSansGre" + "\377\376\375\374" // 107184 + + // #4892 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 107200 + + // #4893 + "NokiaSansGre" + "\377\376\375\374" // 107216 + + // #4894 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 107232 + + // #4895 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 107248 + + // #4896 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107264 + + // #4897 + "\377\376\375\374\373\372\371\370" + "Times" + "\377\376\375" // 107280 + + // #4898 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107296 + + // #4899 + "Lucida Sans" + "\377\376\375\374\373" // 107312 + + // #4900 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 107328 + + // #4901 + "\377\376\375\374\373\372\371\370" + "Nokia Sans SCLF" + "\377\376\375\374\373\372\371\370\367" // 107360 + + // #4902 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 107392 + + // #4903 + "Nimbus Roman No9 L" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 107424 + + // #4904 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 107440 + + // #4905 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "SabonSerif Tur for Nokia" + "\377\376\375\374\373\372\371\370" // 107488+ + + // #4906 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 107520 + + // #4907 + "DotumChe" + "\377\376\375\374\373\372\371\370" // 107536 + + // #4908 + "microsoft" + "\377\376\375\374\373\372\371" // 107552 + + // #4909 + "\377\376\375\374\373\372\371\370" + "Bitstream Charter" + "\377\376\375\374\373\372\371" // 107584 + + // #4910 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 107616 + + // #4911 + "LiSu" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 107632 + + // #4912 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 107648 + + // #4913 + "Century Gothic" + "\377\376" // 107664 + + // #4914 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 107696 + + // #4915 + "LucidaBright" + "\377\376\375\374" // 107712 + + // #4916 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 107728 + + // #4917 + "\377\376\375\374\373\372\371\370" + "Standard Symbols L" + "\377\376\375\374\373\372" // 107760 + + // #4918 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 107776 + + // #4919 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 107808 + + // #4920 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 107824 + + // #4921 + "NokiaSerif" + "\377\376\375\374\373\372" // 107840 + + // #4922 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 107856 + + // #4923 + "NokiaSerif" + "\377\376\375\374\373\372" // 107872 + + // #4924 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 107888 + + // #4925 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 107904 + + // #4926 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 107920 + + // #4927 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 107936 + + // #4928 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107952 + + // #4929 + "Courier" + "\377\376\375\374\373\372\371\370\367" // 107968 + + // #4930 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 107984 + + // #4931 + "NokiaSans" + "\377\376\375\374\373\372\371" // 108000 + + // #4932 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 108016 + + // #4933 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 108032 + + // #4934 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 108048 + + // #4935 + "NokiaSans" + "\377\376\375\374\373\372\371" // 108064 + + // #4936 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 108080 + + // #4937 + "Lucida Sans" + "\377\376\375\374\373" // 108096 + + // #4938 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108112 + + // #4939 + "Lucida Sans Typewriter" + "\377\376\375\374\373\372\371\370\367\366" // 108144 + + // #4940 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108160 + + // #4941 + "\377\376\375\374\373\372\371\370" + "Arial monospaced for SAP" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108208 + + // #4942 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108240 + + // #4943 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 108272 + + // #4944 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108288 + + // #4945 + "LucidaBright" + "\377\376\375\374" // 108304 + + // #4946 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 108320 + + // #4947 + "Lucida Sans" + "\377\376\375\374\373" // 108336 + + // #4948 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108352 + + // #4949 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108384 + + // #4950 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 108400 + + // #4951 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 108432 + + // #4952 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108448 + + // #4953 + "\377\376\375\374\373\372\371\370" + "Terminal" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108480 + + // #4954 + "\377\376\375\374\373\372\371\370" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 108512+ + + // #4955 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 108528 + + // #4956 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 108576+ + + // #4957 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 108592 + + // #4958 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 108640+ + + // #4959 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 108656 + + // #4960 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 108672 + + // #4961 + "\377\376\375\374\373\372\371\370" + "STHupo" + "\377\376" // 108688 + + // #4962 + "\377\376\375\374\373\372\371\370" + "unknown" + "\377" // 108704 + + // #4963 + "\377\376\375\374\373\372\371\370" + "Utopia" + "\377\376" // 108720 + + // #4964 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 108736 + + // #4965 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 108768 + + // #4966 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 108784 + + // #4967 + "SabonSerif Bal for Nokia" + "\377\376\375\374\373\372\371\370" // 108816 + + // #4968 + "\377\376\375\374\373\372\371\370" + "monotype" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108848 + + // #4969 + "LucidaTypewriter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 108880 + + // #4970 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 108896 + + // #4971 + "\377\376\375\374\373\372\371\370" + "Lucida" + "\377\376" // 108912 + + // #4972 + "\377\376\375\374\373\372\371\370" + "B&H" + "\377\376\375\374\373" // 108928 + + // #4973 + "\377\376\375\374\373\372\371\370" + "Lucida Bright" + "\377\376\375\374\373\372\371\370\367\366\365" // 108960 + + // #4974 + "b&h" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 108976 + + // #4975 + "\377\376\375\374\373\372\371\370" + "New Century Schoolbook" + "\377\376" // 109008 + + // #4976 + "Adobe" + "\377\376\375\374\373\372\371\370\367\366\365" // 109024 + + // #4977 + "\377\376\375\374\373\372\371\370" + "Charter" + "\377" // 109040 + + // #4978 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 109088+ + + // #4979 + "\377\376\375\374\373\372\371\370" + "Bitstream Charter" + "\377\376\375\374\373\372\371" // 109120 + + // #4980 + "\377\376\375\374\373\372\371\370" + "bitstream" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 109152 + + // #4981 + "Century Schoolbook L" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 109184 + + // #4982 + "\377\376\375\374\373\372\371\370" + "urw" + "\377\376\375\374\373" // 109200 + + // #4983 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 109232 + + // #4984 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 109312+ + + // #4985 + "\377\376\375\374\373\372\371\370" + "<para>You can help us improve KDE Software by reporting this error.<nl /><link url='#aboutbugreporting'>Learn more about bug reporting.</link></para><para><note>It is safe to close this dialog if you do not want to report this bug.</note></para>" + "\377\376\375" // 109568+ + + // #4987 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "<para>Voc\303""\252"" pode nos ajudar a melhorar os aplicativos do KDE relatando este erro.<nl /><link url='#aboutbugreporting'>Aprenda mais sobre os relat\303""\263""rios de erros.</link></para><para><note>\303""\211"" seguro fechar este di\303""\241""logo, caso n\303""\243""o deseje relatar este erro.</note></para>" + "\377\376\375\374\373\372\371" // 109856+ + + // #4988 + "\377\376\375\374\373\372\371\370" + "Details:" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 109888 + + // #4990 + "\377\376\375" + "Detalhes:" + "\377\376\375\374" // 109904 + + // #4991 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "<para>Executable: <application>%1</application> PID: <numid>%2</numid> Signal: %3 (%4)</para>" + "\377\376\375\374\373\372\371\370\367\366\365" // 110064+ + + // #4993 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354" + "<para>Execut\303""\241""vel: <application>%1</application> PID: <numid>%2</numid> Sinal: %3 (%4)</para>" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110192+ + + // #4994 + "&General" + "\377\376\375\374\373\372\371\370" // 110208 + + // #4996 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "&Geral" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 110240 + + // #4997 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 110272 + + // #4998 + "\377\376\375\374\373\372\371\370" + "/usr/share/fonts/TTF/dejavu/DejaVuSans-Oblique.ttf" + "\377\376\375\374\373\372" // 110336+ + + // #4999 + "\377\376\375\374\373\372\371\370" + "DejaVu Sans" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 110368 + + // #5000 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "/usr/share/fonts/TTF/dejavu/DejaVuSans-Bold.ttf" + "\377" // 110448+ + + // #5001 + "Form" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 110464 + + // #5002 + "\377\376\375\374\373" + "GetBacktraceWidget" + "\377\376\375\374\373\372\371\370\367" // 110496+ + + // #5003 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331" + "verticalLayout_4" + "\377\376\375\374\373\372\371\370\367" // 110560+ + + // #5004 + "\377" + "verticalLayout" + "\377" // 110576 + + // #5005 + "\377" + "m_statusWidget" + "\377" // 110592 + + // #5006 + "\377\376\375\374\373\372\371\370" + "mainLayout" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 110624 + + // #5007 + "\377\376\375" + "m_backtraceStack" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 110656 + + // #5008 + "\377\376\375\374" + "backtracePage" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110688 + + // #5009 + "\377\376\375\374\373\372\371\370\367\366\365" + "horizontalLayout" + "\377\376\375\374\373" // 110720 + + // #5010 + "\377\376" + "m_backtraceEdit" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 110752+ + + // #5011 + "\377\376" + "backtraceHelpPage" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 110784 + + // #5012 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "verticalLayout_3" + "\377\376\375" // 110816 + + // #5013 + "\377\376\375" + "horizontalLayout_3" + "\377\376\375\374\373\372\371\370\367\366\365" // 110848 + + // #5014 + "\377\376\375\374" + "m_backtraceHelpIcon" + "\377\376\375\374\373\372\371\370\367" // 110880 + + // #5015 + "\377\376\375\374\373\372\371\370" + "m_backtraceHelpLabel" + "\377\376\375\374" // 110912 + + // #5016 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "m_toggleBacktraceCheckBox" + "\377\376\375\374\373\372\371\370\367\366" // 110960+ + + // #5017 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "horizontalLayout_2" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 111008 + + // #5018 + "\377\376\375\374\373\372\371" + "m_reloadBacktraceButton" + "\377\376" // 111040 + + // #5019 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "m_installDebugButton" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 111088+ + + // #5020 + "\377\376" + "m_copyButton" + "\377\376" // 111104 + + // #5021 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "m_saveButton" + "\377\376\375\374\373" // 111136 + + // #5022 + "\377\376\375\374\373\372\371\370\367\366" + "verticalLayout_2" + "\377\376\375\374\373\372" // 111168 + + // #5023 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "m_extraDetailsLabel" + "\377" // 111200 + + // #5024 + "Show backtrace content (advanced)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 111248 + + // #5026 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314" + "Exibir o conte\303""\272""do do \42""backtrace\42"" (avan\303""\247""ado)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 111360+ + + // #5027 + "Use this button to reload the crash information (backtrace). This is useful when you have installed the proper debug symbol packages and you want to obtain a better backtrace." + "\377" // 111536+ + + // #5029 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Use este bot\303""\243""o para recarregar as informa\303""\247""\303""\265""es da falha (backtrace). Isto \303""\251"" \303""\272""til quando voc\303""\252"" tiver instalado os pacotes de s\303""\255""mbolos de depura\303""\247""\303""\243""o adequados e quiser obter um \42""backtrace\42"" melhor." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 111776+ + + // #5030 + "&Reload" + "\377\376\375\374\373\372\371\370\367" // 111792 + + // #5032 + "\377\376\375\374\373\372\371\370\367\366" + "&Recarregar" + "\377\376\375\374\373\372\371\370\367\366\365" // 111824 + + // #5033 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320" + "Use this button to install the missing debug symbols packages." + "\377\376" // 111936+ + + // #5035 + "\377\376\375\374\373\372\371\370" + "Use este bot\303""\243""o para instalar os pacotes contendo os s\303""\255""mbolos de depura\303""\247""\303""\243""o faltantes." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 112048+ + + // #5036 + "\377\376\375\374\373\372\371\370" + "&Install Debug Symbols" + "\377\376" // 112080 + + // #5038 + "\377\376\375\374" + "&Instalar os s\303""\255""mbolos de depura\303""\247""\303""\243""o" + "\377\376\375\374\373\372\371" // 112128 + + // #5039 + "\377\376\375\374\373\372\371\370" + "Use this button to copy the crash information (backtrace) to the clipboard." + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 112224+ + + // #5041 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "Use este bot\303""\243""o para copiar as informa\303""\247""\303""\265""es da falha (backtrace) para a \303""\241""rea de transfer\303""\252""ncia." + "\377\376\375\374\373\372\371\370\367" // 112368+ + + // #5042 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "Use this button to save the crash information (backtrace) to a file. This is useful if you want to take a look at it or to report the bug later." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 112544+ + + // #5044 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331" + "Use este bot\303""\243""o para salvar as informa\303""\247""\303""\265""es da falha (backtrace) para um arquivo. Isto \303""\251"" \303""\272""til se quiser visualis\303""\241""-lo ou reportar o erro mais tarde." + "\377\376" // 112736+ + + // #5045 + "Monospace,10,-1,5,50,0,0,0,0,0" + "\377\376" // 112768 + + // #5046 + "\377\376\375\374\373\372\371\370" + "&Developer Information" + "\377\376" // 112800+ + + // #5048 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324" + "Informa\303""\247""\303""\265""es do &desenvolvedor" + "\377\376\375\374\373" // 112880+ + + // #5049 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "Close the current window or document" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 112944+ + + // #5051 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343" + "Fechar a janela ou documento atual" + "\377" // 113008+ + + // #5052 + "&Close" + "\377\376\375\374\373\372\371\370\367\366" // 113024 + + // #5054 + "\377\376\375\374\373\372\371\370\367" + "Fe&char" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 113056 + + // #5055 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340" + "Starts the bug report assistant." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 113136+ + + // #5057 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346" + "Inicia o assistente de relat\303""\263""rio de erros." + "\377\376\375\374\373\372\371\370\367\366\365" // 113216+ + + // #5058 + "Report Bug" + "\377\376\375\374\373\372" // 113232 + + // #5060 + "\377\376\375" + "Relatar erro" + "\377" // 113248 + + // #5061 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "Starts a program to debug the crashed application." + "\377\376\375\374\373\372" // 113344+ + + // #5063 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Inicia um programa para depura\303""\247""\303""\243""o do aplicativo que falhou." + "\377\376\375\374\373\372\371" // 113424+ + + // #5064 + "Debug" + "\377\376\375\374\373\372\371\370\367\366\365" // 113440 + + // #5066 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Depurar" + "\377\376\375\374\373\372\371\370\367\366\365" // 113472 + + // #5067 + "gdb" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 113488 + + // #5068 + "\377\376\375\374\373\372\371\370" + "Debug in <application>%1</application>" + "\377\376" // 113536 + + // #5070 + "\377\376\375\374\373\372" + "Depurar no <application>%1</application>" + "\377\376" // 113584+ + + // #5071 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" + "Use this button to restart the crashed application." + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 113664+ + + // #5073 + "\377" + "Use este bot\303""\243""o para iniciar novamente o aplicativo que falhou." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 113744+ + + // #5074 + "\377\376\375\374\373\372\371\370" + "Restart Application" + "\377\376\375\374\373" // 113776 + + // #5076 + "Reiniciar aplicativo" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 113808 + + // #5077 + "Close this dialog (you will lose the crash information.)" + "\377\376\375\374\373\372\371\370" // 113872 + + // #5079 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316" + "Fechar este di\303""\241""logo (voc\303""\252"" perder\303""\241"" as informa\303""\247""\303""\265""es da falha.)" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 114000+ + + // #5080 + "\377\376\375\374\373\372\371\370" + "/org/freedesktop/DBus" + "\377\376\375" // 114032 + + // #5081 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "org.freedesktop.DBus" + "\377\376\375\374" // 114080+ + + // #5082 + "\377\376\375\374\373\372\371\370" + "NameAcquired" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 114112 + + // #5083 + "\377\376\375\374\373\372\371\370" + "org.freedesktop.DBus" + "\377\376\375\374" // 114144 + + // #5084 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "s" + "\377\376" // 114160 + + // #5085 + "\377\376\375\374" + ":1.1920" + "\377\376\375\374\373" // 114176 + + // #5086 + "\377\376\375\374\373\372\371\370" + "/org/freedesktop/DBus" + "\377\376\375" // 114208 + + // #5087 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "org.freedesktop.DBus" + "\377\376\375\374" // 114272+ + + // #5088 + "\377\376\375\374\373\372\371\370" + "NameAcquired" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 114304 + + // #5089 + "\377\376\375\374\373\372\371\370" + "org.freedesktop.DBus" + "\377\376\375\374" // 114336 + + // #5090 + "\377\376\375\374\373\372\371\370\367\366\365\364\363" + "s" + "\377\376" // 114352 + + // #5091 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354" + "org.kde.drkonqi-30955" + "\377\376\375\374\373\372\371" // 114400+ + + // #5092 + "\377\376\375\374\373\372\371\370" + "&New" + "\377\376\375\374" // 114416 + + // #5094 + "\377\376\375\374\373\372\371\370\367\366\365" + "&Novo" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 114448 + + // #5095 + "&Open..." + "\377\376\375\374\373\372\371\370" // 114464 + + // #5097 + "\377\376\375\374\373\372\371" + "&Abrir..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 114496 + + // #5098 + "Open &Recent" + "\377\376\375\374" // 114512 + + // #5100 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302" + "Abrir &recente" + "\377\376\375\374" // 114592+ + + // #5101 + "&Save" + "\377\376\375\374\373\372\371\370\367\366\365" // 114608 + + // #5103 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "&Salvar" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 114640 + + // #5104 + "\377\376\375\374\373\372\371\370" + "Save &As..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 114672 + + // #5106 + "\377\376" + "Salvar &como..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 114704 + + // #5107 + "Re&vert" + "\377\376\375\374\373\372\371\370\367" // 114720 + + // #5109 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326" + "Re&verter" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 114784+ + + // #5110 + "&Close" + "\377\376\375\374\373\372\371\370\367\366" // 114800 + + // #5112 + "\377\376\375\374\373\372\371\370\367" + "Fe&char" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 114832 + + // #5113 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "&Print..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 114912+ + + // #5115 + "&Imprimir..." + "\377\376\375\374" // 114928 + + // #5116 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Print Previe&w" + "\377\376\375\374\373\372\371\370\367\366" // 114976+ + + // #5118 + "\377\376" + "Visuali&zar impress\303""\243""o" + "\377\376\375\374\373\372\371\370" // 115008 + + // #5119 + "\377\376\375\374\373\372\371\370" + "&Mail..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 115040 + + // #5121 + "\377\376\375\374\373\372\371\370\367\366" + "Enviar por e-&mail..." + "\377" // 115072 + + // #5122 + "&Quit" + "\377\376\375\374\373\372\371\370\367\366\365" // 115088 + + // #5124 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Sa&ir" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115120 + + // #5125 + "&Undo" + "\377\376\375\374\373\372\371\370\367\366\365" // 115136 + + // #5127 + "&Desfazer" + "\377\376\375\374\373\372\371" // 115152 + + // #5128 + "Re&do" + "\377\376\375\374\373\372\371\370\367\366\365" // 115168 + + // #5130 + "\377" + "Re&fazer" + "\377\376\375\374\373\372\371" // 115184 + + // #5131 + "Cu&t" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 115200 + + // #5133 + "\377\376\375\374" + "Recor&tar" + "\377\376\375" // 115216 + + // #5134 + "&Copy" + "\377\376\375\374\373\372\371\370\367\366\365" // 115232 + + // #5136 + "\377\376\375\374\373\372\371" + "&Copiar" + "\377\376" // 115248 + + // #5137 + "&Paste" + "\377\376\375\374\373\372\371\370\367\366" // 115264 + + // #5139 + "\377\376\375\374\373" + "Co&lar" + "\377\376\375\374\373" // 115280 + + // #5140 + "&Paste" + "\377\376\375\374\373\372\371\370\367\366" // 115296 + + // #5142 + "\377\376\375\374\373" + "Co&lar" + "\377\376\375\374\373" // 115312 + + // #5143 + "C&lear" + "\377\376\375\374\373\372\371\370\367\366" // 115328 + + // #5145 + "\377\376" + "&Limpar" + "\377\376\375\374\373\372\371" // 115344 + + // #5146 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Select &All" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 115424+ + + // #5148 + "\377\376\375\374\373\372\371\370\367" + "Selecion&ar tudo" + "\377\376\375\374\373\372\371" // 115456 + + // #5149 + "\377\376\375\374\373\372\371\370" + "Dese&lect" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 115488+ + + // #5151 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "&Desmarcar" + "\377\376\375\374\373\372\371\370\367\366" // 115520 + + // #5152 + "\377\376\375\374\373\372\371\370" + "&Find..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 115552 + + // #5154 + "\377\376\375\374\373\372" + "&Localizar..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 115584 + + // #5155 + "\377\376\375\374\373\372\371\370" + "Find &Next" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 115616+ + + // #5157 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Localizar p&r\303""\263""xima" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 115664 + + // #5158 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310" + "Find Pre&vious" + "\377\376\375\374\373\372\371\370\367\366" // 115744+ + + // #5160 + "\377\376\375" + "Localizar &anterior" + "\377\376\375\374\373\372\371\370\367\366" // 115776 + + // #5161 + "\377\376\375\374\373\372\371\370" + "&Replace..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 115808+ + + // #5163 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332" + "Substitui&r..." + "\377\376\375\374\373\372\371\370\367\366\365\364" // 115872+ + + // #5164 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330" + "&Actual Size" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 115936+ + + // #5166 + "\377\376\375\374\373\372\371\370\367\366\365\364" + "Tamanho re&al" + "\377\376\375\374\373\372\371" // 115968 + + // #5167 + "\377\376\375\374\373\372\371\370" + "&Fit to Page" + "\377\376\375\374\373\372\371\370\367\366\365\364" // 116000+ + + // #5169 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336" + "A&justar \303""\240"" p\303""\241""gina" + "\377\376\375\374\373\372\371\370\367\366\365" // 116064+ + + // #5170 + "\377\376\375\374\373\372\371\370" + "Fit to Page &Width" + "\377\376\375\374\373\372" // 116096 + + // #5172 + "\377\376\375\374\373\372\371\370\367" + "Ajustar \303""\240"" &largura da p\303""\241""gina" + "\377\376\375\374\373\372\371\370\367" // 116144+ + + // #5173 + "\377\376\375\374\373\372\371\370" + "Fit to Page &Height" + "\377\376\375\374\373" // 116176 + + // #5175 + "\377\376\375\374\373\372\371\370\367\366\365" + "Ajustar \303""\240"" al&tura da p\303""\241""gina" + "\377\376\375\374\373\372\371\370" // 116224 + + // #5176 + "\377\376\375\374\373\372\371\370" + "Zoom &In" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 116256 + + // #5178 + "\377" + "Ampl&iar" + "\377\376\375\374\373\372\371" // 116272 + + // #5179 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Zoom &Out" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 116320+ + + // #5181 + "\377\376\375\374\373\372\371\370\367\366" + "&Reduzir" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116352 + + // #5182 + "\377\376\375\374\373\372\371\370" + "&Zoom..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 116384 + + // #5184 + "\377\376\375" + "&Zoom..." + "\377\376\375\374\373" // 116400 + + // #5185 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "&Redisplay" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116448+ + + // #5187 + "\377\376" + "&Reexibir" + "\377\376\375\374\373" // 116464 + + // #5188 + "&Up" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 116480 + + // #5190 + "\377\376\375\374\373\372\371\370" + "A&cima" + "\377\376" // 116496 + + // #5191 + "&Previous Page" + "\377\376" // 116512 + + // #5193 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "P\303""\241""gina &anterior" + "\377" // 116544 + + // #5194 + "&Next Page" + "\377\376\375\374\373\372" // 116560 + + // #5196 + "\377\376\375\374\373\372\371\370\367\366\365" + "Pr\303""\263""xi&ma p\303""\241""gina" + "\377\376\375\374" // 116592 + + // #5197 + "&Go To..." + "\377\376\375\374\373\372\371" // 116608 + + // #5199 + "\377\376\375\374\373\372\371" + "&Ir para..." + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116640 + + // #5200 + "&Go to Page..." + "\377\376" // 116656 + + // #5202 + "\377\376\375\374\373\372\371" + "&Ir para a p\303""\241""gina..." + "\377\376\375\374" // 116688 + + // #5203 + "&Go to Line..." + "\377\376" // 116704 + + // #5205 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335" + "&Ir para a linha..." + "\377\376\375\374\373\372\371\370\367\366" // 116768+ + + // #5206 + "&First Page" + "\377\376\375\374\373" // 116784 + + // #5208 + "&Primeira p\303""\241""gina" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" // 116816 + + // #5209 + "&Last Page" + "\377\376\375\374\373\372" // 116832 + + // #5211 + "\377\376\375\374\373\372\371" + "&\303""\232""ltima p\303""\241""gina" + "\377\376\375\374\373\372\371\370\367" // 116864 + + // #5212 + "\377\376\375\374\373\372\371\370" + "&Back in the Document" + "\377\376\375" // 116896 + + // #5214 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322" + "&Voltar no documento" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 116976+ + + // #5215 + "&Forward in the Document" + "\377\376\375\374\373\372\371\370" // 117008 + + // #5217 + "\377\376\375\374\373\372" + "&Avan\303""\247""ar no documento" + "\377\376\375\374" // 117040 + + // #5218 + "&Add Bookmark" + "\377\376\375" // 117056 + + // #5220 + "\377\376\375\374\373" + "&Adicionar favorito" + "\377\376\375\374\373\372\371\370" // 117088 + + // #5221 + "\377\376\375\374\373\372\371\370" + "&Edit Bookmarks..." + "\377\376\375\374\373\372" // 117120 + + // #5223 + "\377\376\375\374\373\372\371\370\367" + "&Editar favoritos..." + "\377\376\375" // 117152+ + + // #5224 + "&Spelling..." + "\377\376\375\374" // 117168 + + // #5226 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344" + "&Ortografia..." + "\377\376\375\374\373\372" // 117216+ + + // #5227 + "Show &Menubar" + "\377\376\375" // 117232 + + // #5229 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350" + "Exibir barra de &menus" + "\377\376" // 117280+ + + // #5230 + "Show &Toolbar" + "\377\376\375" // 117296 + + // #5232 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361" + "Exibir barra de &ferramentas" + "\377\376\375\374\373" // 117344 + + // #5233 + "Show St&atusbar" + "\377" // 117360 + + // #5235 + "\377\376\375\374" + "Mostrar barra de st&atus" + "\377\376\375\374" // 117392 + + // #5236 + "\377\376\375\374\373\372\371\370" + "F&ull Screen Mode" + "\377\376\375\374\373\372\371" // 117424 + + // #5238 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341" + "&Modo de tela cheia" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" // 117488+ + + // #5239 + "&Save Settings" + "\377\376" // 117504 + + // #5241 + "\377\376\375\374\373\372\371\370\367" + "&Salvar configura\303""\247""\303""\265""es" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 117552 + + // #5242 + "\377\376\375\374\373\372\371\370" + "Configure S&hortcuts..." + "\377" // 117584 + + // #5244 + "\377\376\375\374\373\372\371\370\367" + "Configurar atal&hos..." + "\377" // 117616 + + // #5245 + "\377\376\375\374\373\372\371\370" + "&Configure %1..." + "\377\376\375\374\373\372\371\370" // 117648 + + // #5247 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313" + "&Configurar o %1..." + "\377\376\375\374\373\372\371\370" // 117728+ + + // #5248 + "\377\376\375\374\373\372\371\370" + "Configure Tool&bars..." + "\377\376" // 117760 + + // #5250 + "\377\376\375\374\373\372\371\370" + "Configurar &barra de ferramentas..." + "\377\376\375\374\373" // 117808 + + // #5251 + "Configure &Notifications..." + "\377\376\375\374\373" // 117840 + + // #5253 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304" + "Configurar n&otifica\303""\247""\303""\265""es..." + "\377\376\375\374\373\372\371" // 117936+ + + // #5254 + "%1 &Handbook" + "\377\376\375\374" // 117952 + + // #5256 + "\377\376\375\374\373\372" + "&Manual do %1" + "\377\376\375\374\373\372\371\370\367\366\365\364\363" // 117984 + + // #5257 + "What's &This?" + "\377\376\375" // 118000 + + // #5259 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345" + "O que \303""\251"" is&to?" + "\377\376\375\374\373\372" // 118048+ + + // #5260 + "Tip of the &Day" + "\377" // 118064 + + // #5262 + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362" + "Dica do &dia" + "\377\376\375\374\373\372" // 118096 + + // #5263 + "&Report Bug..." + "\377\376" // 118112 + + // #5265 + "\377\376\375\374\373" + "&Relatar erro..." + "\377\376\375\374\373\372\371\370\367\366\365" // 118144 + + // #5266 + "Switch Application &Language..." + "\377" // 118176 + + // #5268 + "\377\376\375\374\373\372\371\370\367" + "Mudar o idioma do ap&licativo..." + "\377\376\375\374\373\372\371" // 118224 + + // #5269 + "&About %1" + "\377\376\375\374\373\372\371" // 118240 + + // #5271 + "&Sobre o %1" + "\377\376\375\374\373" // 118256 + + // #5272 + "About &KDE" + "\377\376\375\374\373\372" // 118272 + + // #5274 + "\377\376\375\374" + "Sobre o &KDE" + "\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360" // 118304 + +}; +static const int intData[] = { + 21, 8, 8, 3416, 3416, // #0 + 14, 32, 32, 320, 320, // #1 + 0, 48, 48, 3428, 3428, // #2 + 26, 48, 48, 800, 800, // #3 + 0, 80, 80, 3428, 3428, // #4 + 29, 80, 80, 800, 800, // #5 + 0, 112, 112, 3428, 3428, // #6 + 13, 136, 136, 760, 760, // #7 + 0, 160, 160, 3428, 3428, // #8 + 0, 160, 160, 3428, 3428, // #9 + 0, 160, 160, 3428, 3428, // #10 + 0, 160, 160, 3428, 3428, // #11 + 0, 160, 160, 3428, 3428, // #12 + 0, 160, 160, 3428, 3428, // #13 + 0, 160, 160, 3428, 3428, // #14 + 0, 160, 160, 3428, 3428, // #15 + 0, 160, 160, 3428, 3428, // #16 + 0, 160, 160, 3428, 3428, // #17 + 0, 160, 160, 3428, 3428, // #18 + 0, 160, 160, 3428, 3428, // #19 + 0, 160, 160, 3428, 3428, // #20 + 0, 160, 160, 3428, 3428, // #21 + 0, 160, 160, 3428, 3428, // #22 + 0, 160, 160, 3428, 3428, // #23 + 0, 160, 160, 3428, 3428, // #24 + 0, 160, 160, 3428, 3428, // #25 + 0, 160, 160, 3428, 3428, // #26 + 0, 160, 160, 3428, 3428, // #27 + 0, 160, 160, 3428, 3428, // #28 + 0, 160, 160, 3428, 3428, // #29 + 0, 160, 160, 3428, 3428, // #30 + 0, 160, 160, 3428, 3428, // #31 + 0, 160, 160, 3428, 3428, // #32 + 0, 160, 160, 3428, 3428, // #33 + 0, 160, 160, 3428, 3428, // #34 + 0, 160, 160, 3428, 3428, // #35 + 0, 160, 160, 3428, 3428, // #36 + 0, 160, 160, 3428, 3428, // #37 + 0, 160, 160, 3428, 3428, // #38 + 0, 160, 160, 3428, 3428, // #39 + 0, 160, 160, 3428, 3428, // #40 + 0, 160, 160, 3428, 3428, // #41 + 0, 160, 160, 3428, 3428, // #42 + 0, 160, 160, 3428, 3428, // #43 + 0, 160, 160, 3428, 3428, // #44 + 0, 160, 160, 3428, 3428, // #45 + 0, 160, 160, 3428, 3428, // #46 + 0, 160, 160, 3428, 3428, // #47 + 0, 160, 160, 3428, 3428, // #48 + 0, 160, 160, 3428, 3428, // #49 + 0, 160, 160, 3428, 3428, // #50 + 0, 160, 160, 3428, 3428, // #51 + 0, 160, 160, 3428, 3428, // #52 + 0, 160, 160, 3428, 3428, // #53 + 7, 168, 168, 3464, 3464, // #54 + 7, 184, 184, 3464, 3464, // #55 + 80, 200, 200, 1128, 1128, // #56 + 8, 288, 288, 3280, 3280, // #57 + 80, 328, 328, 1128, 1128, // #58 + 25, 448, 448, 2416, 2416, // #59 + 6, 488, 488, 2184, 2184, // #60 + 6, 504, 504, 2184, 2184, // #61 + 80, 520, 520, 520, 520, // #62 + 8, 608, 608, 3472, 3472, // #63 + 80, 648, 648, 520, 520, // #64 + 25, 736, 736, 3408, 3408, // #65 + 16, 776, 776, 792, 792, // #66 + 7, 800, 800, 3760, 3760, // #67 + 7, 824, 824, 3464, 3464, // #68 + 7, 840, 840, 3464, 3464, // #69 + 4, 848, 848, 3984, 3984, // #70 + 7, 872, 872, 3976, 3976, // #71 + 6, 880, 880, 1232, 1232, // #72 + 4, 896, 896, 3216, 3216, // #73 + 4, 912, 912, 2528, 2528, // #74 + 6, 928, 928, 3792, 3792, // #75 + 4, 952, 952, 2040, 2040, // #76 + 4, 968, 968, 1352, 1352, // #77 + 6, 984, 984, 2616, 2616, // #78 + 4, 992, 992, 368, 368, // #79 + 4, 1008, 1008, 3776, 3776, // #80 + 6, 1024, 1024, 944, 944, // #81 + 4, 1048, 1048, 1976, 1976, // #82 + 7, 1056, 1056, 3376, 3376, // #83 + 6, 1080, 1080, 2552, 2552, // #84 + 7, 1096, 1096, 3464, 3464, // #85 + 6, 1112, 1112, 2360, 2360, // #86 + 11, 1128, 1128, 3672, 3672, // #87 + 7, 1152, 1152, 3408, 3408, // #88 + 6, 1176, 1176, 3208, 3208, // #89 + 1063, 1216, 1216, 608, 608, // #90 + 7, 2296, 2296, 3576, 3576, // #91 + 9, 2304, 2304, 3680, 3680, // #92 + 7, 2328, 2328, 3576, 3576, // #93 + 9, 2336, 2336, 3680, 3680, // #94 + 7, 2352, 2352, 1808, 1808, // #95 + 9, 2376, 2376, 1912, 1912, // #96 + 7, 2400, 2400, 1808, 1808, // #97 + 9, 2440, 2440, 1912, 1912, // #98 + 10, 2472, 2472, 2216, 2216, // #99 + 9, 2504, 2504, 2328, 2328, // #100 + 10, 2536, 2536, 2216, 2216, // #101 + 9, 2568, 2568, 2328, 2328, // #102 + 12, 2592, 2592, 2624, 2624, // #103 + 9, 2608, 2608, 2736, 2736, // #104 + 12, 2624, 2624, 2624, 2624, // #105 + 9, 2640, 2640, 2736, 2736, // #106 + 10, 2656, 2656, 3040, 3040, // #107 + 9, 2672, 2672, 3152, 3152, // #108 + 10, 2688, 2688, 3040, 3040, // #109 + 9, 2704, 2704, 3152, 3152, // #110 + 7, 2728, 2728, 3448, 3448, // #111 + 9, 2736, 2736, 3552, 3552, // #112 + 7, 2760, 2760, 3448, 3448, // #113 + 9, 2768, 2768, 3552, 3552, // #114 + 7, 2792, 2792, 3848, 3848, // #115 + 9, 2800, 2800, 3952, 3952, // #116 + 7, 2824, 2824, 3848, 3848, // #117 + 9, 2832, 2832, 3952, 3952, // #118 + 6, 2856, 2856, 152, 152, // #119 + 9, 2864, 2864, 256, 256, // #120 + 6, 2888, 2888, 152, 152, // #121 + 9, 2896, 2896, 256, 256, // #122 + 13, 2920, 2920, 552, 552, // #123 + 9, 2952, 2952, 664, 664, // #124 + 13, 2984, 2984, 552, 552, // #125 + 9, 3016, 3016, 664, 664, // #126 + 9, 3040, 3040, 960, 960, // #127 + 9, 3056, 3056, 1072, 1072, // #128 + 9, 3072, 3072, 960, 960, // #129 + 9, 3088, 3088, 1072, 1072, // #130 + 9, 3104, 3104, 960, 960, // #131 + 9, 3120, 3120, 1072, 1072, // #132 + 6, 3144, 3144, 1368, 1368, // #133 + 9, 3152, 3152, 1472, 1472, // #134 + 6, 3176, 3176, 1368, 1368, // #135 + 9, 3184, 3184, 1472, 1472, // #136 + 6, 3208, 3208, 1368, 1368, // #137 + 9, 3216, 3216, 1472, 1472, // #138 + 6, 3232, 3232, 1776, 1776, // #139 + 9, 3256, 3256, 1880, 1880, // #140 + 6, 3280, 3280, 1776, 1776, // #141 + 9, 3304, 3304, 1880, 1880, // #142 + 7, 3328, 3328, 2176, 2176, // #143 + 9, 3352, 3352, 2280, 2280, // #144 + 7, 3376, 3376, 2176, 2176, // #145 + 9, 3400, 3400, 2280, 2280, // #146 + 10, 3432, 3432, 2584, 2584, // #147 + 9, 3464, 3464, 2696, 2696, // #148 + 10, 3496, 3496, 2584, 2584, // #149 + 9, 3528, 3528, 2696, 2696, // #150 + 12, 3552, 3552, 2992, 2992, // #151 + 9, 3568, 3568, 3104, 3104, // #152 + 12, 3584, 3584, 2992, 2992, // #153 + 9, 3600, 3600, 3104, 3104, // #154 + 10, 3616, 3616, 3408, 3408, // #155 + 9, 3632, 3632, 3520, 3520, // #156 + 10, 3648, 3648, 3408, 3408, // #157 + 9, 3664, 3664, 3520, 3520, // #158 + 7, 3688, 3688, 3816, 3816, // #159 + 9, 3696, 3696, 3920, 3920, // #160 + 7, 3720, 3720, 3816, 3816, // #161 + 9, 3728, 3728, 3920, 3920, // #162 + 7, 3752, 3752, 120, 120, // #163 + 9, 3760, 3760, 224, 224, // #164 + 7, 3784, 3784, 120, 120, // #165 + 9, 3792, 3792, 224, 224, // #166 + 6, 3816, 3816, 520, 520, // #167 + 9, 3824, 3824, 624, 624, // #168 + 6, 3848, 3848, 520, 520, // #169 + 9, 3856, 3856, 624, 624, // #170 + 13, 3880, 3880, 920, 920, // #171 + 9, 3912, 3912, 1032, 1032, // #172 + 13, 3944, 3944, 920, 920, // #173 + 9, 3976, 3976, 1032, 1032, // #174 + 9, 4000, 4000, 1328, 1328, // #175 + 9, 4016, 4016, 1440, 1440, // #176 + 9, 4032, 4032, 1328, 1328, // #177 + 9, 4048, 4048, 1440, 1440, // #178 + 6, 4072, 4072, 1736, 1736, // #179 + 9, 4080, 4080, 1840, 1840, // #180 + 6, 4104, 4104, 1736, 1736, // #181 + 9, 4112, 4112, 1840, 1840, // #182 + 6, 4136, 4136, 1736, 1736, // #183 + 9, 4144, 4144, 1840, 1840, // #184 + 6, 4168, 4168, 2136, 2136, // #185 + 9, 4176, 4176, 2240, 2240, // #186 + 6, 4200, 4200, 2136, 2136, // #187 + 9, 4208, 4208, 2240, 2240, // #188 + 7, 4232, 4232, 2536, 2536, // #189 + 9, 4240, 4240, 2640, 2640, // #190 + 7, 4264, 4264, 2536, 2536, // #191 + 9, 4272, 4272, 2640, 2640, // #192 + 10, 4288, 4288, 2944, 2944, // #193 + 9, 4304, 4304, 3056, 3056, // #194 + 10, 4320, 4320, 2944, 2944, // #195 + 9, 4336, 4336, 3056, 3056, // #196 + 12, 4360, 4360, 3352, 3352, // #197 + 9, 4392, 4392, 3464, 3464, // #198 + 12, 4424, 4424, 3352, 3352, // #199 + 9, 4456, 4456, 3464, 3464, // #200 + 10, 4488, 4488, 3768, 3768, // #201 + 9, 4520, 4520, 3880, 3880, // #202 + 10, 4552, 4552, 3768, 3768, // #203 + 9, 4584, 4584, 3880, 3880, // #204 + 7, 4616, 4616, 88, 88, // #205 + 9, 4624, 4624, 192, 192, // #206 + 7, 4648, 4648, 88, 88, // #207 + 9, 4656, 4656, 192, 192, // #208 + 7, 4680, 4680, 488, 488, // #209 + 9, 4688, 4688, 592, 592, // #210 + 7, 4712, 4712, 488, 488, // #211 + 9, 4720, 4720, 592, 592, // #212 + 6, 4744, 4744, 888, 888, // #213 + 9, 4752, 4752, 992, 992, // #214 + 6, 4776, 4776, 888, 888, // #215 + 9, 4784, 4784, 992, 992, // #216 + 13, 4808, 4808, 1288, 1288, // #217 + 9, 4872, 4872, 1400, 1400, // #218 + 13, 4904, 4904, 1288, 1288, // #219 + 9, 4936, 4936, 1400, 1400, // #220 + 9, 4960, 4960, 1696, 1696, // #221 + 9, 4976, 4976, 1808, 1808, // #222 + 9, 4992, 4992, 1696, 1696, // #223 + 9, 5008, 5008, 1808, 1808, // #224 + 9, 5024, 5024, 1696, 1696, // #225 + 9, 5040, 5040, 1808, 1808, // #226 + 6, 5064, 5064, 2104, 2104, // #227 + 9, 5072, 5072, 2208, 2208, // #228 + 6, 5096, 5096, 2104, 2104, // #229 + 9, 5104, 5104, 2208, 2208, // #230 + 6, 5128, 5128, 2104, 2104, // #231 + 9, 5136, 5136, 2208, 2208, // #232 + 6, 5160, 5160, 2504, 2504, // #233 + 9, 5168, 5168, 2608, 2608, // #234 + 6, 5192, 5192, 2504, 2504, // #235 + 9, 5200, 5200, 2608, 2608, // #236 + 7, 5224, 5224, 72, 72, // #237 + 9, 5232, 5232, 176, 176, // #238 + 7, 5256, 5256, 72, 72, // #239 + 9, 5264, 5264, 176, 176, // #240 + 10, 5280, 5280, 480, 480, // #241 + 9, 5296, 5296, 592, 592, // #242 + 10, 5312, 5312, 480, 480, // #243 + 9, 5328, 5328, 592, 592, // #244 + 12, 5384, 5384, 888, 888, // #245 + 9, 5416, 5416, 1000, 1000, // #246 + 12, 5448, 5448, 888, 888, // #247 + 9, 5480, 5480, 1000, 1000, // #248 + 10, 5512, 5512, 1304, 1304, // #249 + 9, 5544, 5544, 1416, 1416, // #250 + 10, 5576, 5576, 1304, 1304, // #251 + 9, 5608, 5608, 1416, 1416, // #252 + 7, 5632, 5632, 1712, 1712, // #253 + 9, 5656, 5656, 1816, 1816, // #254 + 7, 5680, 5680, 1712, 1712, // #255 + 9, 5704, 5704, 1816, 1816, // #256 + 7, 5728, 5728, 2112, 2112, // #257 + 9, 5752, 5752, 2216, 2216, // #258 + 7, 5776, 5776, 2112, 2112, // #259 + 9, 5800, 5800, 2216, 2216, // #260 + 6, 5824, 5824, 2512, 2512, // #261 + 9, 5896, 5896, 2616, 2616, // #262 + 6, 5920, 5920, 2512, 2512, // #263 + 9, 5960, 5960, 2616, 2616, // #264 + 13, 5992, 5992, 2920, 2920, // #265 + 9, 6024, 6024, 3032, 3032, // #266 + 13, 6056, 6056, 2920, 2920, // #267 + 9, 6088, 6088, 3032, 3032, // #268 + 9, 6112, 6112, 3328, 3328, // #269 + 9, 6128, 6128, 3440, 3440, // #270 + 9, 6144, 6144, 3328, 3328, // #271 + 9, 6160, 6160, 3440, 3440, // #272 + 9, 6176, 6176, 3328, 3328, // #273 + 9, 6192, 6192, 3440, 3440, // #274 + 6, 6216, 6216, 3736, 3736, // #275 + 9, 6224, 6224, 3840, 3840, // #276 + 6, 6248, 6248, 3736, 3736, // #277 + 9, 6256, 6256, 3840, 3840, // #278 + 6, 6280, 6280, 3736, 3736, // #279 + 9, 6288, 6288, 3840, 3840, // #280 + 6, 6312, 6312, 40, 40, // #281 + 9, 6320, 6320, 144, 144, // #282 + 6, 6344, 6344, 40, 40, // #283 + 9, 6352, 6352, 144, 144, // #284 + 7, 6376, 6376, 440, 440, // #285 + 9, 6384, 6384, 544, 544, // #286 + 7, 6408, 6408, 440, 440, // #287 + 9, 6416, 6416, 544, 544, // #288 + 10, 6432, 6432, 848, 848, // #289 + 9, 6448, 6448, 960, 960, // #290 + 10, 6464, 6464, 848, 848, // #291 + 9, 6480, 6480, 960, 960, // #292 + 12, 6504, 6504, 1256, 1256, // #293 + 9, 6536, 6536, 1368, 1368, // #294 + 12, 6568, 6568, 1256, 1256, // #295 + 9, 6600, 6600, 1368, 1368, // #296 + 10, 6632, 6632, 1672, 1672, // #297 + 9, 6664, 6664, 1784, 1784, // #298 + 10, 6696, 6696, 1672, 1672, // #299 + 9, 6728, 6728, 1784, 1784, // #300 + 7, 6752, 6752, 2080, 2080, // #301 + 9, 6776, 6776, 2184, 2184, // #302 + 7, 6800, 6800, 2080, 2080, // #303 + 9, 6824, 6824, 2184, 2184, // #304 + 7, 6848, 6848, 2480, 2480, // #305 + 9, 6872, 6872, 2584, 2584, // #306 + 7, 6896, 6896, 2480, 2480, // #307 + 9, 6920, 6920, 2584, 2584, // #308 + 6, 6944, 6944, 2880, 2880, // #309 + 9, 6968, 6968, 2984, 2984, // #310 + 6, 6992, 6992, 2880, 2880, // #311 + 9, 7016, 7016, 2984, 2984, // #312 + 13, 7040, 7040, 3280, 3280, // #313 + 9, 7056, 7056, 3392, 3392, // #314 + 13, 7072, 7072, 3280, 3280, // #315 + 9, 7088, 7088, 3392, 3392, // #316 + 9, 7112, 7112, 3688, 3688, // #317 + 9, 7144, 7144, 3800, 3800, // #318 + 9, 7176, 7176, 3688, 3688, // #319 + 9, 7208, 7208, 3800, 3800, // #320 + 9, 7240, 7240, 3688, 3688, // #321 + 9, 7272, 7272, 3800, 3800, // #322 + 6, 7296, 7296, 0, 0, // #323 + 9, 7320, 7320, 104, 104, // #324 + 6, 7344, 7344, 0, 0, // #325 + 9, 7368, 7368, 104, 104, // #326 + 6, 7392, 7392, 0, 0, // #327 + 9, 7416, 7416, 104, 104, // #328 + 6, 7440, 7440, 400, 400, // #329 + 9, 7496, 7496, 504, 504, // #330 + 6, 7520, 7520, 400, 400, // #331 + 9, 7560, 7560, 504, 504, // #332 + 7, 7584, 7584, 800, 800, // #333 + 9, 7608, 7608, 904, 904, // #334 + 7, 7632, 7632, 800, 800, // #335 + 9, 7656, 7656, 904, 904, // #336 + 10, 7680, 7680, 1216, 1216, // #337 + 9, 7696, 7696, 1328, 1328, // #338 + 10, 7712, 7712, 1216, 1216, // #339 + 9, 7728, 7728, 1328, 1328, // #340 + 12, 7752, 7752, 1624, 1624, // #341 + 9, 7784, 7784, 1736, 1736, // #342 + 12, 7816, 7816, 1624, 1624, // #343 + 9, 7848, 7848, 1736, 1736, // #344 + 10, 7880, 7880, 2040, 2040, // #345 + 9, 7912, 7912, 2152, 2152, // #346 + 10, 7944, 7944, 2040, 2040, // #347 + 9, 7976, 7976, 2152, 2152, // #348 + 7, 8000, 8000, 2448, 2448, // #349 + 9, 8072, 8072, 2552, 2552, // #350 + 7, 8096, 8096, 2448, 2448, // #351 + 9, 8136, 8136, 2552, 2552, // #352 + 7, 8160, 8160, 2848, 2848, // #353 + 9, 8184, 8184, 2952, 2952, // #354 + 7, 8208, 8208, 2848, 2848, // #355 + 9, 8232, 8232, 2952, 2952, // #356 + 6, 8256, 8256, 3248, 3248, // #357 + 9, 8280, 8280, 3352, 3352, // #358 + 6, 8304, 8304, 3248, 3248, // #359 + 9, 8328, 8328, 3352, 3352, // #360 + 13, 8352, 8352, 3696, 3696, // #361 + 9, 8368, 8368, 3808, 3808, // #362 + 13, 8384, 8384, 3696, 3696, // #363 + 9, 8400, 8400, 3808, 3808, // #364 + 9, 8416, 8416, 4064, 4064, // #365 + 9, 8432, 8432, 80, 80, // #366 + 9, 8448, 8448, 4064, 4064, // #367 + 9, 8464, 8464, 80, 80, // #368 + 9, 8480, 8480, 4064, 4064, // #369 + 9, 8496, 8496, 80, 80, // #370 + 6, 8520, 8520, 376, 376, // #371 + 9, 8528, 8528, 480, 480, // #372 + 6, 8552, 8552, 376, 376, // #373 + 9, 8560, 8560, 480, 480, // #374 + 6, 8584, 8584, 376, 376, // #375 + 9, 8592, 8592, 480, 480, // #376 + 6, 8616, 8616, 776, 776, // #377 + 9, 8624, 8624, 880, 880, // #378 + 6, 8648, 8648, 776, 776, // #379 + 9, 8656, 8656, 880, 880, // #380 + 7, 8680, 8680, 1176, 1176, // #381 + 9, 8688, 8688, 1280, 1280, // #382 + 7, 8712, 8712, 1176, 1176, // #383 + 9, 8720, 8720, 1280, 1280, // #384 + 12, 8744, 8744, 1576, 1576, // #385 + 9, 8776, 8776, 1688, 1688, // #386 + 12, 8808, 8808, 1576, 1576, // #387 + 9, 8840, 8840, 1688, 1688, // #388 + 10, 8872, 8872, 1992, 1992, // #389 + 9, 8904, 8904, 2104, 2104, // #390 + 10, 8936, 8936, 1992, 1992, // #391 + 9, 8968, 8968, 2104, 2104, // #392 + 7, 8992, 8992, 2400, 2400, // #393 + 9, 9016, 9016, 2504, 2504, // #394 + 7, 9040, 9040, 2400, 2400, // #395 + 9, 9064, 9064, 2504, 2504, // #396 + 9, 9096, 9096, 2808, 2808, // #397 + 9, 9128, 9128, 2920, 2920, // #398 + 9, 9160, 9160, 2808, 2808, // #399 + 9, 9192, 9192, 2920, 2920, // #400 + 6, 9216, 9216, 3216, 3216, // #401 + 9, 9288, 9288, 3320, 3320, // #402 + 6, 9312, 9312, 3216, 3216, // #403 + 9, 9352, 9352, 3320, 3320, // #404 + 6, 9376, 9376, 3216, 3216, // #405 + 9, 9416, 9416, 3320, 3320, // #406 + 6, 9448, 9448, 3624, 3624, // #407 + 9, 9456, 9456, 3728, 3728, // #408 + 6, 9480, 9480, 3624, 3624, // #409 + 9, 9488, 9488, 3728, 3728, // #410 + 22, 9512, 9512, 1992, 1992, // #411 + 11, 9544, 9544, 2232, 2232, // #412 + 11, 9576, 9576, 2472, 2472, // #413 + 11, 9608, 9608, 2712, 2712, // #414 + 22, 9632, 9632, 2944, 2944, // #415 + 22, 9664, 9664, 3184, 3184, // #416 + 6, 9704, 9704, 2360, 2360, // #417 + 11, 9720, 9720, 3672, 3672, // #418 + 7, 9744, 9744, 3408, 3408, // #419 + 6, 9768, 9768, 3208, 3208, // #420 + 1063, 9792, 9792, 608, 608, // #421 + 7, 10872, 10872, 3576, 3576, // #422 + 9, 10880, 10880, 3680, 3680, // #423 + 7, 10904, 10904, 3576, 3576, // #424 + 9, 10912, 10912, 3680, 3680, // #425 + 7, 10928, 10928, 1808, 1808, // #426 + 9, 10952, 10952, 1912, 1912, // #427 + 7, 10976, 10976, 1808, 1808, // #428 + 9, 11016, 11016, 1912, 1912, // #429 + 10, 11048, 11048, 2216, 2216, // #430 + 9, 11080, 11080, 2328, 2328, // #431 + 10, 11112, 11112, 2216, 2216, // #432 + 9, 11144, 11144, 2328, 2328, // #433 + 12, 11168, 11168, 2624, 2624, // #434 + 9, 11184, 11184, 2736, 2736, // #435 + 12, 11200, 11200, 2624, 2624, // #436 + 9, 11216, 11216, 2736, 2736, // #437 + 10, 11232, 11232, 3040, 3040, // #438 + 9, 11248, 11248, 3152, 3152, // #439 + 10, 11264, 11264, 3040, 3040, // #440 + 9, 11280, 11280, 3152, 3152, // #441 + 7, 11304, 11304, 3448, 3448, // #442 + 9, 11312, 11312, 3552, 3552, // #443 + 7, 11336, 11336, 3448, 3448, // #444 + 9, 11344, 11344, 3552, 3552, // #445 + 7, 11368, 11368, 3848, 3848, // #446 + 9, 11376, 11376, 3952, 3952, // #447 + 7, 11400, 11400, 3848, 3848, // #448 + 9, 11408, 11408, 3952, 3952, // #449 + 6, 11432, 11432, 152, 152, // #450 + 9, 11440, 11440, 256, 256, // #451 + 6, 11464, 11464, 152, 152, // #452 + 9, 11472, 11472, 256, 256, // #453 + 13, 11496, 11496, 552, 552, // #454 + 9, 11528, 11528, 664, 664, // #455 + 13, 11560, 11560, 552, 552, // #456 + 9, 11592, 11592, 664, 664, // #457 + 9, 11616, 11616, 960, 960, // #458 + 9, 11632, 11632, 1072, 1072, // #459 + 9, 11648, 11648, 960, 960, // #460 + 9, 11664, 11664, 1072, 1072, // #461 + 9, 11680, 11680, 960, 960, // #462 + 9, 11696, 11696, 1072, 1072, // #463 + 6, 11720, 11720, 1368, 1368, // #464 + 9, 11728, 11728, 1472, 1472, // #465 + 6, 11752, 11752, 1368, 1368, // #466 + 9, 11760, 11760, 1472, 1472, // #467 + 6, 11784, 11784, 1368, 1368, // #468 + 9, 11792, 11792, 1472, 1472, // #469 + 6, 11808, 11808, 1776, 1776, // #470 + 9, 11832, 11832, 1880, 1880, // #471 + 6, 11856, 11856, 1776, 1776, // #472 + 9, 11880, 11880, 1880, 1880, // #473 + 7, 11904, 11904, 2176, 2176, // #474 + 9, 11928, 11928, 2280, 2280, // #475 + 7, 11952, 11952, 2176, 2176, // #476 + 9, 11976, 11976, 2280, 2280, // #477 + 10, 12008, 12008, 2584, 2584, // #478 + 9, 12040, 12040, 2696, 2696, // #479 + 10, 12072, 12072, 2584, 2584, // #480 + 9, 12104, 12104, 2696, 2696, // #481 + 12, 12128, 12128, 2992, 2992, // #482 + 9, 12144, 12144, 3104, 3104, // #483 + 12, 12160, 12160, 2992, 2992, // #484 + 9, 12176, 12176, 3104, 3104, // #485 + 10, 12192, 12192, 3408, 3408, // #486 + 9, 12208, 12208, 3520, 3520, // #487 + 10, 12224, 12224, 3408, 3408, // #488 + 9, 12240, 12240, 3520, 3520, // #489 + 7, 12264, 12264, 3816, 3816, // #490 + 9, 12272, 12272, 3920, 3920, // #491 + 7, 12296, 12296, 3816, 3816, // #492 + 9, 12304, 12304, 3920, 3920, // #493 + 7, 12328, 12328, 120, 120, // #494 + 9, 12336, 12336, 224, 224, // #495 + 7, 12360, 12360, 120, 120, // #496 + 9, 12368, 12368, 224, 224, // #497 + 6, 12392, 12392, 520, 520, // #498 + 9, 12400, 12400, 624, 624, // #499 + 6, 12424, 12424, 520, 520, // #500 + 9, 12432, 12432, 624, 624, // #501 + 13, 12456, 12456, 920, 920, // #502 + 9, 12488, 12488, 1032, 1032, // #503 + 13, 12520, 12520, 920, 920, // #504 + 9, 12552, 12552, 1032, 1032, // #505 + 9, 12576, 12576, 1328, 1328, // #506 + 9, 12592, 12592, 1440, 1440, // #507 + 9, 12608, 12608, 1328, 1328, // #508 + 9, 12624, 12624, 1440, 1440, // #509 + 6, 12648, 12648, 1736, 1736, // #510 + 9, 12656, 12656, 1840, 1840, // #511 + 6, 12680, 12680, 1736, 1736, // #512 + 9, 12688, 12688, 1840, 1840, // #513 + 6, 12712, 12712, 1736, 1736, // #514 + 9, 12720, 12720, 1840, 1840, // #515 + 6, 12744, 12744, 2136, 2136, // #516 + 9, 12752, 12752, 2240, 2240, // #517 + 6, 12776, 12776, 2136, 2136, // #518 + 9, 12784, 12784, 2240, 2240, // #519 + 7, 12808, 12808, 2536, 2536, // #520 + 9, 12816, 12816, 2640, 2640, // #521 + 7, 12840, 12840, 2536, 2536, // #522 + 9, 12848, 12848, 2640, 2640, // #523 + 10, 12864, 12864, 2944, 2944, // #524 + 9, 12880, 12880, 3056, 3056, // #525 + 10, 12896, 12896, 2944, 2944, // #526 + 9, 12912, 12912, 3056, 3056, // #527 + 12, 12936, 12936, 3352, 3352, // #528 + 9, 12968, 12968, 3464, 3464, // #529 + 12, 13000, 13000, 3352, 3352, // #530 + 9, 13032, 13032, 3464, 3464, // #531 + 10, 13064, 13064, 3768, 3768, // #532 + 9, 13096, 13096, 3880, 3880, // #533 + 10, 13128, 13128, 3768, 3768, // #534 + 9, 13160, 13160, 3880, 3880, // #535 + 7, 13192, 13192, 88, 88, // #536 + 9, 13200, 13200, 192, 192, // #537 + 7, 13224, 13224, 88, 88, // #538 + 9, 13232, 13232, 192, 192, // #539 + 7, 13256, 13256, 488, 488, // #540 + 9, 13264, 13264, 592, 592, // #541 + 7, 13288, 13288, 488, 488, // #542 + 9, 13296, 13296, 592, 592, // #543 + 6, 13320, 13320, 888, 888, // #544 + 9, 13328, 13328, 992, 992, // #545 + 6, 13352, 13352, 888, 888, // #546 + 9, 13360, 13360, 992, 992, // #547 + 13, 13384, 13384, 1288, 1288, // #548 + 9, 13448, 13448, 1400, 1400, // #549 + 13, 13480, 13480, 1288, 1288, // #550 + 9, 13512, 13512, 1400, 1400, // #551 + 9, 13536, 13536, 1696, 1696, // #552 + 9, 13552, 13552, 1808, 1808, // #553 + 9, 13568, 13568, 1696, 1696, // #554 + 9, 13584, 13584, 1808, 1808, // #555 + 9, 13600, 13600, 1696, 1696, // #556 + 9, 13616, 13616, 1808, 1808, // #557 + 6, 13640, 13640, 2104, 2104, // #558 + 9, 13648, 13648, 2208, 2208, // #559 + 6, 13672, 13672, 2104, 2104, // #560 + 9, 13680, 13680, 2208, 2208, // #561 + 6, 13704, 13704, 2104, 2104, // #562 + 9, 13712, 13712, 2208, 2208, // #563 + 6, 13736, 13736, 2504, 2504, // #564 + 9, 13744, 13744, 2608, 2608, // #565 + 6, 13768, 13768, 2504, 2504, // #566 + 9, 13776, 13776, 2608, 2608, // #567 + 7, 13800, 13800, 72, 72, // #568 + 9, 13808, 13808, 176, 176, // #569 + 7, 13832, 13832, 72, 72, // #570 + 9, 13840, 13840, 176, 176, // #571 + 10, 13856, 13856, 480, 480, // #572 + 9, 13872, 13872, 592, 592, // #573 + 10, 13888, 13888, 480, 480, // #574 + 9, 13904, 13904, 592, 592, // #575 + 12, 13960, 13960, 888, 888, // #576 + 9, 13992, 13992, 1000, 1000, // #577 + 12, 14024, 14024, 888, 888, // #578 + 9, 14056, 14056, 1000, 1000, // #579 + 10, 14088, 14088, 1304, 1304, // #580 + 9, 14120, 14120, 1416, 1416, // #581 + 10, 14152, 14152, 1304, 1304, // #582 + 9, 14184, 14184, 1416, 1416, // #583 + 7, 14208, 14208, 1712, 1712, // #584 + 9, 14232, 14232, 1816, 1816, // #585 + 7, 14256, 14256, 1712, 1712, // #586 + 9, 14280, 14280, 1816, 1816, // #587 + 7, 14304, 14304, 2112, 2112, // #588 + 9, 14328, 14328, 2216, 2216, // #589 + 7, 14352, 14352, 2112, 2112, // #590 + 9, 14376, 14376, 2216, 2216, // #591 + 6, 14400, 14400, 2512, 2512, // #592 + 9, 14472, 14472, 2616, 2616, // #593 + 6, 14496, 14496, 2512, 2512, // #594 + 9, 14536, 14536, 2616, 2616, // #595 + 13, 14568, 14568, 2920, 2920, // #596 + 9, 14600, 14600, 3032, 3032, // #597 + 13, 14632, 14632, 2920, 2920, // #598 + 9, 14664, 14664, 3032, 3032, // #599 + 9, 14688, 14688, 3328, 3328, // #600 + 9, 14704, 14704, 3440, 3440, // #601 + 9, 14720, 14720, 3328, 3328, // #602 + 9, 14736, 14736, 3440, 3440, // #603 + 9, 14752, 14752, 3328, 3328, // #604 + 9, 14768, 14768, 3440, 3440, // #605 + 6, 14792, 14792, 3736, 3736, // #606 + 9, 14800, 14800, 3840, 3840, // #607 + 6, 14824, 14824, 3736, 3736, // #608 + 9, 14832, 14832, 3840, 3840, // #609 + 6, 14856, 14856, 3736, 3736, // #610 + 9, 14864, 14864, 3840, 3840, // #611 + 6, 14888, 14888, 40, 40, // #612 + 9, 14896, 14896, 144, 144, // #613 + 6, 14920, 14920, 40, 40, // #614 + 9, 14928, 14928, 144, 144, // #615 + 7, 14952, 14952, 440, 440, // #616 + 9, 14960, 14960, 544, 544, // #617 + 7, 14984, 14984, 440, 440, // #618 + 9, 14992, 14992, 544, 544, // #619 + 10, 15008, 15008, 848, 848, // #620 + 9, 15024, 15024, 960, 960, // #621 + 10, 15040, 15040, 848, 848, // #622 + 9, 15056, 15056, 960, 960, // #623 + 12, 15080, 15080, 1256, 1256, // #624 + 9, 15112, 15112, 1368, 1368, // #625 + 12, 15144, 15144, 1256, 1256, // #626 + 9, 15176, 15176, 1368, 1368, // #627 + 10, 15208, 15208, 1672, 1672, // #628 + 9, 15240, 15240, 1784, 1784, // #629 + 10, 15272, 15272, 1672, 1672, // #630 + 9, 15304, 15304, 1784, 1784, // #631 + 7, 15328, 15328, 2080, 2080, // #632 + 9, 15352, 15352, 2184, 2184, // #633 + 7, 15376, 15376, 2080, 2080, // #634 + 9, 15400, 15400, 2184, 2184, // #635 + 7, 15424, 15424, 2480, 2480, // #636 + 9, 15448, 15448, 2584, 2584, // #637 + 7, 15472, 15472, 2480, 2480, // #638 + 9, 15496, 15496, 2584, 2584, // #639 + 6, 15520, 15520, 2880, 2880, // #640 + 9, 15544, 15544, 2984, 2984, // #641 + 6, 15568, 15568, 2880, 2880, // #642 + 9, 15592, 15592, 2984, 2984, // #643 + 13, 15616, 15616, 3280, 3280, // #644 + 9, 15632, 15632, 3392, 3392, // #645 + 13, 15648, 15648, 3280, 3280, // #646 + 9, 15664, 15664, 3392, 3392, // #647 + 9, 15688, 15688, 3688, 3688, // #648 + 9, 15720, 15720, 3800, 3800, // #649 + 9, 15752, 15752, 3688, 3688, // #650 + 9, 15784, 15784, 3800, 3800, // #651 + 9, 15816, 15816, 3688, 3688, // #652 + 9, 15848, 15848, 3800, 3800, // #653 + 6, 15872, 15872, 0, 0, // #654 + 9, 15896, 15896, 104, 104, // #655 + 6, 15920, 15920, 0, 0, // #656 + 9, 15944, 15944, 104, 104, // #657 + 6, 15968, 15968, 0, 0, // #658 + 9, 15992, 15992, 104, 104, // #659 + 6, 16016, 16016, 400, 400, // #660 + 9, 16072, 16072, 504, 504, // #661 + 6, 16096, 16096, 400, 400, // #662 + 9, 16136, 16136, 504, 504, // #663 + 7, 16160, 16160, 800, 800, // #664 + 9, 16184, 16184, 904, 904, // #665 + 7, 16208, 16208, 800, 800, // #666 + 9, 16232, 16232, 904, 904, // #667 + 10, 16256, 16256, 1216, 1216, // #668 + 9, 16272, 16272, 1328, 1328, // #669 + 10, 16288, 16288, 1216, 1216, // #670 + 9, 16304, 16304, 1328, 1328, // #671 + 12, 16328, 16328, 1624, 1624, // #672 + 9, 16360, 16360, 1736, 1736, // #673 + 12, 16392, 16392, 1624, 1624, // #674 + 9, 16424, 16424, 1736, 1736, // #675 + 10, 16456, 16456, 2040, 2040, // #676 + 9, 16488, 16488, 2152, 2152, // #677 + 10, 16520, 16520, 2040, 2040, // #678 + 9, 16552, 16552, 2152, 2152, // #679 + 7, 16576, 16576, 2448, 2448, // #680 + 9, 16648, 16648, 2552, 2552, // #681 + 7, 16672, 16672, 2448, 2448, // #682 + 9, 16712, 16712, 2552, 2552, // #683 + 7, 16736, 16736, 2848, 2848, // #684 + 9, 16760, 16760, 2952, 2952, // #685 + 7, 16784, 16784, 2848, 2848, // #686 + 9, 16808, 16808, 2952, 2952, // #687 + 6, 16832, 16832, 3248, 3248, // #688 + 9, 16856, 16856, 3352, 3352, // #689 + 6, 16880, 16880, 3248, 3248, // #690 + 9, 16904, 16904, 3352, 3352, // #691 + 13, 16928, 16928, 3696, 3696, // #692 + 9, 16944, 16944, 3808, 3808, // #693 + 13, 16960, 16960, 3696, 3696, // #694 + 9, 16976, 16976, 3808, 3808, // #695 + 9, 16992, 16992, 4064, 4064, // #696 + 9, 17008, 17008, 80, 80, // #697 + 9, 17024, 17024, 4064, 4064, // #698 + 9, 17040, 17040, 80, 80, // #699 + 9, 17056, 17056, 4064, 4064, // #700 + 9, 17072, 17072, 80, 80, // #701 + 6, 17096, 17096, 376, 376, // #702 + 9, 17104, 17104, 480, 480, // #703 + 6, 17128, 17128, 376, 376, // #704 + 9, 17136, 17136, 480, 480, // #705 + 6, 17160, 17160, 376, 376, // #706 + 9, 17168, 17168, 480, 480, // #707 + 6, 17192, 17192, 776, 776, // #708 + 9, 17200, 17200, 880, 880, // #709 + 6, 17224, 17224, 776, 776, // #710 + 9, 17232, 17232, 880, 880, // #711 + 7, 17256, 17256, 1176, 1176, // #712 + 9, 17264, 17264, 1280, 1280, // #713 + 7, 17288, 17288, 1176, 1176, // #714 + 9, 17296, 17296, 1280, 1280, // #715 + 12, 17320, 17320, 1576, 1576, // #716 + 9, 17352, 17352, 1688, 1688, // #717 + 12, 17384, 17384, 1576, 1576, // #718 + 9, 17416, 17416, 1688, 1688, // #719 + 10, 17448, 17448, 1992, 1992, // #720 + 9, 17480, 17480, 2104, 2104, // #721 + 10, 17512, 17512, 1992, 1992, // #722 + 9, 17544, 17544, 2104, 2104, // #723 + 7, 17568, 17568, 2400, 2400, // #724 + 9, 17592, 17592, 2504, 2504, // #725 + 7, 17616, 17616, 2400, 2400, // #726 + 9, 17640, 17640, 2504, 2504, // #727 + 9, 17672, 17672, 2808, 2808, // #728 + 9, 17704, 17704, 2920, 2920, // #729 + 9, 17736, 17736, 2808, 2808, // #730 + 9, 17768, 17768, 2920, 2920, // #731 + 6, 17792, 17792, 3216, 3216, // #732 + 9, 17864, 17864, 3320, 3320, // #733 + 6, 17888, 17888, 3216, 3216, // #734 + 9, 17928, 17928, 3320, 3320, // #735 + 6, 17952, 17952, 3216, 3216, // #736 + 9, 17992, 17992, 3320, 3320, // #737 + 6, 18024, 18024, 3624, 3624, // #738 + 9, 18032, 18032, 3728, 3728, // #739 + 6, 18056, 18056, 3624, 3624, // #740 + 9, 18064, 18064, 3728, 3728, // #741 + 22, 18088, 18088, 1992, 1992, // #742 + 11, 18120, 18120, 2232, 2232, // #743 + 11, 18152, 18152, 2472, 2472, // #744 + 11, 18184, 18184, 2712, 2712, // #745 + 22, 18208, 18208, 2944, 2944, // #746 + 22, 18240, 18240, 3184, 3184, // #747 + 11, 18272, 18272, 2528, 2528, // #748 + 19, 18296, 18296, 88, 88, // #749 + 4, 18320, 18320, 1520, 1520, // #750 + 1976, 18376, 18376, 2616, 2616, // #751 + 12, 20368, 20368, 1376, 1376, // #752 + 9, 20384, 20384, 1488, 1488, // #753 + 7, 20400, 20400, 3424, 3424, // #754 + 9, 20424, 20424, 3528, 3528, // #755 + 7, 20448, 20448, 3424, 3424, // #756 + 9, 20472, 20472, 3528, 3528, // #757 + 12, 20496, 20496, 3824, 3824, // #758 + 9, 20512, 20512, 3936, 3936, // #759 + 12, 20528, 20528, 3824, 3824, // #760 + 9, 20544, 20544, 3936, 3936, // #761 + 7, 20568, 20568, 136, 136, // #762 + 9, 20576, 20576, 240, 240, // #763 + 7, 20600, 20600, 136, 136, // #764 + 9, 20608, 20608, 240, 240, // #765 + 11, 20624, 20624, 544, 544, // #766 + 9, 20640, 20640, 656, 656, // #767 + 9, 20656, 20656, 960, 960, // #768 + 9, 20672, 20672, 1072, 1072, // #769 + 9, 20688, 20688, 960, 960, // #770 + 9, 20704, 20704, 1072, 1072, // #771 + 7, 20720, 20720, 1392, 1392, // #772 + 9, 20744, 20744, 1496, 1496, // #773 + 12, 20768, 20768, 1792, 1792, // #774 + 9, 20784, 20784, 1904, 1904, // #775 + 7, 20808, 20808, 2200, 2200, // #776 + 9, 20816, 20816, 2304, 2304, // #777 + 11, 20832, 20832, 2608, 2608, // #778 + 9, 20848, 20848, 2720, 2720, // #779 + 9, 20872, 20872, 3016, 3016, // #780 + 9, 20936, 20936, 3128, 3128, // #781 + 12, 20968, 20968, 984, 984, // #782 + 9, 21000, 21000, 1096, 1096, // #783 + 7, 21024, 21024, 2640, 2640, // #784 + 9, 21064, 21064, 2744, 2744, // #785 + 7, 21088, 21088, 2640, 2640, // #786 + 9, 21128, 21128, 2744, 2744, // #787 + 12, 21152, 21152, 3040, 3040, // #788 + 9, 21168, 21168, 3152, 3152, // #789 + 12, 21184, 21184, 3040, 3040, // #790 + 9, 21200, 21200, 3152, 3152, // #791 + 7, 21224, 21224, 3448, 3448, // #792 + 9, 21240, 21240, 3560, 3560, // #793 + 7, 21272, 21272, 3448, 3448, // #794 + 9, 21288, 21288, 3560, 3560, // #795 + 11, 21320, 21320, 3864, 3864, // #796 + 9, 21352, 21352, 3976, 3976, // #797 + 9, 21376, 21376, 176, 176, // #798 + 9, 21392, 21392, 288, 288, // #799 + 9, 21408, 21408, 176, 176, // #800 + 9, 21424, 21424, 288, 288, // #801 + 6, 21448, 21448, 584, 584, // #802 + 9, 21456, 21456, 688, 688, // #803 + 7, 21472, 21472, 608, 608, // #804 + 9, 21496, 21496, 712, 712, // #805 + 7, 21520, 21520, 608, 608, // #806 + 9, 21544, 21544, 712, 712, // #807 + 12, 21568, 21568, 1008, 1008, // #808 + 9, 21584, 21584, 1120, 1120, // #809 + 12, 21600, 21600, 1008, 1008, // #810 + 9, 21616, 21616, 1120, 1120, // #811 + 7, 21640, 21640, 1416, 1416, // #812 + 9, 21648, 21648, 1520, 1520, // #813 + 7, 21672, 21672, 1416, 1416, // #814 + 9, 21680, 21680, 1520, 1520, // #815 + 11, 21696, 21696, 1824, 1824, // #816 + 9, 21712, 21712, 1936, 1936, // #817 + 9, 21768, 21768, 2232, 2232, // #818 + 9, 21800, 21800, 2344, 2344, // #819 + 9, 21832, 21832, 2232, 2232, // #820 + 9, 21864, 21864, 2344, 2344, // #821 + 12, 21896, 21896, 200, 200, // #822 + 9, 21960, 21960, 312, 312, // #823 + 7, 21992, 21992, 1160, 1160, // #824 + 9, 22000, 22000, 1264, 1264, // #825 + 7, 22024, 22024, 1160, 1160, // #826 + 9, 22032, 22032, 1264, 1264, // #827 + 12, 22056, 22056, 1560, 1560, // #828 + 9, 22088, 22088, 1672, 1672, // #829 + 12, 22120, 22120, 1560, 1560, // #830 + 9, 22152, 22152, 1672, 1672, // #831 + 12, 22184, 22184, 1560, 1560, // #832 + 9, 22216, 22216, 1672, 1672, // #833 + 7, 22240, 22240, 1968, 1968, // #834 + 9, 22264, 22264, 2072, 2072, // #835 + 7, 22288, 22288, 1968, 1968, // #836 + 9, 22312, 22312, 2072, 2072, // #837 + 11, 22344, 22344, 2376, 2376, // #838 + 9, 22408, 22408, 3192, 3192, // #839 + 9, 22432, 22432, 3488, 3488, // #840 + 9, 22448, 22448, 3600, 3600, // #841 + 9, 22464, 22464, 3488, 3488, // #842 + 9, 22480, 22480, 3600, 3600, // #843 + 6, 22504, 22504, 3896, 3896, // #844 + 9, 22512, 22512, 4000, 4000, // #845 + 12, 22528, 22528, 752, 752, // #846 + 9, 22544, 22544, 864, 864, // #847 + 12, 22560, 22560, 752, 752, // #848 + 9, 22576, 22576, 864, 864, // #849 + 7, 22600, 22600, 2408, 2408, // #850 + 9, 22608, 22608, 2512, 2512, // #851 + 7, 22632, 22632, 2408, 2408, // #852 + 9, 22640, 22640, 2512, 2512, // #853 + 12, 22664, 22664, 2808, 2808, // #854 + 9, 22696, 22696, 2920, 2920, // #855 + 12, 22728, 22728, 2808, 2808, // #856 + 9, 22760, 22760, 2920, 2920, // #857 + 7, 22784, 22784, 3216, 3216, // #858 + 9, 22856, 22856, 3320, 3320, // #859 + 7, 22880, 22880, 3216, 3216, // #860 + 9, 22920, 22920, 3320, 3320, // #861 + 11, 22952, 22952, 3624, 3624, // #862 + 9, 22984, 22984, 3736, 3736, // #863 + 9, 23008, 23008, 4032, 4032, // #864 + 9, 23024, 23024, 48, 48, // #865 + 9, 23040, 23040, 4032, 4032, // #866 + 9, 23056, 23056, 48, 48, // #867 + 6, 23080, 23080, 344, 344, // #868 + 9, 23096, 23096, 456, 456, // #869 + 6, 23128, 23128, 344, 344, // #870 + 9, 23144, 23144, 456, 456, // #871 + 7, 23176, 23176, 2936, 2936, // #872 + 9, 23184, 23184, 3040, 3040, // #873 + 7, 23208, 23208, 2936, 2936, // #874 + 9, 23216, 23216, 3040, 3040, // #875 + 12, 23240, 23240, 3336, 3336, // #876 + 9, 23304, 23304, 3448, 3448, // #877 + 12, 23336, 23336, 3336, 3336, // #878 + 9, 23368, 23368, 3448, 3448, // #879 + 12, 23400, 23400, 3336, 3336, // #880 + 9, 23432, 23432, 3448, 3448, // #881 + 7, 23456, 23456, 784, 784, // #882 + 9, 23496, 23496, 888, 888, // #883 + 7, 23520, 23520, 784, 784, // #884 + 9, 23560, 23560, 888, 888, // #885 + 11, 23592, 23592, 1192, 1192, // #886 + 9, 23624, 23624, 1304, 1304, // #887 + 9, 23648, 23648, 1600, 1600, // #888 + 9, 23664, 23664, 1712, 1712, // #889 + 9, 23680, 23680, 1600, 1600, // #890 + 9, 23696, 23696, 1712, 1712, // #891 + 6, 23720, 23720, 2008, 2008, // #892 + 9, 23728, 23728, 2112, 2112, // #893 + 7, 23744, 23744, 2000, 2000, // #894 + 8, 23768, 23768, 2104, 2104, // #895 + 7, 23792, 23792, 2000, 2000, // #896 + 8, 23816, 23816, 2104, 2104, // #897 + 12, 23840, 23840, 2608, 2608, // #898 + 8, 23856, 23856, 2720, 2720, // #899 + 12, 23872, 23872, 2608, 2608, // #900 + 8, 23888, 23888, 2720, 2720, // #901 + 7, 23904, 23904, 3232, 3232, // #902 + 8, 23928, 23928, 3336, 3336, // #903 + 7, 23952, 23952, 3232, 3232, // #904 + 8, 23976, 23976, 3336, 3336, // #905 + 11, 24008, 24008, 3848, 3848, // #906 + 8, 24040, 24040, 3960, 3960, // #907 + 9, 24072, 24072, 376, 376, // #908 + 8, 24104, 24104, 488, 488, // #909 + 9, 24136, 24136, 376, 376, // #910 + 8, 24168, 24168, 488, 488, // #911 + 5, 24200, 24200, 792, 792, // #912 + 5, 24208, 24208, 1200, 1200, // #913 + 5, 24232, 24232, 1608, 1608, // #914 + 5, 24248, 24248, 2424, 2424, // #915 + 5, 24264, 24264, 3240, 3240, // #916 + 5, 24272, 24272, 3648, 3648, // #917 + 5, 24296, 24296, 4056, 4056, // #918 + 5, 24304, 24304, 368, 368, // #919 + 5, 24320, 24320, 768, 768, // #920 + 5, 24344, 24344, 1176, 1176, // #921 + 5, 24352, 24352, 1584, 1584, // #922 + 5, 24376, 24376, 1992, 1992, // #923 + 5, 24384, 24384, 2400, 2400, // #924 + 5, 24408, 24408, 2808, 2808, // #925 + 5, 24416, 24416, 3216, 3216, // #926 + 5, 24432, 24432, 4032, 4032, // #927 + 5, 24448, 24448, 752, 752, // #928 + 5, 24464, 24464, 1152, 1152, // #929 + 5, 24488, 24488, 1560, 1560, // #930 + 5, 24504, 24504, 1976, 1976, // #931 + 5, 24520, 24520, 2376, 2376, // #932 + 5, 24528, 24528, 2784, 2784, // #933 + 5, 24552, 24552, 3192, 3192, // #934 + 5, 24560, 24560, 3600, 3600, // #935 + 5, 24584, 24584, 4008, 4008, // #936 + 5, 24592, 24592, 320, 320, // #937 + 5, 24616, 24616, 728, 728, // #938 + 5, 24632, 24632, 1544, 1544, // #939 + 5, 24648, 24648, 2360, 2360, // #940 + 5, 24664, 24664, 2760, 2760, // #941 + 5, 24672, 24672, 3168, 3168, // #942 + 5, 24696, 24696, 3576, 3576, // #943 + 5, 24704, 24704, 1088, 1088, // #944 + 5, 24720, 24720, 1504, 1504, // #945 + 5, 24744, 24744, 1912, 1912, // #946 + 5, 24752, 24752, 2320, 2320, // #947 + 5, 24776, 24776, 2728, 2728, // #948 + 5, 24784, 24784, 3136, 3136, // #949 + 5, 24808, 24808, 3544, 3544, // #950 + 5, 24824, 24824, 264, 264, // #951 + 5, 24840, 24840, 1080, 1080, // #952 + 5, 24856, 24856, 1480, 1480, // #953 + 5, 24864, 24864, 1888, 1888, // #954 + 5, 24888, 24888, 2296, 2296, // #955 + 5, 24904, 24904, 2696, 2696, // #956 + 5, 24912, 24912, 3104, 3104, // #957 + 5, 24936, 24936, 3512, 3512, // #958 + 5, 24952, 24952, 3928, 3928, // #959 + 5, 24960, 24960, 240, 240, // #960 + 5, 24984, 24984, 648, 648, // #961 + 5, 24992, 24992, 1056, 1056, // #962 + 5, 25008, 25008, 1872, 1872, // #963 + 5, 25024, 25024, 2688, 2688, // #964 + 5, 25040, 25040, 3088, 3088, // #965 + 5, 25064, 25064, 3496, 3496, // #966 + 5, 25072, 25072, 3904, 3904, // #967 + 5, 25088, 25088, 208, 208, // #968 + 5, 25112, 25112, 616, 616, // #969 + 5, 25120, 25120, 1024, 1024, // #970 + 5, 25144, 25144, 1432, 1432, // #971 + 11, 25160, 25160, 3800, 3800, // #972 + 8, 25184, 25184, 1776, 1776, // #973 + 8, 25200, 25200, 1984, 1984, // #974 + 2, 25216, 25216, 2224, 2224, // #975 + 11, 25232, 25232, 2448, 2448, // #976 + 20, 25256, 25256, 216, 216, // #977 + 1, 25293, 25293, 205, 205, // #978 + 7, 25304, 25304, 3464, 3464, // #979 + 2, 25320, 25320, 72, 72, // #980 + 5, 25336, 25336, 424, 424, // #981 + 8, 25348, 25348, 1780, 1780, // #982 + 11, 25421, 25421, 1789, 1789, // #983 + 6, 25441, 25441, 1681, 1681, // #984 + 11, 25464, 25464, 1688, 1688, // #985 + 2, 25498, 25498, 2202, 2202, // #986 + 9, 25518, 25518, 2142, 2142, // #987 + 2, 25546, 25546, 2202, 2202, // #988 + 11, 25615, 25615, 2175, 2175, // #989 + 6, 25642, 25642, 138, 138, // #990 + 11, 25665, 25665, 145, 145, // #991 + 8, 25694, 25694, 1134, 1134, // #992 + 15, 25735, 25735, 1143, 1143, // #993 + 6, 25769, 25769, 1113, 1113, // #994 + 13, 25776, 25776, 1120, 1120, // #995 + 9, 25795, 25795, 2035, 2035, // #996 + 16, 25869, 25869, 2045, 2045, // #997 + 6, 25902, 25902, 2014, 2014, // #998 + 13, 25925, 25925, 2021, 2021, // #999 + 2, 25962, 25962, 2202, 2202, // #1000 + 19, 25979, 25979, 2395, 2395, // #1001 + 7, 26014, 26014, 1070, 1070, // #1002 + 19, 26054, 26054, 1078, 1078, // #1003 + 8, 26080, 26080, 2352, 2352, // #1004 + 11, 26121, 26121, 2361, 2361, // #1005 + 2, 26156, 26156, 2172, 2172, // #1006 + 2, 26191, 26191, 2175, 2175, // #1007 + 2, 26217, 26217, 2201, 2201, // #1008 + 11, 26236, 26236, 2204, 2204, // #1009 + 6, 26258, 26258, 2178, 2178, // #1010 + 15, 26281, 26281, 2185, 2185, // #1011 + 8, 26306, 26306, 1650, 1650, // #1012 + 8, 26379, 26379, 1659, 1659, // #1013 + 8, 26405, 26405, 2373, 2373, // #1014 + 11, 26430, 26430, 2382, 2382, // #1015 + 4, 26452, 26452, 2660, 2660, // #1016 + 13, 26502, 26502, 2678, 2678, // #1017 + 2, 26532, 26532, 1668, 1668, // #1018 + 9, 26551, 26551, 1671, 1671, // #1019 + 4, 26582, 26582, 3110, 3110, // #1020 + 9, 26603, 26603, 3115, 3115, // #1021 + 4, 26624, 26624, 2320, 2320, // #1022 + 9, 26645, 26645, 2325, 2325, // #1023 + 6, 26703, 26703, 2303, 2303, // #1024 + 9, 26726, 26726, 2310, 2310, // #1025 + 10, 26741, 26741, 1621, 1621, // #1026 + 17, 26752, 26752, 1632, 1632, // #1027 + 10, 26785, 26785, 2257, 2257, // #1028 + 34, 26812, 26812, 2268, 2268, // #1029 + 13, 26856, 26856, 2216, 2216, // #1030 + 26, 26886, 26886, 2230, 2230, // #1031 + 3, 26943, 26943, 2335, 2335, // #1032 + 12, 26963, 26963, 2339, 2339, // #1033 + 4, 26986, 26986, 1098, 1098, // #1034 + 9, 27007, 27007, 1103, 1103, // #1035 + 3, 27029, 27029, 2661, 2661, // #1036 + 7, 27041, 27041, 3089, 3089, // #1037 + 1, 27058, 27058, 1810, 1810, // #1038 + 1, 27076, 27076, 1812, 1812, // #1039 + 3, 27100, 27100, 3372, 3372, // #1040 + 3, 27104, 27104, 3376, 3376, // #1041 + 3, 27151, 27151, 3519, 3519, // #1042 + 5, 27171, 27171, 3523, 3523, // #1043 + 9, 27193, 27193, 3529, 3529, // #1044 + 8, 27219, 27219, 3539, 3539, // #1045 + 7, 27244, 27244, 3548, 3548, // #1046 + 4, 27268, 27268, 3556, 3556, // #1047 + 3, 27289, 27289, 3561, 3561, // #1048 + 6, 27309, 27309, 3565, 3565, // #1049 + 9, 27332, 27332, 3572, 3572, // #1050 + 3, 27406, 27406, 3582, 3582, // #1051 + 5, 27426, 27426, 3586, 3586, // #1052 + 3, 27448, 27448, 3592, 3592, // #1053 + 6, 27468, 27468, 3596, 3596, // #1054 + 4, 27495, 27495, 3607, 3607, // #1055 + 5, 27516, 27516, 3612, 3612, // #1056 + 3, 27538, 27538, 3618, 3618, // #1057 + 6, 27558, 27558, 3622, 3622, // #1058 + 8, 27581, 27581, 3629, 3629, // #1059 + 4, 27606, 27606, 3638, 3638, // #1060 + 4, 27627, 27627, 3643, 3643, // #1061 + 7, 27632, 27632, 3648, 3648, // #1062 + 8, 27656, 27656, 3656, 3656, // #1063 + 6, 27681, 27681, 3665, 3665, // #1064 + 9, 27700, 27700, 3684, 3684, // #1065 + 7, 27726, 27726, 3694, 3694, // #1066 + 11, 27752, 27752, 3672, 3672, // #1067 + 12, 27782, 27782, 3702, 3702, // #1068 + 6, 27811, 27811, 3715, 3715, // #1069 + 6, 27834, 27834, 3722, 3722, // #1070 + 7, 27857, 27857, 3729, 3729, // #1071 + 11, 27881, 27881, 3737, 3737, // #1072 + 5, 27909, 27909, 3749, 3749, // #1073 + 7, 27931, 27931, 3755, 3755, // #1074 + 5, 27955, 27955, 3763, 3763, // #1075 + 6, 27977, 27977, 3769, 3769, // #1076 + 3, 27984, 27984, 3776, 3776, // #1077 + 5, 28004, 28004, 3780, 3780, // #1078 + 3, 28026, 28026, 3786, 3786, // #1079 + 3, 28035, 28035, 3603, 3603, // #1080 + 8, 28050, 28050, 2034, 2034, // #1081 + 11, 28072, 28072, 2056, 2056, // #1082 + 6, 28096, 28096, 2080, 2080, // #1083 + 11, 28167, 28167, 2103, 2103, // #1084 + 2, 28202, 28202, 2202, 2202, // #1085 + 9, 28222, 28222, 2142, 2142, // #1086 + 2, 28250, 28250, 2202, 2202, // #1087 + 11, 28303, 28303, 2175, 2175, // #1088 + 6, 28326, 28326, 2198, 2198, // #1089 + 11, 28345, 28345, 2217, 2217, // #1090 + 8, 28368, 28368, 2240, 2240, // #1091 + 15, 28389, 28389, 2261, 2261, // #1092 + 6, 28416, 28416, 2288, 2288, // #1093 + 13, 28487, 28487, 2295, 2295, // #1094 + 11, 28517, 28517, 2309, 2309, // #1095 + 18, 28544, 28544, 2336, 2336, // #1096 + 6, 28576, 28576, 2288, 2288, // #1097 + 13, 28593, 28593, 2369, 2369, // #1098 + 2, 28618, 28618, 2202, 2202, // #1099 + 19, 28635, 28635, 2395, 2395, // #1100 + 7, 28682, 28682, 2426, 2426, // #1101 + 19, 28706, 28706, 2434, 2434, // #1102 + 8, 28742, 28742, 2454, 2454, // #1103 + 11, 28767, 28767, 2479, 2479, // #1104 + 2, 28794, 28794, 2202, 2202, // #1105 + 2, 28810, 28810, 2202, 2202, // #1106 + 2, 28826, 28826, 2202, 2202, // #1107 + 11, 28847, 28847, 2479, 2479, // #1108 + 6, 28876, 28876, 2572, 2572, // #1109 + 15, 28899, 28899, 2579, 2579, // #1110 + 8, 28931, 28931, 2595, 2595, // #1111 + 8, 28947, 28947, 2595, 2595, // #1112 + 8, 28963, 28963, 2595, 2595, // #1113 + 11, 28991, 28991, 2479, 2479, // #1114 + 4, 29012, 29012, 2660, 2660, // #1115 + 13, 29062, 29062, 2678, 2678, // #1116 + 2, 29098, 29098, 2202, 2202, // #1117 + 9, 29109, 29109, 2869, 2869, // #1118 + 4, 29135, 29135, 2735, 2735, // #1119 + 9, 29157, 29157, 2757, 2757, // #1120 + 4, 29183, 29183, 2783, 2783, // #1121 + 9, 29205, 29205, 2757, 2757, // #1122 + 6, 29219, 29219, 2819, 2819, // #1123 + 9, 29237, 29237, 2869, 2869, // #1124 + 10, 29255, 29255, 2871, 2871, // #1125 + 17, 29285, 29285, 2901, 2901, // #1126 + 10, 29319, 29319, 2871, 2871, // #1127 + 34, 29352, 29352, 136, 136, // #1128 + 13, 29394, 29394, 2962, 2962, // #1129 + 26, 29408, 29408, 2976, 2976, // #1130 + 3, 29451, 29451, 3003, 3003, // #1131 + 12, 29468, 29468, 3020, 3020, // #1132 + 4, 29493, 29493, 3045, 3045, // #1133 + 9, 29509, 29509, 2757, 2757, // #1134 + 3, 29525, 29525, 2661, 2661, // #1135 + 7, 29537, 29537, 3089, 3089, // #1136 + 1, 29560, 29560, 2568, 2568, // #1137 + 1, 29576, 29576, 2568, 2568, // #1138 + 3, 29597, 29597, 1725, 1725, // #1139 + 3, 29629, 29629, 1725, 1725, // #1140 + 3, 29650, 29650, 1778, 1778, // #1141 + 5, 29672, 29672, 1800, 1800, // #1142 + 9, 29694, 29694, 1806, 1806, // #1143 + 8, 29720, 29720, 1816, 1816, // #1144 + 7, 29745, 29745, 1825, 1825, // #1145 + 4, 29769, 29769, 1833, 1833, // #1146 + 3, 29790, 29790, 1838, 1838, // #1147 + 6, 29810, 29810, 1842, 1842, // #1148 + 4, 29839, 29839, 1919, 1919, // #1149 + 3, 29865, 29865, 1849, 1849, // #1150 + 5, 29901, 29901, 1853, 1853, // #1151 + 3, 29923, 29923, 1859, 1859, // #1152 + 6, 29943, 29943, 1863, 1863, // #1153 + 4, 29966, 29966, 1870, 1870, // #1154 + 5, 29987, 29987, 1875, 1875, // #1155 + 3, 30009, 30009, 1881, 1881, // #1156 + 6, 30029, 30029, 1885, 1885, // #1157 + 4, 30052, 30052, 1892, 1892, // #1158 + 4, 30073, 30073, 1897, 1897, // #1159 + 4, 30094, 30094, 1902, 1902, // #1160 + 7, 30115, 30115, 1907, 1907, // #1161 + 8, 30155, 30155, 1915, 1915, // #1162 + 6, 30180, 30180, 1924, 1924, // #1163 + 6, 30203, 30203, 1931, 1931, // #1164 + 4, 30226, 30226, 1938, 1938, // #1165 + 10, 30247, 30247, 1943, 1943, // #1166 + 11, 30274, 30274, 1954, 1954, // #1167 + 6, 30302, 30302, 1966, 1966, // #1168 + 6, 30325, 30325, 1973, 1973, // #1169 + 5, 30348, 30348, 1980, 1980, // #1170 + 10, 30370, 30370, 1986, 1986, // #1171 + 5, 30397, 30397, 1997, 1997, // #1172 + 5, 30419, 30419, 2003, 2003, // #1173 + 5, 30441, 30441, 2009, 2009, // #1174 + 6, 30463, 30463, 2015, 2015, // #1175 + 3, 30486, 30486, 2022, 2022, // #1176 + 2, 30504, 30504, 1928, 1928, // #1177 + 3, 30522, 30522, 2026, 2026, // #1178 + 3, 30542, 30542, 2030, 2030, // #1179 + 1, 30570, 30570, 3610, 3610, // #1180 + 1, 30584, 30584, 2552, 2552, // #1181 + 1, 30602, 30602, 1498, 1498, // #1182 + 6, 30616, 30616, 2664, 2664, // #1183 + 5, 30624, 30624, 1952, 1952, // #1184 + 0, 30640, 30640, 4060, 4060, // #1185 + 0, 30640, 30640, 3800, 3800, // #1186 + 1, 30643, 30643, 2483, 2483, // #1187 + 3, 30656, 30656, 0, 0, // #1188 + 3, 30687, 30687, 31, 31, // #1189 + 3, 30704, 30704, 1712, 1712, // #1190 + 3, 30728, 30728, 1208, 1208, // #1191 + 3, 30744, 30744, 2552, 2552, // #1192 + 15, 30752, 30752, 1024, 1024, // #1193 + 15, 30776, 30776, 2024, 2024, // #1194 + 6, 30800, 30800, 2816, 2816, // #1195 + 2, 30824, 30824, 2936, 2936, // #1196 + 3, 30840, 30840, 3064, 3064, // #1197 + 5, 30856, 30856, 3192, 3192, // #1198 + 6, 30864, 30864, 3312, 3312, // #1199 + 0, 30880, 30880, 3800, 3800, // #1200 + 4, 30880, 30880, 3200, 3200, // #1201 + 4, 30904, 30904, 3320, 3320, // #1202 + 5, 30912, 30912, 3568, 3568, // #1203 + 3, 30928, 30928, 3200, 3200, // #1204 + 3, 30944, 30944, 2832, 2832, // #1205 + 15, 30960, 30960, 1824, 1824, // #1206 + 16, 30984, 30984, 2232, 2232, // #1207 + 6, 31016, 31016, 3848, 3848, // #1208 + 2, 31032, 31032, 2920, 2920, // #1209 + 3, 31048, 31048, 3048, 3048, // #1210 + 5, 31056, 31056, 3840, 3840, // #1211 + 6, 31080, 31080, 1784, 1784, // #1212 + 0, 31088, 31088, 3800, 3800, // #1213 + 4, 31096, 31096, 1992, 1992, // #1214 + 4, 31104, 31104, 2112, 2112, // #1215 + 5, 31128, 31128, 2360, 2360, // #1216 + 3, 31144, 31144, 1592, 1592, // #1217 + 1, 31162, 31162, 3610, 3610, // #1218 + 1, 31168, 31168, 3344, 3344, // #1219 + 1, 31194, 31194, 1498, 1498, // #1220 + 6, 31208, 31208, 3464, 3464, // #1221 + 8, 31247, 31247, 959, 959, // #1222 + 8, 31264, 31264, 864, 864, // #1223 + 8, 31280, 31280, 3248, 3248, // #1224 + 11, 31299, 31299, 979, 979, // #1225 + 12, 31312, 31312, 624, 624, // #1226 + 18, 31336, 31336, 2328, 2328, // #1227 + 8, 31375, 31375, 3599, 3599, // #1228 + 8, 31400, 31400, 744, 744, // #1229 + 8, 31424, 31424, 2768, 2768, // #1230 + 9, 31448, 31448, 3272, 3272, // #1231 + 21, 31480, 31480, 3416, 3416, // #1232 + 0, 31504, 31504, 3428, 3428, // #1233 + 34, 31554, 31554, 2466, 2466, // #1234 + 19, 31613, 31613, 333, 333, // #1235 + 3, 31648, 31648, 2320, 2320, // #1236 + 7, 31672, 31672, 3464, 3464, // #1237 + 7, 31688, 31688, 3464, 3464, // #1238 + 80, 31752, 31752, 2232, 2232, // #1239 + 8, 31848, 31848, 1512, 1512, // #1240 + 80, 31880, 31880, 2232, 2232, // #1241 + 25, 32008, 32008, 552, 552, // #1242 + 6, 32048, 32048, 3536, 3536, // #1243 + 31, 32064, 32064, 2928, 2928, // #1244 + 31, 32096, 32096, 3024, 3024, // #1245 + 30, 32128, 32128, 3392, 3392, // #1246 + 0, 32160, 32160, 2876, 2876, // #1247 + 7, 32168, 32168, 3464, 3464, // #1248 + 7, 32184, 32184, 3464, 3464, // #1249 + 10, 32192, 32192, 4048, 4048, // #1250 + 6, 32216, 32216, 3480, 3480, // #1251 + 6, 32232, 32232, 3480, 3480, // #1252 + 6, 32248, 32248, 872, 872, // #1253 + 6, 32264, 32264, 872, 872, // #1254 + 6, 32280, 32280, 3944, 3944, // #1255 + 6, 32296, 32296, 3944, 3944, // #1256 + 3, 32304, 32304, 3600, 3600, // #1257 + 3, 32320, 32320, 3600, 3600, // #1258 + 3, 32344, 32344, 3496, 3496, // #1259 + 3, 32360, 32360, 3496, 3496, // #1260 + 3, 32376, 32376, 3496, 3496, // #1261 + 6, 32392, 32392, 2280, 2280, // #1262 + 6, 32408, 32408, 2280, 2280, // #1263 + 6, 32424, 32424, 1272, 1272, // #1264 + 6, 32440, 32440, 1272, 1272, // #1265 + 3, 32456, 32456, 3496, 3496, // #1266 + 3, 32472, 32472, 3544, 3544, // #1267 + 4, 32488, 32488, 3400, 3400, // #1268 + 3, 32504, 32504, 2856, 2856, // #1269 + 0, 32512, 32512, 3428, 3428, // #1270 + 3, 32515, 32515, 739, 739, // #1271 + 7, 32528, 32528, 1952, 1952, // #1272 + 0, 32544, 32544, 3428, 3428, // #1273 + 9, 32559, 32559, 3823, 3823, // #1274 + 21, 32584, 32584, 3416, 3416, // #1275 + 0, 32608, 32608, 3428, 3428, // #1276 + 34, 32642, 32642, 2466, 2466, // #1277 + 21, 32696, 32696, 3416, 3416, // #1278 + 0, 32720, 32720, 3428, 3428, // #1279 + 34, 32770, 32770, 2466, 2466, // #1280 + 5, 32824, 32824, 136, 136, // #1281 + 0, 32832, 32832, 3428, 3428, // #1282 + 5, 32836, 32836, 1156, 1156, // #1283 + 7, 32848, 32848, 3680, 3680, // #1284 + 22, 32867, 32867, 3715, 3715, // #1285 + 7, 32896, 32896, 2336, 2336, // #1286 + 17, 32915, 32915, 2627, 2627, // #1287 + 10, 32946, 32946, 1746, 1746, // #1288 + 16, 32973, 32973, 1757, 1757, // #1289 + 18, 33006, 33006, 1774, 1774, // #1290 + 14, 33041, 33041, 1793, 1793, // #1291 + 10, 33066, 33066, 666, 666, // #1292 + 0, 33088, 33088, 2668, 2668, // #1293 + 9, 33088, 33088, 1808, 1808, // #1294 + 0, 33104, 33104, 2668, 2668, // #1295 + 16, 33114, 33114, 1818, 1818, // #1296 + 9, 33147, 33147, 1835, 1835, // #1297 + 0, 33168, 33168, 2668, 2668, // #1298 + 17, 33221, 33221, 1845, 1845, // #1299 + 0, 33248, 33248, 2668, 2668, // #1300 + 12, 33251, 33251, 691, 691, // #1301 + 0, 33264, 33264, 2668, 2668, // #1302 + 77, 33288, 33288, 3528, 3528, // #1303 + 0, 33376, 33376, 3428, 3428, // #1304 + 86, 33414, 33414, 2022, 2022, // #1305 + 5, 33504, 33504, 2064, 2064, // #1306 + 9, 33520, 33520, 2880, 2880, // #1307 + 5, 33536, 33536, 880, 880, // #1308 + 9, 33552, 33552, 2880, 2880, // #1309 + 5, 33568, 33568, 880, 880, // #1310 + 7, 33584, 33584, 2784, 2784, // #1311 + 5, 33600, 33600, 880, 880, // #1312 + 18, 33616, 33616, 2704, 2704, // #1313 + 3, 33656, 33656, 2456, 2456, // #1314 + 13, 33672, 33672, 840, 840, // #1315 + 3, 33696, 33696, 688, 688, // #1316 + 14, 33712, 33712, 1024, 1024, // #1317 + 7, 33736, 33736, 2280, 2280, // #1318 + 6, 33752, 33752, 1416, 1416, // #1319 + 5, 33760, 33760, 880, 880, // #1320 + 13, 33784, 33784, 840, 840, // #1321 + 3, 33808, 33808, 688, 688, // #1322 + 14, 33824, 33824, 1024, 1024, // #1323 + 7, 33848, 33848, 2280, 2280, // #1324 + 12, 33856, 33856, 192, 192, // #1325 + 3, 33880, 33880, 136, 136, // #1326 + 11, 33888, 33888, 3344, 3344, // #1327 + 3, 33904, 33904, 688, 688, // #1328 + 13, 33928, 33928, 840, 840, // #1329 + 3, 33952, 33952, 688, 688, // #1330 + 6, 33976, 33976, 1416, 1416, // #1331 + 5, 33984, 33984, 880, 880, // #1332 + 5, 34000, 34000, 2208, 2208, // #1333 + 9, 34016, 34016, 2016, 2016, // #1334 + 22, 34040, 34040, 3048, 3048, // #1335 + 5, 34064, 34064, 880, 880, // #1336 + 5, 34088, 34088, 456, 456, // #1337 + 4, 34096, 34096, 1792, 1792, // #1338 + 22, 34112, 34112, 576, 576, // #1339 + 3, 34144, 34144, 688, 688, // #1340 + 9, 34160, 34160, 2880, 2880, // #1341 + 5, 34176, 34176, 880, 880, // #1342 + 5, 34200, 34200, 3448, 3448, // #1343 + 5, 34208, 34208, 880, 880, // #1344 + 12, 34232, 34232, 1992, 1992, // #1345 + 7, 34256, 34256, 736, 736, // #1346 + 22, 34280, 34280, 3048, 3048, // #1347 + 5, 34304, 34304, 880, 880, // #1348 + 8, 34320, 34320, 320, 320, // #1349 + 3, 34344, 34344, 808, 808, // #1350 + 10, 34376, 34376, 696, 696, // #1351 + 9, 34400, 34400, 2016, 2016, // #1352 + 22, 34424, 34424, 3048, 3048, // #1353 + 5, 34448, 34448, 880, 880, // #1354 + 16, 34464, 34464, 3424, 3424, // #1355 + 7, 34504, 34504, 2280, 2280, // #1356 + 11, 34512, 34512, 3344, 3344, // #1357 + 3, 34528, 34528, 688, 688, // #1358 + 16, 34544, 34544, 3424, 3424, // #1359 + 7, 34584, 34584, 2280, 2280, // #1360 + 5, 34600, 34600, 456, 456, // #1361 + 4, 34608, 34608, 1792, 1792, // #1362 + 15, 34624, 34624, 80, 80, // #1363 + 7, 34648, 34648, 2280, 2280, // #1364 + 15, 34696, 34696, 3448, 3448, // #1365 + 8, 34728, 34728, 1912, 1912, // #1366 + 6, 34760, 34760, 3896, 3896, // #1367 + 3, 34776, 34776, 136, 136, // #1368 + 6, 34792, 34792, 3896, 3896, // #1369 + 3, 34808, 34808, 136, 136, // #1370 + 12, 34816, 34816, 2752, 2752, // #1371 + 7, 34840, 34840, 2280, 2280, // #1372 + 17, 34848, 34848, 3424, 3424, // #1373 + 7, 34888, 34888, 2280, 2280, // #1374 + 17, 34896, 34896, 3424, 3424, // #1375 + 7, 34936, 34936, 2280, 2280, // #1376 + 5, 34952, 34952, 3448, 3448, // #1377 + 5, 34960, 34960, 880, 880, // #1378 + 12, 34976, 34976, 2752, 2752, // #1379 + 7, 35000, 35000, 2280, 2280, // #1380 + 16, 35008, 35008, 2176, 2176, // #1381 + 7, 35048, 35048, 2280, 2280, // #1382 + 6, 35064, 35064, 1416, 1416, // #1383 + 5, 35072, 35072, 880, 880, // #1384 + 6, 35088, 35088, 1616, 1616, // #1385 + 7, 35112, 35112, 2280, 2280, // #1386 + 16, 35120, 35120, 2176, 2176, // #1387 + 7, 35160, 35160, 2280, 2280, // #1388 + 11, 35168, 35168, 3344, 3344, // #1389 + 3, 35184, 35184, 688, 688, // #1390 + 5, 35208, 35208, 456, 456, // #1391 + 4, 35216, 35216, 1792, 1792, // #1392 + 13, 35240, 35240, 840, 840, // #1393 + 3, 35264, 35264, 688, 688, // #1394 + 5, 35288, 35288, 3448, 3448, // #1395 + 5, 35296, 35296, 880, 880, // #1396 + 17, 35320, 35320, 3624, 3624, // #1397 + 8, 35344, 35344, 3472, 3472, // #1398 + 5, 35368, 35368, 3448, 3448, // #1399 + 5, 35376, 35376, 880, 880, // #1400 + 5, 35400, 35400, 3448, 3448, // #1401 + 5, 35408, 35408, 880, 880, // #1402 + 15, 35464, 35464, 3448, 3448, // #1403 + 8, 35496, 35496, 1912, 1912, // #1404 + 5, 35528, 35528, 3448, 3448, // #1405 + 5, 35536, 35536, 880, 880, // #1406 + 11, 35552, 35552, 3344, 3344, // #1407 + 3, 35568, 35568, 688, 688, // #1408 + 5, 35592, 35592, 3448, 3448, // #1409 + 5, 35600, 35600, 880, 880, // #1410 + 5, 35624, 35624, 3448, 3448, // #1411 + 5, 35632, 35632, 880, 880, // #1412 + 11, 35648, 35648, 3344, 3344, // #1413 + 3, 35664, 35664, 688, 688, // #1414 + 13, 35680, 35680, 64, 64, // #1415 + 7, 35704, 35704, 2280, 2280, // #1416 + 23, 35720, 35720, 792, 792, // #1417 + 3, 35752, 35752, 2456, 2456, // #1418 + 13, 35760, 35760, 64, 64, // #1419 + 7, 35784, 35784, 2280, 2280, // #1420 + 7, 35800, 35800, 3656, 3656, // #1421 + 9, 35848, 35848, 3832, 3832, // #1422 + 22, 35880, 35880, 3048, 3048, // #1423 + 5, 35904, 35904, 880, 880, // #1424 + 7, 35928, 35928, 3656, 3656, // #1425 + 9, 35976, 35976, 3832, 3832, // #1426 + 13, 36008, 36008, 840, 840, // #1427 + 3, 36032, 36032, 688, 688, // #1428 + 5, 36056, 36056, 3448, 3448, // #1429 + 5, 36064, 36064, 880, 880, // #1430 + 7, 36088, 36088, 3656, 3656, // #1431 + 9, 36104, 36104, 3832, 3832, // #1432 + 9, 36128, 36128, 2880, 2880, // #1433 + 5, 36144, 36144, 880, 880, // #1434 + 13, 36168, 36168, 840, 840, // #1435 + 3, 36192, 36192, 688, 688, // #1436 + 5, 36216, 36216, 3448, 3448, // #1437 + 5, 36224, 36224, 880, 880, // #1438 + 13, 36240, 36240, 3168, 3168, // #1439 + 7, 36264, 36264, 2280, 2280, // #1440 + 6, 36280, 36280, 1416, 1416, // #1441 + 5, 36288, 36288, 880, 880, // #1442 + 13, 36304, 36304, 3168, 3168, // #1443 + 7, 36328, 36328, 2280, 2280, // #1444 + 13, 36336, 36336, 0, 0, // #1445 + 7, 36360, 36360, 2280, 2280, // #1446 + 13, 36368, 36368, 0, 0, // #1447 + 7, 36392, 36392, 2280, 2280, // #1448 + 9, 36400, 36400, 2880, 2880, // #1449 + 5, 36416, 36416, 880, 880, // #1450 + 6, 36440, 36440, 1416, 1416, // #1451 + 5, 36448, 36448, 880, 880, // #1452 + 11, 36464, 36464, 3344, 3344, // #1453 + 3, 36480, 36480, 688, 688, // #1454 + 13, 36504, 36504, 840, 840, // #1455 + 3, 36528, 36528, 688, 688, // #1456 + 12, 36552, 36552, 952, 952, // #1457 + 7, 36584, 36584, 2280, 2280, // #1458 + 22, 36600, 36600, 2760, 2760, // #1459 + 7, 36632, 36632, 2280, 2280, // #1460 + 11, 36640, 36640, 3344, 3344, // #1461 + 3, 36656, 36656, 688, 688, // #1462 + 5, 36680, 36680, 3448, 3448, // #1463 + 5, 36688, 36688, 880, 880, // #1464 + 5, 36712, 36712, 3448, 3448, // #1465 + 5, 36720, 36720, 880, 880, // #1466 + 6, 36744, 36744, 3896, 3896, // #1467 + 3, 36760, 36760, 136, 136, // #1468 + 13, 36776, 36776, 840, 840, // #1469 + 3, 36800, 36800, 688, 688, // #1470 + 13, 36824, 36824, 840, 840, // #1471 + 3, 36848, 36848, 688, 688, // #1472 + 12, 36864, 36864, 192, 192, // #1473 + 3, 36888, 36888, 136, 136, // #1474 + 16, 36896, 36896, 1552, 1552, // #1475 + 7, 36936, 36936, 2280, 2280, // #1476 + 12, 36944, 36944, 192, 192, // #1477 + 3, 36968, 36968, 136, 136, // #1478 + 23, 36984, 36984, 792, 792, // #1479 + 3, 37016, 37016, 2456, 2456, // #1480 + 16, 37024, 37024, 1552, 1552, // #1481 + 7, 37064, 37064, 2280, 2280, // #1482 + 13, 37080, 37080, 840, 840, // #1483 + 3, 37104, 37104, 688, 688, // #1484 + 13, 37120, 37120, 0, 0, // #1485 + 7, 37144, 37144, 2280, 2280, // #1486 + 13, 37152, 37152, 0, 0, // #1487 + 7, 37176, 37176, 2280, 2280, // #1488 + 9, 37184, 37184, 2880, 2880, // #1489 + 5, 37200, 37200, 880, 880, // #1490 + 12, 37216, 37216, 2240, 2240, // #1491 + 7, 37240, 37240, 2280, 2280, // #1492 + 22, 37248, 37248, 576, 576, // #1493 + 3, 37280, 37280, 688, 688, // #1494 + 7, 37304, 37304, 3656, 3656, // #1495 + 9, 37320, 37320, 3832, 3832, // #1496 + 12, 37344, 37344, 2240, 2240, // #1497 + 7, 37368, 37368, 2280, 2280, // #1498 + 13, 37384, 37384, 840, 840, // #1499 + 3, 37408, 37408, 688, 688, // #1500 + 12, 37424, 37424, 192, 192, // #1501 + 3, 37448, 37448, 136, 136, // #1502 + 7, 37456, 37456, 2784, 2784, // #1503 + 5, 37472, 37472, 880, 880, // #1504 + 12, 37488, 37488, 672, 672, // #1505 + 7, 37512, 37512, 2280, 2280, // #1506 + 12, 37520, 37520, 672, 672, // #1507 + 7, 37544, 37544, 2280, 2280, // #1508 + 12, 37560, 37560, 1480, 1480, // #1509 + 3, 37592, 37592, 2456, 2456, // #1510 + 22, 37608, 37608, 3048, 3048, // #1511 + 5, 37632, 37632, 880, 880, // #1512 + 22, 37648, 37648, 576, 576, // #1513 + 3, 37680, 37680, 688, 688, // #1514 + 22, 37704, 37704, 3048, 3048, // #1515 + 5, 37728, 37728, 880, 880, // #1516 + 13, 37752, 37752, 840, 840, // #1517 + 3, 37776, 37776, 688, 688, // #1518 + 8, 37792, 37792, 1584, 1584, // #1519 + 7, 37816, 37816, 2280, 2280, // #1520 + 20, 37824, 37824, 3328, 3328, // #1521 + 3, 37864, 37864, 2456, 2456, // #1522 + 17, 37896, 37896, 1464, 1464, // #1523 + 8, 37928, 37928, 1912, 1912, // #1524 + 13, 37952, 37952, 3168, 3168, // #1525 + 8, 37976, 37976, 1912, 1912, // #1526 + 6, 38008, 38008, 3896, 3896, // #1527 + 3, 38024, 38024, 136, 136, // #1528 + 12, 38032, 38032, 192, 192, // #1529 + 3, 38056, 38056, 136, 136, // #1530 + 7, 38072, 38072, 3656, 3656, // #1531 + 9, 38088, 38088, 3832, 3832, // #1532 + 15, 38152, 38152, 3448, 3448, // #1533 + 8, 38184, 38184, 1912, 1912, // #1534 + 10, 38216, 38216, 2328, 2328, // #1535 + 7, 38248, 38248, 2280, 2280, // #1536 + 16, 38264, 38264, 904, 904, // #1537 + 8, 38296, 38296, 1912, 1912, // #1538 + 12, 38320, 38320, 192, 192, // #1539 + 3, 38344, 38344, 136, 136, // #1540 + 17, 38408, 38408, 1464, 1464, // #1541 + 8, 38440, 38440, 1912, 1912, // #1542 + 12, 38464, 38464, 192, 192, // #1543 + 3, 38488, 38488, 136, 136, // #1544 + 14, 38496, 38496, 704, 704, // #1545 + 7, 38520, 38520, 2280, 2280, // #1546 + 14, 38528, 38528, 704, 704, // #1547 + 7, 38552, 38552, 2280, 2280, // #1548 + 13, 38568, 38568, 840, 840, // #1549 + 3, 38592, 38592, 688, 688, // #1550 + 22, 38616, 38616, 3048, 3048, // #1551 + 5, 38640, 38640, 880, 880, // #1552 + 9, 38656, 38656, 2880, 2880, // #1553 + 5, 38672, 38672, 880, 880, // #1554 + 16, 38688, 38688, 2176, 2176, // #1555 + 7, 38728, 38728, 2280, 2280, // #1556 + 17, 38792, 38792, 1464, 1464, // #1557 + 8, 38824, 38824, 1912, 1912, // #1558 + 12, 38848, 38848, 192, 192, // #1559 + 3, 38872, 38872, 136, 136, // #1560 + 16, 38880, 38880, 2176, 2176, // #1561 + 7, 38920, 38920, 2280, 2280, // #1562 + 5, 38936, 38936, 3448, 3448, // #1563 + 5, 38944, 38944, 880, 880, // #1564 + 5, 38968, 38968, 3448, 3448, // #1565 + 5, 38976, 38976, 880, 880, // #1566 + 13, 39000, 39000, 840, 840, // #1567 + 3, 39024, 39024, 688, 688, // #1568 + 13, 39048, 39048, 840, 840, // #1569 + 3, 39072, 39072, 688, 688, // #1570 + 5, 39096, 39096, 3448, 3448, // #1571 + 5, 39104, 39104, 880, 880, // #1572 + 12, 39128, 39128, 1480, 1480, // #1573 + 3, 39160, 39160, 2456, 2456, // #1574 + 10, 39168, 39168, 832, 832, // #1575 + 7, 39192, 39192, 2280, 2280, // #1576 + 5, 39208, 39208, 3448, 3448, // #1577 + 5, 39216, 39216, 880, 880, // #1578 + 5, 39240, 39240, 3448, 3448, // #1579 + 5, 39248, 39248, 880, 880, // #1580 + 12, 39264, 39264, 672, 672, // #1581 + 7, 39288, 39288, 2280, 2280, // #1582 + 12, 39296, 39296, 192, 192, // #1583 + 3, 39320, 39320, 136, 136, // #1584 + 6, 39336, 39336, 3896, 3896, // #1585 + 3, 39352, 39352, 136, 136, // #1586 + 12, 39360, 39360, 672, 672, // #1587 + 7, 39384, 39384, 2280, 2280, // #1588 + 22, 39400, 39400, 3048, 3048, // #1589 + 5, 39424, 39424, 880, 880, // #1590 + 5, 39448, 39448, 456, 456, // #1591 + 4, 39456, 39456, 1792, 1792, // #1592 + 24, 39488, 39488, 2736, 2736, // #1593 + 8, 39528, 39528, 1912, 1912, // #1594 + 5, 39560, 39560, 3448, 3448, // #1595 + 5, 39568, 39568, 880, 880, // #1596 + 13, 39592, 39592, 840, 840, // #1597 + 3, 39616, 39616, 688, 688, // #1598 + 5, 39640, 39640, 3448, 3448, // #1599 + 5, 39648, 39648, 880, 880, // #1600 + 8, 39664, 39664, 320, 320, // #1601 + 3, 39688, 39688, 808, 808, // #1602 + 13, 39704, 39704, 840, 840, // #1603 + 3, 39728, 39728, 688, 688, // #1604 + 16, 39744, 39744, 256, 256, // #1605 + 3, 39784, 39784, 136, 136, // #1606 + 16, 39792, 39792, 256, 256, // #1607 + 3, 39832, 39832, 136, 136, // #1608 + 12, 39840, 39840, 2752, 2752, // #1609 + 7, 39864, 39864, 2280, 2280, // #1610 + 12, 39872, 39872, 2752, 2752, // #1611 + 7, 39896, 39896, 2280, 2280, // #1612 + 16, 39904, 39904, 256, 256, // #1613 + 3, 39944, 39944, 136, 136, // #1614 + 12, 39952, 39952, 192, 192, // #1615 + 3, 39976, 39976, 136, 136, // #1616 + 16, 39984, 39984, 256, 256, // #1617 + 3, 40024, 40024, 136, 136, // #1618 + 7, 40032, 40032, 2784, 2784, // #1619 + 5, 40048, 40048, 880, 880, // #1620 + 5, 40072, 40072, 456, 456, // #1621 + 4, 40080, 40080, 1792, 1792, // #1622 + 6, 40104, 40104, 1416, 1416, // #1623 + 5, 40112, 40112, 880, 880, // #1624 + 11, 40136, 40136, 2600, 2600, // #1625 + 7, 40168, 40168, 2280, 2280, // #1626 + 7, 40176, 40176, 2784, 2784, // #1627 + 5, 40192, 40192, 880, 880, // #1628 + 11, 40216, 40216, 2600, 2600, // #1629 + 7, 40248, 40248, 2280, 2280, // #1630 + 9, 40256, 40256, 1184, 1184, // #1631 + 7, 40280, 40280, 2280, 2280, // #1632 + 9, 40288, 40288, 1184, 1184, // #1633 + 7, 40312, 40312, 2280, 2280, // #1634 + 13, 40328, 40328, 840, 840, // #1635 + 3, 40352, 40352, 688, 688, // #1636 + 12, 40368, 40368, 672, 672, // #1637 + 7, 40392, 40392, 2280, 2280, // #1638 + 5, 40408, 40408, 456, 456, // #1639 + 4, 40416, 40416, 1792, 1792, // #1640 + 12, 40432, 40432, 672, 672, // #1641 + 7, 40456, 40456, 2280, 2280, // #1642 + 12, 40464, 40464, 192, 192, // #1643 + 3, 40488, 40488, 136, 136, // #1644 + 5, 40504, 40504, 456, 456, // #1645 + 4, 40512, 40512, 1792, 1792, // #1646 + 6, 40536, 40536, 1416, 1416, // #1647 + 5, 40552, 40552, 3944, 3944, // #1648 + 12, 40568, 40568, 3352, 3352, // #1649 + 8, 40600, 40600, 1912, 1912, // #1650 + 12, 40624, 40624, 192, 192, // #1651 + 3, 40648, 40648, 136, 136, // #1652 + 6, 40664, 40664, 1416, 1416, // #1653 + 5, 40672, 40672, 880, 880, // #1654 + 13, 40696, 40696, 840, 840, // #1655 + 3, 40720, 40720, 688, 688, // #1656 + 13, 40736, 40736, 3168, 3168, // #1657 + 8, 40760, 40760, 1912, 1912, // #1658 + 13, 40792, 40792, 840, 840, // #1659 + 3, 40816, 40816, 688, 688, // #1660 + 23, 40840, 40840, 792, 792, // #1661 + 3, 40872, 40872, 2456, 2456, // #1662 + 16, 40880, 40880, 3632, 3632, // #1663 + 8, 40920, 40920, 1912, 1912, // #1664 + 9, 40944, 40944, 2880, 2880, // #1665 + 5, 40960, 40960, 880, 880, // #1666 + 13, 40984, 40984, 840, 840, // #1667 + 3, 41008, 41008, 688, 688, // #1668 + 13, 41024, 41024, 3168, 3168, // #1669 + 7, 41048, 41048, 2280, 2280, // #1670 + 13, 41064, 41064, 840, 840, // #1671 + 3, 41088, 41088, 688, 688, // #1672 + 13, 41104, 41104, 3168, 3168, // #1673 + 7, 41128, 41128, 2280, 2280, // #1674 + 16, 41136, 41136, 2176, 2176, // #1675 + 7, 41176, 41176, 2280, 2280, // #1676 + 16, 41184, 41184, 2176, 2176, // #1677 + 7, 41224, 41224, 2280, 2280, // #1678 + 5, 41240, 41240, 456, 456, // #1679 + 4, 41248, 41248, 1792, 1792, // #1680 + 21, 41288, 41288, 3576, 3576, // #1681 + 8, 41320, 41320, 1912, 1912, // #1682 + 7, 41344, 41344, 2784, 2784, // #1683 + 5, 41360, 41360, 880, 880, // #1684 + 15, 41416, 41416, 3448, 3448, // #1685 + 8, 41448, 41448, 1912, 1912, // #1686 + 12, 41472, 41472, 192, 192, // #1687 + 3, 41496, 41496, 136, 136, // #1688 + 12, 41504, 41504, 192, 192, // #1689 + 3, 41528, 41528, 136, 136, // #1690 + 20, 41536, 41536, 3328, 3328, // #1691 + 3, 41576, 41576, 2456, 2456, // #1692 + 22, 41584, 41584, 576, 576, // #1693 + 3, 41616, 41616, 688, 688, // #1694 + 6, 41632, 41632, 560, 560, // #1695 + 9, 41648, 41648, 2016, 2016, // #1696 + 15, 41664, 41664, 3088, 3088, // #1697 + 7, 41688, 41688, 2280, 2280, // #1698 + 17, 41696, 41696, 3424, 3424, // #1699 + 7, 41736, 41736, 2280, 2280, // #1700 + 17, 41744, 41744, 3424, 3424, // #1701 + 7, 41784, 41784, 2280, 2280, // #1702 + 20, 41800, 41800, 3592, 3592, // #1703 + 9, 41832, 41832, 2648, 2648, // #1704 + 5, 41864, 41864, 456, 456, // #1705 + 4, 41872, 41872, 1792, 1792, // #1706 + 6, 41896, 41896, 1416, 1416, // #1707 + 5, 41904, 41904, 880, 880, // #1708 + 22, 41928, 41928, 3048, 3048, // #1709 + 5, 41952, 41952, 880, 880, // #1710 + 22, 41976, 41976, 3048, 3048, // #1711 + 5, 42000, 42000, 880, 880, // #1712 + 6, 42024, 42024, 1416, 1416, // #1713 + 5, 42040, 42040, 3944, 3944, // #1714 + 5, 42056, 42056, 3448, 3448, // #1715 + 5, 42064, 42064, 880, 880, // #1716 + 7, 42080, 42080, 2784, 2784, // #1717 + 5, 42096, 42096, 880, 880, // #1718 + 22, 42120, 42120, 3048, 3048, // #1719 + 5, 42144, 42144, 880, 880, // #1720 + 13, 42168, 42168, 840, 840, // #1721 + 3, 42192, 42192, 688, 688, // #1722 + 12, 42208, 42208, 384, 384, // #1723 + 7, 42232, 42232, 2280, 2280, // #1724 + 12, 42240, 42240, 192, 192, // #1725 + 3, 42264, 42264, 136, 136, // #1726 + 20, 42272, 42272, 3328, 3328, // #1727 + 3, 42312, 42312, 2456, 2456, // #1728 + 13, 42328, 42328, 840, 840, // #1729 + 3, 42352, 42352, 688, 688, // #1730 + 16, 42368, 42368, 256, 256, // #1731 + 3, 42408, 42408, 136, 136, // #1732 + 12, 42416, 42416, 384, 384, // #1733 + 7, 42440, 42440, 2280, 2280, // #1734 + 16, 42448, 42448, 256, 256, // #1735 + 3, 42488, 42488, 136, 136, // #1736 + 16, 42496, 42496, 256, 256, // #1737 + 3, 42536, 42536, 136, 136, // #1738 + 22, 42552, 42552, 3048, 3048, // #1739 + 5, 42576, 42576, 880, 880, // #1740 + 22, 42600, 42600, 3048, 3048, // #1741 + 5, 42624, 42624, 880, 880, // #1742 + 13, 42648, 42648, 840, 840, // #1743 + 3, 42672, 42672, 688, 688, // #1744 + 6, 42696, 42696, 1416, 1416, // #1745 + 5, 42704, 42704, 880, 880, // #1746 + 22, 42720, 42720, 576, 576, // #1747 + 3, 42752, 42752, 688, 688, // #1748 + 6, 42776, 42776, 3896, 3896, // #1749 + 3, 42792, 42792, 136, 136, // #1750 + 6, 42808, 42808, 1416, 1416, // #1751 + 5, 42816, 42816, 880, 880, // #1752 + 16, 42832, 42832, 256, 256, // #1753 + 3, 42872, 42872, 136, 136, // #1754 + 7, 42888, 42888, 3656, 3656, // #1755 + 9, 42952, 42952, 3832, 3832, // #1756 + 5, 42984, 42984, 3448, 3448, // #1757 + 5, 42992, 42992, 880, 880, // #1758 + 13, 43016, 43016, 840, 840, // #1759 + 3, 43040, 43040, 688, 688, // #1760 + 11, 43064, 43064, 2600, 2600, // #1761 + 7, 43096, 43096, 2280, 2280, // #1762 + 5, 43112, 43112, 3448, 3448, // #1763 + 5, 43120, 43120, 880, 880, // #1764 + 5, 43144, 43144, 456, 456, // #1765 + 4, 43152, 43152, 1792, 1792, // #1766 + 13, 43176, 43176, 840, 840, // #1767 + 3, 43200, 43200, 688, 688, // #1768 + 5, 43224, 43224, 3448, 3448, // #1769 + 5, 43232, 43232, 880, 880, // #1770 + 11, 43248, 43248, 3344, 3344, // #1771 + 3, 43264, 43264, 688, 688, // #1772 + 11, 43280, 43280, 3344, 3344, // #1773 + 3, 43296, 43296, 688, 688, // #1774 + 12, 43320, 43320, 1480, 1480, // #1775 + 3, 43352, 43352, 2456, 2456, // #1776 + 7, 43360, 43360, 2784, 2784, // #1777 + 5, 43376, 43376, 880, 880, // #1778 + 5, 43400, 43400, 3448, 3448, // #1779 + 5, 43408, 43408, 880, 880, // #1780 + 6, 43432, 43432, 1416, 1416, // #1781 + 5, 43448, 43448, 3944, 3944, // #1782 + 5, 43464, 43464, 3448, 3448, // #1783 + 5, 43472, 43472, 880, 880, // #1784 + 12, 43496, 43496, 3352, 3352, // #1785 + 8, 43528, 43528, 1912, 1912, // #1786 + 16, 43552, 43552, 256, 256, // #1787 + 3, 43592, 43592, 136, 136, // #1788 + 5, 43608, 43608, 3448, 3448, // #1789 + 5, 43616, 43616, 880, 880, // #1790 + 5, 43640, 43640, 3448, 3448, // #1791 + 5, 43648, 43648, 880, 880, // #1792 + 19, 43712, 43712, 1264, 1264, // #1793 + 5, 43752, 43752, 4008, 4008, // #1794 + 23, 43768, 43768, 792, 792, // #1795 + 3, 43800, 43800, 2456, 2456, // #1796 + 9, 43848, 43848, 3576, 3576, // #1797 + 5, 43880, 43880, 4008, 4008, // #1798 + 16, 43896, 43896, 3480, 3480, // #1799 + 7, 43928, 43928, 2280, 2280, // #1800 + 6, 43944, 43944, 1416, 1416, // #1801 + 5, 43952, 43952, 880, 880, // #1802 + 6, 43976, 43976, 3896, 3896, // #1803 + 3, 43992, 43992, 136, 136, // #1804 + 11, 44000, 44000, 3344, 3344, // #1805 + 3, 44016, 44016, 688, 688, // #1806 + 6, 44040, 44040, 3896, 3896, // #1807 + 3, 44056, 44056, 136, 136, // #1808 + 14, 44064, 44064, 1024, 1024, // #1809 + 7, 44088, 44088, 2280, 2280, // #1810 + 9, 44096, 44096, 2880, 2880, // #1811 + 5, 44112, 44112, 880, 880, // #1812 + 14, 44128, 44128, 1024, 1024, // #1813 + 7, 44152, 44152, 2280, 2280, // #1814 + 7, 44168, 44168, 3656, 3656, // #1815 + 9, 44232, 44232, 3832, 3832, // #1816 + 16, 44256, 44256, 256, 256, // #1817 + 3, 44296, 44296, 136, 136, // #1818 + 11, 44304, 44304, 3344, 3344, // #1819 + 3, 44320, 44320, 688, 688, // #1820 + 12, 44336, 44336, 2752, 2752, // #1821 + 7, 44360, 44360, 2280, 2280, // #1822 + 12, 44368, 44368, 2752, 2752, // #1823 + 7, 44392, 44392, 2280, 2280, // #1824 + 9, 44400, 44400, 2880, 2880, // #1825 + 5, 44416, 44416, 880, 880, // #1826 + 12, 44432, 44432, 2752, 2752, // #1827 + 7, 44456, 44456, 2280, 2280, // #1828 + 12, 44464, 44464, 2752, 2752, // #1829 + 7, 44488, 44488, 2280, 2280, // #1830 + 22, 44496, 44496, 576, 576, // #1831 + 3, 44528, 44528, 688, 688, // #1832 + 11, 44544, 44544, 2128, 2128, // #1833 + 7, 44568, 44568, 2280, 2280, // #1834 + 14, 44576, 44576, 3552, 3552, // #1835 + 7, 44600, 44600, 2280, 2280, // #1836 + 12, 44608, 44608, 192, 192, // #1837 + 3, 44632, 44632, 136, 136, // #1838 + 22, 44648, 44648, 3048, 3048, // #1839 + 5, 44672, 44672, 880, 880, // #1840 + 14, 44688, 44688, 3552, 3552, // #1841 + 7, 44712, 44712, 2280, 2280, // #1842 + 13, 44728, 44728, 1816, 1816, // #1843 + 3, 44760, 44760, 2456, 2456, // #1844 + 16, 44768, 44768, 256, 256, // #1845 + 3, 44808, 44808, 136, 136, // #1846 + 5, 44816, 44816, 576, 576, // #1847 + 7, 44840, 44840, 2280, 2280, // #1848 + 13, 44872, 44872, 1464, 1464, // #1849 + 7, 44904, 44904, 2280, 2280, // #1850 + 5, 44920, 44920, 3448, 3448, // #1851 + 5, 44928, 44928, 880, 880, // #1852 + 12, 44944, 44944, 1264, 1264, // #1853 + 10, 44968, 44968, 600, 600, // #1854 + 13, 45000, 45000, 840, 840, // #1855 + 3, 45024, 45024, 688, 688, // #1856 + 6, 45040, 45040, 560, 560, // #1857 + 9, 45056, 45056, 2016, 2016, // #1858 + 9, 45080, 45080, 2520, 2520, // #1859 + 7, 45112, 45112, 2280, 2280, // #1860 + 5, 45128, 45128, 3448, 3448, // #1861 + 5, 45136, 45136, 880, 880, // #1862 + 6, 45160, 45160, 3896, 3896, // #1863 + 3, 45176, 45176, 136, 136, // #1864 + 5, 45192, 45192, 3448, 3448, // #1865 + 5, 45200, 45200, 880, 880, // #1866 + 22, 45216, 45216, 576, 576, // #1867 + 3, 45248, 45248, 688, 688, // #1868 + 14, 45264, 45264, 3840, 3840, // #1869 + 8, 45288, 45288, 1912, 1912, // #1870 + 22, 45320, 45320, 3048, 3048, // #1871 + 5, 45344, 45344, 880, 880, // #1872 + 13, 45368, 45368, 1816, 1816, // #1873 + 3, 45400, 45400, 2456, 2456, // #1874 + 13, 45416, 45416, 840, 840, // #1875 + 3, 45440, 45440, 688, 688, // #1876 + 17, 45456, 45456, 3408, 3408, // #1877 + 10, 45496, 45496, 600, 600, // #1878 + 9, 45520, 45520, 2880, 2880, // #1879 + 5, 45536, 45536, 880, 880, // #1880 + 12, 45552, 45552, 192, 192, // #1881 + 3, 45576, 45576, 136, 136, // #1882 + 13, 45584, 45584, 64, 64, // #1883 + 7, 45608, 45608, 2280, 2280, // #1884 + 13, 45616, 45616, 64, 64, // #1885 + 7, 45640, 45640, 2280, 2280, // #1886 + 13, 45656, 45656, 840, 840, // #1887 + 3, 45680, 45680, 688, 688, // #1888 + 6, 45704, 45704, 3896, 3896, // #1889 + 3, 45720, 45720, 136, 136, // #1890 + 9, 45728, 45728, 2880, 2880, // #1891 + 5, 45744, 45744, 880, 880, // #1892 + 12, 45760, 45760, 1024, 1024, // #1893 + 7, 45784, 45784, 2280, 2280, // #1894 + 12, 45792, 45792, 1024, 1024, // #1895 + 7, 45816, 45816, 2280, 2280, // #1896 + 9, 45824, 45824, 2880, 2880, // #1897 + 5, 45840, 45840, 880, 880, // #1898 + 10, 45856, 45856, 3648, 3648, // #1899 + 5, 45880, 45880, 4008, 4008, // #1900 + 16, 45888, 45888, 256, 256, // #1901 + 3, 45928, 45928, 136, 136, // #1902 + 6, 45944, 45944, 1416, 1416, // #1903 + 5, 45952, 45952, 880, 880, // #1904 + 10, 45976, 45976, 1496, 1496, // #1905 + 5, 46008, 46008, 4008, 4008, // #1906 + 11, 46016, 46016, 3344, 3344, // #1907 + 3, 46032, 46032, 688, 688, // #1908 + 7, 46048, 46048, 2784, 2784, // #1909 + 5, 46064, 46064, 880, 880, // #1910 + 22, 46088, 46088, 3048, 3048, // #1911 + 5, 46112, 46112, 880, 880, // #1912 + 5, 46136, 46136, 456, 456, // #1913 + 3, 46144, 46144, 2912, 2912, // #1914 + 12, 46160, 46160, 2752, 2752, // #1915 + 7, 46184, 46184, 2280, 2280, // #1916 + 12, 46192, 46192, 2752, 2752, // #1917 + 7, 46216, 46216, 2280, 2280, // #1918 + 12, 46224, 46224, 192, 192, // #1919 + 3, 46248, 46248, 136, 136, // #1920 + 14, 46256, 46256, 1984, 1984, // #1921 + 3, 46280, 46280, 2456, 2456, // #1922 + 5, 46296, 46296, 456, 456, // #1923 + 3, 46304, 46304, 2912, 2912, // #1924 + 13, 46328, 46328, 840, 840, // #1925 + 3, 46352, 46352, 688, 688, // #1926 + 7, 46376, 46376, 3656, 3656, // #1927 + 9, 46408, 46408, 3832, 3832, // #1928 + 23, 46432, 46432, 2064, 2064, // #1929 + 8, 46472, 46472, 1912, 1912, // #1930 + 12, 46496, 46496, 192, 192, // #1931 + 3, 46520, 46520, 136, 136, // #1932 + 9, 46528, 46528, 2880, 2880, // #1933 + 5, 46544, 46544, 880, 880, // #1934 + 11, 46560, 46560, 3344, 3344, // #1935 + 3, 46576, 46576, 688, 688, // #1936 + 7, 46600, 46600, 3656, 3656, // #1937 + 9, 46664, 46664, 3832, 3832, // #1938 + 12, 46688, 46688, 192, 192, // #1939 + 3, 46712, 46712, 136, 136, // #1940 + 12, 46720, 46720, 672, 672, // #1941 + 7, 46744, 46744, 2280, 2280, // #1942 + 12, 46752, 46752, 672, 672, // #1943 + 7, 46776, 46776, 2280, 2280, // #1944 + 9, 46784, 46784, 2880, 2880, // #1945 + 5, 46800, 46800, 880, 880, // #1946 + 5, 46816, 46816, 3552, 3552, // #1947 + 9, 46832, 46832, 2016, 2016, // #1948 + 22, 46848, 46848, 576, 576, // #1949 + 3, 46880, 46880, 688, 688, // #1950 + 13, 46904, 46904, 840, 840, // #1951 + 3, 46928, 46928, 688, 688, // #1952 + 9, 46944, 46944, 2880, 2880, // #1953 + 5, 46960, 46960, 880, 880, // #1954 + 6, 46984, 46984, 3896, 3896, // #1955 + 3, 47000, 47000, 136, 136, // #1956 + 13, 47016, 47016, 840, 840, // #1957 + 3, 47040, 47040, 688, 688, // #1958 + 5, 47064, 47064, 456, 456, // #1959 + 4, 47072, 47072, 1792, 1792, // #1960 + 12, 47096, 47096, 1480, 1480, // #1961 + 3, 47128, 47128, 2456, 2456, // #1962 + 17, 47176, 47176, 1464, 1464, // #1963 + 8, 47208, 47208, 1912, 1912, // #1964 + 6, 47240, 47240, 3896, 3896, // #1965 + 3, 47256, 47256, 136, 136, // #1966 + 13, 47272, 47272, 1816, 1816, // #1967 + 3, 47304, 47304, 2456, 2456, // #1968 + 11, 47312, 47312, 3344, 3344, // #1969 + 3, 47328, 47328, 688, 688, // #1970 + 12, 47344, 47344, 384, 384, // #1971 + 7, 47368, 47368, 2280, 2280, // #1972 + 6, 47384, 47384, 1416, 1416, // #1973 + 5, 47392, 47392, 880, 880, // #1974 + 6, 47416, 47416, 1416, 1416, // #1975 + 5, 47424, 47424, 880, 880, // #1976 + 12, 47440, 47440, 384, 384, // #1977 + 7, 47464, 47464, 2280, 2280, // #1978 + 16, 47472, 47472, 256, 256, // #1979 + 3, 47512, 47512, 136, 136, // #1980 + 6, 47528, 47528, 3896, 3896, // #1981 + 3, 47544, 47544, 136, 136, // #1982 + 13, 47560, 47560, 840, 840, // #1983 + 3, 47584, 47584, 688, 688, // #1984 + 6, 47608, 47608, 1416, 1416, // #1985 + 5, 47616, 47616, 880, 880, // #1986 + 16, 47640, 47640, 2664, 2664, // #1987 + 7, 47672, 47672, 2280, 2280, // #1988 + 9, 47680, 47680, 2880, 2880, // #1989 + 5, 47696, 47696, 880, 880, // #1990 + 7, 47712, 47712, 2784, 2784, // #1991 + 5, 47728, 47728, 880, 880, // #1992 + 12, 47744, 47744, 192, 192, // #1993 + 3, 47768, 47768, 136, 136, // #1994 + 22, 47776, 47776, 576, 576, // #1995 + 3, 47808, 47808, 688, 688, // #1996 + 15, 47880, 47880, 2488, 2488, // #1997 + 7, 47912, 47912, 2280, 2280, // #1998 + 15, 47944, 47944, 2488, 2488, // #1999 + 7, 47976, 47976, 2280, 2280, // #2000 + 6, 47992, 47992, 2168, 2168, // #2001 + 9, 48000, 48000, 2016, 2016, // #2002 + 10, 48024, 48024, 2216, 2216, // #2003 + 5, 48056, 48056, 4008, 4008, // #2004 + 9, 48064, 48064, 2880, 2880, // #2005 + 5, 48080, 48080, 880, 880, // #2006 + 13, 48096, 48096, 64, 64, // #2007 + 7, 48120, 48120, 2280, 2280, // #2008 + 9, 48128, 48128, 2880, 2880, // #2009 + 5, 48144, 48144, 880, 880, // #2010 + 13, 48160, 48160, 64, 64, // #2011 + 7, 48184, 48184, 2280, 2280, // #2012 + 12, 48192, 48192, 672, 672, // #2013 + 7, 48216, 48216, 2280, 2280, // #2014 + 26, 48232, 48232, 1416, 1416, // #2015 + 4, 48280, 48280, 2104, 2104, // #2016 + 12, 48288, 48288, 672, 672, // #2017 + 7, 48312, 48312, 2280, 2280, // #2018 + 7, 48320, 48320, 2784, 2784, // #2019 + 5, 48336, 48336, 880, 880, // #2020 + 6, 48360, 48360, 3896, 3896, // #2021 + 3, 48376, 48376, 136, 136, // #2022 + 22, 48384, 48384, 576, 576, // #2023 + 3, 48416, 48416, 688, 688, // #2024 + 16, 48432, 48432, 2448, 2448, // #2025 + 7, 48472, 48472, 2280, 2280, // #2026 + 16, 48480, 48480, 2448, 2448, // #2027 + 7, 48520, 48520, 2280, 2280, // #2028 + 7, 48528, 48528, 2784, 2784, // #2029 + 5, 48544, 48544, 880, 880, // #2030 + 22, 48568, 48568, 3208, 3208, // #2031 + 12, 48600, 48600, 1928, 1928, // #2032 + 5, 48632, 48632, 3448, 3448, // #2033 + 5, 48640, 48640, 880, 880, // #2034 + 6, 48664, 48664, 3896, 3896, // #2035 + 3, 48680, 48680, 136, 136, // #2036 + 7, 48696, 48696, 3656, 3656, // #2037 + 9, 48712, 48712, 3832, 3832, // #2038 + 5, 48744, 48744, 456, 456, // #2039 + 4, 48752, 48752, 1792, 1792, // #2040 + 6, 48776, 48776, 3896, 3896, // #2041 + 3, 48792, 48792, 136, 136, // #2042 + 16, 48800, 48800, 3728, 3728, // #2043 + 7, 48840, 48840, 2280, 2280, // #2044 + 6, 48856, 48856, 1416, 1416, // #2045 + 5, 48872, 48872, 3944, 3944, // #2046 + 11, 48880, 48880, 3344, 3344, // #2047 + 3, 48896, 48896, 688, 688, // #2048 + 11, 48912, 48912, 3344, 3344, // #2049 + 3, 48928, 48928, 688, 688, // #2050 + 11, 48944, 48944, 3344, 3344, // #2051 + 3, 48960, 48960, 688, 688, // #2052 + 12, 48984, 48984, 616, 616, // #2053 + 7, 49016, 49016, 2280, 2280, // #2054 + 12, 49024, 49024, 832, 832, // #2055 + 7, 49040, 49040, 4064, 4064, // #2056 + 11, 49056, 49056, 3344, 3344, // #2057 + 3, 49072, 49072, 688, 688, // #2058 + 13, 49096, 49096, 840, 840, // #2059 + 3, 49120, 49120, 688, 688, // #2060 + 5, 49144, 49144, 3448, 3448, // #2061 + 5, 49152, 49152, 880, 880, // #2062 + 6, 49176, 49176, 1416, 1416, // #2063 + 5, 49184, 49184, 880, 880, // #2064 + 24, 49200, 49200, 768, 768, // #2065 + 8, 49240, 49240, 1912, 1912, // #2066 + 22, 49272, 49272, 3048, 3048, // #2067 + 5, 49296, 49296, 880, 880, // #2068 + 16, 49312, 49312, 256, 256, // #2069 + 3, 49352, 49352, 136, 136, // #2070 + 6, 49368, 49368, 1416, 1416, // #2071 + 5, 49376, 49376, 880, 880, // #2072 + 6, 49400, 49400, 1416, 1416, // #2073 + 5, 49408, 49408, 880, 880, // #2074 + 5, 49432, 49432, 3448, 3448, // #2075 + 5, 49440, 49440, 880, 880, // #2076 + 23, 49464, 49464, 792, 792, // #2077 + 3, 49496, 49496, 2456, 2456, // #2078 + 7, 49504, 49504, 2784, 2784, // #2079 + 5, 49520, 49520, 880, 880, // #2080 + 24, 49536, 49536, 3728, 3728, // #2081 + 9, 49576, 49576, 2648, 2648, // #2082 + 6, 49608, 49608, 3288, 3288, // #2083 + 7, 49624, 49624, 2280, 2280, // #2084 + 22, 49632, 49632, 576, 576, // #2085 + 3, 49664, 49664, 688, 688, // #2086 + 22, 49688, 49688, 3048, 3048, // #2087 + 5, 49712, 49712, 880, 880, // #2088 + 6, 49728, 49728, 2320, 2320, // #2089 + 12, 49752, 49752, 1928, 1928, // #2090 + 8, 49776, 49776, 320, 320, // #2091 + 3, 49800, 49800, 808, 808, // #2092 + 11, 49808, 49808, 3344, 3344, // #2093 + 3, 49824, 49824, 688, 688, // #2094 + 9, 49840, 49840, 2880, 2880, // #2095 + 5, 49856, 49856, 880, 880, // #2096 + 13, 49880, 49880, 840, 840, // #2097 + 3, 49904, 49904, 688, 688, // #2098 + 9, 49920, 49920, 2880, 2880, // #2099 + 5, 49936, 49936, 880, 880, // #2100 + 6, 49960, 49960, 1416, 1416, // #2101 + 5, 49968, 49968, 880, 880, // #2102 + 13, 49992, 49992, 840, 840, // #2103 + 3, 50016, 50016, 688, 688, // #2104 + 13, 50040, 50040, 1816, 1816, // #2105 + 3, 50072, 50072, 2456, 2456, // #2106 + 13, 50088, 50088, 1816, 1816, // #2107 + 3, 50120, 50120, 2456, 2456, // #2108 + 6, 50136, 50136, 1416, 1416, // #2109 + 5, 50144, 50144, 880, 880, // #2110 + 27, 50184, 50184, 744, 744, // #2111 + 4, 50232, 50232, 2104, 2104, // #2112 + 9, 50240, 50240, 2880, 2880, // #2113 + 5, 50256, 50256, 880, 880, // #2114 + 9, 50272, 50272, 2880, 2880, // #2115 + 5, 50288, 50288, 880, 880, // #2116 + 16, 50304, 50304, 1552, 1552, // #2117 + 7, 50344, 50344, 2280, 2280, // #2118 + 13, 50360, 50360, 2584, 2584, // #2119 + 3, 50392, 50392, 2456, 2456, // #2120 + 16, 50400, 50400, 1552, 1552, // #2121 + 7, 50440, 50440, 2280, 2280, // #2122 + 22, 50456, 50456, 3048, 3048, // #2123 + 5, 50480, 50480, 880, 880, // #2124 + 5, 50504, 50504, 3448, 3448, // #2125 + 5, 50512, 50512, 880, 880, // #2126 + 8, 50528, 50528, 2864, 2864, // #2127 + 7, 50552, 50552, 2280, 2280, // #2128 + 16, 50568, 50568, 952, 952, // #2129 + 8, 50600, 50600, 1912, 1912, // #2130 + 9, 50624, 50624, 2880, 2880, // #2131 + 5, 50640, 50640, 880, 880, // #2132 + 16, 50656, 50656, 256, 256, // #2133 + 3, 50696, 50696, 136, 136, // #2134 + 9, 50704, 50704, 2880, 2880, // #2135 + 5, 50720, 50720, 880, 880, // #2136 + 9, 50736, 50736, 2880, 2880, // #2137 + 5, 50752, 50752, 880, 880, // #2138 + 11, 50768, 50768, 3344, 3344, // #2139 + 3, 50784, 50784, 688, 688, // #2140 + 14, 50800, 50800, 2368, 2368, // #2141 + 7, 50816, 50816, 736, 736, // #2142 + 13, 50840, 50840, 840, 840, // #2143 + 3, 50864, 50864, 688, 688, // #2144 + 9, 50880, 50880, 2880, 2880, // #2145 + 5, 50896, 50896, 880, 880, // #2146 + 5, 50920, 50920, 3448, 3448, // #2147 + 5, 50928, 50928, 880, 880, // #2148 + 6, 50952, 50952, 1736, 1736, // #2149 + 7, 50968, 50968, 2280, 2280, // #2150 + 6, 50984, 50984, 1416, 1416, // #2151 + 5, 50992, 50992, 880, 880, // #2152 + 7, 51008, 51008, 2784, 2784, // #2153 + 5, 51024, 51024, 880, 880, // #2154 + 6, 51048, 51048, 1736, 1736, // #2155 + 7, 51064, 51064, 2280, 2280, // #2156 + 6, 51080, 51080, 1416, 1416, // #2157 + 5, 51088, 51088, 880, 880, // #2158 + 9, 51104, 51104, 2880, 2880, // #2159 + 5, 51120, 51120, 880, 880, // #2160 + 8, 51136, 51136, 320, 320, // #2161 + 3, 51160, 51160, 808, 808, // #2162 + 7, 51168, 51168, 2784, 2784, // #2163 + 5, 51184, 51184, 880, 880, // #2164 + 13, 51208, 51208, 840, 840, // #2165 + 3, 51232, 51232, 688, 688, // #2166 + 12, 51248, 51248, 192, 192, // #2167 + 3, 51272, 51272, 136, 136, // #2168 + 12, 51280, 51280, 192, 192, // #2169 + 3, 51304, 51304, 136, 136, // #2170 + 9, 51312, 51312, 2880, 2880, // #2171 + 5, 51328, 51328, 880, 880, // #2172 + 13, 51352, 51352, 840, 840, // #2173 + 3, 51376, 51376, 688, 688, // #2174 + 7, 51392, 51392, 1248, 1248, // #2175 + 7, 51416, 51416, 2280, 2280, // #2176 + 7, 51424, 51424, 2784, 2784, // #2177 + 5, 51440, 51440, 880, 880, // #2178 + 16, 51456, 51456, 256, 256, // #2179 + 3, 51496, 51496, 136, 136, // #2180 + 5, 51512, 51512, 3448, 3448, // #2181 + 5, 51520, 51520, 880, 880, // #2182 + 26, 51592, 51592, 2920, 2920, // #2183 + 4, 51640, 51640, 2104, 2104, // #2184 + 6, 51656, 51656, 1416, 1416, // #2185 + 5, 51664, 51664, 880, 880, // #2186 + 7, 51688, 51688, 3656, 3656, // #2187 + 9, 51720, 51720, 3832, 3832, // #2188 + 7, 51744, 51744, 2784, 2784, // #2189 + 5, 51760, 51760, 880, 880, // #2190 + 13, 51784, 51784, 840, 840, // #2191 + 3, 51808, 51808, 688, 688, // #2192 + 7, 51824, 51824, 2784, 2784, // #2193 + 5, 51840, 51840, 880, 880, // #2194 + 13, 51856, 51856, 3744, 3744, // #2195 + 7, 51880, 51880, 2280, 2280, // #2196 + 13, 51888, 51888, 3744, 3744, // #2197 + 7, 51912, 51912, 2280, 2280, // #2198 + 16, 51920, 51920, 256, 256, // #2199 + 3, 51960, 51960, 136, 136, // #2200 + 22, 51968, 51968, 576, 576, // #2201 + 3, 52000, 52000, 688, 688, // #2202 + 5, 52024, 52024, 456, 456, // #2203 + 4, 52032, 52032, 1792, 1792, // #2204 + 9, 52048, 52048, 2880, 2880, // #2205 + 5, 52064, 52064, 880, 880, // #2206 + 7, 52088, 52088, 3656, 3656, // #2207 + 9, 52104, 52104, 3832, 3832, // #2208 + 10, 52128, 52128, 3712, 3712, // #2209 + 7, 52152, 52152, 2280, 2280, // #2210 + 10, 52160, 52160, 3712, 3712, // #2211 + 7, 52184, 52184, 2280, 2280, // #2212 + 16, 52192, 52192, 256, 256, // #2213 + 3, 52232, 52232, 136, 136, // #2214 + 16, 52240, 52240, 256, 256, // #2215 + 3, 52280, 52280, 136, 136, // #2216 + 17, 52296, 52296, 3624, 3624, // #2217 + 8, 52320, 52320, 3472, 3472, // #2218 + 7, 52336, 52336, 2784, 2784, // #2219 + 5, 52352, 52352, 880, 880, // #2220 + 17, 52376, 52376, 3624, 3624, // #2221 + 8, 52400, 52400, 3472, 3472, // #2222 + 6, 52424, 52424, 3896, 3896, // #2223 + 3, 52440, 52440, 136, 136, // #2224 + 16, 52456, 52456, 264, 264, // #2225 + 7, 52488, 52488, 2280, 2280, // #2226 + 13, 52504, 52504, 840, 840, // #2227 + 3, 52528, 52528, 688, 688, // #2228 + 16, 52552, 52552, 264, 264, // #2229 + 7, 52584, 52584, 2280, 2280, // #2230 + 12, 52592, 52592, 384, 384, // #2231 + 7, 52616, 52616, 2280, 2280, // #2232 + 9, 52624, 52624, 2880, 2880, // #2233 + 5, 52640, 52640, 880, 880, // #2234 + 12, 52656, 52656, 384, 384, // #2235 + 7, 52680, 52680, 2280, 2280, // #2236 + 12, 52688, 52688, 192, 192, // #2237 + 3, 52712, 52712, 136, 136, // #2238 + 13, 52728, 52728, 1816, 1816, // #2239 + 3, 52760, 52760, 2456, 2456, // #2240 + 14, 52768, 52768, 2912, 2912, // #2241 + 7, 52792, 52792, 2280, 2280, // #2242 + 12, 52800, 52800, 2752, 2752, // #2243 + 7, 52824, 52824, 2280, 2280, // #2244 + 12, 52872, 52872, 952, 952, // #2245 + 7, 52904, 52904, 2280, 2280, // #2246 + 22, 52920, 52920, 3048, 3048, // #2247 + 5, 52944, 52944, 880, 880, // #2248 + 16, 52960, 52960, 256, 256, // #2249 + 3, 53000, 53000, 136, 136, // #2250 + 7, 53016, 53016, 952, 952, // #2251 + 3, 53032, 53032, 808, 808, // #2252 + 14, 53040, 53040, 2912, 2912, // #2253 + 7, 53064, 53064, 2280, 2280, // #2254 + 12, 53072, 53072, 2752, 2752, // #2255 + 7, 53096, 53096, 2280, 2280, // #2256 + 13, 53112, 53112, 840, 840, // #2257 + 3, 53136, 53136, 688, 688, // #2258 + 16, 53152, 53152, 256, 256, // #2259 + 3, 53192, 53192, 136, 136, // #2260 + 16, 53200, 53200, 256, 256, // #2261 + 3, 53240, 53240, 136, 136, // #2262 + 5, 53256, 53256, 456, 456, // #2263 + 4, 53264, 53264, 1792, 1792, // #2264 + 6, 53280, 53280, 2768, 2768, // #2265 + 10, 53304, 53304, 600, 600, // #2266 + 27, 53384, 53384, 744, 744, // #2267 + 4, 53432, 53432, 2104, 2104, // #2268 + 10, 53448, 53448, 760, 760, // #2269 + 10, 53480, 53480, 600, 600, // #2270 + 19, 53512, 53512, 1480, 1480, // #2271 + 9, 53544, 53544, 2648, 2648, // #2272 + 9, 53568, 53568, 2880, 2880, // #2273 + 5, 53584, 53584, 880, 880, // #2274 + 22, 53608, 53608, 3048, 3048, // #2275 + 5, 53632, 53632, 880, 880, // #2276 + 11, 53648, 53648, 3344, 3344, // #2277 + 3, 53664, 53664, 688, 688, // #2278 + 13, 53688, 53688, 840, 840, // #2279 + 3, 53712, 53712, 688, 688, // #2280 + 13, 53736, 53736, 840, 840, // #2281 + 3, 53760, 53760, 688, 688, // #2282 + 7, 53776, 53776, 2784, 2784, // #2283 + 5, 53792, 53792, 880, 880, // #2284 + 11, 53808, 53808, 2176, 2176, // #2285 + 7, 53832, 53832, 2280, 2280, // #2286 + 7, 53840, 53840, 2784, 2784, // #2287 + 5, 53856, 53856, 880, 880, // #2288 + 22, 53872, 53872, 576, 576, // #2289 + 3, 53904, 53904, 688, 688, // #2290 + 5, 53928, 53928, 3448, 3448, // #2291 + 5, 53936, 53936, 880, 880, // #2292 + 5, 53960, 53960, 3448, 3448, // #2293 + 5, 53968, 53968, 880, 880, // #2294 + 11, 53984, 53984, 2176, 2176, // #2295 + 7, 54008, 54008, 2280, 2280, // #2296 + 13, 54024, 54024, 840, 840, // #2297 + 3, 54048, 54048, 688, 688, // #2298 + 22, 54072, 54072, 3048, 3048, // #2299 + 5, 54096, 54096, 880, 880, // #2300 + 7, 54112, 54112, 2784, 2784, // #2301 + 5, 54128, 54128, 880, 880, // #2302 + 16, 54144, 54144, 256, 256, // #2303 + 3, 54184, 54184, 136, 136, // #2304 + 5, 54200, 54200, 3448, 3448, // #2305 + 5, 54208, 54208, 880, 880, // #2306 + 22, 54232, 54232, 3048, 3048, // #2307 + 5, 54256, 54256, 880, 880, // #2308 + 13, 54280, 54280, 840, 840, // #2309 + 3, 54304, 54304, 688, 688, // #2310 + 16, 54320, 54320, 256, 256, // #2311 + 3, 54360, 54360, 136, 136, // #2312 + 5, 54376, 54376, 3448, 3448, // #2313 + 5, 54384, 54384, 880, 880, // #2314 + 16, 54400, 54400, 256, 256, // #2315 + 3, 54440, 54440, 136, 136, // #2316 + 13, 54456, 54456, 1816, 1816, // #2317 + 3, 54488, 54488, 2456, 2456, // #2318 + 22, 54504, 54504, 3416, 3416, // #2319 + 7, 54536, 54536, 2280, 2280, // #2320 + 22, 54544, 54544, 576, 576, // #2321 + 3, 54576, 54576, 688, 688, // #2322 + 23, 54592, 54592, 2064, 2064, // #2323 + 8, 54632, 54632, 1912, 1912, // #2324 + 16, 54656, 54656, 3424, 3424, // #2325 + 7, 54696, 54696, 2280, 2280, // #2326 + 22, 54712, 54712, 3048, 3048, // #2327 + 5, 54736, 54736, 880, 880, // #2328 + 11, 54752, 54752, 3344, 3344, // #2329 + 3, 54768, 54768, 688, 688, // #2330 + 12, 54784, 54784, 192, 192, // #2331 + 3, 54808, 54808, 136, 136, // #2332 + 5, 54824, 54824, 3448, 3448, // #2333 + 5, 54832, 54832, 880, 880, // #2334 + 16, 54848, 54848, 3424, 3424, // #2335 + 7, 54888, 54888, 2280, 2280, // #2336 + 12, 54896, 54896, 2752, 2752, // #2337 + 7, 54920, 54920, 2280, 2280, // #2338 + 11, 54928, 54928, 3344, 3344, // #2339 + 3, 54944, 54944, 688, 688, // #2340 + 21, 54984, 54984, 3576, 3576, // #2341 + 8, 55016, 55016, 1912, 1912, // #2342 + 12, 55040, 55040, 2752, 2752, // #2343 + 7, 55064, 55064, 2280, 2280, // #2344 + 16, 55072, 55072, 256, 256, // #2345 + 3, 55112, 55112, 136, 136, // #2346 + 6, 55128, 55128, 3896, 3896, // #2347 + 3, 55144, 55144, 136, 136, // #2348 + 16, 55152, 55152, 256, 256, // #2349 + 3, 55192, 55192, 136, 136, // #2350 + 9, 55200, 55200, 2880, 2880, // #2351 + 5, 55216, 55216, 880, 880, // #2352 + 7, 55240, 55240, 3656, 3656, // #2353 + 9, 55304, 55304, 3832, 3832, // #2354 + 9, 55328, 55328, 2880, 2880, // #2355 + 5, 55344, 55344, 880, 880, // #2356 + 9, 55360, 55360, 2880, 2880, // #2357 + 5, 55376, 55376, 880, 880, // #2358 + 7, 55400, 55400, 3656, 3656, // #2359 + 9, 55432, 55432, 3832, 3832, // #2360 + 11, 55456, 55456, 3344, 3344, // #2361 + 3, 55472, 55472, 688, 688, // #2362 + 10, 55496, 55496, 2952, 2952, // #2363 + 9, 55520, 55520, 2016, 2016, // #2364 + 12, 55536, 55536, 2240, 2240, // #2365 + 7, 55560, 55560, 2280, 2280, // #2366 + 13, 55576, 55576, 1816, 1816, // #2367 + 3, 55608, 55608, 2456, 2456, // #2368 + 22, 55624, 55624, 3048, 3048, // #2369 + 5, 55648, 55648, 880, 880, // #2370 + 6, 55672, 55672, 3896, 3896, // #2371 + 3, 55688, 55688, 136, 136, // #2372 + 14, 55696, 55696, 3552, 3552, // #2373 + 7, 55720, 55720, 2280, 2280, // #2374 + 12, 55728, 55728, 2240, 2240, // #2375 + 7, 55752, 55752, 2280, 2280, // #2376 + 8, 55760, 55760, 320, 320, // #2377 + 3, 55784, 55784, 808, 808, // #2378 + 6, 55800, 55800, 1416, 1416, // #2379 + 5, 55808, 55808, 880, 880, // #2380 + 14, 55824, 55824, 3552, 3552, // #2381 + 7, 55848, 55848, 2280, 2280, // #2382 + 9, 55856, 55856, 2880, 2880, // #2383 + 5, 55872, 55872, 880, 880, // #2384 + 9, 55888, 55888, 2880, 2880, // #2385 + 5, 55904, 55904, 880, 880, // #2386 + 9, 55920, 55920, 2880, 2880, // #2387 + 5, 55936, 55936, 880, 880, // #2388 + 12, 55952, 55952, 192, 192, // #2389 + 3, 55976, 55976, 136, 136, // #2390 + 24, 55984, 55984, 3728, 3728, // #2391 + 9, 56024, 56024, 2648, 2648, // #2392 + 19, 56064, 56064, 1968, 1968, // #2393 + 5, 56104, 56104, 4008, 4008, // #2394 + 6, 56120, 56120, 1416, 1416, // #2395 + 5, 56128, 56128, 880, 880, // #2396 + 22, 56144, 56144, 576, 576, // #2397 + 3, 56176, 56176, 688, 688, // #2398 + 12, 56192, 56192, 192, 192, // #2399 + 3, 56216, 56216, 136, 136, // #2400 + 12, 56224, 56224, 192, 192, // #2401 + 3, 56248, 56248, 136, 136, // #2402 + 12, 56256, 56256, 192, 192, // #2403 + 3, 56280, 56280, 136, 136, // #2404 + 12, 56288, 56288, 192, 192, // #2405 + 3, 56312, 56312, 136, 136, // #2406 + 5, 56328, 56328, 3448, 3448, // #2407 + 5, 56336, 56336, 880, 880, // #2408 + 11, 56352, 56352, 2592, 2592, // #2409 + 7, 56376, 56376, 2280, 2280, // #2410 + 16, 56384, 56384, 256, 256, // #2411 + 3, 56424, 56424, 136, 136, // #2412 + 12, 56432, 56432, 1024, 1024, // #2413 + 7, 56456, 56456, 2280, 2280, // #2414 + 11, 56464, 56464, 2592, 2592, // #2415 + 7, 56488, 56488, 2280, 2280, // #2416 + 12, 56496, 56496, 1024, 1024, // #2417 + 7, 56520, 56520, 2280, 2280, // #2418 + 13, 56536, 56536, 840, 840, // #2419 + 3, 56560, 56560, 688, 688, // #2420 + 16, 56576, 56576, 256, 256, // #2421 + 3, 56616, 56616, 136, 136, // #2422 + 13, 56632, 56632, 840, 840, // #2423 + 3, 56656, 56656, 688, 688, // #2424 + 12, 56672, 56672, 1024, 1024, // #2425 + 7, 56696, 56696, 2280, 2280, // #2426 + 12, 56704, 56704, 1024, 1024, // #2427 + 7, 56728, 56728, 2280, 2280, // #2428 + 13, 56744, 56744, 840, 840, // #2429 + 3, 56768, 56768, 688, 688, // #2430 + 7, 56784, 56784, 2784, 2784, // #2431 + 5, 56800, 56800, 880, 880, // #2432 + 7, 56816, 56816, 2784, 2784, // #2433 + 5, 56832, 56832, 880, 880, // #2434 + 13, 56856, 56856, 840, 840, // #2435 + 3, 56880, 56880, 688, 688, // #2436 + 7, 56896, 56896, 2784, 2784, // #2437 + 5, 56912, 56912, 880, 880, // #2438 + 7, 56928, 56928, 2784, 2784, // #2439 + 5, 56944, 56944, 880, 880, // #2440 + 7, 56960, 56960, 2784, 2784, // #2441 + 5, 56976, 56976, 880, 880, // #2442 + 22, 56992, 56992, 576, 576, // #2443 + 3, 57024, 57024, 688, 688, // #2444 + 7, 57040, 57040, 2784, 2784, // #2445 + 5, 57056, 57056, 880, 880, // #2446 + 24, 57072, 57072, 3728, 3728, // #2447 + 9, 57112, 57112, 2648, 2648, // #2448 + 12, 57136, 57136, 192, 192, // #2449 + 3, 57160, 57160, 136, 136, // #2450 + 12, 57168, 57168, 192, 192, // #2451 + 3, 57192, 57192, 136, 136, // #2452 + 16, 57200, 57200, 256, 256, // #2453 + 3, 57240, 57240, 136, 136, // #2454 + 13, 57256, 57256, 840, 840, // #2455 + 3, 57280, 57280, 688, 688, // #2456 + 6, 57304, 57304, 1416, 1416, // #2457 + 5, 57312, 57312, 880, 880, // #2458 + 13, 57336, 57336, 2584, 2584, // #2459 + 3, 57368, 57368, 2456, 2456, // #2460 + 6, 57384, 57384, 3896, 3896, // #2461 + 3, 57400, 57400, 136, 136, // #2462 + 20, 57416, 57416, 3592, 3592, // #2463 + 9, 57448, 57448, 2648, 2648, // #2464 + 6, 57480, 57480, 3896, 3896, // #2465 + 3, 57496, 57496, 136, 136, // #2466 + 6, 57512, 57512, 3896, 3896, // #2467 + 3, 57528, 57528, 136, 136, // #2468 + 13, 57544, 57544, 840, 840, // #2469 + 3, 57568, 57568, 688, 688, // #2470 + 6, 57592, 57592, 3896, 3896, // #2471 + 3, 57608, 57608, 136, 136, // #2472 + 13, 57624, 57624, 840, 840, // #2473 + 3, 57648, 57648, 688, 688, // #2474 + 12, 57664, 57664, 192, 192, // #2475 + 3, 57688, 57688, 136, 136, // #2476 + 19, 57704, 57704, 1480, 1480, // #2477 + 9, 57736, 57736, 2648, 2648, // #2478 + 9, 57760, 57760, 2880, 2880, // #2479 + 5, 57776, 57776, 880, 880, // #2480 + 11, 57800, 57800, 2600, 2600, // #2481 + 7, 57832, 57832, 2280, 2280, // #2482 + 12, 57840, 57840, 2752, 2752, // #2483 + 7, 57864, 57864, 2280, 2280, // #2484 + 12, 57872, 57872, 2752, 2752, // #2485 + 7, 57896, 57896, 2280, 2280, // #2486 + 22, 57912, 57912, 3048, 3048, // #2487 + 5, 57936, 57936, 880, 880, // #2488 + 12, 57952, 57952, 2752, 2752, // #2489 + 7, 57976, 57976, 2280, 2280, // #2490 + 16, 57984, 57984, 256, 256, // #2491 + 3, 58024, 58024, 136, 136, // #2492 + 11, 58032, 58032, 3344, 3344, // #2493 + 3, 58048, 58048, 688, 688, // #2494 + 12, 58064, 58064, 2752, 2752, // #2495 + 7, 58088, 58088, 2280, 2280, // #2496 + 13, 58104, 58104, 840, 840, // #2497 + 3, 58128, 58128, 688, 688, // #2498 + 14, 58144, 58144, 2912, 2912, // #2499 + 7, 58168, 58168, 2280, 2280, // #2500 + 7, 58176, 58176, 2784, 2784, // #2501 + 5, 58192, 58192, 880, 880, // #2502 + 14, 58208, 58208, 2912, 2912, // #2503 + 7, 58232, 58232, 2280, 2280, // #2504 + 22, 58248, 58248, 3048, 3048, // #2505 + 5, 58272, 58272, 880, 880, // #2506 + 5, 58296, 58296, 456, 456, // #2507 + 4, 58304, 58304, 1792, 1792, // #2508 + 16, 58376, 58376, 952, 952, // #2509 + 8, 58408, 58408, 1912, 1912, // #2510 + 13, 58440, 58440, 840, 840, // #2511 + 3, 58464, 58464, 688, 688, // #2512 + 14, 58480, 58480, 4064, 4064, // #2513 + 10, 58504, 58504, 600, 600, // #2514 + 12, 58528, 58528, 192, 192, // #2515 + 3, 58552, 58552, 136, 136, // #2516 + 12, 58560, 58560, 192, 192, // #2517 + 3, 58584, 58584, 136, 136, // #2518 + 6, 58592, 58592, 3504, 3504, // #2519 + 7, 58616, 58616, 2280, 2280, // #2520 + 12, 58624, 58624, 192, 192, // #2521 + 3, 58648, 58648, 136, 136, // #2522 + 6, 58664, 58664, 3896, 3896, // #2523 + 3, 58680, 58680, 136, 136, // #2524 + 16, 58696, 58696, 2424, 2424, // #2525 + 5, 58728, 58728, 4008, 4008, // #2526 + 6, 58744, 58744, 3896, 3896, // #2527 + 3, 58760, 58760, 136, 136, // #2528 + 12, 58768, 58768, 384, 384, // #2529 + 7, 58792, 58792, 2280, 2280, // #2530 + 12, 58800, 58800, 384, 384, // #2531 + 7, 58824, 58824, 2280, 2280, // #2532 + 16, 58832, 58832, 256, 256, // #2533 + 3, 58872, 58872, 136, 136, // #2534 + 13, 58888, 58888, 840, 840, // #2535 + 3, 58912, 58912, 688, 688, // #2536 + 9, 58928, 58928, 384, 384, // #2537 + 7, 58952, 58952, 2280, 2280, // #2538 + 6, 58968, 58968, 3896, 3896, // #2539 + 3, 58984, 58984, 136, 136, // #2540 + 22, 58992, 58992, 576, 576, // #2541 + 3, 59024, 59024, 688, 688, // #2542 + 19, 59048, 59048, 1480, 1480, // #2543 + 9, 59080, 59080, 2648, 2648, // #2544 + 9, 59104, 59104, 2880, 2880, // #2545 + 5, 59120, 59120, 880, 880, // #2546 + 9, 59136, 59136, 2880, 2880, // #2547 + 5, 59152, 59152, 880, 880, // #2548 + 7, 59168, 59168, 3936, 3936, // #2549 + 8, 59192, 59192, 1912, 1912, // #2550 + 6, 59224, 59224, 3224, 3224, // #2551 + 8, 59240, 59240, 1912, 1912, // #2552 + 15, 59272, 59272, 2488, 2488, // #2553 + 7, 59304, 59304, 2280, 2280, // #2554 + 15, 59336, 59336, 2488, 2488, // #2555 + 7, 59368, 59368, 2280, 2280, // #2556 + 12, 59376, 59376, 192, 192, // #2557 + 3, 59400, 59400, 136, 136, // #2558 + 5, 59416, 59416, 3448, 3448, // #2559 + 5, 59424, 59424, 880, 880, // #2560 + 22, 59440, 59440, 576, 576, // #2561 + 3, 59472, 59472, 688, 688, // #2562 + 5, 59496, 59496, 3448, 3448, // #2563 + 5, 59504, 59504, 880, 880, // #2564 + 5, 59528, 59528, 456, 456, // #2565 + 4, 59536, 59536, 1792, 1792, // #2566 + 22, 59552, 59552, 576, 576, // #2567 + 3, 59584, 59584, 688, 688, // #2568 + 22, 59600, 59600, 576, 576, // #2569 + 3, 59632, 59632, 688, 688, // #2570 + 13, 59656, 59656, 2584, 2584, // #2571 + 3, 59688, 59688, 2456, 2456, // #2572 + 13, 59704, 59704, 840, 840, // #2573 + 3, 59728, 59728, 688, 688, // #2574 + 9, 59744, 59744, 2880, 2880, // #2575 + 5, 59760, 59760, 880, 880, // #2576 + 22, 59784, 59784, 3048, 3048, // #2577 + 5, 59808, 59808, 880, 880, // #2578 + 6, 59832, 59832, 1416, 1416, // #2579 + 5, 59840, 59840, 880, 880, // #2580 + 27, 59912, 59912, 744, 744, // #2581 + 4, 59960, 59960, 2104, 2104, // #2582 + 12, 59968, 59968, 192, 192, // #2583 + 3, 59992, 59992, 136, 136, // #2584 + 7, 60000, 60000, 2784, 2784, // #2585 + 5, 60016, 60016, 880, 880, // #2586 + 5, 60040, 60040, 3448, 3448, // #2587 + 5, 60048, 60048, 880, 880, // #2588 + 12, 60064, 60064, 2240, 2240, // #2589 + 7, 60088, 60088, 2280, 2280, // #2590 + 12, 60096, 60096, 2240, 2240, // #2591 + 7, 60120, 60120, 2280, 2280, // #2592 + 11, 60128, 60128, 3344, 3344, // #2593 + 3, 60144, 60144, 688, 688, // #2594 + 6, 60168, 60168, 3896, 3896, // #2595 + 3, 60184, 60184, 136, 136, // #2596 + 13, 60200, 60200, 840, 840, // #2597 + 3, 60224, 60224, 688, 688, // #2598 + 13, 60248, 60248, 2584, 2584, // #2599 + 3, 60280, 60280, 2456, 2456, // #2600 + 11, 60288, 60288, 3344, 3344, // #2601 + 3, 60304, 60304, 688, 688, // #2602 + 5, 60328, 60328, 456, 456, // #2603 + 4, 60336, 60336, 1792, 1792, // #2604 + 12, 60352, 60352, 1024, 1024, // #2605 + 7, 60376, 60376, 2280, 2280, // #2606 + 12, 60384, 60384, 1024, 1024, // #2607 + 7, 60408, 60408, 2280, 2280, // #2608 + 7, 60416, 60416, 2784, 2784, // #2609 + 5, 60432, 60432, 880, 880, // #2610 + 22, 60448, 60448, 576, 576, // #2611 + 3, 60480, 60480, 688, 688, // #2612 + 6, 60504, 60504, 1416, 1416, // #2613 + 5, 60512, 60512, 880, 880, // #2614 + 13, 60536, 60536, 840, 840, // #2615 + 3, 60560, 60560, 688, 688, // #2616 + 13, 60584, 60584, 840, 840, // #2617 + 3, 60608, 60608, 688, 688, // #2618 + 11, 60624, 60624, 3344, 3344, // #2619 + 3, 60640, 60640, 688, 688, // #2620 + 24, 60656, 60656, 3728, 3728, // #2621 + 9, 60696, 60696, 2648, 2648, // #2622 + 5, 60728, 60728, 456, 456, // #2623 + 4, 60736, 60736, 1792, 1792, // #2624 + 12, 60808, 60808, 952, 952, // #2625 + 7, 60840, 60840, 2280, 2280, // #2626 + 20, 60856, 60856, 104, 104, // #2627 + 7, 60888, 60888, 2280, 2280, // #2628 + 8, 60896, 60896, 320, 320, // #2629 + 3, 60920, 60920, 808, 808, // #2630 + 22, 60936, 60936, 3048, 3048, // #2631 + 5, 60960, 60960, 880, 880, // #2632 + 13, 60984, 60984, 840, 840, // #2633 + 3, 61008, 61008, 688, 688, // #2634 + 13, 61032, 61032, 840, 840, // #2635 + 3, 61056, 61056, 688, 688, // #2636 + 22, 61072, 61072, 576, 576, // #2637 + 3, 61104, 61104, 688, 688, // #2638 + 13, 61128, 61128, 840, 840, // #2639 + 3, 61152, 61152, 688, 688, // #2640 + 6, 61176, 61176, 1416, 1416, // #2641 + 5, 61184, 61184, 880, 880, // #2642 + 22, 61208, 61208, 3048, 3048, // #2643 + 5, 61232, 61232, 880, 880, // #2644 + 11, 61248, 61248, 2592, 2592, // #2645 + 7, 61272, 61272, 2280, 2280, // #2646 + 11, 61280, 61280, 2592, 2592, // #2647 + 7, 61304, 61304, 2280, 2280, // #2648 + 22, 61320, 61320, 3048, 3048, // #2649 + 5, 61344, 61344, 880, 880, // #2650 + 22, 61368, 61368, 3048, 3048, // #2651 + 5, 61392, 61392, 880, 880, // #2652 + 22, 61416, 61416, 3048, 3048, // #2653 + 5, 61440, 61440, 880, 880, // #2654 + 22, 61464, 61464, 3048, 3048, // #2655 + 5, 61488, 61488, 880, 880, // #2656 + 16, 61504, 61504, 256, 256, // #2657 + 3, 61544, 61544, 136, 136, // #2658 + 6, 61560, 61560, 1416, 1416, // #2659 + 5, 61568, 61568, 880, 880, // #2660 + 21, 61592, 61592, 2888, 2888, // #2661 + 7, 61624, 61624, 2280, 2280, // #2662 + 23, 61640, 61640, 792, 792, // #2663 + 3, 61672, 61672, 2456, 2456, // #2664 + 22, 61680, 61680, 576, 576, // #2665 + 3, 61712, 61712, 688, 688, // #2666 + 12, 61728, 61728, 192, 192, // #2667 + 3, 61752, 61752, 136, 136, // #2668 + 6, 61768, 61768, 1416, 1416, // #2669 + 5, 61776, 61776, 880, 880, // #2670 + 22, 61792, 61792, 576, 576, // #2671 + 3, 61824, 61824, 688, 688, // #2672 + 13, 61848, 61848, 840, 840, // #2673 + 3, 61872, 61872, 688, 688, // #2674 + 22, 61896, 61896, 3048, 3048, // #2675 + 5, 61920, 61920, 880, 880, // #2676 + 16, 61936, 61936, 256, 256, // #2677 + 3, 61976, 61976, 136, 136, // #2678 + 9, 61984, 61984, 2880, 2880, // #2679 + 5, 62000, 62000, 880, 880, // #2680 + 7, 62016, 62016, 2784, 2784, // #2681 + 5, 62032, 62032, 880, 880, // #2682 + 22, 62056, 62056, 3048, 3048, // #2683 + 5, 62080, 62080, 880, 880, // #2684 + 22, 62104, 62104, 3048, 3048, // #2685 + 5, 62128, 62128, 880, 880, // #2686 + 13, 62144, 62144, 3232, 3232, // #2687 + 7, 62168, 62168, 2280, 2280, // #2688 + 13, 62176, 62176, 3232, 3232, // #2689 + 7, 62200, 62200, 2280, 2280, // #2690 + 6, 62216, 62216, 1416, 1416, // #2691 + 5, 62224, 62224, 880, 880, // #2692 + 13, 62240, 62240, 0, 0, // #2693 + 7, 62264, 62264, 2280, 2280, // #2694 + 22, 62272, 62272, 576, 576, // #2695 + 3, 62304, 62304, 688, 688, // #2696 + 13, 62320, 62320, 0, 0, // #2697 + 7, 62344, 62344, 2280, 2280, // #2698 + 17, 62360, 62360, 2760, 2760, // #2699 + 7, 62392, 62392, 2280, 2280, // #2700 + 13, 62408, 62408, 840, 840, // #2701 + 3, 62432, 62432, 688, 688, // #2702 + 17, 62456, 62456, 2760, 2760, // #2703 + 7, 62488, 62488, 2280, 2280, // #2704 + 9, 62496, 62496, 2880, 2880, // #2705 + 5, 62512, 62512, 880, 880, // #2706 + 6, 62536, 62536, 1416, 1416, // #2707 + 5, 62544, 62544, 880, 880, // #2708 + 9, 62560, 62560, 2880, 2880, // #2709 + 5, 62576, 62576, 880, 880, // #2710 + 22, 62600, 62600, 3048, 3048, // #2711 + 5, 62624, 62624, 880, 880, // #2712 + 13, 62648, 62648, 840, 840, // #2713 + 3, 62672, 62672, 688, 688, // #2714 + 11, 62688, 62688, 3344, 3344, // #2715 + 3, 62704, 62704, 688, 688, // #2716 + 17, 62728, 62728, 3848, 3848, // #2717 + 7, 62752, 62752, 736, 736, // #2718 + 5, 62776, 62776, 3448, 3448, // #2719 + 5, 62784, 62784, 880, 880, // #2720 + 6, 62808, 62808, 3896, 3896, // #2721 + 3, 62824, 62824, 136, 136, // #2722 + 5, 62840, 62840, 3448, 3448, // #2723 + 5, 62848, 62848, 880, 880, // #2724 + 5, 62872, 62872, 3448, 3448, // #2725 + 5, 62880, 62880, 880, 880, // #2726 + 5, 62904, 62904, 3448, 3448, // #2727 + 5, 62912, 62912, 880, 880, // #2728 + 15, 62984, 62984, 2488, 2488, // #2729 + 7, 63016, 63016, 2280, 2280, // #2730 + 15, 63024, 63024, 3088, 3088, // #2731 + 7, 63048, 63048, 2280, 2280, // #2732 + 15, 63112, 63112, 2488, 2488, // #2733 + 7, 63144, 63144, 2280, 2280, // #2734 + 16, 63176, 63176, 504, 504, // #2735 + 7, 63200, 63200, 736, 736, // #2736 + 9, 63216, 63216, 2880, 2880, // #2737 + 5, 63232, 63232, 880, 880, // #2738 + 11, 63248, 63248, 3344, 3344, // #2739 + 3, 63264, 63264, 688, 688, // #2740 + 13, 63280, 63280, 64, 64, // #2741 + 7, 63304, 63304, 2280, 2280, // #2742 + 13, 63312, 63312, 64, 64, // #2743 + 7, 63336, 63336, 2280, 2280, // #2744 + 16, 63344, 63344, 256, 256, // #2745 + 3, 63384, 63384, 136, 136, // #2746 + 11, 63400, 63400, 3800, 3800, // #2747 + 8, 63432, 63432, 1912, 1912, // #2748 + 7, 63456, 63456, 2784, 2784, // #2749 + 5, 63472, 63472, 880, 880, // #2750 + 16, 63496, 63496, 264, 264, // #2751 + 7, 63528, 63528, 2280, 2280, // #2752 + 6, 63544, 63544, 3896, 3896, // #2753 + 3, 63560, 63560, 136, 136, // #2754 + 12, 63568, 63568, 192, 192, // #2755 + 3, 63592, 63592, 136, 136, // #2756 + 16, 63608, 63608, 264, 264, // #2757 + 7, 63640, 63640, 2280, 2280, // #2758 + 16, 63648, 63648, 256, 256, // #2759 + 3, 63688, 63688, 136, 136, // #2760 + 6, 63704, 63704, 3896, 3896, // #2761 + 3, 63720, 63720, 136, 136, // #2762 + 7, 63728, 63728, 2784, 2784, // #2763 + 5, 63744, 63744, 880, 880, // #2764 + 14, 63760, 63760, 704, 704, // #2765 + 7, 63784, 63784, 2280, 2280, // #2766 + 14, 63792, 63792, 704, 704, // #2767 + 7, 63816, 63816, 2280, 2280, // #2768 + 13, 63824, 63824, 64, 64, // #2769 + 7, 63848, 63848, 2280, 2280, // #2770 + 13, 63856, 63856, 64, 64, // #2771 + 7, 63880, 63880, 2280, 2280, // #2772 + 12, 63896, 63896, 3352, 3352, // #2773 + 8, 63928, 63928, 1912, 1912, // #2774 + 22, 63952, 63952, 576, 576, // #2775 + 3, 63984, 63984, 688, 688, // #2776 + 10, 64000, 64000, 160, 160, // #2777 + 5, 64024, 64024, 4008, 4008, // #2778 + 22, 64032, 64032, 576, 576, // #2779 + 3, 64064, 64064, 688, 688, // #2780 + 6, 64088, 64088, 3896, 3896, // #2781 + 3, 64104, 64104, 136, 136, // #2782 + 15, 64112, 64112, 3088, 3088, // #2783 + 7, 64136, 64136, 2280, 2280, // #2784 + 22, 64144, 64144, 576, 576, // #2785 + 3, 64176, 64176, 688, 688, // #2786 + 6, 64200, 64200, 3896, 3896, // #2787 + 3, 64216, 64216, 136, 136, // #2788 + 9, 64224, 64224, 2880, 2880, // #2789 + 5, 64240, 64240, 880, 880, // #2790 + 5, 64264, 64264, 3448, 3448, // #2791 + 5, 64272, 64272, 880, 880, // #2792 + 7, 64288, 64288, 2784, 2784, // #2793 + 5, 64304, 64304, 880, 880, // #2794 + 17, 64328, 64328, 2728, 2728, // #2795 + 5, 64360, 64360, 4008, 4008, // #2796 + 11, 64368, 64368, 2176, 2176, // #2797 + 7, 64392, 64392, 2280, 2280, // #2798 + 11, 64400, 64400, 2176, 2176, // #2799 + 7, 64424, 64424, 2280, 2280, // #2800 + 12, 64440, 64440, 3352, 3352, // #2801 + 8, 64472, 64472, 1912, 1912, // #2802 + 17, 64504, 64504, 1864, 1864, // #2803 + 7, 64536, 64536, 2280, 2280, // #2804 + 17, 64552, 64552, 1864, 1864, // #2805 + 7, 64584, 64584, 2280, 2280, // #2806 + 9, 64592, 64592, 2880, 2880, // #2807 + 5, 64608, 64608, 880, 880, // #2808 + 18, 64624, 64624, 2448, 2448, // #2809 + 7, 64664, 64664, 2280, 2280, // #2810 + 5, 64680, 64680, 3448, 3448, // #2811 + 5, 64688, 64688, 880, 880, // #2812 + 6, 64712, 64712, 1416, 1416, // #2813 + 5, 64720, 64720, 880, 880, // #2814 + 6, 64744, 64744, 1416, 1416, // #2815 + 5, 64752, 64752, 880, 880, // #2816 + 11, 64768, 64768, 3344, 3344, // #2817 + 3, 64784, 64784, 688, 688, // #2818 + 22, 64800, 64800, 576, 576, // #2819 + 3, 64832, 64832, 688, 688, // #2820 + 8, 64848, 64848, 80, 80, // #2821 + 7, 64872, 64872, 2280, 2280, // #2822 + 22, 64888, 64888, 3048, 3048, // #2823 + 5, 64912, 64912, 880, 880, // #2824 + 11, 64936, 64936, 2600, 2600, // #2825 + 7, 64968, 64968, 2280, 2280, // #2826 + 11, 64976, 64976, 3344, 3344, // #2827 + 3, 64992, 64992, 688, 688, // #2828 + 7, 65008, 65008, 2784, 2784, // #2829 + 5, 65024, 65024, 880, 880, // #2830 + 6, 65048, 65048, 3896, 3896, // #2831 + 3, 65064, 65064, 136, 136, // #2832 + 6, 65080, 65080, 3896, 3896, // #2833 + 3, 65096, 65096, 136, 136, // #2834 + 15, 65104, 65104, 80, 80, // #2835 + 7, 65128, 65128, 2280, 2280, // #2836 + 22, 65136, 65136, 576, 576, // #2837 + 3, 65168, 65168, 688, 688, // #2838 + 13, 65184, 65184, 0, 0, // #2839 + 7, 65208, 65208, 2280, 2280, // #2840 + 12, 65216, 65216, 1024, 1024, // #2841 + 7, 65240, 65240, 2280, 2280, // #2842 + 13, 65248, 65248, 0, 0, // #2843 + 7, 65272, 65272, 2280, 2280, // #2844 + 12, 65280, 65280, 1024, 1024, // #2845 + 7, 65304, 65304, 2280, 2280, // #2846 + 13, 65320, 65320, 840, 840, // #2847 + 3, 65344, 65344, 688, 688, // #2848 + 11, 65360, 65360, 3344, 3344, // #2849 + 3, 65376, 65376, 688, 688, // #2850 + 22, 65392, 65392, 576, 576, // #2851 + 3, 65424, 65424, 688, 688, // #2852 + 6, 65448, 65448, 1416, 1416, // #2853 + 5, 65456, 65456, 880, 880, // #2854 + 5, 65480, 65480, 3448, 3448, // #2855 + 5, 65488, 65488, 880, 880, // #2856 + 7, 65504, 65504, 2832, 2832, // #2857 + 9, 65520, 65520, 2016, 2016, // #2858 + 11, 65536, 65536, 3344, 3344, // #2859 + 3, 65552, 65552, 688, 688, // #2860 + 7, 65576, 65576, 3656, 3656, // #2861 + 9, 65608, 65608, 3832, 3832, // #2862 + 12, 65632, 65632, 1024, 1024, // #2863 + 7, 65656, 65656, 2280, 2280, // #2864 + 5, 65672, 65672, 3448, 3448, // #2865 + 5, 65680, 65680, 880, 880, // #2866 + 7, 65704, 65704, 3656, 3656, // #2867 + 9, 65736, 65736, 3832, 3832, // #2868 + 5, 65768, 65768, 3448, 3448, // #2869 + 5, 65776, 65776, 880, 880, // #2870 + 12, 65792, 65792, 1024, 1024, // #2871 + 7, 65816, 65816, 2280, 2280, // #2872 + 5, 65832, 65832, 3448, 3448, // #2873 + 5, 65840, 65840, 880, 880, // #2874 + 5, 65864, 65864, 3448, 3448, // #2875 + 5, 65872, 65872, 880, 880, // #2876 + 5, 65896, 65896, 3448, 3448, // #2877 + 5, 65904, 65904, 880, 880, // #2878 + 15, 65920, 65920, 80, 80, // #2879 + 7, 65944, 65944, 2280, 2280, // #2880 + 13, 65960, 65960, 840, 840, // #2881 + 3, 65984, 65984, 688, 688, // #2882 + 5, 66008, 66008, 3448, 3448, // #2883 + 5, 66016, 66016, 880, 880, // #2884 + 13, 66040, 66040, 840, 840, // #2885 + 3, 66064, 66064, 688, 688, // #2886 + 11, 66080, 66080, 3344, 3344, // #2887 + 3, 66096, 66096, 688, 688, // #2888 + 9, 66112, 66112, 2880, 2880, // #2889 + 5, 66128, 66128, 880, 880, // #2890 + 22, 66144, 66144, 576, 576, // #2891 + 3, 66176, 66176, 688, 688, // #2892 + 12, 66192, 66192, 192, 192, // #2893 + 3, 66216, 66216, 136, 136, // #2894 + 12, 66224, 66224, 192, 192, // #2895 + 3, 66248, 66248, 136, 136, // #2896 + 13, 66264, 66264, 840, 840, // #2897 + 3, 66288, 66288, 688, 688, // #2898 + 9, 66312, 66312, 1912, 1912, // #2899 + 7, 66344, 66344, 2280, 2280, // #2900 + 22, 66352, 66352, 576, 576, // #2901 + 3, 66384, 66384, 688, 688, // #2902 + 21, 66440, 66440, 3576, 3576, // #2903 + 8, 66472, 66472, 1912, 1912, // #2904 + 5, 66504, 66504, 456, 456, // #2905 + 4, 66512, 66512, 1792, 1792, // #2906 + 12, 66528, 66528, 192, 192, // #2907 + 3, 66552, 66552, 136, 136, // #2908 + 22, 66560, 66560, 576, 576, // #2909 + 3, 66592, 66592, 688, 688, // #2910 + 7, 66616, 66616, 3656, 3656, // #2911 + 9, 66632, 66632, 3832, 3832, // #2912 + 16, 66656, 66656, 256, 256, // #2913 + 3, 66696, 66696, 136, 136, // #2914 + 13, 66712, 66712, 840, 840, // #2915 + 3, 66736, 66736, 688, 688, // #2916 + 12, 66752, 66752, 192, 192, // #2917 + 3, 66776, 66776, 136, 136, // #2918 + 22, 66784, 66784, 576, 576, // #2919 + 3, 66816, 66816, 688, 688, // #2920 + 16, 66832, 66832, 2176, 2176, // #2921 + 7, 66872, 66872, 2280, 2280, // #2922 + 16, 66880, 66880, 2176, 2176, // #2923 + 7, 66920, 66920, 2280, 2280, // #2924 + 17, 66952, 66952, 888, 888, // #2925 + 7, 66984, 66984, 2280, 2280, // #2926 + 17, 67016, 67016, 888, 888, // #2927 + 7, 67048, 67048, 2280, 2280, // #2928 + 7, 67064, 67064, 3544, 3544, // #2929 + 9, 67072, 67072, 2016, 2016, // #2930 + 7, 67088, 67088, 2784, 2784, // #2931 + 5, 67104, 67104, 880, 880, // #2932 + 13, 67128, 67128, 840, 840, // #2933 + 3, 67152, 67152, 688, 688, // #2934 + 6, 67176, 67176, 1416, 1416, // #2935 + 5, 67184, 67184, 880, 880, // #2936 + 5, 67208, 67208, 456, 456, // #2937 + 4, 67216, 67216, 1792, 1792, // #2938 + 12, 67232, 67232, 192, 192, // #2939 + 3, 67256, 67256, 136, 136, // #2940 + 14, 67264, 67264, 1984, 1984, // #2941 + 3, 67288, 67288, 2456, 2456, // #2942 + 13, 67304, 67304, 840, 840, // #2943 + 3, 67328, 67328, 688, 688, // #2944 + 9, 67344, 67344, 2880, 2880, // #2945 + 5, 67360, 67360, 880, 880, // #2946 + 7, 67384, 67384, 3656, 3656, // #2947 + 9, 67400, 67400, 3832, 3832, // #2948 + 9, 67424, 67424, 2880, 2880, // #2949 + 5, 67440, 67440, 880, 880, // #2950 + 9, 67456, 67456, 2880, 2880, // #2951 + 5, 67472, 67472, 880, 880, // #2952 + 6, 67496, 67496, 1416, 1416, // #2953 + 5, 67504, 67504, 880, 880, // #2954 + 11, 67520, 67520, 3344, 3344, // #2955 + 3, 67536, 67536, 688, 688, // #2956 + 13, 67560, 67560, 840, 840, // #2957 + 3, 67584, 67584, 688, 688, // #2958 + 13, 67608, 67608, 840, 840, // #2959 + 3, 67632, 67632, 688, 688, // #2960 + 16, 67648, 67648, 1552, 1552, // #2961 + 7, 67688, 67688, 2280, 2280, // #2962 + 6, 67704, 67704, 1416, 1416, // #2963 + 5, 67712, 67712, 880, 880, // #2964 + 12, 67728, 67728, 2560, 2560, // #2965 + 12, 67752, 67752, 1928, 1928, // #2966 + 16, 67776, 67776, 1552, 1552, // #2967 + 7, 67816, 67816, 2280, 2280, // #2968 + 12, 67824, 67824, 2560, 2560, // #2969 + 12, 67848, 67848, 1928, 1928, // #2970 + 13, 67872, 67872, 3232, 3232, // #2971 + 7, 67896, 67896, 2280, 2280, // #2972 + 13, 67904, 67904, 3232, 3232, // #2973 + 7, 67928, 67928, 2280, 2280, // #2974 + 7, 67936, 67936, 2784, 2784, // #2975 + 5, 67952, 67952, 880, 880, // #2976 + 6, 67976, 67976, 1416, 1416, // #2977 + 5, 67984, 67984, 880, 880, // #2978 + 6, 68008, 68008, 1416, 1416, // #2979 + 5, 68016, 68016, 880, 880, // #2980 + 22, 68032, 68032, 576, 576, // #2981 + 3, 68064, 68064, 688, 688, // #2982 + 12, 68088, 68088, 1752, 1752, // #2983 + 8, 68120, 68120, 1912, 1912, // #2984 + 6, 68152, 68152, 3896, 3896, // #2985 + 3, 68168, 68168, 136, 136, // #2986 + 11, 68176, 68176, 3344, 3344, // #2987 + 3, 68192, 68192, 688, 688, // #2988 + 22, 68208, 68208, 576, 576, // #2989 + 3, 68240, 68240, 688, 688, // #2990 + 7, 68256, 68256, 2784, 2784, // #2991 + 5, 68272, 68272, 880, 880, // #2992 + 7, 68288, 68288, 2784, 2784, // #2993 + 5, 68304, 68304, 880, 880, // #2994 + 7, 68328, 68328, 3656, 3656, // #2995 + 9, 68360, 68360, 3832, 3832, // #2996 + 16, 68384, 68384, 256, 256, // #2997 + 3, 68424, 68424, 136, 136, // #2998 + 11, 68432, 68432, 3344, 3344, // #2999 + 3, 68448, 68448, 688, 688, // #3000 + 16, 68464, 68464, 256, 256, // #3001 + 3, 68504, 68504, 136, 136, // #3002 + 6, 68520, 68520, 3896, 3896, // #3003 + 3, 68536, 68536, 136, 136, // #3004 + 22, 68552, 68552, 3048, 3048, // #3005 + 5, 68576, 68576, 880, 880, // #3006 + 11, 68592, 68592, 3344, 3344, // #3007 + 3, 68608, 68608, 688, 688, // #3008 + 13, 68632, 68632, 840, 840, // #3009 + 3, 68656, 68656, 688, 688, // #3010 + 5, 68680, 68680, 456, 456, // #3011 + 4, 68688, 68688, 1792, 1792, // #3012 + 12, 68712, 68712, 1752, 1752, // #3013 + 8, 68744, 68744, 1912, 1912, // #3014 + 6, 68776, 68776, 1416, 1416, // #3015 + 5, 68784, 68784, 880, 880, // #3016 + 12, 68800, 68800, 192, 192, // #3017 + 3, 68824, 68824, 136, 136, // #3018 + 12, 68832, 68832, 192, 192, // #3019 + 3, 68856, 68856, 136, 136, // #3020 + 6, 68872, 68872, 1416, 1416, // #3021 + 5, 68880, 68880, 880, 880, // #3022 + 6, 68904, 68904, 1416, 1416, // #3023 + 5, 68912, 68912, 880, 880, // #3024 + 12, 68928, 68928, 192, 192, // #3025 + 3, 68952, 68952, 136, 136, // #3026 + 12, 68960, 68960, 384, 384, // #3027 + 7, 68984, 68984, 2280, 2280, // #3028 + 12, 68992, 68992, 384, 384, // #3029 + 7, 69016, 69016, 2280, 2280, // #3030 + 22, 69024, 69024, 576, 576, // #3031 + 3, 69056, 69056, 688, 688, // #3032 + 8, 69080, 69080, 2632, 2632, // #3033 + 3, 69104, 69104, 2352, 2352, // #3034 + 23, 69128, 69128, 792, 792, // #3035 + 3, 69160, 69160, 2456, 2456, // #3036 + 15, 69176, 69176, 456, 456, // #3037 + 7, 69208, 69208, 2280, 2280, // #3038 + 15, 69224, 69224, 456, 456, // #3039 + 7, 69256, 69256, 2280, 2280, // #3040 + 13, 69272, 69272, 840, 840, // #3041 + 3, 69296, 69296, 688, 688, // #3042 + 9, 69312, 69312, 2880, 2880, // #3043 + 5, 69328, 69328, 880, 880, // #3044 + 12, 69344, 69344, 192, 192, // #3045 + 3, 69368, 69368, 136, 136, // #3046 + 9, 69384, 69384, 1032, 1032, // #3047 + 10, 69416, 69416, 600, 600, // #3048 + 6, 69448, 69448, 1416, 1416, // #3049 + 5, 69456, 69456, 880, 880, // #3050 + 22, 69472, 69472, 576, 576, // #3051 + 3, 69504, 69504, 688, 688, // #3052 + 13, 69520, 69520, 2176, 2176, // #3053 + 7, 69544, 69544, 2280, 2280, // #3054 + 12, 69552, 69552, 192, 192, // #3055 + 3, 69576, 69576, 136, 136, // #3056 + 13, 69584, 69584, 2176, 2176, // #3057 + 7, 69608, 69608, 2280, 2280, // #3058 + 22, 69624, 69624, 3048, 3048, // #3059 + 5, 69648, 69648, 880, 880, // #3060 + 7, 69664, 69664, 2784, 2784, // #3061 + 5, 69680, 69680, 880, 880, // #3062 + 9, 69696, 69696, 656, 656, // #3063 + 7, 69720, 69720, 2280, 2280, // #3064 + 12, 69728, 69728, 192, 192, // #3065 + 3, 69752, 69752, 136, 136, // #3066 + 6, 69768, 69768, 1416, 1416, // #3067 + 5, 69776, 69776, 880, 880, // #3068 + 12, 69792, 69792, 192, 192, // #3069 + 3, 69816, 69816, 136, 136, // #3070 + 27, 69824, 69824, 768, 768, // #3071 + 7, 69864, 69864, 2280, 2280, // #3072 + 7, 69872, 69872, 2784, 2784, // #3073 + 5, 69888, 69888, 880, 880, // #3074 + 12, 69904, 69904, 192, 192, // #3075 + 3, 69928, 69928, 136, 136, // #3076 + 12, 69936, 69936, 192, 192, // #3077 + 3, 69960, 69960, 136, 136, // #3078 + 5, 69976, 69976, 456, 456, // #3079 + 4, 69984, 69984, 1792, 1792, // #3080 + 16, 70008, 70008, 264, 264, // #3081 + 7, 70040, 70040, 2280, 2280, // #3082 + 12, 70048, 70048, 192, 192, // #3083 + 3, 70072, 70072, 136, 136, // #3084 + 16, 70080, 70080, 256, 256, // #3085 + 3, 70120, 70120, 136, 136, // #3086 + 16, 70136, 70136, 264, 264, // #3087 + 7, 70168, 70168, 2280, 2280, // #3088 + 16, 70176, 70176, 256, 256, // #3089 + 3, 70216, 70216, 136, 136, // #3090 + 12, 70224, 70224, 192, 192, // #3091 + 3, 70248, 70248, 136, 136, // #3092 + 7, 70264, 70264, 3656, 3656, // #3093 + 9, 70280, 70280, 3832, 3832, // #3094 + 6, 70312, 70312, 3896, 3896, // #3095 + 3, 70328, 70328, 136, 136, // #3096 + 12, 70344, 70344, 1752, 1752, // #3097 + 8, 70376, 70376, 1912, 1912, // #3098 + 11, 70400, 70400, 3344, 3344, // #3099 + 3, 70416, 70416, 688, 688, // #3100 + 11, 70440, 70440, 2600, 2600, // #3101 + 7, 70472, 70472, 2280, 2280, // #3102 + 12, 70536, 70536, 952, 952, // #3103 + 7, 70568, 70568, 2280, 2280, // #3104 + 18, 70576, 70576, 2448, 2448, // #3105 + 7, 70616, 70616, 2280, 2280, // #3106 + 6, 70632, 70632, 3896, 3896, // #3107 + 3, 70648, 70648, 136, 136, // #3108 + 12, 70664, 70664, 952, 952, // #3109 + 7, 70696, 70696, 2280, 2280, // #3110 + 13, 70712, 70712, 840, 840, // #3111 + 3, 70736, 70736, 688, 688, // #3112 + 6, 70760, 70760, 3896, 3896, // #3113 + 3, 70776, 70776, 136, 136, // #3114 + 15, 70784, 70784, 3088, 3088, // #3115 + 7, 70808, 70808, 2280, 2280, // #3116 + 13, 70824, 70824, 840, 840, // #3117 + 3, 70848, 70848, 688, 688, // #3118 + 6, 70872, 70872, 1416, 1416, // #3119 + 5, 70880, 70880, 880, 880, // #3120 + 7, 70904, 70904, 3656, 3656, // #3121 + 9, 70920, 70920, 3832, 3832, // #3122 + 7, 70952, 70952, 3656, 3656, // #3123 + 9, 70984, 70984, 3832, 3832, // #3124 + 13, 71016, 71016, 840, 840, // #3125 + 3, 71040, 71040, 688, 688, // #3126 + 16, 71056, 71056, 256, 256, // #3127 + 3, 71096, 71096, 136, 136, // #3128 + 9, 71104, 71104, 1184, 1184, // #3129 + 7, 71128, 71128, 2280, 2280, // #3130 + 22, 71136, 71136, 576, 576, // #3131 + 3, 71168, 71168, 688, 688, // #3132 + 9, 71184, 71184, 1184, 1184, // #3133 + 7, 71208, 71208, 2280, 2280, // #3134 + 9, 71216, 71216, 1184, 1184, // #3135 + 7, 71240, 71240, 2280, 2280, // #3136 + 12, 71248, 71248, 192, 192, // #3137 + 3, 71272, 71272, 136, 136, // #3138 + 9, 71280, 71280, 1184, 1184, // #3139 + 7, 71304, 71304, 2280, 2280, // #3140 + 13, 71320, 71320, 840, 840, // #3141 + 3, 71344, 71344, 688, 688, // #3142 + 6, 71368, 71368, 3896, 3896, // #3143 + 3, 71384, 71384, 136, 136, // #3144 + 9, 71392, 71392, 2880, 2880, // #3145 + 5, 71408, 71408, 880, 880, // #3146 + 12, 71424, 71424, 1024, 1024, // #3147 + 7, 71448, 71448, 2280, 2280, // #3148 + 12, 71456, 71456, 1024, 1024, // #3149 + 7, 71480, 71480, 2280, 2280, // #3150 + 13, 71496, 71496, 840, 840, // #3151 + 3, 71520, 71520, 688, 688, // #3152 + 14, 71536, 71536, 2160, 2160, // #3153 + 3, 71552, 71552, 688, 688, // #3154 + 6, 71576, 71576, 1416, 1416, // #3155 + 5, 71584, 71584, 880, 880, // #3156 + 12, 71600, 71600, 1024, 1024, // #3157 + 7, 71624, 71624, 2280, 2280, // #3158 + 22, 71640, 71640, 3048, 3048, // #3159 + 5, 71664, 71664, 880, 880, // #3160 + 12, 71680, 71680, 1024, 1024, // #3161 + 7, 71704, 71704, 2280, 2280, // #3162 + 22, 71720, 71720, 3048, 3048, // #3163 + 5, 71744, 71744, 880, 880, // #3164 + 22, 71768, 71768, 3048, 3048, // #3165 + 5, 71792, 71792, 880, 880, // #3166 + 5, 71816, 71816, 3448, 3448, // #3167 + 5, 71824, 71824, 880, 880, // #3168 + 6, 71848, 71848, 3896, 3896, // #3169 + 3, 71864, 71864, 136, 136, // #3170 + 24, 71872, 71872, 2736, 2736, // #3171 + 8, 71912, 71912, 1912, 1912, // #3172 + 11, 71936, 71936, 3344, 3344, // #3173 + 3, 71952, 71952, 688, 688, // #3174 + 9, 71968, 71968, 3376, 3376, // #3175 + 10, 71992, 71992, 600, 600, // #3176 + 14, 72016, 72016, 3488, 3488, // #3177 + 7, 72040, 72040, 2280, 2280, // #3178 + 14, 72048, 72048, 3488, 3488, // #3179 + 7, 72072, 72072, 2280, 2280, // #3180 + 14, 72080, 72080, 704, 704, // #3181 + 7, 72104, 72104, 2280, 2280, // #3182 + 16, 72112, 72112, 256, 256, // #3183 + 3, 72152, 72152, 136, 136, // #3184 + 9, 72160, 72160, 656, 656, // #3185 + 9, 72176, 72176, 2016, 2016, // #3186 + 11, 72192, 72192, 3344, 3344, // #3187 + 3, 72208, 72208, 688, 688, // #3188 + 14, 72224, 72224, 704, 704, // #3189 + 7, 72248, 72248, 2280, 2280, // #3190 + 21, 72264, 72264, 3576, 3576, // #3191 + 8, 72296, 72296, 1912, 1912, // #3192 + 6, 72328, 72328, 1416, 1416, // #3193 + 5, 72336, 72336, 880, 880, // #3194 + 22, 72352, 72352, 576, 576, // #3195 + 3, 72384, 72384, 688, 688, // #3196 + 13, 72400, 72400, 3232, 3232, // #3197 + 7, 72424, 72424, 2280, 2280, // #3198 + 22, 72432, 72432, 576, 576, // #3199 + 3, 72464, 72464, 688, 688, // #3200 + 28, 72512, 72512, 2096, 2096, // #3201 + 7, 72552, 72552, 2280, 2280, // #3202 + 13, 72560, 72560, 3232, 3232, // #3203 + 7, 72584, 72584, 2280, 2280, // #3204 + 6, 72600, 72600, 1416, 1416, // #3205 + 5, 72608, 72608, 880, 880, // #3206 + 6, 72632, 72632, 3896, 3896, // #3207 + 3, 72648, 72648, 136, 136, // #3208 + 13, 72664, 72664, 840, 840, // #3209 + 3, 72688, 72688, 688, 688, // #3210 + 22, 72712, 72712, 3048, 3048, // #3211 + 5, 72736, 72736, 880, 880, // #3212 + 22, 72752, 72752, 576, 576, // #3213 + 3, 72784, 72784, 688, 688, // #3214 + 11, 72800, 72800, 1296, 1296, // #3215 + 9, 72816, 72816, 2016, 2016, // #3216 + 9, 72832, 72832, 1392, 1392, // #3217 + 5, 72856, 72856, 4008, 4008, // #3218 + 5, 72872, 72872, 3448, 3448, // #3219 + 5, 72880, 72880, 880, 880, // #3220 + 22, 72904, 72904, 3048, 3048, // #3221 + 5, 72928, 72928, 880, 880, // #3222 + 22, 72952, 72952, 3048, 3048, // #3223 + 5, 72976, 72976, 880, 880, // #3224 + 7, 73000, 73000, 3656, 3656, // #3225 + 9, 73032, 73032, 3832, 3832, // #3226 + 6, 73064, 73064, 3896, 3896, // #3227 + 3, 73080, 73080, 136, 136, // #3228 + 7, 73096, 73096, 3656, 3656, // #3229 + 9, 73160, 73160, 3832, 3832, // #3230 + 12, 73184, 73184, 192, 192, // #3231 + 3, 73208, 73208, 136, 136, // #3232 + 7, 73224, 73224, 3656, 3656, // #3233 + 9, 73288, 73288, 3832, 3832, // #3234 + 5, 73320, 73320, 3448, 3448, // #3235 + 5, 73328, 73328, 880, 880, // #3236 + 9, 73352, 73352, 56, 56, // #3237 + 5, 73384, 73384, 4008, 4008, // #3238 + 22, 73400, 73400, 3048, 3048, // #3239 + 5, 73424, 73424, 880, 880, // #3240 + 22, 73448, 73448, 3048, 3048, // #3241 + 5, 73472, 73472, 880, 880, // #3242 + 12, 73488, 73488, 192, 192, // #3243 + 3, 73512, 73512, 136, 136, // #3244 + 12, 73520, 73520, 384, 384, // #3245 + 7, 73544, 73544, 2280, 2280, // #3246 + 6, 73560, 73560, 3896, 3896, // #3247 + 3, 73576, 73576, 136, 136, // #3248 + 9, 73584, 73584, 2240, 2240, // #3249 + 5, 73608, 73608, 4008, 4008, // #3250 + 12, 73616, 73616, 384, 384, // #3251 + 7, 73640, 73640, 2280, 2280, // #3252 + 11, 73648, 73648, 3344, 3344, // #3253 + 3, 73664, 73664, 688, 688, // #3254 + 14, 73688, 73688, 2088, 2088, // #3255 + 12, 73720, 73720, 1928, 1928, // #3256 + 6, 73752, 73752, 1416, 1416, // #3257 + 5, 73760, 73760, 880, 880, // #3258 + 6, 73784, 73784, 3896, 3896, // #3259 + 3, 73800, 73800, 136, 136, // #3260 + 13, 73808, 73808, 3744, 3744, // #3261 + 7, 73832, 73832, 2280, 2280, // #3262 + 11, 73840, 73840, 3344, 3344, // #3263 + 3, 73856, 73856, 688, 688, // #3264 + 13, 73880, 73880, 840, 840, // #3265 + 3, 73904, 73904, 688, 688, // #3266 + 13, 73920, 73920, 3744, 3744, // #3267 + 7, 73944, 73944, 2280, 2280, // #3268 + 22, 73960, 73960, 3048, 3048, // #3269 + 5, 73984, 73984, 880, 880, // #3270 + 22, 74000, 74000, 576, 576, // #3271 + 3, 74032, 74032, 688, 688, // #3272 + 16, 74048, 74048, 256, 256, // #3273 + 3, 74088, 74088, 136, 136, // #3274 + 9, 74096, 74096, 2880, 2880, // #3275 + 5, 74112, 74112, 880, 880, // #3276 + 22, 74128, 74128, 576, 576, // #3277 + 3, 74160, 74160, 688, 688, // #3278 + 7, 74176, 74176, 2784, 2784, // #3279 + 5, 74192, 74192, 880, 880, // #3280 + 19, 74216, 74216, 2728, 2728, // #3281 + 7, 74240, 74240, 736, 736, // #3282 + 15, 74312, 74312, 3448, 3448, // #3283 + 8, 74344, 74344, 1912, 1912, // #3284 + 11, 74368, 74368, 3344, 3344, // #3285 + 3, 74384, 74384, 688, 688, // #3286 + 6, 74408, 74408, 3896, 3896, // #3287 + 3, 74424, 74424, 136, 136, // #3288 + 22, 74432, 74432, 576, 576, // #3289 + 3, 74464, 74464, 688, 688, // #3290 + 12, 74480, 74480, 192, 192, // #3291 + 3, 74504, 74504, 136, 136, // #3292 + 7, 74512, 74512, 2784, 2784, // #3293 + 5, 74528, 74528, 880, 880, // #3294 + 6, 74544, 74544, 2560, 2560, // #3295 + 7, 74568, 74568, 2280, 2280, // #3296 + 12, 74576, 74576, 384, 384, // #3297 + 7, 74600, 74600, 2280, 2280, // #3298 + 12, 74608, 74608, 384, 384, // #3299 + 7, 74632, 74632, 2280, 2280, // #3300 + 12, 74640, 74640, 192, 192, // #3301 + 3, 74664, 74664, 136, 136, // #3302 + 13, 74680, 74680, 840, 840, // #3303 + 3, 74704, 74704, 688, 688, // #3304 + 12, 74728, 74728, 1752, 1752, // #3305 + 8, 74760, 74760, 1912, 1912, // #3306 + 13, 74792, 74792, 840, 840, // #3307 + 3, 74816, 74816, 688, 688, // #3308 + 17, 74840, 74840, 3992, 3992, // #3309 + 9, 74872, 74872, 2648, 2648, // #3310 + 13, 74896, 74896, 1632, 1632, // #3311 + 7, 74912, 74912, 736, 736, // #3312 + 9, 74928, 74928, 2880, 2880, // #3313 + 5, 74944, 74944, 880, 880, // #3314 + 6, 74968, 74968, 3896, 3896, // #3315 + 3, 74984, 74984, 136, 136, // #3316 + 22, 75000, 75000, 3048, 3048, // #3317 + 5, 75024, 75024, 880, 880, // #3318 + 25, 75048, 75048, 2776, 2776, // #3319 + 8, 75096, 75096, 1912, 1912, // #3320 + 22, 75128, 75128, 3048, 3048, // #3321 + 5, 75152, 75152, 880, 880, // #3322 + 22, 75176, 75176, 3048, 3048, // #3323 + 5, 75200, 75200, 880, 880, // #3324 + 26, 75224, 75224, 1416, 1416, // #3325 + 4, 75272, 75272, 2104, 2104, // #3326 + 11, 75280, 75280, 3344, 3344, // #3327 + 3, 75296, 75296, 688, 688, // #3328 + 6, 75320, 75320, 3896, 3896, // #3329 + 3, 75336, 75336, 136, 136, // #3330 + 9, 75344, 75344, 2880, 2880, // #3331 + 5, 75360, 75360, 880, 880, // #3332 + 11, 75376, 75376, 1936, 1936, // #3333 + 9, 75392, 75392, 2016, 2016, // #3334 + 22, 75416, 75416, 3048, 3048, // #3335 + 5, 75440, 75440, 880, 880, // #3336 + 15, 75464, 75464, 840, 840, // #3337 + 7, 75496, 75496, 2280, 2280, // #3338 + 22, 75512, 75512, 3048, 3048, // #3339 + 5, 75536, 75536, 880, 880, // #3340 + 22, 75560, 75560, 3048, 3048, // #3341 + 5, 75584, 75584, 880, 880, // #3342 + 22, 75608, 75608, 3048, 3048, // #3343 + 5, 75632, 75632, 880, 880, // #3344 + 8, 75648, 75648, 2192, 2192, // #3345 + 7, 75672, 75672, 2280, 2280, // #3346 + 11, 75680, 75680, 3344, 3344, // #3347 + 3, 75696, 75696, 688, 688, // #3348 + 9, 75720, 75720, 120, 120, // #3349 + 7, 75744, 75744, 4064, 4064, // #3350 + 22, 75760, 75760, 576, 576, // #3351 + 3, 75792, 75792, 688, 688, // #3352 + 6, 75816, 75816, 3896, 3896, // #3353 + 3, 75832, 75832, 136, 136, // #3354 + 13, 75848, 75848, 840, 840, // #3355 + 3, 75872, 75872, 688, 688, // #3356 + 13, 75896, 75896, 840, 840, // #3357 + 3, 75920, 75920, 688, 688, // #3358 + 6, 75944, 75944, 3896, 3896, // #3359 + 3, 75960, 75960, 136, 136, // #3360 + 9, 75968, 75968, 2880, 2880, // #3361 + 5, 75984, 75984, 880, 880, // #3362 + 5, 76008, 76008, 456, 456, // #3363 + 4, 76016, 76016, 1792, 1792, // #3364 + 6, 76040, 76040, 1416, 1416, // #3365 + 5, 76048, 76048, 880, 880, // #3366 + 15, 76104, 76104, 3448, 3448, // #3367 + 8, 76136, 76136, 1912, 1912, // #3368 + 11, 76160, 76160, 3344, 3344, // #3369 + 3, 76176, 76176, 688, 688, // #3370 + 9, 76192, 76192, 2880, 2880, // #3371 + 5, 76208, 76208, 880, 880, // #3372 + 7, 76232, 76232, 3656, 3656, // #3373 + 9, 76296, 76296, 3832, 3832, // #3374 + 7, 76328, 76328, 3656, 3656, // #3375 + 9, 76360, 76360, 3832, 3832, // #3376 + 20, 76384, 76384, 1248, 1248, // #3377 + 7, 76416, 76416, 736, 736, // #3378 + 5, 76440, 76440, 456, 456, // #3379 + 4, 76448, 76448, 1792, 1792, // #3380 + 5, 76464, 76464, 288, 288, // #3381 + 7, 76488, 76488, 2280, 2280, // #3382 + 5, 76504, 76504, 3448, 3448, // #3383 + 5, 76512, 76512, 880, 880, // #3384 + 13, 76536, 76536, 840, 840, // #3385 + 3, 76560, 76560, 688, 688, // #3386 + 5, 76584, 76584, 3448, 3448, // #3387 + 5, 76592, 76592, 880, 880, // #3388 + 10, 76608, 76608, 832, 832, // #3389 + 8, 76632, 76632, 1912, 1912, // #3390 + 13, 76664, 76664, 840, 840, // #3391 + 3, 76688, 76688, 688, 688, // #3392 + 7, 76712, 76712, 3656, 3656, // #3393 + 9, 76744, 76744, 3832, 3832, // #3394 + 6, 76776, 76776, 3896, 3896, // #3395 + 3, 76792, 76792, 136, 136, // #3396 + 9, 76800, 76800, 1184, 1184, // #3397 + 7, 76824, 76824, 2280, 2280, // #3398 + 13, 76840, 76840, 840, 840, // #3399 + 3, 76864, 76864, 688, 688, // #3400 + 10, 76880, 76880, 928, 928, // #3401 + 7, 76904, 76904, 2280, 2280, // #3402 + 7, 76912, 76912, 160, 160, // #3403 + 10, 76936, 76936, 600, 600, // #3404 + 22, 76968, 76968, 3048, 3048, // #3405 + 5, 76992, 76992, 880, 880, // #3406 + 22, 77016, 77016, 3048, 3048, // #3407 + 5, 77040, 77040, 880, 880, // #3408 + 6, 77064, 77064, 3896, 3896, // #3409 + 3, 77080, 77080, 136, 136, // #3410 + 12, 77088, 77088, 384, 384, // #3411 + 7, 77112, 77112, 2280, 2280, // #3412 + 15, 77128, 77128, 2488, 2488, // #3413 + 7, 77160, 77160, 2280, 2280, // #3414 + 13, 77176, 77176, 840, 840, // #3415 + 3, 77200, 77200, 688, 688, // #3416 + 5, 77224, 77224, 456, 456, // #3417 + 4, 77232, 77232, 1792, 1792, // #3418 + 12, 77248, 77248, 384, 384, // #3419 + 7, 77272, 77272, 2280, 2280, // #3420 + 15, 77320, 77320, 2488, 2488, // #3421 + 7, 77352, 77352, 2280, 2280, // #3422 + 6, 77368, 77368, 3896, 3896, // #3423 + 3, 77384, 77384, 136, 136, // #3424 + 5, 77400, 77400, 3448, 3448, // #3425 + 5, 77408, 77408, 880, 880, // #3426 + 7, 77424, 77424, 2784, 2784, // #3427 + 5, 77440, 77440, 880, 880, // #3428 + 5, 77464, 77464, 456, 456, // #3429 + 4, 77472, 77472, 1792, 1792, // #3430 + 22, 77488, 77488, 576, 576, // #3431 + 3, 77520, 77520, 688, 688, // #3432 + 7, 77536, 77536, 2784, 2784, // #3433 + 5, 77552, 77552, 880, 880, // #3434 + 15, 77576, 77576, 456, 456, // #3435 + 7, 77608, 77608, 2280, 2280, // #3436 + 7, 77616, 77616, 4016, 4016, // #3437 + 7, 77640, 77640, 2280, 2280, // #3438 + 6, 77656, 77656, 1416, 1416, // #3439 + 5, 77664, 77664, 880, 880, // #3440 + 13, 77688, 77688, 840, 840, // #3441 + 3, 77712, 77712, 688, 688, // #3442 + 12, 77728, 77728, 2240, 2240, // #3443 + 7, 77752, 77752, 2280, 2280, // #3444 + 12, 77760, 77760, 2240, 2240, // #3445 + 7, 77784, 77784, 2280, 2280, // #3446 + 6, 77800, 77800, 1416, 1416, // #3447 + 5, 77808, 77808, 880, 880, // #3448 + 22, 77824, 77824, 576, 576, // #3449 + 3, 77856, 77856, 688, 688, // #3450 + 13, 77872, 77872, 3168, 3168, // #3451 + 8, 77896, 77896, 1912, 1912, // #3452 + 7, 77920, 77920, 2784, 2784, // #3453 + 5, 77936, 77936, 880, 880, // #3454 + 7, 77952, 77952, 2784, 2784, // #3455 + 5, 77968, 77968, 880, 880, // #3456 + 13, 77992, 77992, 2520, 2520, // #3457 + 8, 78024, 78024, 1912, 1912, // #3458 + 6, 78056, 78056, 1416, 1416, // #3459 + 5, 78064, 78064, 880, 880, // #3460 + 10, 78088, 78088, 360, 360, // #3461 + 7, 78120, 78120, 2280, 2280, // #3462 + 7, 78128, 78128, 2784, 2784, // #3463 + 5, 78144, 78144, 880, 880, // #3464 + 15, 78160, 78160, 80, 80, // #3465 + 7, 78184, 78184, 2280, 2280, // #3466 + 17, 78200, 78200, 3624, 3624, // #3467 + 8, 78224, 78224, 3472, 3472, // #3468 + 27, 78240, 78240, 2256, 2256, // #3469 + 4, 78280, 78280, 2104, 2104, // #3470 + 22, 78288, 78288, 576, 576, // #3471 + 3, 78320, 78320, 688, 688, // #3472 + 13, 78336, 78336, 3744, 3744, // #3473 + 7, 78360, 78360, 2280, 2280, // #3474 + 13, 78368, 78368, 3744, 3744, // #3475 + 7, 78392, 78392, 2280, 2280, // #3476 + 6, 78408, 78408, 3896, 3896, // #3477 + 3, 78424, 78424, 136, 136, // #3478 + 11, 78432, 78432, 3344, 3344, // #3479 + 3, 78448, 78448, 688, 688, // #3480 + 22, 78464, 78464, 576, 576, // #3481 + 3, 78496, 78496, 688, 688, // #3482 + 13, 78512, 78512, 2176, 2176, // #3483 + 7, 78536, 78536, 2280, 2280, // #3484 + 13, 78552, 78552, 840, 840, // #3485 + 3, 78576, 78576, 688, 688, // #3486 + 13, 78592, 78592, 2176, 2176, // #3487 + 7, 78616, 78616, 2280, 2280, // #3488 + 6, 78632, 78632, 3896, 3896, // #3489 + 3, 78648, 78648, 136, 136, // #3490 + 13, 78664, 78664, 840, 840, // #3491 + 3, 78688, 78688, 688, 688, // #3492 + 12, 78728, 78728, 952, 952, // #3493 + 7, 78760, 78760, 2280, 2280, // #3494 + 22, 78768, 78768, 576, 576, // #3495 + 3, 78800, 78800, 688, 688, // #3496 + 26, 78824, 78824, 1416, 1416, // #3497 + 4, 78872, 78872, 2104, 2104, // #3498 + 6, 78888, 78888, 3896, 3896, // #3499 + 3, 78904, 78904, 136, 136, // #3500 + 6, 78920, 78920, 3896, 3896, // #3501 + 3, 78936, 78936, 136, 136, // #3502 + 22, 78952, 78952, 3048, 3048, // #3503 + 5, 78976, 78976, 880, 880, // #3504 + 14, 79000, 79000, 1048, 1048, // #3505 + 3, 79032, 79032, 2456, 2456, // #3506 + 5, 79048, 79048, 3448, 3448, // #3507 + 5, 79056, 79056, 880, 880, // #3508 + 13, 79072, 79072, 3744, 3744, // #3509 + 7, 79096, 79096, 2280, 2280, // #3510 + 13, 79104, 79104, 3744, 3744, // #3511 + 7, 79128, 79128, 2280, 2280, // #3512 + 7, 79136, 79136, 2784, 2784, // #3513 + 5, 79152, 79152, 880, 880, // #3514 + 16, 79176, 79176, 888, 888, // #3515 + 7, 79200, 79200, 736, 736, // #3516 + 13, 79224, 79224, 840, 840, // #3517 + 3, 79248, 79248, 688, 688, // #3518 + 13, 79272, 79272, 840, 840, // #3519 + 3, 79296, 79296, 688, 688, // #3520 + 11, 79312, 79312, 3344, 3344, // #3521 + 3, 79328, 79328, 688, 688, // #3522 + 22, 79352, 79352, 3048, 3048, // #3523 + 5, 79376, 79376, 880, 880, // #3524 + 8, 79400, 79400, 2152, 2152, // #3525 + 3, 79432, 79432, 2456, 2456, // #3526 + 22, 79448, 79448, 3048, 3048, // #3527 + 5, 79472, 79472, 880, 880, // #3528 + 20, 79488, 79488, 3504, 3504, // #3529 + 9, 79520, 79520, 2016, 2016, // #3530 + 26, 79544, 79544, 1416, 1416, // #3531 + 4, 79592, 79592, 2104, 2104, // #3532 + 5, 79608, 79608, 3448, 3448, // #3533 + 5, 79616, 79616, 880, 880, // #3534 + 6, 79632, 79632, 3024, 3024, // #3535 + 7, 79656, 79656, 2280, 2280, // #3536 + 13, 79672, 79672, 840, 840, // #3537 + 3, 79696, 79696, 688, 688, // #3538 + 7, 79712, 79712, 1824, 1824, // #3539 + 7, 79736, 79736, 2280, 2280, // #3540 + 11, 79752, 79752, 3608, 3608, // #3541 + 10, 79784, 79784, 600, 600, // #3542 + 8, 79808, 79808, 384, 384, // #3543 + 9, 79824, 79824, 2016, 2016, // #3544 + 11, 79840, 79840, 3344, 3344, // #3545 + 3, 79856, 79856, 688, 688, // #3546 + 22, 79872, 79872, 576, 576, // #3547 + 3, 79904, 79904, 688, 688, // #3548 + 22, 79928, 79928, 3048, 3048, // #3549 + 5, 79952, 79952, 880, 880, // #3550 + 13, 79976, 79976, 840, 840, // #3551 + 3, 80000, 80000, 688, 688, // #3552 + 7, 80016, 80016, 2784, 2784, // #3553 + 5, 80032, 80032, 880, 880, // #3554 + 26, 80048, 80048, 1120, 1120, // #3555 + 8, 80088, 80088, 1912, 1912, // #3556 + 7, 80112, 80112, 2784, 2784, // #3557 + 5, 80128, 80128, 880, 880, // #3558 + 14, 80144, 80144, 1024, 1024, // #3559 + 7, 80168, 80168, 2280, 2280, // #3560 + 7, 80176, 80176, 480, 480, // #3561 + 7, 80200, 80200, 2280, 2280, // #3562 + 14, 80208, 80208, 1024, 1024, // #3563 + 7, 80232, 80232, 2280, 2280, // #3564 + 9, 80248, 80248, 3816, 3816, // #3565 + 10, 80280, 80280, 600, 600, // #3566 + 5, 80312, 80312, 456, 456, // #3567 + 4, 80320, 80320, 1792, 1792, // #3568 + 8, 80344, 80344, 2632, 2632, // #3569 + 9, 80392, 80392, 3832, 3832, // #3570 + 7, 80416, 80416, 2784, 2784, // #3571 + 5, 80432, 80432, 880, 880, // #3572 + 16, 80448, 80448, 3728, 3728, // #3573 + 7, 80488, 80488, 2280, 2280, // #3574 + 7, 80496, 80496, 2784, 2784, // #3575 + 5, 80512, 80512, 880, 880, // #3576 + 6, 80536, 80536, 3896, 3896, // #3577 + 3, 80552, 80552, 136, 136, // #3578 + 13, 80568, 80568, 840, 840, // #3579 + 3, 80592, 80592, 688, 688, // #3580 + 7, 80616, 80616, 3656, 3656, // #3581 + 9, 80648, 80648, 3832, 3832, // #3582 + 6, 80680, 80680, 3896, 3896, // #3583 + 3, 80696, 80696, 136, 136, // #3584 + 7, 80712, 80712, 3656, 3656, // #3585 + 9, 80776, 80776, 3832, 3832, // #3586 + 11, 80800, 80800, 3344, 3344, // #3587 + 3, 80816, 80816, 688, 688, // #3588 + 7, 80832, 80832, 2784, 2784, // #3589 + 5, 80848, 80848, 880, 880, // #3590 + 5, 80872, 80872, 456, 456, // #3591 + 4, 80880, 80880, 1792, 1792, // #3592 + 11, 80896, 80896, 2192, 2192, // #3593 + 8, 80920, 80920, 1912, 1912, // #3594 + 13, 80952, 80952, 840, 840, // #3595 + 3, 80976, 80976, 688, 688, // #3596 + 6, 81000, 81000, 3896, 3896, // #3597 + 3, 81016, 81016, 136, 136, // #3598 + 14, 81032, 81032, 1048, 1048, // #3599 + 3, 81064, 81064, 2456, 2456, // #3600 + 6, 81080, 81080, 3896, 3896, // #3601 + 3, 81096, 81096, 136, 136, // #3602 + 7, 81104, 81104, 2784, 2784, // #3603 + 5, 81120, 81120, 880, 880, // #3604 + 9, 81136, 81136, 2880, 2880, // #3605 + 5, 81152, 81152, 880, 880, // #3606 + 5, 81176, 81176, 456, 456, // #3607 + 4, 81184, 81184, 1792, 1792, // #3608 + 11, 81200, 81200, 3344, 3344, // #3609 + 3, 81216, 81216, 688, 688, // #3610 + 21, 81280, 81280, 624, 624, // #3611 + 8, 81320, 81320, 1912, 1912, // #3612 + 6, 81352, 81352, 3896, 3896, // #3613 + 3, 81368, 81368, 136, 136, // #3614 + 6, 81384, 81384, 3720, 3720, // #3615 + 7, 81400, 81400, 2280, 2280, // #3616 + 9, 81408, 81408, 2880, 2880, // #3617 + 5, 81424, 81424, 880, 880, // #3618 + 6, 81448, 81448, 3896, 3896, // #3619 + 3, 81464, 81464, 136, 136, // #3620 + 6, 81480, 81480, 3896, 3896, // #3621 + 3, 81496, 81496, 136, 136, // #3622 + 6, 81512, 81512, 3896, 3896, // #3623 + 3, 81528, 81528, 136, 136, // #3624 + 22, 81544, 81544, 3048, 3048, // #3625 + 5, 81568, 81568, 880, 880, // #3626 + 16, 81584, 81584, 3728, 3728, // #3627 + 7, 81624, 81624, 2280, 2280, // #3628 + 12, 81632, 81632, 1024, 1024, // #3629 + 7, 81656, 81656, 2280, 2280, // #3630 + 12, 81664, 81664, 1024, 1024, // #3631 + 7, 81688, 81688, 2280, 2280, // #3632 + 13, 81704, 81704, 840, 840, // #3633 + 3, 81728, 81728, 688, 688, // #3634 + 15, 81744, 81744, 2112, 2112, // #3635 + 10, 81768, 81768, 600, 600, // #3636 + 6, 81800, 81800, 3896, 3896, // #3637 + 3, 81816, 81816, 136, 136, // #3638 + 17, 81832, 81832, 3992, 3992, // #3639 + 9, 81864, 81864, 2648, 2648, // #3640 + 22, 81896, 81896, 3048, 3048, // #3641 + 5, 81920, 81920, 880, 880, // #3642 + 13, 81944, 81944, 840, 840, // #3643 + 3, 81968, 81968, 688, 688, // #3644 + 22, 81992, 81992, 3048, 3048, // #3645 + 5, 82016, 82016, 880, 880, // #3646 + 12, 82032, 82032, 1024, 1024, // #3647 + 7, 82056, 82056, 2280, 2280, // #3648 + 12, 82064, 82064, 1024, 1024, // #3649 + 7, 82088, 82088, 2280, 2280, // #3650 + 22, 82096, 82096, 576, 576, // #3651 + 3, 82128, 82128, 688, 688, // #3652 + 5, 82152, 82152, 3448, 3448, // #3653 + 5, 82160, 82160, 880, 880, // #3654 + 5, 82184, 82184, 3448, 3448, // #3655 + 5, 82192, 82192, 880, 880, // #3656 + 5, 82216, 82216, 3448, 3448, // #3657 + 5, 82224, 82224, 880, 880, // #3658 + 12, 82240, 82240, 192, 192, // #3659 + 3, 82264, 82264, 136, 136, // #3660 + 11, 82272, 82272, 2192, 2192, // #3661 + 8, 82296, 82296, 1912, 1912, // #3662 + 13, 82328, 82328, 840, 840, // #3663 + 3, 82352, 82352, 688, 688, // #3664 + 12, 82368, 82368, 192, 192, // #3665 + 3, 82392, 82392, 136, 136, // #3666 + 6, 82408, 82408, 3896, 3896, // #3667 + 3, 82424, 82424, 136, 136, // #3668 + 6, 82440, 82440, 3896, 3896, // #3669 + 3, 82456, 82456, 136, 136, // #3670 + 5, 82472, 82472, 3448, 3448, // #3671 + 5, 82480, 82480, 880, 880, // #3672 + 6, 82504, 82504, 1416, 1416, // #3673 + 5, 82512, 82512, 880, 880, // #3674 + 6, 82536, 82536, 3896, 3896, // #3675 + 3, 82552, 82552, 136, 136, // #3676 + 7, 82560, 82560, 1824, 1824, // #3677 + 7, 82584, 82584, 2280, 2280, // #3678 + 11, 82592, 82592, 3344, 3344, // #3679 + 3, 82608, 82608, 688, 688, // #3680 + 7, 82632, 82632, 3656, 3656, // #3681 + 9, 82696, 82696, 3832, 3832, // #3682 + 22, 82728, 82728, 3048, 3048, // #3683 + 5, 82752, 82752, 880, 880, // #3684 + 8, 82768, 82768, 1392, 1392, // #3685 + 7, 82792, 82792, 2280, 2280, // #3686 + 16, 82808, 82808, 2664, 2664, // #3687 + 7, 82840, 82840, 2280, 2280, // #3688 + 11, 82848, 82848, 3344, 3344, // #3689 + 3, 82864, 82864, 688, 688, // #3690 + 22, 82880, 82880, 576, 576, // #3691 + 3, 82912, 82912, 688, 688, // #3692 + 5, 82936, 82936, 3448, 3448, // #3693 + 5, 82944, 82944, 880, 880, // #3694 + 22, 82960, 82960, 576, 576, // #3695 + 3, 82992, 82992, 688, 688, // #3696 + 22, 83016, 83016, 3048, 3048, // #3697 + 5, 83040, 83040, 880, 880, // #3698 + 22, 83056, 83056, 576, 576, // #3699 + 3, 83088, 83088, 688, 688, // #3700 + 13, 83104, 83104, 2176, 2176, // #3701 + 7, 83128, 83128, 2280, 2280, // #3702 + 13, 83144, 83144, 840, 840, // #3703 + 3, 83168, 83168, 688, 688, // #3704 + 13, 83184, 83184, 2176, 2176, // #3705 + 7, 83208, 83208, 2280, 2280, // #3706 + 16, 83216, 83216, 256, 256, // #3707 + 3, 83256, 83256, 136, 136, // #3708 + 6, 83272, 83272, 3896, 3896, // #3709 + 3, 83288, 83288, 136, 136, // #3710 + 12, 83296, 83296, 192, 192, // #3711 + 3, 83320, 83320, 136, 136, // #3712 + 7, 83328, 83328, 2784, 2784, // #3713 + 5, 83344, 83344, 880, 880, // #3714 + 12, 83360, 83360, 192, 192, // #3715 + 3, 83384, 83384, 136, 136, // #3716 + 12, 83392, 83392, 192, 192, // #3717 + 3, 83416, 83416, 136, 136, // #3718 + 22, 83424, 83424, 576, 576, // #3719 + 3, 83456, 83456, 688, 688, // #3720 + 12, 83472, 83472, 2240, 2240, // #3721 + 7, 83496, 83496, 2280, 2280, // #3722 + 6, 83512, 83512, 3896, 3896, // #3723 + 3, 83528, 83528, 136, 136, // #3724 + 7, 83536, 83536, 2784, 2784, // #3725 + 5, 83552, 83552, 880, 880, // #3726 + 11, 83568, 83568, 3024, 3024, // #3727 + 10, 83592, 83592, 600, 600, // #3728 + 12, 83616, 83616, 2240, 2240, // #3729 + 7, 83640, 83640, 2280, 2280, // #3730 + 7, 83648, 83648, 2784, 2784, // #3731 + 5, 83664, 83664, 880, 880, // #3732 + 6, 83688, 83688, 3896, 3896, // #3733 + 3, 83704, 83704, 136, 136, // #3734 + 6, 83720, 83720, 3896, 3896, // #3735 + 3, 83736, 83736, 136, 136, // #3736 + 6, 83752, 83752, 3896, 3896, // #3737 + 3, 83768, 83768, 136, 136, // #3738 + 11, 83776, 83776, 2192, 2192, // #3739 + 8, 83800, 83800, 1912, 1912, // #3740 + 6, 83832, 83832, 3896, 3896, // #3741 + 3, 83848, 83848, 136, 136, // #3742 + 13, 83864, 83864, 840, 840, // #3743 + 3, 83888, 83888, 688, 688, // #3744 + 4, 83904, 83904, 2288, 2288, // #3745 + 7, 83928, 83928, 2280, 2280, // #3746 + 18, 83936, 83936, 528, 528, // #3747 + 5, 83976, 83976, 4008, 4008, // #3748 + 22, 83992, 83992, 3048, 3048, // #3749 + 5, 84016, 84016, 880, 880, // #3750 + 6, 84040, 84040, 3896, 3896, // #3751 + 3, 84056, 84056, 136, 136, // #3752 + 22, 84072, 84072, 3048, 3048, // #3753 + 5, 84096, 84096, 880, 880, // #3754 + 12, 84112, 84112, 192, 192, // #3755 + 3, 84136, 84136, 136, 136, // #3756 + 12, 84144, 84144, 192, 192, // #3757 + 3, 84168, 84168, 136, 136, // #3758 + 13, 84184, 84184, 840, 840, // #3759 + 3, 84208, 84208, 688, 688, // #3760 + 11, 84224, 84224, 2592, 2592, // #3761 + 7, 84248, 84248, 2280, 2280, // #3762 + 11, 84256, 84256, 2592, 2592, // #3763 + 7, 84280, 84280, 2280, 2280, // #3764 + 9, 84288, 84288, 2880, 2880, // #3765 + 5, 84304, 84304, 880, 880, // #3766 + 6, 84328, 84328, 3896, 3896, // #3767 + 3, 84344, 84344, 136, 136, // #3768 + 22, 84360, 84360, 3048, 3048, // #3769 + 5, 84384, 84384, 880, 880, // #3770 + 7, 84400, 84400, 2784, 2784, // #3771 + 5, 84416, 84416, 880, 880, // #3772 + 7, 84440, 84440, 3656, 3656, // #3773 + 9, 84488, 84488, 3832, 3832, // #3774 + 22, 84512, 84512, 576, 576, // #3775 + 3, 84544, 84544, 688, 688, // #3776 + 13, 84568, 84568, 840, 840, // #3777 + 3, 84592, 84592, 688, 688, // #3778 + 23, 84608, 84608, 2064, 2064, // #3779 + 8, 84648, 84648, 1912, 1912, // #3780 + 15, 84672, 84672, 3104, 3104, // #3781 + 7, 84688, 84688, 736, 736, // #3782 + 16, 84704, 84704, 256, 256, // #3783 + 3, 84744, 84744, 136, 136, // #3784 + 6, 84760, 84760, 3896, 3896, // #3785 + 3, 84776, 84776, 136, 136, // #3786 + 12, 84784, 84784, 192, 192, // #3787 + 3, 84808, 84808, 136, 136, // #3788 + 12, 84816, 84816, 192, 192, // #3789 + 3, 84840, 84840, 136, 136, // #3790 + 14, 84856, 84856, 1048, 1048, // #3791 + 3, 84888, 84888, 2456, 2456, // #3792 + 13, 84904, 84904, 840, 840, // #3793 + 3, 84928, 84928, 688, 688, // #3794 + 6, 84952, 84952, 3896, 3896, // #3795 + 3, 84968, 84968, 136, 136, // #3796 + 6, 84984, 84984, 3896, 3896, // #3797 + 3, 85000, 85000, 136, 136, // #3798 + 6, 85016, 85016, 3896, 3896, // #3799 + 3, 85032, 85032, 136, 136, // #3800 + 21, 85048, 85048, 1432, 1432, // #3801 + 7, 85080, 85080, 2280, 2280, // #3802 + 9, 85088, 85088, 1184, 1184, // #3803 + 7, 85112, 85112, 2280, 2280, // #3804 + 12, 85120, 85120, 192, 192, // #3805 + 3, 85144, 85144, 136, 136, // #3806 + 9, 85152, 85152, 1184, 1184, // #3807 + 7, 85176, 85176, 2280, 2280, // #3808 + 12, 85184, 85184, 192, 192, // #3809 + 3, 85208, 85208, 136, 136, // #3810 + 12, 85216, 85216, 192, 192, // #3811 + 3, 85240, 85240, 136, 136, // #3812 + 12, 85248, 85248, 192, 192, // #3813 + 3, 85272, 85272, 136, 136, // #3814 + 7, 85288, 85288, 3656, 3656, // #3815 + 9, 85320, 85320, 3832, 3832, // #3816 + 17, 85384, 85384, 888, 888, // #3817 + 7, 85416, 85416, 2280, 2280, // #3818 + 17, 85448, 85448, 888, 888, // #3819 + 7, 85480, 85480, 2280, 2280, // #3820 + 7, 85496, 85496, 3656, 3656, // #3821 + 9, 85512, 85512, 3832, 3832, // #3822 + 6, 85544, 85544, 3896, 3896, // #3823 + 3, 85560, 85560, 136, 136, // #3824 + 6, 85576, 85576, 3896, 3896, // #3825 + 3, 85592, 85592, 136, 136, // #3826 + 12, 85600, 85600, 192, 192, // #3827 + 3, 85624, 85624, 136, 136, // #3828 + 6, 85640, 85640, 3896, 3896, // #3829 + 3, 85656, 85656, 136, 136, // #3830 + 11, 85672, 85672, 1112, 1112, // #3831 + 8, 85704, 85704, 1912, 1912, // #3832 + 13, 85728, 85728, 2176, 2176, // #3833 + 7, 85752, 85752, 2280, 2280, // #3834 + 12, 85760, 85760, 192, 192, // #3835 + 3, 85784, 85784, 136, 136, // #3836 + 13, 85792, 85792, 2176, 2176, // #3837 + 7, 85816, 85816, 2280, 2280, // #3838 + 8, 85824, 85824, 1024, 1024, // #3839 + 10, 85848, 85848, 600, 600, // #3840 + 12, 85872, 85872, 192, 192, // #3841 + 3, 85896, 85896, 136, 136, // #3842 + 22, 85912, 85912, 3048, 3048, // #3843 + 5, 85936, 85936, 880, 880, // #3844 + 16, 85960, 85960, 4072, 4072, // #3845 + 8, 85992, 85992, 1912, 1912, // #3846 + 6, 86024, 86024, 1416, 1416, // #3847 + 5, 86032, 86032, 880, 880, // #3848 + 6, 86056, 86056, 1416, 1416, // #3849 + 5, 86064, 86064, 880, 880, // #3850 + 5, 86088, 86088, 456, 456, // #3851 + 4, 86096, 86096, 1792, 1792, // #3852 + 12, 86112, 86112, 192, 192, // #3853 + 3, 86136, 86136, 136, 136, // #3854 + 11, 86152, 86152, 2600, 2600, // #3855 + 7, 86184, 86184, 2280, 2280, // #3856 + 7, 86200, 86200, 952, 952, // #3857 + 3, 86216, 86216, 808, 808, // #3858 + 12, 86224, 86224, 192, 192, // #3859 + 3, 86248, 86248, 136, 136, // #3860 + 15, 86264, 86264, 1864, 1864, // #3861 + 8, 86296, 86296, 1912, 1912, // #3862 + 14, 86328, 86328, 1048, 1048, // #3863 + 3, 86360, 86360, 2456, 2456, // #3864 + 12, 86368, 86368, 672, 672, // #3865 + 7, 86392, 86392, 2280, 2280, // #3866 + 11, 86400, 86400, 3344, 3344, // #3867 + 3, 86416, 86416, 688, 688, // #3868 + 12, 86432, 86432, 672, 672, // #3869 + 7, 86456, 86456, 2280, 2280, // #3870 + 12, 86464, 86464, 192, 192, // #3871 + 3, 86488, 86488, 136, 136, // #3872 + 13, 86504, 86504, 840, 840, // #3873 + 3, 86528, 86528, 688, 688, // #3874 + 7, 86544, 86544, 2784, 2784, // #3875 + 5, 86560, 86560, 880, 880, // #3876 + 12, 86584, 86584, 1688, 1688, // #3877 + 5, 86616, 86616, 4008, 4008, // #3878 + 13, 86632, 86632, 840, 840, // #3879 + 3, 86656, 86656, 688, 688, // #3880 + 12, 86672, 86672, 1008, 1008, // #3881 + 5, 86696, 86696, 4008, 4008, // #3882 + 11, 86704, 86704, 3344, 3344, // #3883 + 3, 86720, 86720, 688, 688, // #3884 + 12, 86736, 86736, 192, 192, // #3885 + 3, 86760, 86760, 136, 136, // #3886 + 17, 86776, 86776, 3160, 3160, // #3887 + 5, 86808, 86808, 4008, 4008, // #3888 + 9, 86816, 86816, 2880, 2880, // #3889 + 5, 86832, 86832, 880, 880, // #3890 + 13, 86856, 86856, 840, 840, // #3891 + 3, 86880, 86880, 688, 688, // #3892 + 5, 86904, 86904, 3448, 3448, // #3893 + 5, 86912, 86912, 880, 880, // #3894 + 13, 86936, 86936, 840, 840, // #3895 + 3, 86960, 86960, 688, 688, // #3896 + 22, 86976, 86976, 576, 576, // #3897 + 3, 87008, 87008, 688, 688, // #3898 + 9, 87024, 87024, 2880, 2880, // #3899 + 5, 87040, 87040, 880, 880, // #3900 + 12, 87056, 87056, 192, 192, // #3901 + 3, 87080, 87080, 136, 136, // #3902 + 5, 87096, 87096, 3448, 3448, // #3903 + 5, 87104, 87104, 880, 880, // #3904 + 9, 87120, 87120, 2880, 2880, // #3905 + 5, 87136, 87136, 880, 880, // #3906 + 13, 87152, 87152, 1216, 1216, // #3907 + 3, 87176, 87176, 2456, 2456, // #3908 + 6, 87192, 87192, 3896, 3896, // #3909 + 3, 87208, 87208, 136, 136, // #3910 + 22, 87216, 87216, 1216, 1216, // #3911 + 10, 87256, 87256, 600, 600, // #3912 + 6, 87288, 87288, 1416, 1416, // #3913 + 5, 87296, 87296, 880, 880, // #3914 + 11, 87312, 87312, 3344, 3344, // #3915 + 3, 87328, 87328, 688, 688, // #3916 + 6, 87352, 87352, 3896, 3896, // #3917 + 3, 87368, 87368, 136, 136, // #3918 + 6, 87384, 87384, 3896, 3896, // #3919 + 3, 87400, 87400, 136, 136, // #3920 + 9, 87408, 87408, 1184, 1184, // #3921 + 7, 87432, 87432, 2280, 2280, // #3922 + 12, 87440, 87440, 192, 192, // #3923 + 3, 87464, 87464, 136, 136, // #3924 + 9, 87472, 87472, 2880, 2880, // #3925 + 5, 87488, 87488, 880, 880, // #3926 + 22, 87512, 87512, 3048, 3048, // #3927 + 5, 87536, 87536, 880, 880, // #3928 + 9, 87552, 87552, 1184, 1184, // #3929 + 7, 87576, 87576, 2280, 2280, // #3930 + 11, 87584, 87584, 3344, 3344, // #3931 + 3, 87600, 87600, 688, 688, // #3932 + 6, 87624, 87624, 1416, 1416, // #3933 + 5, 87632, 87632, 880, 880, // #3934 + 13, 87656, 87656, 840, 840, // #3935 + 3, 87680, 87680, 688, 688, // #3936 + 22, 87704, 87704, 3048, 3048, // #3937 + 5, 87728, 87728, 880, 880, // #3938 + 22, 87752, 87752, 3544, 3544, // #3939 + 7, 87784, 87784, 2280, 2280, // #3940 + 11, 87792, 87792, 2592, 2592, // #3941 + 7, 87816, 87816, 2280, 2280, // #3942 + 6, 87832, 87832, 3896, 3896, // #3943 + 3, 87848, 87848, 136, 136, // #3944 + 22, 87864, 87864, 3048, 3048, // #3945 + 5, 87888, 87888, 880, 880, // #3946 + 11, 87904, 87904, 2592, 2592, // #3947 + 7, 87928, 87928, 2280, 2280, // #3948 + 9, 87936, 87936, 2880, 2880, // #3949 + 5, 87952, 87952, 880, 880, // #3950 + 13, 87976, 87976, 840, 840, // #3951 + 3, 88000, 88000, 688, 688, // #3952 + 22, 88016, 88016, 576, 576, // #3953 + 3, 88048, 88048, 688, 688, // #3954 + 5, 88072, 88072, 3448, 3448, // #3955 + 5, 88080, 88080, 880, 880, // #3956 + 12, 88096, 88096, 192, 192, // #3957 + 3, 88120, 88120, 136, 136, // #3958 + 6, 88136, 88136, 952, 952, // #3959 + 7, 88152, 88152, 2280, 2280, // #3960 + 13, 88168, 88168, 840, 840, // #3961 + 3, 88192, 88192, 688, 688, // #3962 + 12, 88208, 88208, 192, 192, // #3963 + 3, 88232, 88232, 136, 136, // #3964 + 7, 88240, 88240, 2784, 2784, // #3965 + 5, 88256, 88256, 880, 880, // #3966 + 7, 88272, 88272, 2784, 2784, // #3967 + 5, 88288, 88288, 880, 880, // #3968 + 5, 88312, 88312, 3448, 3448, // #3969 + 5, 88320, 88320, 880, 880, // #3970 + 13, 88344, 88344, 840, 840, // #3971 + 3, 88368, 88368, 688, 688, // #3972 + 12, 88384, 88384, 192, 192, // #3973 + 3, 88408, 88408, 136, 136, // #3974 + 11, 88424, 88424, 296, 296, // #3975 + 5, 88456, 88456, 4008, 4008, // #3976 + 19, 88464, 88464, 2112, 2112, // #3977 + 8, 88504, 88504, 1912, 1912, // #3978 + 13, 88536, 88536, 840, 840, // #3979 + 3, 88560, 88560, 688, 688, // #3980 + 16, 88584, 88584, 2664, 2664, // #3981 + 7, 88616, 88616, 2280, 2280, // #3982 + 12, 88624, 88624, 192, 192, // #3983 + 3, 88648, 88648, 136, 136, // #3984 + 13, 88664, 88664, 840, 840, // #3985 + 3, 88688, 88688, 688, 688, // #3986 + 7, 88712, 88712, 312, 312, // #3987 + 8, 88728, 88728, 1912, 1912, // #3988 + 26, 88776, 88776, 2920, 2920, // #3989 + 4, 88824, 88824, 2104, 2104, // #3990 + 13, 88840, 88840, 840, 840, // #3991 + 3, 88864, 88864, 688, 688, // #3992 + 5, 88888, 88888, 456, 456, // #3993 + 4, 88896, 88896, 1792, 1792, // #3994 + 8, 88912, 88912, 1984, 1984, // #3995 + 8, 88936, 88936, 1912, 1912, // #3996 + 6, 88968, 88968, 1416, 1416, // #3997 + 5, 88976, 88976, 880, 880, // #3998 + 22, 88992, 88992, 576, 576, // #3999 + 3, 89024, 89024, 688, 688, // #4000 + 20, 89040, 89040, 3328, 3328, // #4001 + 3, 89080, 89080, 2456, 2456, // #4002 + 16, 89088, 89088, 256, 256, // #4003 + 3, 89128, 89128, 136, 136, // #4004 + 12, 89136, 89136, 192, 192, // #4005 + 3, 89160, 89160, 136, 136, // #4006 + 13, 89176, 89176, 840, 840, // #4007 + 3, 89200, 89200, 688, 688, // #4008 + 6, 89224, 89224, 3896, 3896, // #4009 + 3, 89240, 89240, 136, 136, // #4010 + 27, 89248, 89248, 2256, 2256, // #4011 + 4, 89288, 89288, 2104, 2104, // #4012 + 12, 89296, 89296, 192, 192, // #4013 + 3, 89320, 89320, 136, 136, // #4014 + 22, 89328, 89328, 576, 576, // #4015 + 3, 89360, 89360, 688, 688, // #4016 + 11, 89416, 89416, 3128, 3128, // #4017 + 8, 89448, 89448, 1912, 1912, // #4018 + 7, 89472, 89472, 2784, 2784, // #4019 + 5, 89488, 89488, 880, 880, // #4020 + 16, 89504, 89504, 3424, 3424, // #4021 + 7, 89544, 89544, 2280, 2280, // #4022 + 13, 89560, 89560, 840, 840, // #4023 + 3, 89584, 89584, 688, 688, // #4024 + 7, 89600, 89600, 2784, 2784, // #4025 + 5, 89616, 89616, 880, 880, // #4026 + 12, 89640, 89640, 1480, 1480, // #4027 + 3, 89672, 89672, 2456, 2456, // #4028 + 11, 89680, 89680, 3344, 3344, // #4029 + 3, 89696, 89696, 688, 688, // #4030 + 16, 89712, 89712, 3424, 3424, // #4031 + 7, 89752, 89752, 2280, 2280, // #4032 + 12, 89760, 89760, 192, 192, // #4033 + 3, 89784, 89784, 136, 136, // #4034 + 5, 89800, 89800, 3448, 3448, // #4035 + 5, 89808, 89808, 880, 880, // #4036 + 5, 89832, 89832, 3448, 3448, // #4037 + 5, 89840, 89840, 880, 880, // #4038 + 5, 89864, 89864, 3448, 3448, // #4039 + 5, 89872, 89872, 880, 880, // #4040 + 6, 89896, 89896, 3896, 3896, // #4041 + 3, 89912, 89912, 136, 136, // #4042 + 5, 89928, 89928, 3448, 3448, // #4043 + 5, 89936, 89936, 880, 880, // #4044 + 7, 89952, 89952, 2784, 2784, // #4045 + 5, 89968, 89968, 880, 880, // #4046 + 9, 89984, 89984, 2880, 2880, // #4047 + 5, 90000, 90000, 880, 880, // #4048 + 6, 90024, 90024, 1416, 1416, // #4049 + 5, 90032, 90032, 880, 880, // #4050 + 11, 90056, 90056, 2600, 2600, // #4051 + 7, 90088, 90088, 2280, 2280, // #4052 + 20, 90096, 90096, 3328, 3328, // #4053 + 3, 90136, 90136, 2456, 2456, // #4054 + 16, 90144, 90144, 256, 256, // #4055 + 3, 90184, 90184, 136, 136, // #4056 + 5, 90200, 90200, 3448, 3448, // #4057 + 5, 90208, 90208, 880, 880, // #4058 + 5, 90232, 90232, 3448, 3448, // #4059 + 5, 90240, 90240, 880, 880, // #4060 + 16, 90264, 90264, 3480, 3480, // #4061 + 5, 90296, 90296, 4008, 4008, // #4062 + 5, 90312, 90312, 3448, 3448, // #4063 + 5, 90320, 90320, 880, 880, // #4064 + 12, 90336, 90336, 192, 192, // #4065 + 3, 90360, 90360, 136, 136, // #4066 + 16, 90368, 90368, 256, 256, // #4067 + 3, 90408, 90408, 136, 136, // #4068 + 22, 90424, 90424, 3048, 3048, // #4069 + 5, 90448, 90448, 880, 880, // #4070 + 14, 90472, 90472, 1048, 1048, // #4071 + 3, 90504, 90504, 2456, 2456, // #4072 + 13, 90512, 90512, 1216, 1216, // #4073 + 3, 90536, 90536, 2456, 2456, // #4074 + 5, 90552, 90552, 3448, 3448, // #4075 + 5, 90560, 90560, 880, 880, // #4076 + 13, 90584, 90584, 840, 840, // #4077 + 3, 90608, 90608, 688, 688, // #4078 + 16, 90632, 90632, 264, 264, // #4079 + 7, 90664, 90664, 2280, 2280, // #4080 + 9, 90672, 90672, 2880, 2880, // #4081 + 5, 90688, 90688, 880, 880, // #4082 + 19, 90704, 90704, 2112, 2112, // #4083 + 8, 90744, 90744, 1912, 1912, // #4084 + 16, 90776, 90776, 264, 264, // #4085 + 7, 90808, 90808, 2280, 2280, // #4086 + 14, 90824, 90824, 1048, 1048, // #4087 + 3, 90856, 90856, 2456, 2456, // #4088 + 9, 90864, 90864, 2880, 2880, // #4089 + 5, 90880, 90880, 880, 880, // #4090 + 13, 90896, 90896, 1216, 1216, // #4091 + 3, 90920, 90920, 2456, 2456, // #4092 + 22, 90928, 90928, 576, 576, // #4093 + 3, 90960, 90960, 688, 688, // #4094 + 9, 90976, 90976, 1552, 1552, // #4095 + 9, 90992, 90992, 2016, 2016, // #4096 + 22, 91008, 91008, 576, 576, // #4097 + 3, 91040, 91040, 688, 688, // #4098 + 12, 91056, 91056, 192, 192, // #4099 + 3, 91080, 91080, 136, 136, // #4100 + 12, 91088, 91088, 192, 192, // #4101 + 3, 91112, 91112, 136, 136, // #4102 + 27, 91128, 91128, 3736, 3736, // #4103 + 7, 91176, 91176, 2280, 2280, // #4104 + 11, 91184, 91184, 3344, 3344, // #4105 + 3, 91200, 91200, 688, 688, // #4106 + 9, 91216, 91216, 2880, 2880, // #4107 + 5, 91232, 91232, 880, 880, // #4108 + 10, 91248, 91248, 1408, 1408, // #4109 + 10, 91272, 91272, 600, 600, // #4110 + 13, 91304, 91304, 840, 840, // #4111 + 3, 91328, 91328, 688, 688, // #4112 + 22, 91352, 91352, 3048, 3048, // #4113 + 5, 91376, 91376, 880, 880, // #4114 + 9, 91392, 91392, 2880, 2880, // #4115 + 5, 91408, 91408, 880, 880, // #4116 + 13, 91432, 91432, 840, 840, // #4117 + 3, 91456, 91456, 688, 688, // #4118 + 22, 91480, 91480, 3048, 3048, // #4119 + 5, 91504, 91504, 880, 880, // #4120 + 12, 91528, 91528, 1480, 1480, // #4121 + 3, 91560, 91560, 2456, 2456, // #4122 + 9, 91568, 91568, 2880, 2880, // #4123 + 5, 91584, 91584, 880, 880, // #4124 + 22, 91600, 91600, 576, 576, // #4125 + 3, 91632, 91632, 688, 688, // #4126 + 26, 91648, 91648, 1120, 1120, // #4127 + 8, 91688, 91688, 1912, 1912, // #4128 + 13, 91712, 91712, 2176, 2176, // #4129 + 7, 91736, 91736, 2280, 2280, // #4130 + 6, 91752, 91752, 3896, 3896, // #4131 + 3, 91768, 91768, 136, 136, // #4132 + 13, 91776, 91776, 2176, 2176, // #4133 + 7, 91800, 91800, 2280, 2280, // #4134 + 6, 91816, 91816, 1416, 1416, // #4135 + 5, 91824, 91824, 880, 880, // #4136 + 6, 91848, 91848, 1416, 1416, // #4137 + 5, 91856, 91856, 880, 880, // #4138 + 13, 91880, 91880, 840, 840, // #4139 + 3, 91904, 91904, 688, 688, // #4140 + 10, 91920, 91920, 832, 832, // #4141 + 8, 91944, 91944, 1912, 1912, // #4142 + 6, 91968, 91968, 2736, 2736, // #4143 + 10, 91992, 91992, 600, 600, // #4144 + 13, 92024, 92024, 840, 840, // #4145 + 3, 92048, 92048, 688, 688, // #4146 + 22, 92072, 92072, 3048, 3048, // #4147 + 5, 92096, 92096, 880, 880, // #4148 + 7, 92120, 92120, 3656, 3656, // #4149 + 9, 92168, 92168, 3832, 3832, // #4150 + 12, 92192, 92192, 384, 384, // #4151 + 7, 92216, 92216, 2280, 2280, // #4152 + 12, 92224, 92224, 384, 384, // #4153 + 7, 92248, 92248, 2280, 2280, // #4154 + 5, 92264, 92264, 456, 456, // #4155 + 4, 92272, 92272, 1792, 1792, // #4156 + 12, 92288, 92288, 192, 192, // #4157 + 3, 92312, 92312, 136, 136, // #4158 + 12, 92320, 92320, 192, 192, // #4159 + 3, 92344, 92344, 136, 136, // #4160 + 13, 92352, 92352, 1216, 1216, // #4161 + 3, 92376, 92376, 2456, 2456, // #4162 + 12, 92384, 92384, 192, 192, // #4163 + 3, 92408, 92408, 136, 136, // #4164 + 7, 92416, 92416, 2784, 2784, // #4165 + 5, 92432, 92432, 880, 880, // #4166 + 13, 92456, 92456, 840, 840, // #4167 + 3, 92480, 92480, 688, 688, // #4168 + 7, 92496, 92496, 2784, 2784, // #4169 + 5, 92512, 92512, 880, 880, // #4170 + 11, 92528, 92528, 3344, 3344, // #4171 + 3, 92544, 92544, 688, 688, // #4172 + 14, 92568, 92568, 1048, 1048, // #4173 + 3, 92600, 92600, 2456, 2456, // #4174 + 5, 92616, 92616, 3448, 3448, // #4175 + 5, 92624, 92624, 880, 880, // #4176 + 7, 92640, 92640, 2784, 2784, // #4177 + 5, 92656, 92656, 880, 880, // #4178 + 7, 92672, 92672, 2784, 2784, // #4179 + 5, 92688, 92688, 880, 880, // #4180 + 10, 92704, 92704, 832, 832, // #4181 + 8, 92728, 92728, 1912, 1912, // #4182 + 22, 92760, 92760, 3048, 3048, // #4183 + 5, 92784, 92784, 880, 880, // #4184 + 6, 92808, 92808, 3896, 3896, // #4185 + 3, 92824, 92824, 136, 136, // #4186 + 6, 92840, 92840, 3896, 3896, // #4187 + 3, 92856, 92856, 136, 136, // #4188 + 12, 92864, 92864, 192, 192, // #4189 + 3, 92888, 92888, 136, 136, // #4190 + 7, 92896, 92896, 2784, 2784, // #4191 + 5, 92912, 92912, 880, 880, // #4192 + 9, 92928, 92928, 2880, 2880, // #4193 + 5, 92944, 92944, 880, 880, // #4194 + 8, 92960, 92960, 1984, 1984, // #4195 + 8, 92984, 92984, 1912, 1912, // #4196 + 19, 93008, 93008, 1104, 1104, // #4197 + 3, 93040, 93040, 688, 688, // #4198 + 9, 93056, 93056, 2880, 2880, // #4199 + 5, 93072, 93072, 880, 880, // #4200 + 7, 93088, 93088, 2784, 2784, // #4201 + 5, 93104, 93104, 880, 880, // #4202 + 22, 93120, 93120, 576, 576, // #4203 + 3, 93152, 93152, 688, 688, // #4204 + 11, 93168, 93168, 2592, 2592, // #4205 + 7, 93192, 93192, 2280, 2280, // #4206 + 11, 93200, 93200, 2592, 2592, // #4207 + 7, 93224, 93224, 2280, 2280, // #4208 + 12, 93232, 93232, 192, 192, // #4209 + 3, 93256, 93256, 136, 136, // #4210 + 13, 93272, 93272, 840, 840, // #4211 + 3, 93296, 93296, 688, 688, // #4212 + 22, 93320, 93320, 2232, 2232, // #4213 + 7, 93352, 93352, 2280, 2280, // #4214 + 7, 93360, 93360, 2784, 2784, // #4215 + 5, 93376, 93376, 880, 880, // #4216 + 13, 93400, 93400, 840, 840, // #4217 + 3, 93424, 93424, 688, 688, // #4218 + 9, 93440, 93440, 2880, 2880, // #4219 + 5, 93456, 93456, 880, 880, // #4220 + 12, 93472, 93472, 672, 672, // #4221 + 7, 93496, 93496, 2280, 2280, // #4222 + 6, 93512, 93512, 3896, 3896, // #4223 + 3, 93528, 93528, 136, 136, // #4224 + 7, 93536, 93536, 2784, 2784, // #4225 + 5, 93552, 93552, 880, 880, // #4226 + 20, 93568, 93568, 3328, 3328, // #4227 + 3, 93608, 93608, 2456, 2456, // #4228 + 11, 93616, 93616, 3344, 3344, // #4229 + 3, 93632, 93632, 688, 688, // #4230 + 9, 93648, 93648, 1184, 1184, // #4231 + 7, 93672, 93672, 2280, 2280, // #4232 + 12, 93680, 93680, 672, 672, // #4233 + 7, 93704, 93704, 2280, 2280, // #4234 + 18, 93712, 93712, 2704, 2704, // #4235 + 3, 93752, 93752, 2456, 2456, // #4236 + 8, 93760, 93760, 3712, 3712, // #4237 + 7, 93784, 93784, 2280, 2280, // #4238 + 9, 93792, 93792, 1184, 1184, // #4239 + 7, 93816, 93816, 2280, 2280, // #4240 + 13, 93832, 93832, 2520, 2520, // #4241 + 8, 93864, 93864, 1912, 1912, // #4242 + 7, 93888, 93888, 2784, 2784, // #4243 + 5, 93904, 93904, 880, 880, // #4244 + 7, 93928, 93928, 1672, 1672, // #4245 + 7, 93944, 93944, 2280, 2280, // #4246 + 13, 93960, 93960, 840, 840, // #4247 + 3, 93984, 93984, 688, 688, // #4248 + 16, 94000, 94000, 256, 256, // #4249 + 3, 94040, 94040, 136, 136, // #4250 + 6, 94056, 94056, 3896, 3896, // #4251 + 3, 94072, 94072, 136, 136, // #4252 + 10, 94080, 94080, 3712, 3712, // #4253 + 7, 94104, 94104, 2280, 2280, // #4254 + 10, 94112, 94112, 3712, 3712, // #4255 + 7, 94136, 94136, 2280, 2280, // #4256 + 8, 94144, 94144, 272, 272, // #4257 + 7, 94168, 94168, 2280, 2280, // #4258 + 18, 94176, 94176, 2704, 2704, // #4259 + 3, 94216, 94216, 2456, 2456, // #4260 + 8, 94232, 94232, 3720, 3720, // #4261 + 7, 94264, 94264, 2280, 2280, // #4262 + 6, 94280, 94280, 3896, 3896, // #4263 + 3, 94296, 94296, 136, 136, // #4264 + 6, 94312, 94312, 3896, 3896, // #4265 + 3, 94328, 94328, 136, 136, // #4266 + 26, 94344, 94344, 1416, 1416, // #4267 + 4, 94392, 94392, 2104, 2104, // #4268 + 13, 94408, 94408, 840, 840, // #4269 + 3, 94432, 94432, 688, 688, // #4270 + 7, 94448, 94448, 2784, 2784, // #4271 + 5, 94464, 94464, 880, 880, // #4272 + 9, 94480, 94480, 2880, 2880, // #4273 + 5, 94496, 94496, 880, 880, // #4274 + 13, 94512, 94512, 1216, 1216, // #4275 + 3, 94536, 94536, 2456, 2456, // #4276 + 7, 94552, 94552, 3656, 3656, // #4277 + 9, 94600, 94600, 3832, 3832, // #4278 + 8, 94632, 94632, 4024, 4024, // #4279 + 10, 94664, 94664, 600, 600, // #4280 + 11, 94688, 94688, 2592, 2592, // #4281 + 7, 94712, 94712, 2280, 2280, // #4282 + 5, 94728, 94728, 3448, 3448, // #4283 + 5, 94736, 94736, 880, 880, // #4284 + 11, 94752, 94752, 2592, 2592, // #4285 + 7, 94776, 94776, 2280, 2280, // #4286 + 11, 94784, 94784, 2592, 2592, // #4287 + 7, 94808, 94808, 2280, 2280, // #4288 + 22, 94816, 94816, 576, 576, // #4289 + 3, 94848, 94848, 688, 688, // #4290 + 11, 94864, 94864, 2592, 2592, // #4291 + 7, 94888, 94888, 2280, 2280, // #4292 + 12, 94896, 94896, 192, 192, // #4293 + 3, 94920, 94920, 136, 136, // #4294 + 22, 94936, 94936, 3048, 3048, // #4295 + 5, 94960, 94960, 880, 880, // #4296 + 5, 94984, 94984, 3448, 3448, // #4297 + 5, 94992, 94992, 880, 880, // #4298 + 8, 95008, 95008, 1872, 1872, // #4299 + 10, 95032, 95032, 600, 600, // #4300 + 7, 95056, 95056, 2784, 2784, // #4301 + 5, 95072, 95072, 880, 880, // #4302 + 7, 95088, 95088, 2784, 2784, // #4303 + 5, 95104, 95104, 880, 880, // #4304 + 7, 95120, 95120, 2784, 2784, // #4305 + 5, 95136, 95136, 880, 880, // #4306 + 5, 95160, 95160, 3448, 3448, // #4307 + 5, 95168, 95168, 880, 880, // #4308 + 12, 95184, 95184, 672, 672, // #4309 + 7, 95208, 95208, 2280, 2280, // #4310 + 11, 95216, 95216, 3344, 3344, // #4311 + 3, 95232, 95232, 688, 688, // #4312 + 12, 95248, 95248, 672, 672, // #4313 + 7, 95272, 95272, 2280, 2280, // #4314 + 6, 95288, 95288, 1416, 1416, // #4315 + 5, 95296, 95296, 880, 880, // #4316 + 7, 95312, 95312, 2784, 2784, // #4317 + 5, 95328, 95328, 880, 880, // #4318 + 9, 95344, 95344, 2880, 2880, // #4319 + 5, 95360, 95360, 880, 880, // #4320 + 6, 95384, 95384, 1416, 1416, // #4321 + 5, 95392, 95392, 880, 880, // #4322 + 7, 95408, 95408, 2784, 2784, // #4323 + 5, 95424, 95424, 880, 880, // #4324 + 7, 95440, 95440, 2784, 2784, // #4325 + 5, 95456, 95456, 880, 880, // #4326 + 7, 95472, 95472, 2784, 2784, // #4327 + 5, 95488, 95488, 880, 880, // #4328 + 12, 95512, 95512, 3528, 3528, // #4329 + 7, 95544, 95544, 2280, 2280, // #4330 + 7, 95552, 95552, 2784, 2784, // #4331 + 5, 95568, 95568, 880, 880, // #4332 + 13, 95584, 95584, 1216, 1216, // #4333 + 3, 95608, 95608, 2456, 2456, // #4334 + 11, 95616, 95616, 2592, 2592, // #4335 + 7, 95640, 95640, 2280, 2280, // #4336 + 11, 95648, 95648, 2592, 2592, // #4337 + 7, 95672, 95672, 2280, 2280, // #4338 + 13, 95688, 95688, 840, 840, // #4339 + 3, 95712, 95712, 688, 688, // #4340 + 5, 95736, 95736, 3448, 3448, // #4341 + 5, 95744, 95744, 880, 880, // #4342 + 7, 95760, 95760, 2784, 2784, // #4343 + 5, 95776, 95776, 880, 880, // #4344 + 9, 95792, 95792, 2880, 2880, // #4345 + 5, 95808, 95808, 880, 880, // #4346 + 10, 95824, 95824, 832, 832, // #4347 + 8, 95848, 95848, 1912, 1912, // #4348 + 7, 95872, 95872, 2992, 2992, // #4349 + 7, 95896, 95896, 2280, 2280, // #4350 + 12, 95904, 95904, 672, 672, // #4351 + 7, 95928, 95928, 2280, 2280, // #4352 + 7, 95936, 95936, 2784, 2784, // #4353 + 5, 95952, 95952, 880, 880, // #4354 + 12, 95968, 95968, 672, 672, // #4355 + 7, 95992, 95992, 2280, 2280, // #4356 + 13, 96008, 96008, 840, 840, // #4357 + 3, 96032, 96032, 688, 688, // #4358 + 7, 96048, 96048, 2784, 2784, // #4359 + 5, 96064, 96064, 880, 880, // #4360 + 13, 96080, 96080, 3168, 3168, // #4361 + 7, 96104, 96104, 2280, 2280, // #4362 + 13, 96112, 96112, 3168, 3168, // #4363 + 7, 96136, 96136, 2280, 2280, // #4364 + 10, 96144, 96144, 3712, 3712, // #4365 + 7, 96168, 96168, 2280, 2280, // #4366 + 10, 96176, 96176, 2960, 2960, // #4367 + 5, 96200, 96200, 4008, 4008, // #4368 + 10, 96208, 96208, 3712, 3712, // #4369 + 7, 96232, 96232, 2280, 2280, // #4370 + 16, 96248, 96248, 2664, 2664, // #4371 + 7, 96280, 96280, 2280, 2280, // #4372 + 13, 96296, 96296, 840, 840, // #4373 + 3, 96320, 96320, 688, 688, // #4374 + 5, 96344, 96344, 456, 456, // #4375 + 4, 96352, 96352, 1792, 1792, // #4376 + 13, 96368, 96368, 1216, 1216, // #4377 + 3, 96392, 96392, 2456, 2456, // #4378 + 17, 96408, 96408, 3864, 3864, // #4379 + 5, 96440, 96440, 4008, 4008, // #4380 + 10, 96456, 96456, 808, 808, // #4381 + 5, 96488, 96488, 4008, 4008, // #4382 + 13, 96504, 96504, 2584, 2584, // #4383 + 3, 96536, 96536, 2456, 2456, // #4384 + 6, 96552, 96552, 1416, 1416, // #4385 + 5, 96560, 96560, 880, 880, // #4386 + 20, 96576, 96576, 3328, 3328, // #4387 + 3, 96616, 96616, 2456, 2456, // #4388 + 5, 96632, 96632, 456, 456, // #4389 + 4, 96640, 96640, 1792, 1792, // #4390 + 11, 96656, 96656, 3344, 3344, // #4391 + 3, 96672, 96672, 688, 688, // #4392 + 5, 96696, 96696, 3448, 3448, // #4393 + 5, 96704, 96704, 880, 880, // #4394 + 5, 96728, 96728, 3448, 3448, // #4395 + 5, 96736, 96736, 880, 880, // #4396 + 5, 96760, 96760, 456, 456, // #4397 + 4, 96768, 96768, 1792, 1792, // #4398 + 5, 96792, 96792, 3448, 3448, // #4399 + 5, 96800, 96800, 880, 880, // #4400 + 9, 96816, 96816, 2880, 2880, // #4401 + 5, 96832, 96832, 880, 880, // #4402 + 14, 96856, 96856, 1608, 1608, // #4403 + 8, 96888, 96888, 1912, 1912, // #4404 + 13, 96920, 96920, 2584, 2584, // #4405 + 3, 96952, 96952, 2456, 2456, // #4406 + 9, 96960, 96960, 1184, 1184, // #4407 + 7, 96984, 96984, 2280, 2280, // #4408 + 6, 97000, 97000, 1416, 1416, // #4409 + 5, 97008, 97008, 880, 880, // #4410 + 9, 97024, 97024, 1184, 1184, // #4411 + 7, 97048, 97048, 2280, 2280, // #4412 + 13, 97064, 97064, 840, 840, // #4413 + 3, 97088, 97088, 688, 688, // #4414 + 9, 97104, 97104, 2880, 2880, // #4415 + 5, 97120, 97120, 880, 880, // #4416 + 9, 97136, 97136, 2880, 2880, // #4417 + 5, 97152, 97152, 880, 880, // #4418 + 13, 97176, 97176, 840, 840, // #4419 + 3, 97200, 97200, 688, 688, // #4420 + 9, 97216, 97216, 2880, 2880, // #4421 + 5, 97232, 97232, 880, 880, // #4422 + 13, 97256, 97256, 840, 840, // #4423 + 3, 97280, 97280, 688, 688, // #4424 + 6, 97304, 97304, 1416, 1416, // #4425 + 5, 97312, 97312, 880, 880, // #4426 + 7, 97328, 97328, 2784, 2784, // #4427 + 5, 97344, 97344, 880, 880, // #4428 + 18, 97360, 97360, 2704, 2704, // #4429 + 3, 97400, 97400, 2456, 2456, // #4430 + 7, 97408, 97408, 2784, 2784, // #4431 + 5, 97424, 97424, 880, 880, // #4432 + 7, 97440, 97440, 2784, 2784, // #4433 + 5, 97456, 97456, 880, 880, // #4434 + 6, 97472, 97472, 2944, 2944, // #4435 + 7, 97496, 97496, 2280, 2280, // #4436 + 9, 97504, 97504, 2880, 2880, // #4437 + 5, 97520, 97520, 880, 880, // #4438 + 10, 97536, 97536, 3712, 3712, // #4439 + 7, 97560, 97560, 2280, 2280, // #4440 + 10, 97568, 97568, 3712, 3712, // #4441 + 7, 97592, 97592, 2280, 2280, // #4442 + 13, 97608, 97608, 840, 840, // #4443 + 3, 97632, 97632, 688, 688, // #4444 + 9, 97648, 97648, 2880, 2880, // #4445 + 5, 97664, 97664, 880, 880, // #4446 + 7, 97680, 97680, 2784, 2784, // #4447 + 5, 97696, 97696, 880, 880, // #4448 + 22, 97712, 97712, 576, 576, // #4449 + 3, 97744, 97744, 688, 688, // #4450 + 9, 97760, 97760, 1184, 1184, // #4451 + 7, 97784, 97784, 2280, 2280, // #4452 + 11, 97792, 97792, 3344, 3344, // #4453 + 3, 97808, 97808, 688, 688, // #4454 + 13, 97824, 97824, 1216, 1216, // #4455 + 3, 97848, 97848, 2456, 2456, // #4456 + 9, 97856, 97856, 1184, 1184, // #4457 + 7, 97880, 97880, 2280, 2280, // #4458 + 9, 97888, 97888, 2880, 2880, // #4459 + 5, 97904, 97904, 880, 880, // #4460 + 16, 97928, 97928, 4072, 4072, // #4461 + 8, 97960, 97960, 1912, 1912, // #4462 + 11, 97984, 97984, 3344, 3344, // #4463 + 3, 98000, 98000, 688, 688, // #4464 + 12, 98024, 98024, 1480, 1480, // #4465 + 3, 98056, 98056, 2456, 2456, // #4466 + 6, 98072, 98072, 1416, 1416, // #4467 + 5, 98080, 98080, 880, 880, // #4468 + 4, 98104, 98104, 2328, 2328, // #4469 + 7, 98120, 98120, 2280, 2280, // #4470 + 22, 98128, 98128, 576, 576, // #4471 + 3, 98160, 98160, 688, 688, // #4472 + 22, 98176, 98176, 576, 576, // #4473 + 3, 98208, 98208, 688, 688, // #4474 + 6, 98232, 98232, 3896, 3896, // #4475 + 3, 98248, 98248, 136, 136, // #4476 + 6, 98264, 98264, 1416, 1416, // #4477 + 5, 98272, 98272, 880, 880, // #4478 + 9, 98288, 98288, 2880, 2880, // #4479 + 5, 98304, 98304, 880, 880, // #4480 + 22, 98328, 98328, 3048, 3048, // #4481 + 5, 98352, 98352, 880, 880, // #4482 + 7, 98376, 98376, 3656, 3656, // #4483 + 9, 98440, 98440, 3832, 3832, // #4484 + 12, 98472, 98472, 1480, 1480, // #4485 + 3, 98504, 98504, 2456, 2456, // #4486 + 11, 98512, 98512, 3344, 3344, // #4487 + 3, 98528, 98528, 688, 688, // #4488 + 6, 98552, 98552, 3896, 3896, // #4489 + 3, 98568, 98568, 136, 136, // #4490 + 5, 98584, 98584, 456, 456, // #4491 + 4, 98592, 98592, 1792, 1792, // #4492 + 22, 98616, 98616, 3048, 3048, // #4493 + 5, 98640, 98640, 880, 880, // #4494 + 13, 98664, 98664, 840, 840, // #4495 + 3, 98688, 98688, 688, 688, // #4496 + 22, 98712, 98712, 3048, 3048, // #4497 + 5, 98736, 98736, 880, 880, // #4498 + 22, 98760, 98760, 3048, 3048, // #4499 + 5, 98784, 98784, 880, 880, // #4500 + 22, 98800, 98800, 576, 576, // #4501 + 3, 98832, 98832, 688, 688, // #4502 + 7, 98856, 98856, 3656, 3656, // #4503 + 9, 98888, 98888, 3832, 3832, // #4504 + 16, 98912, 98912, 256, 256, // #4505 + 3, 98952, 98952, 136, 136, // #4506 + 22, 98968, 98968, 3048, 3048, // #4507 + 5, 98992, 98992, 880, 880, // #4508 + 5, 99016, 99016, 3448, 3448, // #4509 + 5, 99024, 99024, 880, 880, // #4510 + 14, 99040, 99040, 2960, 2960, // #4511 + 10, 99064, 99064, 600, 600, // #4512 + 22, 99088, 99088, 576, 576, // #4513 + 3, 99120, 99120, 688, 688, // #4514 + 14, 99144, 99144, 1048, 1048, // #4515 + 3, 99176, 99176, 2456, 2456, // #4516 + 13, 99192, 99192, 840, 840, // #4517 + 3, 99216, 99216, 688, 688, // #4518 + 5, 99240, 99240, 456, 456, // #4519 + 4, 99248, 99248, 1792, 1792, // #4520 + 11, 99264, 99264, 2592, 2592, // #4521 + 7, 99288, 99288, 2280, 2280, // #4522 + 11, 99296, 99296, 2592, 2592, // #4523 + 7, 99320, 99320, 2280, 2280, // #4524 + 14, 99328, 99328, 2912, 2912, // #4525 + 7, 99352, 99352, 2280, 2280, // #4526 + 14, 99360, 99360, 2912, 2912, // #4527 + 7, 99384, 99384, 2280, 2280, // #4528 + 11, 99392, 99392, 2592, 2592, // #4529 + 7, 99416, 99416, 2280, 2280, // #4530 + 6, 99432, 99432, 1416, 1416, // #4531 + 5, 99440, 99440, 880, 880, // #4532 + 11, 99456, 99456, 2592, 2592, // #4533 + 7, 99480, 99480, 2280, 2280, // #4534 + 22, 99488, 99488, 576, 576, // #4535 + 3, 99520, 99520, 688, 688, // #4536 + 9, 99536, 99536, 576, 576, // #4537 + 9, 99552, 99552, 2016, 2016, // #4538 + 7, 99568, 99568, 2784, 2784, // #4539 + 5, 99584, 99584, 880, 880, // #4540 + 13, 99608, 99608, 840, 840, // #4541 + 3, 99632, 99632, 688, 688, // #4542 + 9, 99648, 99648, 2880, 2880, // #4543 + 5, 99664, 99664, 880, 880, // #4544 + 13, 99688, 99688, 840, 840, // #4545 + 3, 99712, 99712, 688, 688, // #4546 + 14, 99728, 99728, 3488, 3488, // #4547 + 7, 99752, 99752, 2280, 2280, // #4548 + 9, 99760, 99760, 2880, 2880, // #4549 + 5, 99776, 99776, 880, 880, // #4550 + 14, 99792, 99792, 3488, 3488, // #4551 + 7, 99816, 99816, 2280, 2280, // #4552 + 8, 99824, 99824, 1984, 1984, // #4553 + 8, 99848, 99848, 1912, 1912, // #4554 + 6, 99880, 99880, 3896, 3896, // #4555 + 3, 99896, 99896, 136, 136, // #4556 + 22, 99912, 99912, 3048, 3048, // #4557 + 5, 99936, 99936, 880, 880, // #4558 + 13, 99952, 99952, 3168, 3168, // #4559 + 7, 99976, 99976, 2280, 2280, // #4560 + 13, 99984, 99984, 3168, 3168, // #4561 + 7, 100008, 100008, 2280, 2280, // #4562 + 5, 100024, 100024, 3448, 3448, // #4563 + 5, 100032, 100032, 880, 880, // #4564 + 12, 100048, 100048, 192, 192, // #4565 + 3, 100072, 100072, 136, 136, // #4566 + 5, 100088, 100088, 456, 456, // #4567 + 4, 100096, 100096, 1792, 1792, // #4568 + 7, 100120, 100120, 3656, 3656, // #4569 + 9, 100168, 100168, 3832, 3832, // #4570 + 18, 100192, 100192, 2704, 2704, // #4571 + 3, 100232, 100232, 2456, 2456, // #4572 + 9, 100240, 100240, 2880, 2880, // #4573 + 5, 100256, 100256, 880, 880, // #4574 + 9, 100272, 100272, 2880, 2880, // #4575 + 5, 100288, 100288, 880, 880, // #4576 + 13, 100312, 100312, 840, 840, // #4577 + 3, 100336, 100336, 688, 688, // #4578 + 9, 100352, 100352, 3168, 3168, // #4579 + 10, 100376, 100376, 600, 600, // #4580 + 5, 100408, 100408, 456, 456, // #4581 + 4, 100416, 100416, 1792, 1792, // #4582 + 22, 100440, 100440, 3048, 3048, // #4583 + 5, 100464, 100464, 880, 880, // #4584 + 6, 100488, 100488, 3896, 3896, // #4585 + 3, 100504, 100504, 136, 136, // #4586 + 17, 100520, 100520, 1864, 1864, // #4587 + 7, 100552, 100552, 2280, 2280, // #4588 + 22, 100560, 100560, 576, 576, // #4589 + 3, 100592, 100592, 688, 688, // #4590 + 17, 100616, 100616, 1864, 1864, // #4591 + 7, 100648, 100648, 2280, 2280, // #4592 + 12, 100656, 100656, 384, 384, // #4593 + 7, 100680, 100680, 2280, 2280, // #4594 + 13, 100696, 100696, 840, 840, // #4595 + 3, 100720, 100720, 688, 688, // #4596 + 22, 100736, 100736, 576, 576, // #4597 + 3, 100768, 100768, 688, 688, // #4598 + 12, 100784, 100784, 384, 384, // #4599 + 7, 100808, 100808, 2280, 2280, // #4600 + 11, 100816, 100816, 3344, 3344, // #4601 + 3, 100832, 100832, 688, 688, // #4602 + 14, 100848, 100848, 3552, 3552, // #4603 + 7, 100872, 100872, 2280, 2280, // #4604 + 17, 100888, 100888, 2760, 2760, // #4605 + 7, 100920, 100920, 2280, 2280, // #4606 + 17, 100936, 100936, 2760, 2760, // #4607 + 7, 100968, 100968, 2280, 2280, // #4608 + 14, 100976, 100976, 3552, 3552, // #4609 + 7, 101000, 101000, 2280, 2280, // #4610 + 12, 101016, 101016, 2904, 2904, // #4611 + 5, 101048, 101048, 4008, 4008, // #4612 + 11, 101056, 101056, 3344, 3344, // #4613 + 3, 101072, 101072, 688, 688, // #4614 + 15, 101096, 101096, 456, 456, // #4615 + 7, 101128, 101128, 2280, 2280, // #4616 + 14, 101192, 101192, 376, 376, // #4617 + 8, 101224, 101224, 1912, 1912, // #4618 + 22, 101248, 101248, 576, 576, // #4619 + 3, 101280, 101280, 688, 688, // #4620 + 22, 101304, 101304, 3048, 3048, // #4621 + 5, 101328, 101328, 880, 880, // #4622 + 16, 101344, 101344, 256, 256, // #4623 + 3, 101384, 101384, 136, 136, // #4624 + 22, 101392, 101392, 576, 576, // #4625 + 3, 101424, 101424, 688, 688, // #4626 + 10, 101440, 101440, 3712, 3712, // #4627 + 7, 101464, 101464, 2280, 2280, // #4628 + 6, 101480, 101480, 1416, 1416, // #4629 + 5, 101488, 101488, 880, 880, // #4630 + 10, 101504, 101504, 3712, 3712, // #4631 + 7, 101528, 101528, 2280, 2280, // #4632 + 5, 101544, 101544, 3448, 3448, // #4633 + 5, 101552, 101552, 880, 880, // #4634 + 16, 101568, 101568, 3728, 3728, // #4635 + 7, 101608, 101608, 2280, 2280, // #4636 + 5, 101624, 101624, 456, 456, // #4637 + 4, 101632, 101632, 1792, 1792, // #4638 + 13, 101656, 101656, 2584, 2584, // #4639 + 3, 101688, 101688, 2456, 2456, // #4640 + 5, 101704, 101704, 456, 456, // #4641 + 4, 101712, 101712, 1792, 1792, // #4642 + 11, 101728, 101728, 3344, 3344, // #4643 + 3, 101744, 101744, 688, 688, // #4644 + 12, 101760, 101760, 192, 192, // #4645 + 3, 101784, 101784, 136, 136, // #4646 + 12, 101792, 101792, 192, 192, // #4647 + 3, 101816, 101816, 136, 136, // #4648 + 13, 101832, 101832, 840, 840, // #4649 + 3, 101856, 101856, 688, 688, // #4650 + 6, 101880, 101880, 3896, 3896, // #4651 + 3, 101896, 101896, 136, 136, // #4652 + 12, 101904, 101904, 192, 192, // #4653 + 3, 101928, 101928, 136, 136, // #4654 + 13, 101944, 101944, 840, 840, // #4655 + 3, 101968, 101968, 688, 688, // #4656 + 13, 101992, 101992, 840, 840, // #4657 + 3, 102016, 102016, 688, 688, // #4658 + 11, 102032, 102032, 3344, 3344, // #4659 + 3, 102048, 102048, 688, 688, // #4660 + 6, 102072, 102072, 3896, 3896, // #4661 + 3, 102088, 102088, 136, 136, // #4662 + 5, 102104, 102104, 456, 456, // #4663 + 4, 102112, 102112, 1792, 1792, // #4664 + 14, 102128, 102128, 3840, 3840, // #4665 + 8, 102152, 102152, 1912, 1912, // #4666 + 13, 102184, 102184, 840, 840, // #4667 + 3, 102208, 102208, 688, 688, // #4668 + 11, 102224, 102224, 3344, 3344, // #4669 + 3, 102240, 102240, 688, 688, // #4670 + 12, 102280, 102280, 952, 952, // #4671 + 7, 102312, 102312, 2280, 2280, // #4672 + 18, 102320, 102320, 2704, 2704, // #4673 + 3, 102360, 102360, 2456, 2456, // #4674 + 7, 102368, 102368, 2784, 2784, // #4675 + 5, 102384, 102384, 880, 880, // #4676 + 16, 102400, 102400, 1552, 1552, // #4677 + 7, 102440, 102440, 2280, 2280, // #4678 + 6, 102456, 102456, 3896, 3896, // #4679 + 3, 102472, 102472, 136, 136, // #4680 + 16, 102480, 102480, 1552, 1552, // #4681 + 7, 102520, 102520, 2280, 2280, // #4682 + 5, 102536, 102536, 456, 456, // #4683 + 4, 102544, 102544, 1792, 1792, // #4684 + 6, 102568, 102568, 2280, 2280, // #4685 + 7, 102584, 102584, 2280, 2280, // #4686 + 14, 102592, 102592, 3840, 3840, // #4687 + 8, 102616, 102616, 1912, 1912, // #4688 + 11, 102640, 102640, 3344, 3344, // #4689 + 3, 102656, 102656, 688, 688, // #4690 + 13, 102680, 102680, 840, 840, // #4691 + 3, 102704, 102704, 688, 688, // #4692 + 13, 102728, 102728, 840, 840, // #4693 + 3, 102752, 102752, 688, 688, // #4694 + 21, 102792, 102792, 3576, 3576, // #4695 + 8, 102824, 102824, 1912, 1912, // #4696 + 12, 102848, 102848, 192, 192, // #4697 + 3, 102872, 102872, 136, 136, // #4698 + 7, 102888, 102888, 3656, 3656, // #4699 + 9, 102920, 102920, 3832, 3832, // #4700 + 26, 102952, 102952, 1416, 1416, // #4701 + 4, 103000, 103000, 2104, 2104, // #4702 + 7, 103016, 103016, 3656, 3656, // #4703 + 9, 103048, 103048, 3832, 3832, // #4704 + 7, 103080, 103080, 3656, 3656, // #4705 + 9, 103112, 103112, 3832, 3832, // #4706 + 7, 103144, 103144, 3656, 3656, // #4707 + 9, 103176, 103176, 3832, 3832, // #4708 + 24, 103208, 103208, 808, 808, // #4709 + 8, 103256, 103256, 1912, 1912, // #4710 + 18, 103288, 103288, 808, 808, // #4711 + 10, 103320, 103320, 600, 600, // #4712 + 6, 103352, 103352, 1416, 1416, // #4713 + 5, 103360, 103360, 880, 880, // #4714 + 16, 103376, 103376, 2448, 2448, // #4715 + 7, 103416, 103416, 2280, 2280, // #4716 + 22, 103424, 103424, 576, 576, // #4717 + 3, 103456, 103456, 688, 688, // #4718 + 15, 103472, 103472, 368, 368, // #4719 + 10, 103496, 103496, 600, 600, // #4720 + 9, 103520, 103520, 1184, 1184, // #4721 + 7, 103544, 103544, 2280, 2280, // #4722 + 9, 103552, 103552, 1184, 1184, // #4723 + 7, 103576, 103576, 2280, 2280, // #4724 + 16, 103584, 103584, 2448, 2448, // #4725 + 7, 103624, 103624, 2280, 2280, // #4726 + 13, 103632, 103632, 0, 0, // #4727 + 7, 103656, 103656, 2280, 2280, // #4728 + 13, 103664, 103664, 0, 0, // #4729 + 7, 103688, 103688, 2280, 2280, // #4730 + 8, 103704, 103704, 2152, 2152, // #4731 + 3, 103736, 103736, 2456, 2456, // #4732 + 13, 103752, 103752, 840, 840, // #4733 + 3, 103776, 103776, 688, 688, // #4734 + 27, 103792, 103792, 2256, 2256, // #4735 + 4, 103832, 103832, 2104, 2104, // #4736 + 12, 103840, 103840, 192, 192, // #4737 + 3, 103864, 103864, 136, 136, // #4738 + 12, 103872, 103872, 192, 192, // #4739 + 3, 103896, 103896, 136, 136, // #4740 + 13, 103912, 103912, 840, 840, // #4741 + 3, 103936, 103936, 688, 688, // #4742 + 12, 103952, 103952, 192, 192, // #4743 + 3, 103976, 103976, 136, 136, // #4744 + 12, 103984, 103984, 192, 192, // #4745 + 3, 104008, 104008, 136, 136, // #4746 + 7, 104016, 104016, 2784, 2784, // #4747 + 5, 104032, 104032, 880, 880, // #4748 + 14, 104056, 104056, 1608, 1608, // #4749 + 8, 104088, 104088, 1912, 1912, // #4750 + 26, 104136, 104136, 2920, 2920, // #4751 + 4, 104184, 104184, 2104, 2104, // #4752 + 16, 104192, 104192, 256, 256, // #4753 + 3, 104232, 104232, 136, 136, // #4754 + 7, 104240, 104240, 2784, 2784, // #4755 + 5, 104256, 104256, 880, 880, // #4756 + 12, 104272, 104272, 192, 192, // #4757 + 3, 104296, 104296, 136, 136, // #4758 + 10, 104304, 104304, 3712, 3712, // #4759 + 7, 104328, 104328, 2280, 2280, // #4760 + 21, 104392, 104392, 3576, 3576, // #4761 + 8, 104424, 104424, 1912, 1912, // #4762 + 10, 104448, 104448, 3712, 3712, // #4763 + 7, 104472, 104472, 2280, 2280, // #4764 + 22, 104480, 104480, 576, 576, // #4765 + 3, 104512, 104512, 688, 688, // #4766 + 11, 104528, 104528, 3344, 3344, // #4767 + 3, 104544, 104544, 688, 688, // #4768 + 13, 104568, 104568, 840, 840, // #4769 + 3, 104592, 104592, 688, 688, // #4770 + 22, 104616, 104616, 3048, 3048, // #4771 + 5, 104640, 104640, 880, 880, // #4772 + 6, 104664, 104664, 3896, 3896, // #4773 + 3, 104680, 104680, 136, 136, // #4774 + 13, 104696, 104696, 840, 840, // #4775 + 3, 104720, 104720, 688, 688, // #4776 + 17, 104736, 104736, 1680, 1680, // #4777 + 10, 104776, 104776, 600, 600, // #4778 + 8, 104808, 104808, 2632, 2632, // #4779 + 3, 104832, 104832, 2352, 2352, // #4780 + 6, 104856, 104856, 3896, 3896, // #4781 + 3, 104872, 104872, 136, 136, // #4782 + 5, 104888, 104888, 456, 456, // #4783 + 4, 104896, 104896, 1792, 1792, // #4784 + 12, 104912, 104912, 672, 672, // #4785 + 7, 104936, 104936, 2280, 2280, // #4786 + 6, 104952, 104952, 3896, 3896, // #4787 + 3, 104968, 104968, 136, 136, // #4788 + 12, 104976, 104976, 672, 672, // #4789 + 7, 105000, 105000, 2280, 2280, // #4790 + 19, 105016, 105016, 1480, 1480, // #4791 + 9, 105048, 105048, 2648, 2648, // #4792 + 18, 105072, 105072, 2704, 2704, // #4793 + 3, 105112, 105112, 2456, 2456, // #4794 + 13, 105128, 105128, 2584, 2584, // #4795 + 3, 105160, 105160, 2456, 2456, // #4796 + 15, 105224, 105224, 3448, 3448, // #4797 + 8, 105256, 105256, 1912, 1912, // #4798 + 23, 105288, 105288, 792, 792, // #4799 + 3, 105320, 105320, 2456, 2456, // #4800 + 15, 105352, 105352, 3448, 3448, // #4801 + 8, 105384, 105384, 1912, 1912, // #4802 + 11, 105408, 105408, 2176, 2176, // #4803 + 7, 105432, 105432, 2280, 2280, // #4804 + 24, 105440, 105440, 768, 768, // #4805 + 8, 105480, 105480, 1912, 1912, // #4806 + 11, 105504, 105504, 2176, 2176, // #4807 + 7, 105528, 105528, 2280, 2280, // #4808 + 6, 105544, 105544, 3896, 3896, // #4809 + 3, 105560, 105560, 136, 136, // #4810 + 11, 105568, 105568, 3344, 3344, // #4811 + 3, 105584, 105584, 688, 688, // #4812 + 18, 105608, 105608, 1416, 1416, // #4813 + 3, 105640, 105640, 2456, 2456, // #4814 + 9, 105648, 105648, 1184, 1184, // #4815 + 7, 105672, 105672, 2280, 2280, // #4816 + 7, 105688, 105688, 3656, 3656, // #4817 + 9, 105736, 105736, 3832, 3832, // #4818 + 9, 105760, 105760, 1184, 1184, // #4819 + 7, 105784, 105784, 2280, 2280, // #4820 + 5, 105800, 105800, 456, 456, // #4821 + 4, 105808, 105808, 1792, 1792, // #4822 + 12, 105824, 105824, 192, 192, // #4823 + 3, 105848, 105848, 136, 136, // #4824 + 16, 105856, 105856, 3424, 3424, // #4825 + 7, 105896, 105896, 2280, 2280, // #4826 + 22, 105904, 105904, 576, 576, // #4827 + 3, 105936, 105936, 688, 688, // #4828 + 16, 105952, 105952, 3424, 3424, // #4829 + 7, 105992, 105992, 2280, 2280, // #4830 + 13, 106008, 106008, 840, 840, // #4831 + 3, 106032, 106032, 688, 688, // #4832 + 6, 106056, 106056, 1416, 1416, // #4833 + 5, 106064, 106064, 880, 880, // #4834 + 6, 106088, 106088, 1416, 1416, // #4835 + 5, 106096, 106096, 880, 880, // #4836 + 11, 106112, 106112, 3344, 3344, // #4837 + 3, 106128, 106128, 688, 688, // #4838 + 13, 106152, 106152, 840, 840, // #4839 + 3, 106176, 106176, 688, 688, // #4840 + 13, 106200, 106200, 840, 840, // #4841 + 3, 106224, 106224, 688, 688, // #4842 + 5, 106248, 106248, 456, 456, // #4843 + 4, 106256, 106256, 1792, 1792, // #4844 + 9, 106272, 106272, 2880, 2880, // #4845 + 5, 106288, 106288, 880, 880, // #4846 + 16, 106304, 106304, 256, 256, // #4847 + 3, 106344, 106344, 136, 136, // #4848 + 22, 106360, 106360, 3048, 3048, // #4849 + 5, 106384, 106384, 880, 880, // #4850 + 22, 106408, 106408, 3048, 3048, // #4851 + 5, 106432, 106432, 880, 880, // #4852 + 22, 106456, 106456, 3048, 3048, // #4853 + 5, 106480, 106480, 880, 880, // #4854 + 12, 106496, 106496, 144, 144, // #4855 + 7, 106520, 106520, 2280, 2280, // #4856 + 9, 106528, 106528, 2880, 2880, // #4857 + 5, 106544, 106544, 880, 880, // #4858 + 11, 106560, 106560, 3344, 3344, // #4859 + 3, 106576, 106576, 688, 688, // #4860 + 6, 106600, 106600, 3896, 3896, // #4861 + 3, 106616, 106616, 136, 136, // #4862 + 13, 106624, 106624, 3168, 3168, // #4863 + 7, 106648, 106648, 2280, 2280, // #4864 + 13, 106656, 106656, 3168, 3168, // #4865 + 7, 106680, 106680, 2280, 2280, // #4866 + 11, 106696, 106696, 2600, 2600, // #4867 + 7, 106728, 106728, 2280, 2280, // #4868 + 6, 106744, 106744, 1416, 1416, // #4869 + 5, 106752, 106752, 880, 880, // #4870 + 9, 106768, 106768, 2880, 2880, // #4871 + 5, 106784, 106784, 880, 880, // #4872 + 12, 106824, 106824, 952, 952, // #4873 + 7, 106856, 106856, 2280, 2280, // #4874 + 6, 106872, 106872, 1416, 1416, // #4875 + 5, 106880, 106880, 880, 880, // #4876 + 11, 106896, 106896, 3344, 3344, // #4877 + 3, 106912, 106912, 688, 688, // #4878 + 5, 106936, 106936, 456, 456, // #4879 + 4, 106944, 106944, 1792, 1792, // #4880 + 9, 106960, 106960, 2880, 2880, // #4881 + 5, 106976, 106976, 880, 880, // #4882 + 9, 106992, 106992, 2880, 2880, // #4883 + 5, 107008, 107008, 880, 880, // #4884 + 13, 107032, 107032, 840, 840, // #4885 + 3, 107056, 107056, 688, 688, // #4886 + 22, 107080, 107080, 3048, 3048, // #4887 + 5, 107104, 107104, 880, 880, // #4888 + 7, 107128, 107128, 3656, 3656, // #4889 + 9, 107144, 107144, 3832, 3832, // #4890 + 12, 107168, 107168, 2752, 2752, // #4891 + 7, 107192, 107192, 2280, 2280, // #4892 + 12, 107200, 107200, 2752, 2752, // #4893 + 7, 107224, 107224, 2280, 2280, // #4894 + 5, 107240, 107240, 3448, 3448, // #4895 + 5, 107248, 107248, 880, 880, // #4896 + 5, 107272, 107272, 3448, 3448, // #4897 + 5, 107280, 107280, 880, 880, // #4898 + 11, 107296, 107296, 3344, 3344, // #4899 + 3, 107312, 107312, 688, 688, // #4900 + 15, 107336, 107336, 1864, 1864, // #4901 + 8, 107368, 107368, 1912, 1912, // #4902 + 18, 107392, 107392, 2704, 2704, // #4903 + 3, 107432, 107432, 2456, 2456, // #4904 + 24, 107456, 107456, 2736, 2736, // #4905 + 8, 107496, 107496, 1912, 1912, // #4906 + 8, 107520, 107520, 480, 480, // #4907 + 9, 107536, 107536, 2016, 2016, // #4908 + 17, 107560, 107560, 3992, 3992, // #4909 + 9, 107592, 107592, 2648, 2648, // #4910 + 4, 107616, 107616, 160, 160, // #4911 + 7, 107640, 107640, 2280, 2280, // #4912 + 14, 107648, 107648, 3840, 3840, // #4913 + 8, 107672, 107672, 1912, 1912, // #4914 + 12, 107696, 107696, 192, 192, // #4915 + 3, 107720, 107720, 136, 136, // #4916 + 18, 107736, 107736, 1416, 1416, // #4917 + 3, 107768, 107768, 2456, 2456, // #4918 + 13, 107784, 107784, 840, 840, // #4919 + 3, 107808, 107808, 688, 688, // #4920 + 10, 107824, 107824, 3712, 3712, // #4921 + 7, 107848, 107848, 2280, 2280, // #4922 + 10, 107856, 107856, 3712, 3712, // #4923 + 7, 107880, 107880, 2280, 2280, // #4924 + 6, 107896, 107896, 3896, 3896, // #4925 + 3, 107912, 107912, 136, 136, // #4926 + 7, 107920, 107920, 2784, 2784, // #4927 + 5, 107936, 107936, 880, 880, // #4928 + 7, 107952, 107952, 2784, 2784, // #4929 + 5, 107968, 107968, 880, 880, // #4930 + 9, 107984, 107984, 1184, 1184, // #4931 + 7, 108008, 108008, 2280, 2280, // #4932 + 6, 108024, 108024, 3896, 3896, // #4933 + 3, 108040, 108040, 136, 136, // #4934 + 9, 108048, 108048, 1184, 1184, // #4935 + 7, 108072, 108072, 2280, 2280, // #4936 + 11, 108080, 108080, 3344, 3344, // #4937 + 3, 108096, 108096, 688, 688, // #4938 + 22, 108112, 108112, 576, 576, // #4939 + 3, 108144, 108144, 688, 688, // #4940 + 24, 108168, 108168, 808, 808, // #4941 + 8, 108216, 108216, 1912, 1912, // #4942 + 13, 108248, 108248, 840, 840, // #4943 + 3, 108272, 108272, 688, 688, // #4944 + 12, 108288, 108288, 192, 192, // #4945 + 3, 108312, 108312, 136, 136, // #4946 + 11, 108320, 108320, 3344, 3344, // #4947 + 3, 108336, 108336, 688, 688, // #4948 + 16, 108352, 108352, 256, 256, // #4949 + 3, 108392, 108392, 136, 136, // #4950 + 13, 108408, 108408, 840, 840, // #4951 + 3, 108432, 108432, 688, 688, // #4952 + 8, 108456, 108456, 2632, 2632, // #4953 + 9, 108488, 108488, 3832, 3832, // #4954 + 7, 108520, 108520, 3656, 3656, // #4955 + 9, 108552, 108552, 3832, 3832, // #4956 + 7, 108584, 108584, 3656, 3656, // #4957 + 9, 108616, 108616, 3832, 3832, // #4958 + 6, 108648, 108648, 1416, 1416, // #4959 + 5, 108656, 108656, 880, 880, // #4960 + 6, 108680, 108680, 1096, 1096, // #4961 + 7, 108696, 108696, 2280, 2280, // #4962 + 6, 108712, 108712, 1416, 1416, // #4963 + 5, 108720, 108720, 880, 880, // #4964 + 22, 108744, 108744, 3048, 3048, // #4965 + 5, 108768, 108768, 880, 880, // #4966 + 24, 108784, 108784, 768, 768, // #4967 + 8, 108824, 108824, 1912, 1912, // #4968 + 16, 108848, 108848, 256, 256, // #4969 + 3, 108888, 108888, 136, 136, // #4970 + 6, 108904, 108904, 3896, 3896, // #4971 + 3, 108920, 108920, 136, 136, // #4972 + 13, 108936, 108936, 840, 840, // #4973 + 3, 108960, 108960, 688, 688, // #4974 + 22, 108984, 108984, 3048, 3048, // #4975 + 5, 109008, 109008, 880, 880, // #4976 + 7, 109032, 109032, 3656, 3656, // #4977 + 9, 109064, 109064, 3832, 3832, // #4978 + 17, 109096, 109096, 3992, 3992, // #4979 + 9, 109128, 109128, 2648, 2648, // #4980 + 20, 109152, 109152, 3328, 3328, // #4981 + 3, 109192, 109192, 2456, 2456, // #4982 + 11, 109208, 109208, 2600, 2600, // #4983 + 42, 109256, 109256, 3992, 3992, // #4984 + 245, 109320, 109320, 328, 328, // #4985 + 0, 109568, 109568, 3428, 3428, // #4986 + 268, 109581, 109581, 2109, 2109, // #4987 + 8, 109864, 109864, 1480, 1480, // #4988 + 0, 109888, 109888, 3428, 3428, // #4989 + 9, 109891, 109891, 2579, 2579, // #4990 + 93, 109960, 109960, 1560, 1560, // #4991 + 0, 110064, 110064, 3428, 3428, // #4992 + 93, 110084, 110084, 1668, 1668, // #4993 + 8, 110192, 110192, 3712, 3712, // #4994 + 0, 110208, 110208, 3428, 3428, // #4995 + 6, 110220, 110220, 796, 796, // #4996 + 11, 110248, 110248, 2600, 2600, // #4997 + 50, 110280, 110280, 1912, 1912, // #4998 + 11, 110344, 110344, 2600, 2600, // #4999 + 47, 110400, 110400, 3552, 3552, // #5000 + 4, 110448, 110448, 3632, 3632, // #5001 + 18, 110469, 110469, 3637, 3637, // #5002 + 16, 110535, 110535, 3511, 3511, // #5003 + 14, 110561, 110561, 1793, 1793, // #5004 + 14, 110577, 110577, 481, 481, // #5005 + 10, 110600, 110600, 3656, 3656, // #5006 + 16, 110627, 110627, 3667, 3667, // #5007 + 13, 110660, 110660, 3684, 3684, // #5008 + 16, 110699, 110699, 3675, 3675, // #5009 + 15, 110722, 110722, 3698, 3698, // #5010 + 17, 110754, 110754, 3714, 3714, // #5011 + 16, 110797, 110797, 1757, 1757, // #5012 + 18, 110819, 110819, 3619, 3619, // #5013 + 19, 110852, 110852, 3732, 3732, // #5014 + 20, 110888, 110888, 3752, 3752, // #5015 + 25, 110925, 110925, 3773, 3773, // #5016 + 18, 110974, 110974, 1774, 1774, // #5017 + 23, 111015, 111015, 3799, 3799, // #5018 + 20, 111053, 111053, 3837, 3837, // #5019 + 12, 111090, 111090, 3858, 3858, // #5020 + 12, 111119, 111119, 3871, 3871, // #5021 + 16, 111146, 111146, 1818, 1818, // #5022 + 19, 111180, 111180, 3884, 3884, // #5023 + 33, 111200, 111200, 832, 832, // #5024 + 0, 111248, 111248, 3428, 3428, // #5025 + 45, 111300, 111300, 2420, 2420, // #5026 + 175, 111360, 111360, 336, 336, // #5027 + 0, 111536, 111536, 3428, 3428, // #5028 + 200, 111560, 111560, 3992, 3992, // #5029 + 7, 111776, 111776, 96, 96, // #5030 + 0, 111792, 111792, 3428, 3428, // #5031 + 11, 111802, 111802, 490, 490, // #5032 + 62, 111872, 111872, 336, 336, // #5033 + 0, 111936, 111936, 3428, 3428, // #5034 + 88, 111944, 111944, 3784, 3784, // #5035 + 22, 112056, 112056, 424, 424, // #5036 + 0, 112080, 112080, 3428, 3428, // #5037 + 37, 112084, 112084, 452, 452, // #5038 + 75, 112136, 112136, 952, 952, // #5039 + 0, 112224, 112224, 3428, 3428, // #5040 + 97, 112262, 112262, 3686, 3686, // #5041 + 144, 112384, 112384, 4080, 4080, // #5042 + 0, 112544, 112544, 3428, 3428, // #5043 + 151, 112583, 112583, 439, 439, // #5044 + 30, 112736, 112736, 2832, 2832, // #5045 + 22, 112776, 112776, 3064, 3064, // #5046 + 0, 112800, 112800, 3428, 3428, // #5047 + 31, 112844, 112844, 764, 764, // #5048 + 36, 112896, 112896, 560, 560, // #5049 + 0, 112944, 112944, 3428, 3428, // #5050 + 34, 112973, 112973, 3565, 3565, // #5051 + 6, 113008, 113008, 624, 624, // #5052 + 0, 113024, 113024, 3428, 3428, // #5053 + 7, 113033, 113033, 3833, 3833, // #5054 + 32, 113088, 113088, 560, 560, // #5055 + 0, 113136, 113136, 3428, 3428, // #5056 + 43, 113162, 113162, 3642, 3642, // #5057 + 10, 113216, 113216, 352, 352, // #5058 + 0, 113232, 113232, 3428, 3428, // #5059 + 12, 113235, 113235, 627, 627, // #5060 + 50, 113288, 113288, 1848, 1848, // #5061 + 0, 113344, 113344, 3428, 3428, // #5062 + 61, 113356, 113356, 3580, 3580, // #5063 + 5, 113424, 113424, 2768, 2768, // #5064 + 0, 113440, 113440, 3428, 3428, // #5065 + 7, 113454, 113454, 990, 990, // #5066 + 3, 113472, 113472, 1568, 1568, // #5067 + 38, 113496, 113496, 1480, 1480, // #5068 + 0, 113536, 113536, 3428, 3428, // #5069 + 40, 113542, 113542, 998, 998, // #5070 + 51, 113600, 113600, 3552, 3552, // #5071 + 0, 113664, 113664, 3428, 3428, // #5072 + 63, 113665, 113665, 161, 161, // #5073 + 19, 113752, 113752, 3352, 3352, // #5074 + 0, 113776, 113776, 3428, 3428, // #5075 + 20, 113776, 113776, 640, 640, // #5076 + 56, 113808, 113808, 2112, 2112, // #5077 + 0, 113872, 113872, 3428, 3428, // #5078 + 64, 113922, 113922, 3426, 3426, // #5079 + 21, 114008, 114008, 472, 472, // #5080 + 20, 114056, 114056, 504, 504, // #5081 + 12, 114088, 114088, 536, 536, // #5082 + 20, 114120, 114120, 584, 584, // #5083 + 1, 114157, 114157, 573, 573, // #5084 + 7, 114164, 114164, 404, 404, // #5085 + 21, 114184, 114184, 3928, 3928, // #5086 + 20, 114248, 114248, 3960, 3960, // #5087 + 12, 114280, 114280, 3992, 3992, // #5088 + 20, 114312, 114312, 4040, 4040, // #5089 + 1, 114349, 114349, 4029, 4029, // #5090 + 21, 114372, 114372, 116, 116, // #5091 + 4, 114408, 114408, 2296, 2296, // #5092 + 0, 114416, 114416, 3428, 3428, // #5093 + 5, 114427, 114427, 699, 699, // #5094 + 8, 114448, 114448, 176, 176, // #5095 + 0, 114464, 114464, 3428, 3428, // #5096 + 9, 114471, 114471, 743, 743, // #5097 + 12, 114496, 114496, 176, 176, // #5098 + 0, 114512, 114512, 3428, 3428, // #5099 + 14, 114574, 114574, 3774, 3774, // #5100 + 5, 114592, 114592, 2528, 2528, // #5101 + 0, 114608, 114608, 3428, 3428, // #5102 + 7, 114620, 114620, 1068, 1068, // #5103 + 11, 114648, 114648, 1672, 1672, // #5104 + 0, 114672, 114672, 3428, 3428, // #5105 + 15, 114674, 114674, 2210, 2210, // #5106 + 7, 114704, 114704, 1920, 1920, // #5107 + 0, 114720, 114720, 3428, 3428, // #5108 + 9, 114762, 114762, 3962, 3962, // #5109 + 6, 114784, 114784, 1920, 1920, // #5110 + 0, 114800, 114800, 3428, 3428, // #5111 + 7, 114809, 114809, 3833, 3833, // #5112 + 9, 114888, 114888, 568, 568, // #5113 + 0, 114912, 114912, 3428, 3428, // #5114 + 12, 114912, 114912, 832, 832, // #5115 + 14, 114952, 114952, 568, 568, // #5116 + 0, 114976, 114976, 3428, 3428, // #5117 + 22, 114978, 114978, 2978, 2978, // #5118 + 8, 115016, 115016, 568, 568, // #5119 + 0, 115040, 115040, 3428, 3428, // #5120 + 21, 115050, 115050, 666, 666, // #5121 + 5, 115072, 115072, 2528, 2528, // #5122 + 0, 115088, 115088, 3428, 3428, // #5123 + 5, 115100, 115100, 876, 876, // #5124 + 5, 115120, 115120, 2528, 2528, // #5125 + 0, 115136, 115136, 3428, 3428, // #5126 + 9, 115136, 115136, 1568, 1568, // #5127 + 5, 115152, 115152, 2528, 2528, // #5128 + 0, 115168, 115168, 3428, 3428, // #5129 + 8, 115169, 115169, 3953, 3953, // #5130 + 4, 115184, 115184, 2528, 2528, // #5131 + 0, 115200, 115200, 3428, 3428, // #5132 + 9, 115204, 115204, 2500, 2500, // #5133 + 5, 115216, 115216, 2528, 2528, // #5134 + 0, 115232, 115232, 3428, 3428, // #5135 + 7, 115239, 115239, 3975, 3975, // #5136 + 6, 115248, 115248, 2528, 2528, // #5137 + 0, 115264, 115264, 3428, 3428, // #5138 + 6, 115269, 115269, 789, 789, // #5139 + 6, 115280, 115280, 2528, 2528, // #5140 + 0, 115296, 115296, 3428, 3428, // #5141 + 6, 115301, 115301, 789, 789, // #5142 + 6, 115312, 115312, 2528, 2528, // #5143 + 0, 115328, 115328, 3428, 3428, // #5144 + 7, 115330, 115330, 1618, 1618, // #5145 + 11, 115400, 115400, 2488, 2488, // #5146 + 0, 115424, 115424, 3428, 3428, // #5147 + 16, 115433, 115433, 3033, 3033, // #5148 + 9, 115464, 115464, 2488, 2488, // #5149 + 0, 115488, 115488, 3428, 3428, // #5150 + 10, 115500, 115500, 3180, 3180, // #5151 + 8, 115528, 115528, 2488, 2488, // #5152 + 0, 115552, 115552, 3428, 3428, // #5153 + 13, 115558, 115558, 198, 198, // #5154 + 10, 115592, 115592, 2488, 2488, // #5155 + 0, 115616, 115616, 3428, 3428, // #5156 + 19, 115631, 115631, 95, 95, // #5157 + 14, 115720, 115720, 2488, 2488, // #5158 + 0, 115744, 115744, 3428, 3428, // #5159 + 19, 115747, 115747, 211, 211, // #5160 + 11, 115784, 115784, 2488, 2488, // #5161 + 0, 115808, 115808, 3428, 3428, // #5162 + 14, 115846, 115846, 950, 950, // #5163 + 12, 115912, 115912, 2488, 2488, // #5164 + 0, 115936, 115936, 3428, 3428, // #5165 + 13, 115948, 115948, 3532, 3532, // #5166 + 12, 115976, 115976, 2488, 2488, // #5167 + 0, 116000, 116000, 3428, 3428, // #5168 + 19, 116034, 116034, 242, 242, // #5169 + 18, 116072, 116072, 1752, 1752, // #5170 + 0, 116096, 116096, 3428, 3428, // #5171 + 30, 116105, 116105, 425, 425, // #5172 + 19, 116152, 116152, 1752, 1752, // #5173 + 0, 116176, 116176, 3428, 3428, // #5174 + 29, 116187, 116187, 395, 395, // #5175 + 8, 116232, 116232, 2488, 2488, // #5176 + 0, 116256, 116256, 3428, 3428, // #5177 + 8, 116257, 116257, 2209, 2209, // #5178 + 9, 116296, 116296, 2488, 2488, // #5179 + 0, 116320, 116320, 3428, 3428, // #5180 + 8, 116330, 116330, 2218, 2218, // #5181 + 8, 116360, 116360, 2488, 2488, // #5182 + 0, 116384, 116384, 3428, 3428, // #5183 + 8, 116387, 116387, 1651, 1651, // #5184 + 10, 116424, 116424, 2488, 2488, // #5185 + 0, 116448, 116448, 3428, 3428, // #5186 + 9, 116450, 116450, 882, 882, // #5187 + 3, 116464, 116464, 1920, 1920, // #5188 + 0, 116480, 116480, 3428, 3428, // #5189 + 6, 116488, 116488, 1592, 1592, // #5190 + 14, 116496, 116496, 3840, 3840, // #5191 + 0, 116512, 116512, 3428, 3428, // #5192 + 17, 116526, 116526, 814, 814, // #5193 + 10, 116544, 116544, 3840, 3840, // #5194 + 0, 116560, 116560, 3428, 3428, // #5195 + 17, 116571, 116571, 715, 715, // #5196 + 9, 116592, 116592, 3840, 3840, // #5197 + 0, 116608, 116608, 3428, 3428, // #5198 + 11, 116615, 116615, 295, 295, // #5199 + 14, 116640, 116640, 3840, 3840, // #5200 + 0, 116656, 116656, 3428, 3428, // #5201 + 21, 116663, 116663, 327, 327, // #5202 + 14, 116688, 116688, 3840, 3840, // #5203 + 0, 116704, 116704, 3428, 3428, // #5204 + 19, 116739, 116739, 307, 307, // #5205 + 11, 116768, 116768, 3840, 3840, // #5206 + 0, 116784, 116784, 3428, 3428, // #5207 + 17, 116784, 116784, 224, 224, // #5208 + 10, 116816, 116816, 3840, 3840, // #5209 + 0, 116832, 116832, 3428, 3428, // #5210 + 16, 116839, 116839, 583, 583, // #5211 + 21, 116872, 116872, 1752, 1752, // #5212 + 0, 116896, 116896, 3428, 3428, // #5213 + 20, 116942, 116942, 3758, 3758, // #5214 + 24, 116976, 116976, 416, 416, // #5215 + 0, 117008, 117008, 3428, 3428, // #5216 + 22, 117014, 117014, 262, 262, // #5217 + 13, 117040, 117040, 3840, 3840, // #5218 + 0, 117056, 117056, 3428, 3428, // #5219 + 19, 117061, 117061, 3557, 3557, // #5220 + 18, 117096, 117096, 1752, 1752, // #5221 + 0, 117120, 117120, 3428, 3428, // #5222 + 20, 117129, 117129, 121, 121, // #5223 + 12, 117152, 117152, 3840, 3840, // #5224 + 0, 117168, 117168, 3428, 3428, // #5225 + 14, 117196, 117196, 1404, 1404, // #5226 + 13, 117216, 117216, 3840, 3840, // #5227 + 0, 117232, 117232, 3428, 3428, // #5228 + 22, 117256, 117256, 504, 504, // #5229 + 13, 117280, 117280, 3840, 3840, // #5230 + 0, 117296, 117296, 3428, 3428, // #5231 + 28, 117311, 117311, 527, 527, // #5232 + 15, 117344, 117344, 3840, 3840, // #5233 + 0, 117360, 117360, 3428, 3428, // #5234 + 24, 117364, 117364, 708, 708, // #5235 + 17, 117400, 117400, 1752, 1752, // #5236 + 0, 117424, 117424, 3428, 3428, // #5237 + 19, 117455, 117455, 3263, 3263, // #5238 + 14, 117488, 117488, 3840, 3840, // #5239 + 0, 117504, 117504, 3428, 3428, // #5240 + 23, 117513, 117513, 1097, 1097, // #5241 + 23, 117560, 117560, 1752, 1752, // #5242 + 0, 117584, 117584, 3428, 3428, // #5243 + 22, 117593, 117593, 265, 265, // #5244 + 16, 117624, 117624, 1752, 1752, // #5245 + 0, 117648, 117648, 3428, 3428, // #5246 + 19, 117701, 117701, 3893, 3893, // #5247 + 22, 117736, 117736, 1752, 1752, // #5248 + 0, 117760, 117760, 3428, 3428, // #5249 + 35, 117768, 117768, 328, 328, // #5250 + 27, 117808, 117808, 416, 416, // #5251 + 0, 117840, 117840, 3428, 3428, // #5252 + 29, 117900, 117900, 188, 188, // #5253 + 12, 117936, 117936, 3840, 3840, // #5254 + 0, 117952, 117952, 3428, 3428, // #5255 + 13, 117958, 117958, 1926, 1926, // #5256 + 13, 117984, 117984, 3840, 3840, // #5257 + 0, 118000, 118000, 3428, 3428, // #5258 + 15, 118027, 118027, 4027, 4027, // #5259 + 15, 118048, 118048, 3840, 3840, // #5260 + 0, 118064, 118064, 3428, 3428, // #5261 + 12, 118078, 118078, 3918, 3918, // #5262 + 14, 118096, 118096, 3840, 3840, // #5263 + 0, 118112, 118112, 3428, 3428, // #5264 + 16, 118117, 118117, 965, 965, // #5265 + 31, 118144, 118144, 3584, 3584, // #5266 + 0, 118176, 118176, 3428, 3428, // #5267 + 32, 118185, 118185, 3081, 3081, // #5268 + 9, 118224, 118224, 3840, 3840, // #5269 + 0, 118240, 118240, 3428, 3428, // #5270 + 11, 118240, 118240, 3520, 3520, // #5271 + 10, 118256, 118256, 2128, 2128, // #5272 + 0, 118272, 118272, 3428, 3428, // #5273 + 12, 118276, 118276, 2788, 2788, // #5274 +}; + +struct StringData fromUtf8Data = { + intData, + { charData }, + 5275, /* entryCount */ + 1976 /* maxLength */ +}; + +// average comparison length: 9.7492 +// cache-line crosses: 296 (2.8%) +// alignment histogram: +// 0xXXX0 = 4778 (45.3%) strings, 2389 (50.0%) of which same-aligned +// 0xXXX1 = 30 (0.3%) strings, 15 (50.0%) of which same-aligned +// 0xXXX2 = 52 (0.5%) strings, 26 (50.0%) of which same-aligned +// 0xXXX3 = 58 (0.5%) strings, 29 (50.0%) of which same-aligned +// 0xXXX4 = 322 (3.1%) strings, 161 (50.0%) of which same-aligned +// 0xXXX5 = 48 (0.5%) strings, 24 (50.0%) of which same-aligned +// 0xXXX6 = 38 (0.4%) strings, 19 (50.0%) of which same-aligned +// 0xXXX7 = 34 (0.3%) strings, 17 (50.0%) of which same-aligned +// 0xXXX8 = 4882 (46.3%) strings, 2441 (50.0%) of which same-aligned +// 0xXXX9 = 44 (0.4%) strings, 22 (50.0%) of which same-aligned +// 0xXXXa = 56 (0.5%) strings, 28 (50.0%) of which same-aligned +// 0xXXXb = 30 (0.3%) strings, 15 (50.0%) of which same-aligned +// 0xXXXc = 54 (0.5%) strings, 27 (50.0%) of which same-aligned +// 0xXXXd = 38 (0.4%) strings, 19 (50.0%) of which same-aligned +// 0xXXXe = 42 (0.4%) strings, 21 (50.0%) of which same-aligned +// 0xXXXf = 44 (0.4%) strings, 22 (50.0%) of which same-aligned +// total = 10550 (100%) strings, 5275 (50.0%) of which same-aligned diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro index e7ba04f..5db9776 100644 --- a/tests/benchmarks/corelib/tools/qstring/qstring.pro +++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro @@ -1,7 +1,7 @@ load(qttest_p4) TARGET = tst_bench_qstring QT -= gui -SOURCES += main.cpp data.cpp fromlatin1.cpp +SOURCES += main.cpp data.cpp fromlatin1.cpp fromutf8.cpp wince*:{ DEFINES += SRCDIR=\\\"\\\" @@ -17,3 +17,4 @@ wince*:{ sse4:QMAKE_CXXFLAGS += -msse4 else:ssse3:QMAKE_FLAGS += -mssse3 else:sse2:QMAKE_CXXFLAGS += -msse2 +neon:QMAKE_CXXFLAGS += -mfpu=neon -- cgit v0.12 From 32bc108172bcd5e3372667b90d3db843a17332a7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 15:31:29 +0100 Subject: Use the ARM version of UTF-8 detection in the Neon code --- tests/benchmarks/corelib/tools/qstring/main.cpp | 29 +++++++++++-------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index b2d9327..2339db9 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -2293,7 +2293,6 @@ int fromUtf8_neon(ushort *qch, const char *chars, int len) ushort *dst = qch; const uint8x8_t highBit = vdup_n_u8(0x80); - const uint8x8_t bitMask = { 128, 64, 32, 16, 8, 4, 2, 1 }; while (len >= 8) { // load 8 bytes into one doubleword Neon register const uint8x8_t chunk = vld1_u8((uint8_t *)chars); @@ -2301,27 +2300,26 @@ int fromUtf8_neon(ushort *qch, const char *chars, int len) vst1q_u16(dst, expanded); uint8x8_t highBits = vtst_u8(chunk, highBit); - highBits = vand_u8(highBits, bitMask); - highBits = vpadd_u8(highBits, highBits); - highBits = vpadd_u8(highBits, highBits); - highBits = vpadd_u8(highBits, highBits); - - int mask = vget_lane_u8(highBits, 0); - - // find the first bit set in mask - // sets pos to 32 if no bits are found - qptrdiff pos; - asm ("rbit %0, %1\n" - "clz %0, %0" - : "=r" (pos) : "r" (mask)); + // we need to find the lowest byte set + int mask_low = vget_lane_u32(vreinterpret_u32_u8(highBits), 0); + int mask_high = vget_lane_u32(vreinterpret_u32_u8(highBits), 1); - if (__builtin_expect(pos > 8, 1)) { + if (__builtin_expect(mask_low == 0 && mask_high == 0, 1)) { chars += 8; dst += 8; len -= 8; } else { // UTF-8 character found // which one? + qptrdiff pos; + asm ("rbit %0, %1\n" + "clz %1, %1\n" + : "=r" (pos) + : "r" (mask_low ? mask_low : mask_high)); + // now mask_low contains the number of leading zeroes + // or the value 32 (0x20) if no zeroes were found + // the number of leading zeroes is 8*pos + pos /= 8; extract_utf8_multibyte<false>(dst, chars, pos, len); chars += pos; @@ -2338,7 +2336,6 @@ int fromUtf8_neon(ushort *qch, const char *chars, int len) ++counter; continue; } - // UTF-8 character found extract_utf8_multibyte<false>(dst, chars, counter, len); } -- cgit v0.12 From 243021f6836f156f6a982ac74404c91a1e77f23a Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 15:45:49 +0100 Subject: Revert "Add a feature to QTestLib to correct benchmark results." This reverts commit 3cc83349d9a07bcb7ae9c338bfdc355905a5a2f1. --- src/testlib/qabstracttestlogger_p.h | 2 +- src/testlib/qbenchmark.cpp | 6 ----- src/testlib/qbenchmark_p.h | 2 -- src/testlib/qbenchmarkmetric.cpp | 3 --- src/testlib/qbenchmarkmetric.h | 3 +-- src/testlib/qplaintestlogger.cpp | 45 +++++++++++++------------------------ src/testlib/qplaintestlogger_p.h | 2 +- src/testlib/qtest_global.h | 9 -------- src/testlib/qtestcase.cpp | 22 +++--------------- src/testlib/qtestcase.h | 2 +- src/testlib/qtestdata.cpp | 20 +---------------- src/testlib/qtestdata.h | 2 -- src/testlib/qtestlog.cpp | 33 ++------------------------- src/testlib/qtestlog_p.h | 2 +- src/testlib/qtestlogger.cpp | 2 +- src/testlib/qtestlogger_p.h | 2 +- src/testlib/qtesttable.cpp | 4 ++-- src/testlib/qtesttable_p.h | 2 +- src/testlib/qxmltestlogger.cpp | 2 +- src/testlib/qxmltestlogger_p.h | 2 +- 20 files changed, 33 insertions(+), 134 deletions(-) diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h index 50f651a..d116a6e 100644 --- a/src/testlib/qabstracttestlogger_p.h +++ b/src/testlib/qabstracttestlogger_p.h @@ -90,7 +90,7 @@ public: virtual void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0) = 0; - virtual void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &correctedResult) = 0; + virtual void addBenchmarkResult(const QBenchmarkResult &result) = 0; virtual void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0) = 0; diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index cb56154..d933fb1 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -181,12 +181,6 @@ void QBenchmarkTestMethodData::setResult( QBenchmarkGlobalData::current->context, value, iterationCount, metric, setByMacro); } -void QBenchmarkTestMethodData::clearSpecialResults() -{ - for (int i = 0; i < QTest::BenchmarkSpecialCount; ++i) - specialResults[i] = QBenchmarkResult(); -} - /*! \class QTest::QBenchmarkIterationController \internal diff --git a/src/testlib/qbenchmark_p.h b/src/testlib/qbenchmark_p.h index 387ad8b..ace17db 100644 --- a/src/testlib/qbenchmark_p.h +++ b/src/testlib/qbenchmark_p.h @@ -177,10 +177,8 @@ public: bool resultsAccepted() const { return resultAccepted; } int adjustIterationCount(int suggestion); void setResult(qreal value, QTest::QBenchmarkMetric metric, bool setByMacro = true); - void clearSpecialResults(); QBenchmarkResult result; - QBenchmarkResult specialResults[QTest::BenchmarkSpecialCount]; bool resultAccepted; bool runOnce; int iterationCount; diff --git a/src/testlib/qbenchmarkmetric.cpp b/src/testlib/qbenchmarkmetric.cpp index 1631e98..025bf46 100644 --- a/src/testlib/qbenchmarkmetric.cpp +++ b/src/testlib/qbenchmarkmetric.cpp @@ -81,8 +81,6 @@ const char * QTest::benchmarkMetricName(QBenchmarkMetric metric) return "InstructionReads"; case Events: return "Events"; - case Percentage: - return "Percentage"; default: return ""; } @@ -110,7 +108,6 @@ const char * QTest::benchmarkMetricUnit(QBenchmarkMetric metric) return "instruction reads"; case Events: return "events"; - case Percentage: default: return ""; } diff --git a/src/testlib/qbenchmarkmetric.h b/src/testlib/qbenchmarkmetric.h index a413108..c8ab2fd 100644 --- a/src/testlib/qbenchmarkmetric.h +++ b/src/testlib/qbenchmarkmetric.h @@ -59,8 +59,7 @@ enum QBenchmarkMetric { WalltimeMilliseconds, CPUTicks, InstructionReads, - Events, - Percentage + Events }; } diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index c5c6fd6..e1ae534 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -315,7 +315,7 @@ namespace QTest { } // static void printBenchmarkResult(const char *bmtag, int value, int iterations) - static void printBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected) + static void printBenchmarkResult(const QBenchmarkResult &result) { const char *bmtag = QTest::benchmarkResult2String(); @@ -333,6 +333,7 @@ namespace QTest { QTest::qt_snprintf(bufTag, sizeof(bufTag), ":\"%s\"", tag.data()); } + char fillFormat[8]; int fillLength = 5; QTest::qt_snprintf( @@ -340,30 +341,6 @@ namespace QTest { char fill[1024]; QTest::qt_snprintf(fill, sizeof(fill), fillFormat, ""); - char buf1_[1024]; - buf1_[0] = 0; - if (corrected.valid) { - if (corrected.metric == QTest::Percentage) { - if (corrected.value <= 3 && corrected.value >= -1) - QTest::qt_snprintf( - buf1_, sizeof(buf1_), "%.1f%% (of baseline), actual: ", corrected.value * 100); - else - QTest::qt_snprintf( - buf1_, sizeof(buf1_), "%.2fx (of baseline), actual: ", corrected.value); - } else { - const char * unitText = QTest::benchmarkMetricUnit(corrected.metric); - - qreal valuePerIteration = qreal(corrected.value) / qreal(corrected.iterations); - char resultBuffer[100] = ""; - formatResult(resultBuffer, 100, valuePerIteration, countSignificantDigits(corrected.value)); - - QTest::qt_snprintf( - buf1_, sizeof(buf1_), "%s %s (corrected), actual: ", - resultBuffer, - unitText); - } - } - const char * unitText = QTest::benchmarkMetricUnit(result.metric); qreal valuePerIteration = qreal(result.value) / qreal(result.iterations); @@ -372,10 +349,18 @@ namespace QTest { char buf2[1024]; QTest::qt_snprintf( - buf2, sizeof(buf2), "%s %s per iteration", + buf2, sizeof(buf2), "%s %s", resultBuffer, unitText); + char buf2_[1024]; + QByteArray iterationText = " per iteration"; + Q_ASSERT(result.iterations > 0); + QTest::qt_snprintf( + buf2_, + sizeof(buf2_), "%s", + iterationText.data()); + char buf3[1024]; Q_ASSERT(result.iterations > 0); formatResult(resultBuffer, 100, result.value, countSignificantDigits(result.value)); @@ -388,9 +373,9 @@ namespace QTest { if (result.setByMacro) { QTest::qt_snprintf( - buf, sizeof(buf), "%s%s%s%s%s%s\n", buf1, bufTag, fill, buf1_, buf2, buf3); + buf, sizeof(buf), "%s%s%s%s%s%s\n", buf1, bufTag, fill, buf2, buf2_, buf3); } else { - QTest::qt_snprintf(buf, sizeof(buf), "%s%s%s%s%s\n", buf1, bufTag, fill, buf1_, buf2); + QTest::qt_snprintf(buf, sizeof(buf), "%s%s%s%s\n", buf1, bufTag, fill, buf2); } memcpy(buf, bmtag, strlen(bmtag)); @@ -486,10 +471,10 @@ void QPlainTestLogger::addIncident(IncidentTypes type, const char *description, QTest::printMessage(QTest::incidentType2String(type), description, file, line); } -void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected) +void QPlainTestLogger::addBenchmarkResult(const QBenchmarkResult &result) { // QTest::printBenchmarkResult(QTest::benchmarkResult2String(), value, iterations); - QTest::printBenchmarkResult(result, corrected); + QTest::printBenchmarkResult(result); } void QPlainTestLogger::addMessage(MessageTypes type, const char *message, diff --git a/src/testlib/qplaintestlogger_p.h b/src/testlib/qplaintestlogger_p.h index c5165dd..054ec1e 100644 --- a/src/testlib/qplaintestlogger_p.h +++ b/src/testlib/qplaintestlogger_p.h @@ -71,7 +71,7 @@ public: void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected); + void addBenchmarkResult(const QBenchmarkResult &result); void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0); diff --git a/src/testlib/qtest_global.h b/src/testlib/qtest_global.h index 2e7217c..28c8617 100644 --- a/src/testlib/qtest_global.h +++ b/src/testlib/qtest_global.h @@ -81,15 +81,6 @@ namespace QTest { enum SkipMode { SkipSingle = 1, SkipAll = 2 }; enum TestFailMode { Abort = 1, Continue = 2 }; - enum BenchmarkDataMode { - Normal = -1, - Zero = 0, - Subtract = Zero, - Baseline, - Divide = Baseline, - - BenchmarkSpecialCount = 2 - }; int Q_TESTLIB_EXPORT qt_snprintf(char *str, int size, const char *format, ...); } diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 698d9b5..287d8e6 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1384,17 +1384,8 @@ static void qInvokeTestMethodDataEntry(char *slot) && (++i < QBenchmarkGlobalData::current->adjustMedianIterationCount())); if (QBenchmarkTestMethodData::current->isBenchmark() - && QBenchmarkTestMethodData::current->resultsAccepted()) { - QBenchmarkResult result = qMedian(results); - - QBenchmarkResult *specialResults = QBenchmarkTestMethodData::current->specialResults; - if (QTestResult::currentTestData()) { - QTest::BenchmarkDataMode benchMode = QTestResult::currentTestData()->benchmarkSpecialData(); - if (benchMode > QTest::Normal && benchMode < QTest::BenchmarkSpecialCount) - specialResults[benchMode] = result; - } - QTestLog::addBenchmarkResult(result, specialResults); - } + && QBenchmarkTestMethodData::current->resultsAccepted()) + QTestLog::addBenchmarkResult(qMedian(results)); } /*! @@ -1462,8 +1453,6 @@ static bool qInvokeTestMethod(const char *slotName, const char *data=0) } } - benchmarkData.clearSpecialResults(); - /* For each entry in the data table, do: */ do { if (!data || !qstrcmp(data, table.testData(curDataIndex)->dataTag())) { @@ -2049,15 +2038,10 @@ void QTest::addColumnInternal(int id, const char *name) */ QTestData &QTest::newRow(const char *dataTag) { - return newRow(dataTag, Normal); -} - -QTestData &QTest::newRow(const char *dataTag, BenchmarkDataMode mode) -{ QTestTable *tbl = QTestTable::currentTestTable(); QTEST_ASSERT_X(tbl, "QTest::addColumn()", "Cannot add testdata outside of a _data slot."); - return *tbl->newData(dataTag, mode); + return *tbl->newData(dataTag); } /*! \fn void QTest::addColumn(const char *name, T *dummy = 0) diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index c0787a8..a2cc26d 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -125,6 +125,7 @@ namespace QTest return 0; } + Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length); Q_TESTLIB_EXPORT char *toString(const char *); Q_TESTLIB_EXPORT char *toString(const void *); @@ -167,7 +168,6 @@ namespace QTest addColumnInternal(qMetaTypeId<T>(), name); } Q_TESTLIB_EXPORT QTestData &newRow(const char *dataTag); - Q_TESTLIB_EXPORT QTestData &newRow(const char *dataTag, BenchmarkDataMode mode); template <typename T> inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected, diff --git a/src/testlib/qtestdata.cpp b/src/testlib/qtestdata.cpp index c22dbe2..588ad64 100644 --- a/src/testlib/qtestdata.cpp +++ b/src/testlib/qtestdata.cpp @@ -53,13 +53,12 @@ QT_BEGIN_NAMESPACE class QTestDataPrivate { public: - QTestDataPrivate(): tag(0), parent(0), data(0), dataCount(0), benchmarkDataMode(QTest::Normal) {} + QTestDataPrivate(): tag(0), parent(0), data(0), dataCount(0) {} char *tag; QTestTable *parent; void **data; int dataCount; - QTest::BenchmarkDataMode benchmarkDataMode; }; QTestData::QTestData(const char *tag, QTestTable *parent) @@ -73,18 +72,6 @@ QTestData::QTestData(const char *tag, QTestTable *parent) memset(d->data, 0, parent->elementCount() * sizeof(void*)); } -QTestData::QTestData(const char *tag, QTest::BenchmarkDataMode benchMode, QTestTable *parent) -{ - QTEST_ASSERT(tag); - QTEST_ASSERT(parent); - d = new QTestDataPrivate; - d->tag = qstrdup(tag); - d->parent = parent; - d->data = new void *[parent->elementCount()]; - d->benchmarkDataMode = benchMode; - memset(d->data, 0, parent->elementCount() * sizeof(void*)); -} - QTestData::~QTestData() { for (int i = 0; i < d->dataCount; ++i) { @@ -132,9 +119,4 @@ int QTestData::dataCount() const return d->dataCount; } -QTest::BenchmarkDataMode QTestData::benchmarkSpecialData() const -{ - return d->benchmarkDataMode; -} - QT_END_NAMESPACE diff --git a/src/testlib/qtestdata.h b/src/testlib/qtestdata.h index f154b8f..b39bce2 100644 --- a/src/testlib/qtestdata.h +++ b/src/testlib/qtestdata.h @@ -66,12 +66,10 @@ public: const char *dataTag() const; QTestTable *parent() const; int dataCount() const; - QTest::BenchmarkDataMode benchmarkSpecialData() const; private: friend class QTestTable; QTestData(const char *tag = 0, QTestTable *parent = 0); - QTestData(const char *tag, QTest::BenchmarkDataMode mode, QTestTable *parent = 0); Q_DISABLE_COPY(QTestData) diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp index 28358be..ed9a005 100644 --- a/src/testlib/qtestlog.cpp +++ b/src/testlib/qtestlog.cpp @@ -46,7 +46,6 @@ #include "QtTest/private/qabstracttestlogger_p.h" #include "QtTest/private/qplaintestlogger_p.h" #include "QtTest/private/qxmltestlogger_p.h" -#include "QtTest/private/qbenchmark_p.h" #include <QtCore/qatomic.h> #include <QtCore/qbytearray.h> @@ -286,38 +285,10 @@ void QTestLog::addSkip(const char *msg, QTest::SkipMode /*mode*/, QTest::testLogger->addMessage(QAbstractTestLogger::Skip, msg, file, line); } -void QTestLog::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult *specialResults) +void QTestLog::addBenchmarkResult(const QBenchmarkResult &result) { QTEST_ASSERT(QTest::testLogger); - QTEST_ASSERT(specialResults); - - QBenchmarkResult corrected; - const QBenchmarkResult &zero = specialResults[QTest::Zero]; - if (zero.valid && zero.metric == result.metric) { - // subtract the zero result - corrected = result; - if (zero.iterations == corrected.iterations) - corrected.value -= zero.value; - else - corrected.value -= zero.value / zero.iterations * corrected.iterations; - } - - const QBenchmarkResult &baseline = specialResults[QTest::Baseline]; - if (baseline.valid && baseline.metric == result.metric) { - // divide by the baseline - if (!corrected.valid) - corrected = result; - corrected.value /= corrected.iterations; - corrected.iterations = 1; - corrected.metric = QTest::Percentage; - - qreal subtract = 0; - if (zero.valid && zero.metric == baseline.metric) - subtract = zero.value / zero.iterations; - corrected.value /= baseline.value / baseline.iterations - subtract; - } - - QTest::testLogger->addBenchmarkResult(result, corrected); + QTest::testLogger->addBenchmarkResult(result); } void QTestLog::startLogging(unsigned int randomSeed) diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h index 02c0dd9..a892d3d 100644 --- a/src/testlib/qtestlog_p.h +++ b/src/testlib/qtestlog_p.h @@ -74,7 +74,7 @@ public: static void addXPass(const char *msg, const char *file, int line); static void addSkip(const char *msg, QTest::SkipMode mode, const char *file, int line); - static void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult *specialResults); + static void addBenchmarkResult(const QBenchmarkResult &result); static void addIgnoreMessage(QtMsgType type, const char *msg); static int unhandledIgnoreMessages(); static void printUnhandledIgnoreMessages(); diff --git a/src/testlib/qtestlogger.cpp b/src/testlib/qtestlogger.cpp index 3962b09..86826f8 100644 --- a/src/testlib/qtestlogger.cpp +++ b/src/testlib/qtestlogger.cpp @@ -268,7 +268,7 @@ void QTestLogger::addIncident(IncidentTypes type, const char *description, } } -void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &) +void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result) { QTestElement *benchmarkElement = new QTestElement(QTest::LET_Benchmark); // printf("element %i", benchmarkElement->elementType()); diff --git a/src/testlib/qtestlogger_p.h b/src/testlib/qtestlogger_p.h index 3dc8640..d8867de 100644 --- a/src/testlib/qtestlogger_p.h +++ b/src/testlib/qtestlogger_p.h @@ -82,7 +82,7 @@ class QTestLogger : public QAbstractTestLogger void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &correctedResult); + void addBenchmarkResult(const QBenchmarkResult &result); void addTag(QTestElement* element); void addMessage(MessageTypes type, const char *message, diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp index 7c5acce..df10462 100644 --- a/src/testlib/qtesttable.cpp +++ b/src/testlib/qtesttable.cpp @@ -190,9 +190,9 @@ bool QTestTable::isEmpty() const return !d->list; } -QTestData *QTestTable::newData(const char *tag, QTest::BenchmarkDataMode benchMode) +QTestData *QTestTable::newData(const char *tag) { - QTestData *dt = new QTestData(tag, benchMode, this); + QTestData *dt = new QTestData(tag, this); d->append(dt); return dt; } diff --git a/src/testlib/qtesttable_p.h b/src/testlib/qtesttable_p.h index b85e9aa..f835506 100644 --- a/src/testlib/qtesttable_p.h +++ b/src/testlib/qtesttable_p.h @@ -67,7 +67,7 @@ public: ~QTestTable(); void addColumn(int elementType, const char *elementName); - QTestData *newData(const char *tag, QTest::BenchmarkDataMode benchMode); + QTestData *newData(const char *tag); int elementCount() const; int dataCount() const; diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp index 3edd687..827b0ad 100644 --- a/src/testlib/qxmltestlogger.cpp +++ b/src/testlib/qxmltestlogger.cpp @@ -246,7 +246,7 @@ void QXmlTestLogger::addIncident(IncidentTypes type, const char *description, outputString(buf.constData()); } -void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &) +void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result) { QTestCharBuffer buf; QTestCharBuffer quotedMetric; diff --git a/src/testlib/qxmltestlogger_p.h b/src/testlib/qxmltestlogger_p.h index adfe98b..f815103 100644 --- a/src/testlib/qxmltestlogger_p.h +++ b/src/testlib/qxmltestlogger_p.h @@ -74,7 +74,7 @@ public: void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); - void addBenchmarkResult(const QBenchmarkResult &result, const QBenchmarkResult &corrected); + void addBenchmarkResult(const QBenchmarkResult &result); void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0); -- cgit v0.12 From bd4b9fc3dd1e4f89cee4bb3e7921bf50f28eb9d9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@nokia.com> Date: Tue, 22 Mar 2011 15:48:16 +0100 Subject: Remove the use of the QtTest baseline feature I reverted --- tests/benchmarks/corelib/tools/qstring/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 2339db9..df41efd 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1716,8 +1716,8 @@ void fromLatin1_neon_handwritten(ushort *dst, const char *str, int len) void tst_QString::fromLatin1Alternatives_data() const { QTest::addColumn<FromLatin1Function>("function"); - QTest::newRow("empty", QTest::Zero) << FromLatin1Function(0); - QTest::newRow("regular", QTest::Baseline) << &fromLatin1_regular; + QTest::newRow("empty") << FromLatin1Function(0); + QTest::newRow("regular") << &fromLatin1_regular; #ifdef __SSE2__ QTest::newRow("sse2-qt4.7") << &fromLatin1_sse2_qt47; QTest::newRow("sse2-improved") << &fromLatin1_sse2_improved; @@ -2400,8 +2400,8 @@ int fromUtf8_neon_trusted(ushort *qch, const char *chars, int len) void tst_QString::fromUtf8Alternatives_data() const { QTest::addColumn<FromUtf8Function>("function"); - QTest::newRow("empty", QTest::Zero) << FromUtf8Function(0); - QTest::newRow("qt-4.7", QTest::Baseline) << &fromUtf8_qt47; + QTest::newRow("empty") << FromUtf8Function(0); + QTest::newRow("qt-4.7") << &fromUtf8_qt47; QTest::newRow("qt-4.7-stateless") << &fromUtf8_qt47_stateless; QTest::newRow("optimized-for-ascii") << &fromUtf8_optimised_for_ascii; #ifdef __SSE2__ -- cgit v0.12 From cf80df787f3861e12f1045d88a356c7a51e0302b Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Tue, 22 Mar 2011 13:57:57 +0200 Subject: Handle removal of setter for partialUpdateSupport MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The setter was removed as part of merge request 1136. This commit fixes the Symbian build where Q_NO_EGL is undefined. Reviewed-by: Samuel Rødal --- src/opengl/qwindowsurface_gl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 4ac7b22..2ccbc50 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -494,7 +494,7 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) bool swapBehaviourPreserved = (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED) || (ctx->d_func()->eglContext->configAttrib(EGL_SURFACE_TYPE)&EGL_SWAP_BEHAVIOR_PRESERVED_BIT); if (!swapBehaviourPreserved && !haveNOKSwapRegion) - setPartialUpdateSupport(false); // Force full-screen updates + d_ptr->partialUpdateSupport = false; // Force full-screen updates else d_ptr->partialUpdateSupport = true; #else -- cgit v0.12 From d901a4e4bada4a89bebbac6107fe7b37350f90ec Mon Sep 17 00:00:00 2001 From: Eckhart Koppen <eckhart.koppen@nokia.com> Date: Tue, 22 Mar 2011 15:35:02 +0200 Subject: Updated QtGUI DEF files for WINSCW Absented missing functions Reviewed-by: TrustMe --- src/s60installs/bwins/QtGuiu.def | 240 +++++++++++++++++++-------------------- 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 38bd760..8f56e20 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12984,12 +12984,12 @@ EXPORTS ?clipEnabledChanged@QBlitterPaintEngine@@UAEXXZ @ 12983 NONAME ; void QBlitterPaintEngine::clipEnabledChanged(void) ?supportsSubPixelPositions@QFontEngine@@UBE_NXZ @ 12984 NONAME ; bool QFontEngine::supportsSubPixelPositions(void) const ??_EQScrollerProperties@@UAE@I@Z @ 12985 NONAME ; QScrollerProperties::~QScrollerProperties(unsigned int) - ??_EQFontPrivate@@QAE@I@Z @ 12986 NONAME ; QFontPrivate::~QFontPrivate(unsigned int) - ??0QMimeSource@@QAE@XZ @ 12987 NONAME ; QMimeSource::QMimeSource(void) - ??0QStyleFactoryInterface@@QAE@XZ @ 12988 NONAME ; QStyleFactoryInterface::QStyleFactoryInterface(void) + ??_EQFontPrivate@@QAE@I@Z @ 12986 NONAME ABSENT ; QFontPrivate::~QFontPrivate(unsigned int) + ??0QMimeSource@@QAE@XZ @ 12987 NONAME ABSENT ; QMimeSource::QMimeSource(void) + ??0QStyleFactoryInterface@@QAE@XZ @ 12988 NONAME ABSENT ; QStyleFactoryInterface::QStyleFactoryInterface(void) ?d_func@QScrollEvent@@AAEPAVQScrollEventPrivate@@XZ @ 12989 NONAME ; class QScrollEventPrivate * QScrollEvent::d_func(void) - ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12990 NONAME ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &) - ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12991 NONAME ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &) + ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12990 NONAME ABSENT ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &) + ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12991 NONAME ABSENT ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &) ?heightForWidth@QTabWidget@@UBEHH@Z @ 12992 NONAME ; int QTabWidget::heightForWidth(int) const ??1QFlickGesture@@UAE@XZ @ 12993 NONAME ; QFlickGesture::~QFlickGesture(void) ??0QRasterWindowSurface@@QAE@PAVQWidget@@_N@Z @ 12994 NONAME ; QRasterWindowSurface::QRasterWindowSurface(class QWidget *, bool) @@ -12997,14 +12997,14 @@ EXPORTS ?clip@QBlitterPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 12996 NONAME ; void QBlitterPaintEngine::clip(class QRect const &, enum Qt::ClipOperation) ?detach@QGlyphs@@AAEXXZ @ 12997 NONAME ; void QGlyphs::detach(void) ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0@Z @ 12998 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *) - ??0QShowEvent@@QAE@ABV0@@Z @ 12999 NONAME ; QShowEvent::QShowEvent(class QShowEvent const &) - ??0QMouseEvent@@QAE@ABV0@@Z @ 13000 NONAME ; QMouseEvent::QMouseEvent(class QMouseEvent const &) + ??0QShowEvent@@QAE@ABV0@@Z @ 12999 NONAME ABSENT ; QShowEvent::QShowEvent(class QShowEvent const &) + ??0QMouseEvent@@QAE@ABV0@@Z @ 13000 NONAME ABSENT ; QMouseEvent::QMouseEvent(class QMouseEvent const &) ?setHintingPreference@QFont@@QAEXW4HintingPreference@1@@Z @ 13001 NONAME ; void QFont::setHintingPreference(enum QFont::HintingPreference) - ??0QActionEvent@@QAE@ABV0@@Z @ 13002 NONAME ; QActionEvent::QActionEvent(class QActionEvent const &) - ??0QTouchEvent@@QAE@ABV0@@Z @ 13003 NONAME ; QTouchEvent::QTouchEvent(class QTouchEvent const &) + ??0QActionEvent@@QAE@ABV0@@Z @ 13002 NONAME ABSENT ; QActionEvent::QActionEvent(class QActionEvent const &) + ??0QTouchEvent@@QAE@ABV0@@Z @ 13003 NONAME ABSENT ; QTouchEvent::QTouchEvent(class QTouchEvent const &) ?capabilities@QBlittable@@QBE?AV?$QFlags@W4Capability@QBlittable@@@@XZ @ 13004 NONAME ; class QFlags<enum QBlittable::Capability> QBlittable::capabilities(void) const ?setContentPosRange@QScrollPrepareEvent@@QAEXABVQRectF@@@Z @ 13005 NONAME ; void QScrollPrepareEvent::setContentPosRange(class QRectF const &) - ??_EQImageData@@QAE@I@Z @ 13006 NONAME ; QImageData::~QImageData(unsigned int) + ??_EQImageData@@QAE@I@Z @ 13006 NONAME ABSENT ; QImageData::~QImageData(unsigned int) ?swap@QBrush@@QAEXAAV1@@Z @ 13007 NONAME ; void QBrush::swap(class QBrush &) ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13008 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *, int) ?fontHintingPreference@QTextCharFormat@@QBE?AW4HintingPreference@QFont@@XZ @ 13009 NONAME ; enum QFont::HintingPreference QTextCharFormat::fontHintingPreference(void) const @@ -13015,30 +13015,30 @@ EXPORTS ?scroller@QScroller@@SAPBV1@PBVQObject@@@Z @ 13014 NONAME ; class QScroller const * QScroller::scroller(class QObject const *) ?qt_metacall@QScroller@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13015 NONAME ; int QScroller::qt_metacall(enum QMetaObject::Call, int, void * *) ?tr@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13016 NONAME ; class QString QFlickGesture::tr(char const *, char const *) - ??4QBezier@@QAEAAV0@ABV0@@Z @ 13017 NONAME ; class QBezier & QBezier::operator=(class QBezier const &) + ??4QBezier@@QAEAAV0@ABV0@@Z @ 13017 NONAME ABSENT ; class QBezier & QBezier::operator=(class QBezier const &) ?setScrollerProperties@QScroller@@QAEXABVQScrollerProperties@@@Z @ 13018 NONAME ; void QScroller::setScrollerProperties(class QScrollerProperties const &) - ??0QIconEngineV2@@QAE@XZ @ 13019 NONAME ; QIconEngineV2::QIconEngineV2(void) - ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 13020 NONAME ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &) + ??0QIconEngineV2@@QAE@XZ @ 13019 NONAME ABSENT ; QIconEngineV2::QIconEngineV2(void) + ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 13020 NONAME ABSENT ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &) ??MQItemSelectionRange@@QBE_NABV0@@Z @ 13021 NONAME ; bool QItemSelectionRange::operator<(class QItemSelectionRange const &) const ?setWidthForHeight@QSizePolicy@@QAEX_N@Z @ 13022 NONAME ; void QSizePolicy::setWidthForHeight(bool) ?qt_fontdata_from_index@@YA?AVQByteArray@@H@Z @ 13023 NONAME ; class QByteArray qt_fontdata_from_index(int) - ??0QIconEngineV2@@QAE@ABV0@@Z @ 13024 NONAME ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &) + ??0QIconEngineV2@@QAE@ABV0@@Z @ 13024 NONAME ABSENT ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &) ?swap@QImage@@QAEXAAV1@@Z @ 13025 NONAME ; void QImage::swap(class QImage &) - ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 13026 NONAME ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void) + ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 13026 NONAME ABSENT ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void) ??0QScroller@@AAE@PAVQObject@@@Z @ 13027 NONAME ; QScroller::QScroller(class QObject *) ?compositionModeChanged@QBlitterPaintEngine@@UAEXXZ @ 13028 NONAME ; void QBlitterPaintEngine::compositionModeChanged(void) ?contentPosRange@QScrollPrepareEvent@@QBE?AVQRectF@@XZ @ 13029 NONAME ; class QRectF QScrollPrepareEvent::contentPosRange(void) const ?grabGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@W4ScrollerGestureType@1@@Z @ 13030 NONAME ; enum Qt::GestureType QScroller::grabGesture(class QObject *, enum QScroller::ScrollerGestureType) ??_EQFlickGesture@@UAE@I@Z @ 13031 NONAME ; QFlickGesture::~QFlickGesture(unsigned int) ?drawRects@QBlitterPaintEngine@@UAEXPBVQRectF@@H@Z @ 13032 NONAME ; void QBlitterPaintEngine::drawRects(class QRectF const *, int) - ??4QTextLine@@QAEAAV0@ABV0@@Z @ 13033 NONAME ; class QTextLine & QTextLine::operator=(class QTextLine const &) - ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13034 NONAME ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &) + ??4QTextLine@@QAEAAV0@ABV0@@Z @ 13033 NONAME ABSENT ; class QTextLine & QTextLine::operator=(class QTextLine const &) + ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13034 NONAME ABSENT ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &) ??1QBlitterPaintEngine@@UAE@XZ @ 13035 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(void) ?markRasterOverlay@QBlittablePixmapData@@QAEXPBVQRectF@@H@Z @ 13036 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QRectF const *, int) - ??0QResizeEvent@@QAE@ABV0@@Z @ 13037 NONAME ; QResizeEvent::QResizeEvent(class QResizeEvent const &) - ??0QIconEngineFactoryInterface@@QAE@XZ @ 13038 NONAME ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void) + ??0QResizeEvent@@QAE@ABV0@@Z @ 13037 NONAME ABSENT ; QResizeEvent::QResizeEvent(class QResizeEvent const &) + ??0QIconEngineFactoryInterface@@QAE@XZ @ 13038 NONAME ABSENT ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void) ?drawTextItem@QBlitterPaintEngine@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 13039 NONAME ; void QBlitterPaintEngine::drawTextItem(class QPointF const &, class QTextItem const &) - ??0QPictureFormatInterface@@QAE@XZ @ 13040 NONAME ; QPictureFormatInterface::QPictureFormatInterface(void) + ??0QPictureFormatInterface@@QAE@XZ @ 13040 NONAME ABSENT ; QPictureFormatInterface::QPictureFormatInterface(void) ?trUtf8@QFlickGesture@@SA?AVQString@@PBD0@Z @ 13041 NONAME ; class QString QFlickGesture::trUtf8(char const *, char const *) ?stop@QScroller@@QAEXXZ @ 13042 NONAME ; void QScroller::stop(void) ?retrieveData@QInternalMimeData@@MBE?AVQVariant@@ABVQString@@W4Type@2@@Z @ 13043 NONAME ; class QVariant QInternalMimeData::retrieveData(class QString const &, enum QVariant::Type) const @@ -13055,18 +13055,18 @@ EXPORTS ?sort@QAbstractProxyModel@@UAEXHW4SortOrder@Qt@@@Z @ 13054 NONAME ; void QAbstractProxyModel::sort(int, enum Qt::SortOrder) ?d_func@QBlittable@@AAEPAVQBlittablePrivate@@XZ @ 13055 NONAME ; class QBlittablePrivate * QBlittable::d_func(void) ?setDefaultScrollerProperties@QScrollerProperties@@SAXABV1@@Z @ 13056 NONAME ; void QScrollerProperties::setDefaultScrollerProperties(class QScrollerProperties const &) - ??_EQPolygon@@QAE@I@Z @ 13057 NONAME ; QPolygon::~QPolygon(unsigned int) + ??_EQPolygon@@QAE@I@Z @ 13057 NONAME ABSENT ; QPolygon::~QPolygon(unsigned int) ?type@QBlitterPaintEngine@@UBE?AW4Type@QPaintEngine@@XZ @ 13058 NONAME ; enum QPaintEngine::Type QBlitterPaintEngine::type(void) const ?qt_metacast@QScroller@@UAEPAXPBD@Z @ 13059 NONAME ; void * QScroller::qt_metacast(char const *) - ??_EQImageReader@@QAE@I@Z @ 13060 NONAME ; QImageReader::~QImageReader(unsigned int) + ??_EQImageReader@@QAE@I@Z @ 13060 NONAME ABSENT ; QImageReader::~QImageReader(unsigned int) ?buddy@QAbstractProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 13061 NONAME ; class QModelIndex QAbstractProxyModel::buddy(class QModelIndex const &) const ?tr@QScroller@@SA?AVQString@@PBD0H@Z @ 13062 NONAME ; class QString QScroller::tr(char const *, char const *, int) ?fill@QImage@@QAEXABVQColor@@@Z @ 13063 NONAME ; void QImage::fill(class QColor const &) ?scrollMetric@QScrollerProperties@@QBE?AVQVariant@@W4ScrollMetric@1@@Z @ 13064 NONAME ; class QVariant QScrollerProperties::scrollMetric(enum QScrollerProperties::ScrollMetric) const ?fill@QImage@@QAEXW4GlobalColor@Qt@@@Z @ 13065 NONAME ; void QImage::fill(enum Qt::GlobalColor) - ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13066 NONAME ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &) + ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13066 NONAME ABSENT ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &) ?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13067 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const - ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13068 NONAME ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &) + ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13068 NONAME ABSENT ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &) ??1QScroller@@EAE@XZ @ 13069 NONAME ; QScroller::~QScroller(void) ?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 13070 NONAME ; void QGlyphs::setFont(class QFont const &) ?startPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13071 NONAME ; class QPointF QScrollPrepareEvent::startPos(void) const @@ -13076,16 +13076,16 @@ EXPORTS ?getText@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1W4EchoMode@QLineEdit@@1PA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13075 NONAME ; class QString QInputDialog::getText(class QWidget *, class QString const &, class QString const &, enum QLineEdit::EchoMode, class QString const &, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) ?hasWidthForHeight@QSizePolicy@@QBE_NXZ @ 13076 NONAME ; bool QSizePolicy::hasWidthForHeight(void) const ?transformChanged@QBlitterPaintEngine@@UAEXXZ @ 13077 NONAME ; void QBlitterPaintEngine::transformChanged(void) - ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13078 NONAME ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &) + ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13078 NONAME ABSENT ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &) ??0QBlittablePixmapData@@QAE@XZ @ 13079 NONAME ; QBlittablePixmapData::QBlittablePixmapData(void) - ??_EKey@QPixmapCache@@QAE@I@Z @ 13080 NONAME ; QPixmapCache::Key::~Key(unsigned int) - ??_EQCursor@@QAE@I@Z @ 13081 NONAME ; QCursor::~QCursor(unsigned int) + ??_EKey@QPixmapCache@@QAE@I@Z @ 13080 NONAME ABSENT ; QPixmapCache::Key::~Key(unsigned int) + ??_EQCursor@@QAE@I@Z @ 13081 NONAME ABSENT ; QCursor::~QCursor(unsigned int) ?size@QBlittable@@QBE?AVQSize@@XZ @ 13082 NONAME ; class QSize QBlittable::size(void) const - ??0QShortcutEvent@@QAE@ABV0@@Z @ 13083 NONAME ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &) + ??0QShortcutEvent@@QAE@ABV0@@Z @ 13083 NONAME ABSENT ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &) ?setBlittable@QBlittablePixmapData@@QAEXPAVQBlittable@@@Z @ 13084 NONAME ; void QBlittablePixmapData::setBlittable(class QBlittable *) ?opacityChanged@QBlitterPaintEngine@@UAEXXZ @ 13085 NONAME ; void QBlitterPaintEngine::opacityChanged(void) ?tr@QFlickGesture@@SA?AVQString@@PBD0H@Z @ 13086 NONAME ; class QString QFlickGesture::tr(char const *, char const *, int) - ??_EQTextCursor@@QAE@I@Z @ 13087 NONAME ; QTextCursor::~QTextCursor(unsigned int) + ??_EQTextCursor@@QAE@I@Z @ 13087 NONAME ABSENT ; QTextCursor::~QTextCursor(unsigned int) ?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 13088 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const ?setState@QBlitterPaintEngine@@UAEXPAVQPainterState@@@Z @ 13089 NONAME ; void QBlitterPaintEngine::setState(class QPainterState *) ?clip@QBlitterPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 13090 NONAME ; void QBlitterPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation) @@ -13094,9 +13094,9 @@ EXPORTS ?setSnapPositionsX@QScroller@@QAEXABV?$QList@M@@@Z @ 13093 NONAME ; void QScroller::setSnapPositionsX(class QList<float> const &) ?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 13094 NONAME ; class QString QTextListFormat::numberSuffix(void) const ??HQGlyphs@@ABE?AV0@ABV0@@Z @ 13095 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const - ??0QGradient@@QAE@ABV0@@Z @ 13096 NONAME ; QGradient::QGradient(class QGradient const &) + ??0QGradient@@QAE@ABV0@@Z @ 13096 NONAME ABSENT ; QGradient::QGradient(class QGradient const &) ?tabsMovable@QMdiArea@@QBE_NXZ @ 13097 NONAME ; bool QMdiArea::tabsMovable(void) const - ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13098 NONAME ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &) + ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13098 NONAME ABSENT ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &) ?contentPos@QScrollPrepareEvent@@QBE?AVQPointF@@XZ @ 13099 NONAME ; class QPointF QScrollPrepareEvent::contentPos(void) const ?getStaticMetaObject@QScroller@@SAABUQMetaObject@@XZ @ 13100 NONAME ; struct QMetaObject const & QScroller::getStaticMetaObject(void) ?end@QBlitterPaintEngine@@UAE_NXZ @ 13101 NONAME ; bool QBlitterPaintEngine::end(void) @@ -13104,62 +13104,62 @@ EXPORTS ??0QFlickGesture@@QAE@PAVQObject@@W4MouseButton@Qt@@0@Z @ 13103 NONAME ; QFlickGesture::QFlickGesture(class QObject *, enum Qt::MouseButton, class QObject *) ?fill@QBlitterPaintEngine@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 13104 NONAME ; void QBlitterPaintEngine::fill(class QVectorPath const &, class QBrush const &) ?drawPixmap@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 13105 NONAME ; void QBlitterPaintEngine::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &) - ??0QVector2D@@QAE@ABV0@@Z @ 13106 NONAME ; QVector2D::QVector2D(class QVector2D const &) + ??0QVector2D@@QAE@ABV0@@Z @ 13106 NONAME ABSENT ; QVector2D::QVector2D(class QVector2D const &) ?setSnapPositionsY@QScroller@@QAEXABV?$QList@M@@@Z @ 13107 NONAME ; void QScroller::setSnapPositionsY(class QList<float> const &) - ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13108 NONAME ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &) - ??_EQPen@@QAE@I@Z @ 13109 NONAME ; QPen::~QPen(unsigned int) - ??_EQKeySequence@@QAE@I@Z @ 13110 NONAME ; QKeySequence::~QKeySequence(unsigned int) + ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13108 NONAME ABSENT ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &) + ??_EQPen@@QAE@I@Z @ 13109 NONAME ABSENT ; QPen::~QPen(unsigned int) + ??_EQKeySequence@@QAE@I@Z @ 13110 NONAME ABSENT ; QKeySequence::~QKeySequence(unsigned int) ?tr@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13111 NONAME ; class QString QInternalMimeData::tr(char const *, char const *, int) ?velocity@QScroller@@QBE?AVQPointF@@XZ @ 13112 NONAME ; class QPointF QScroller::velocity(void) const ?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 13113 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const ?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 13114 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &) ?setScrollMetric@QScrollerProperties@@QAEXW4ScrollMetric@1@ABVQVariant@@@Z @ 13115 NONAME ; void QScrollerProperties::setScrollMetric(enum QScrollerProperties::ScrollMetric, class QVariant const &) - ??4QGradient@@QAEAAV0@ABV0@@Z @ 13116 NONAME ; class QGradient & QGradient::operator=(class QGradient const &) + ??4QGradient@@QAEAAV0@ABV0@@Z @ 13116 NONAME ABSENT ; class QGradient & QGradient::operator=(class QGradient const &) ??0QScrollEvent@@QAE@ABVQPointF@@0W4ScrollState@0@@Z @ 13117 NONAME ; QScrollEvent::QScrollEvent(class QPointF const &, class QPointF const &, enum QScrollEvent::ScrollState) ?d_func@QFlickGesture@@AAEPAVQFlickGesturePrivate@@XZ @ 13118 NONAME ; class QFlickGesturePrivate * QFlickGesture::d_func(void) ?scrollState@QScrollEvent@@QBE?AW4ScrollState@1@XZ @ 13119 NONAME ; enum QScrollEvent::ScrollState QScrollEvent::scrollState(void) const - ??0QTextTableFormat@@QAE@ABV0@@Z @ 13120 NONAME ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &) - ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13121 NONAME ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int) + ??0QTextTableFormat@@QAE@ABV0@@Z @ 13120 NONAME ABSENT ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &) + ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13121 NONAME ABSENT ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int) ?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 13122 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &) ?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 13123 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const ?getStaticMetaObject@QFlickGesture@@SAABUQMetaObject@@XZ @ 13124 NONAME ; struct QMetaObject const & QFlickGesture::getStaticMetaObject(void) ?setViewportSize@QScrollPrepareEvent@@QAEXABVQSizeF@@@Z @ 13125 NONAME ; void QScrollPrepareEvent::setViewportSize(class QSizeF const &) - ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13126 NONAME ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &) - ??0Value@QCss@@QAE@ABU01@@Z @ 13127 NONAME ; QCss::Value::Value(struct QCss::Value const &) + ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13126 NONAME ABSENT ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &) + ??0Value@QCss@@QAE@ABU01@@Z @ 13127 NONAME ABSENT ; QCss::Value::Value(struct QCss::Value const &) ?d_func@QScrollPrepareEvent@@AAEPAVQScrollPrepareEventPrivate@@XZ @ 13128 NONAME ; class QScrollPrepareEventPrivate * QScrollPrepareEvent::d_func(void) ?overshootDistance@QScrollEvent@@QBE?AVQPointF@@XZ @ 13129 NONAME ; class QPointF QScrollEvent::overshootDistance(void) const ?resolveFontFamilyAlias@QFontDatabase@@CA?AVQString@@ABV2@@Z @ 13130 NONAME ; class QString QFontDatabase::resolveFontFamilyAlias(class QString const &) ?alphaRGBMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@HABVQTransform@@@Z @ 13131 NONAME ; class QImage QFontEngine::alphaRGBMapForGlyph(unsigned int, struct QFixed, int, class QTransform const &) - ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13132 NONAME ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &) + ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13132 NONAME ABSENT ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &) ?swap@QBitmap@@QAEXAAV1@@Z @ 13133 NONAME ; void QBitmap::swap(class QBitmap &) ?hasFormat@QInternalMimeData@@UBE_NABVQString@@@Z @ 13134 NONAME ; bool QInternalMimeData::hasFormat(class QString const &) const ?renderDataHelper@QInternalMimeData@@SA?AVQByteArray@@ABVQString@@PBVQMimeData@@@Z @ 13135 NONAME ; class QByteArray QInternalMimeData::renderDataHelper(class QString const &, class QMimeData const *) - ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13136 NONAME ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int) + ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13136 NONAME ABSENT ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int) ??0QWindowSurface@@QAE@PAVQWidget@@_N@Z @ 13137 NONAME ; QWindowSurface::QWindowSurface(class QWidget *, bool) ?fill@QBlittablePixmapData@@UAEXABVQColor@@@Z @ 13138 NONAME ; void QBlittablePixmapData::fill(class QColor const &) ?metric@QBlittablePixmapData@@UBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 13139 NONAME ; int QBlittablePixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const - ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13140 NONAME ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &) + ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13140 NONAME ABSENT ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &) ?fillRect@QBlitterPaintEngine@@UAEXABVQRectF@@ABVQColor@@@Z @ 13141 NONAME ; void QBlitterPaintEngine::fillRect(class QRectF const &, class QColor const &) - ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13142 NONAME ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &) + ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13142 NONAME ABSENT ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &) ??6@YA?AVQDebug@@V0@PBVQSymbianEvent@@@Z @ 13143 NONAME ; class QDebug operator<<(class QDebug, class QSymbianEvent const *) - ??0QSizePolicy@@QAE@ABV0@@Z @ 13144 NONAME ; QSizePolicy::QSizePolicy(class QSizePolicy const &) + ??0QSizePolicy@@QAE@ABV0@@Z @ 13144 NONAME ABSENT ; QSizePolicy::QSizePolicy(class QSizePolicy const &) ?ProcessCommandParametersL@QS60MainAppUi@@UAEHW4TApaCommand@@AAV?$TBuf@$0BAA@@@ABVTDesC8@@@Z @ 13145 NONAME ; int QS60MainAppUi::ProcessCommandParametersL(enum TApaCommand, class TBuf<256> &, class TDesC8 const &) ?scrollerProperties@QScroller@@QBE?AVQScrollerProperties@@XZ @ 13146 NONAME ; class QScrollerProperties QScroller::scrollerProperties(void) const ??_EQBlittablePixmapData@@UAE@I@Z @ 13147 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(unsigned int) ?mimeData@QAbstractProxyModel@@UBEPAVQMimeData@@ABV?$QList@VQModelIndex@@@@@Z @ 13148 NONAME ; class QMimeData * QAbstractProxyModel::mimeData(class QList<class QModelIndex> const &) const - ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13149 NONAME ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &) + ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13149 NONAME ABSENT ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &) ??_EQScroller@@UAE@I@Z @ 13150 NONAME ; QScroller::~QScroller(unsigned int) ??1QScrollPrepareEvent@@UAE@XZ @ 13151 NONAME ; QScrollPrepareEvent::~QScrollPrepareEvent(void) - ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13152 NONAME ; class QVector3D & QVector3D::operator=(class QVector3D const &) + ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13152 NONAME ABSENT ; class QVector3D & QVector3D::operator=(class QVector3D const &) ?setTabsMovable@QMdiArea@@QAEX_N@Z @ 13153 NONAME ; void QMdiArea::setTabsMovable(bool) ?minimumSizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 13154 NONAME ; class QSize QRadioButton::minimumSizeHint(void) const - ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13155 NONAME ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &) + ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13155 NONAME ABSENT ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &) ?qt_metacast@QFlickGesture@@UAEPAXPBD@Z @ 13156 NONAME ; void * QFlickGesture::qt_metacast(char const *) - ??_EQFont@@QAE@I@Z @ 13157 NONAME ; QFont::~QFont(unsigned int) + ??_EQFont@@QAE@I@Z @ 13157 NONAME ABSENT ; QFont::~QFont(unsigned int) ?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 13158 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &) - ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13159 NONAME ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &) - ??0QPainterState@@QAE@ABV0@@Z @ 13160 NONAME ; QPainterState::QPainterState(class QPainterState const &) - ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13161 NONAME ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &) + ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13159 NONAME ABSENT ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &) + ??0QPainterState@@QAE@ABV0@@Z @ 13160 NONAME ABSENT ; QPainterState::QPainterState(class QPainterState const &) + ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13161 NONAME ABSENT ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &) ?drawRects@QBlitterPaintEngine@@UAEXPBVQRect@@H@Z @ 13162 NONAME ; void QBlitterPaintEngine::drawRects(class QRect const *, int) ?fillInPendingGlyphs@QTextureGlyphCache@@QAEXXZ @ 13163 NONAME ; void QTextureGlyphCache::fillInPendingGlyphs(void) ?metaObject@QFlickGesture@@UBEPBUQMetaObject@@XZ @ 13164 NONAME ; struct QMetaObject const * QFlickGesture::metaObject(void) const @@ -13170,20 +13170,20 @@ EXPORTS ?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 13169 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &) ?alphaMapBoundingBox@QFontEngine@@UAE?AUglyph_metrics_t@@IABVQTransform@@W4GlyphFormat@1@@Z @ 13170 NONAME ; struct glyph_metrics_t QFontEngine::alphaMapBoundingBox(unsigned int, class QTransform const &, enum QFontEngine::GlyphFormat) ?resendPrepareEvent@QScroller@@QAEXXZ @ 13171 NONAME ; void QScroller::resendPrepareEvent(void) - ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13172 NONAME ; class QTextLength & QTextLength::operator=(class QTextLength const &) - ??0QHelpEvent@@QAE@ABV0@@Z @ 13173 NONAME ; QHelpEvent::QHelpEvent(class QHelpEvent const &) - ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13174 NONAME ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &) + ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13172 NONAME ABSENT ; class QTextLength & QTextLength::operator=(class QTextLength const &) + ??0QHelpEvent@@QAE@ABV0@@Z @ 13173 NONAME ABSENT ; QHelpEvent::QHelpEvent(class QHelpEvent const &) + ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13174 NONAME ABSENT ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &) ?d_func@QBlittable@@ABEPBVQBlittablePrivate@@XZ @ 13175 NONAME ; class QBlittablePrivate const * QBlittable::d_func(void) const ?state@QBlitterPaintEngine@@QBEPBVQPainterState@@XZ @ 13176 NONAME ; class QPainterState const * QBlitterPaintEngine::state(void) const ??0QScrollPrepareEvent@@QAE@ABVQPointF@@@Z @ 13177 NONAME ; QScrollPrepareEvent::QScrollPrepareEvent(class QPointF const &) - ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13178 NONAME ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &) - ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13179 NONAME ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &) - ??0QTabletEvent@@QAE@ABV0@@Z @ 13180 NONAME ; QTabletEvent::QTabletEvent(class QTabletEvent const &) + ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13178 NONAME ABSENT ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &) + ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13179 NONAME ABSENT ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &) + ??0QTabletEvent@@QAE@ABV0@@Z @ 13180 NONAME ABSENT ; QTabletEvent::QTabletEvent(class QTabletEvent const &) ?scrollTo@QScroller@@QAEXABVQPointF@@H@Z @ 13181 NONAME ; void QScroller::scrollTo(class QPointF const &, int) ?ungrabGesture@QScroller@@SAXPAVQObject@@@Z @ 13182 NONAME ; void QScroller::ungrabGesture(class QObject *) - ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13183 NONAME ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &) + ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13183 NONAME ABSENT ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &) ?clear@QGlyphs@@QAEXXZ @ 13184 NONAME ; void QGlyphs::clear(void) - ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13185 NONAME ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int) + ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13185 NONAME ABSENT ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int) ??1QBlittablePixmapData@@UAE@XZ @ 13186 NONAME ; QBlittablePixmapData::~QBlittablePixmapData(void) ?formatsHelper@QInternalMimeData@@SA?AVQStringList@@PBVQMimeData@@@Z @ 13187 NONAME ; class QStringList QInternalMimeData::formatsHelper(class QMimeData const *) ?qt_metacast@QInternalMimeData@@UAEPAXPBD@Z @ 13188 NONAME ; void * QInternalMimeData::qt_metacast(char const *) @@ -13193,22 +13193,22 @@ EXPORTS ?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 13192 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const ?swap@QPen@@QAEXAAV1@@Z @ 13193 NONAME ; void QPen::swap(class QPen &) ?span@QAbstractProxyModel@@UBE?AVQSize@@ABVQModelIndex@@@Z @ 13194 NONAME ; class QSize QAbstractProxyModel::span(class QModelIndex const &) const - ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13195 NONAME ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &) - ??0QHoverEvent@@QAE@ABV0@@Z @ 13196 NONAME ; QHoverEvent::QHoverEvent(class QHoverEvent const &) - ??0QPaintEngineState@@QAE@XZ @ 13197 NONAME ; QPaintEngineState::QPaintEngineState(void) + ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13195 NONAME ABSENT ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &) + ??0QHoverEvent@@QAE@ABV0@@Z @ 13196 NONAME ABSENT ; QHoverEvent::QHoverEvent(class QHoverEvent const &) + ??0QPaintEngineState@@QAE@XZ @ 13197 NONAME ABSENT ; QPaintEngineState::QPaintEngineState(void) ?setSnapPositionsY@QScroller@@QAEXMM@Z @ 13198 NONAME ; void QScroller::setSnapPositionsY(float, float) ?d_func@QScrollPrepareEvent@@ABEPBVQScrollPrepareEventPrivate@@XZ @ 13199 NONAME ; class QScrollPrepareEventPrivate const * QScrollPrepareEvent::d_func(void) const ?textureMapForGlyph@QTextureGlyphCache@@QBE?AVQImage@@IUQFixed@@@Z @ 13200 NONAME ; class QImage QTextureGlyphCache::textureMapForGlyph(unsigned int, struct QFixed) const - ??0QKeyEvent@@QAE@ABV0@@Z @ 13201 NONAME ; QKeyEvent::QKeyEvent(class QKeyEvent const &) - ??0QIconEngine@@QAE@ABV0@@Z @ 13202 NONAME ; QIconEngine::QIconEngine(class QIconEngine const &) - ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13203 NONAME ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &) + ??0QKeyEvent@@QAE@ABV0@@Z @ 13201 NONAME ABSENT ; QKeyEvent::QKeyEvent(class QKeyEvent const &) + ??0QIconEngine@@QAE@ABV0@@Z @ 13202 NONAME ABSENT ; QIconEngine::QIconEngine(class QIconEngine const &) + ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13203 NONAME ABSENT ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &) ?qt_metacall@QInternalMimeData@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13204 NONAME ; int QInternalMimeData::qt_metacall(enum QMetaObject::Call, int, void * *) ?lineHeightType@QTextBlockFormat@@QBEHXZ @ 13205 NONAME ; int QTextBlockFormat::lineHeightType(void) const ?hintingPreference@QFont@@QBE?AW4HintingPreference@1@XZ @ 13206 NONAME ; enum QFont::HintingPreference QFont::hintingPreference(void) const ??0QGlyphs@@QAE@XZ @ 13207 NONAME ; QGlyphs::QGlyphs(void) ?trUtf8@QInternalMimeData@@SA?AVQString@@PBD0H@Z @ 13208 NONAME ; class QString QInternalMimeData::trUtf8(char const *, char const *, int) - ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13209 NONAME ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void) - ??_EQRegion@@QAE@I@Z @ 13210 NONAME ; QRegion::~QRegion(unsigned int) + ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13209 NONAME ABSENT ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void) + ??_EQRegion@@QAE@I@Z @ 13210 NONAME ABSENT ; QRegion::~QRegion(unsigned int) ?begin@QBlitterPaintEngine@@UAE_NPAVQPaintDevice@@@Z @ 13211 NONAME ; bool QBlitterPaintEngine::begin(class QPaintDevice *) ?inFontUcs4@QFontMetricsF@@QBE_NI@Z @ 13212 NONAME ; bool QFontMetricsF::inFontUcs4(unsigned int) const ?viewportSize@QScrollPrepareEvent@@QBE?AVQSizeF@@XZ @ 13213 NONAME ; class QSizeF QScrollPrepareEvent::viewportSize(void) const @@ -13216,11 +13216,11 @@ EXPORTS ?d_func@QBlitterPaintEngine@@AAEPAVQBlitterPaintEnginePrivate@@XZ @ 13215 NONAME ; class QBlitterPaintEnginePrivate * QBlitterPaintEngine::d_func(void) ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 13216 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &) ?lineHeight@QTextBlockFormat@@QBEMMM@Z @ 13217 NONAME ; float QTextBlockFormat::lineHeight(float, float) const - ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13218 NONAME ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &) + ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13218 NONAME ABSENT ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &) ?getItem@QInputDialog@@SA?AVQString@@PAVQWidget@@ABV2@1ABVQStringList@@H_NPA_NV?$QFlags@W4WindowType@Qt@@@@V?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 13219 NONAME ; class QString QInputDialog::getItem(class QWidget *, class QString const &, class QString const &, class QStringList const &, int, bool, bool *, class QFlags<enum Qt::WindowType>, class QFlags<enum Qt::InputMethodHint>) - ??_EFileInfo@QZipReader@@QAE@I@Z @ 13220 NONAME ; QZipReader::FileInfo::~FileInfo(unsigned int) + ??_EFileInfo@QZipReader@@QAE@I@Z @ 13220 NONAME ABSENT ; QZipReader::FileInfo::~FileInfo(unsigned int) ?qGamma_correct_back_to_linear_cs@@YAXPAVQImage@@@Z @ 13221 NONAME ; void qGamma_correct_back_to_linear_cs(class QImage *) - ??0QBitmap@@QAE@ABV0@@Z @ 13222 NONAME ; QBitmap::QBitmap(class QBitmap const &) + ??0QBitmap@@QAE@ABV0@@Z @ 13222 NONAME ABSENT ; QBitmap::QBitmap(class QBitmap const &) ?clip@QBlitterPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 13223 NONAME ; void QBlitterPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation) ??1QScrollEvent@@UAE@XZ @ 13224 NONAME ; QScrollEvent::~QScrollEvent(void) ?state@QScroller@@QBE?AW4State@1@XZ @ 13225 NONAME ; enum QScroller::State QScroller::state(void) const @@ -13228,26 +13228,26 @@ EXPORTS ?tr@QScroller@@SA?AVQString@@PBD0@Z @ 13227 NONAME ; class QString QScroller::tr(char const *, char const *) ?canReadData@QInternalMimeData@@SA_NABVQString@@@Z @ 13228 NONAME ; bool QInternalMimeData::canReadData(class QString const &) ?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13229 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const - ??_EQTextFormat@@QAE@I@Z @ 13230 NONAME ; QTextFormat::~QTextFormat(unsigned int) - ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13231 NONAME ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &) + ??_EQTextFormat@@QAE@I@Z @ 13230 NONAME ABSENT ; QTextFormat::~QTextFormat(unsigned int) + ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13231 NONAME ABSENT ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &) ?trUtf8@QScroller@@SA?AVQString@@PBD0H@Z @ 13232 NONAME ; class QString QScroller::trUtf8(char const *, char const *, int) ?d_func@QFlickGesture@@ABEPBVQFlickGesturePrivate@@XZ @ 13233 NONAME ; class QFlickGesturePrivate const * QFlickGesture::d_func(void) const - ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13234 NONAME ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &) - ??_EQPainter@@QAE@I@Z @ 13235 NONAME ; QPainter::~QPainter(unsigned int) - ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13236 NONAME ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &) - ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13237 NONAME ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &) + ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13234 NONAME ABSENT ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &) + ??_EQPainter@@QAE@I@Z @ 13235 NONAME ABSENT ; QPainter::~QPainter(unsigned int) + ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13236 NONAME ABSENT ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &) + ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13237 NONAME ABSENT ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &) ?hasScroller@QScroller@@SA_NPAVQObject@@@Z @ 13238 NONAME ; bool QScroller::hasScroller(class QObject *) ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@ABVQTransform@@@Z @ 13239 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed, class QTransform const &) - ??_EQPainterPath@@QAE@I@Z @ 13240 NONAME ; QPainterPath::~QPainterPath(unsigned int) - ??_EQGlyphs@@QAE@I@Z @ 13241 NONAME ; QGlyphs::~QGlyphs(unsigned int) + ??_EQPainterPath@@QAE@I@Z @ 13240 NONAME ABSENT ; QPainterPath::~QPainterPath(unsigned int) + ??_EQGlyphs@@QAE@I@Z @ 13241 NONAME ABSENT ; QGlyphs::~QGlyphs(unsigned int) ?fromImage@QBlittablePixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 13242 NONAME ; void QBlittablePixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>) ??0QInternalMimeData@@QAE@XZ @ 13243 NONAME ; QInternalMimeData::QInternalMimeData(void) ??_EQScrollEvent@@UAE@I@Z @ 13244 NONAME ; QScrollEvent::~QScrollEvent(unsigned int) ??4QGlyphs@@QAEAAV0@ABV0@@Z @ 13245 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &) - ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13246 NONAME ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &) - ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13247 NONAME ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &) + ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13246 NONAME ABSENT ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &) + ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13247 NONAME ABSENT ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &) ??0QBlittable@@QAE@ABVQSize@@V?$QFlags@W4Capability@QBlittable@@@@@Z @ 13248 NONAME ; QBlittable::QBlittable(class QSize const &, class QFlags<enum QBlittable::Capability>) - ??0QIconDragEvent@@QAE@ABV0@@Z @ 13249 NONAME ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &) + ??0QIconDragEvent@@QAE@ABV0@@Z @ 13249 NONAME ABSENT ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &) ?scroller@QScroller@@SAPAV1@PAVQObject@@@Z @ 13250 NONAME ; class QScroller * QScroller::scroller(class QObject *) ??4QScrollerProperties@@QAEAAV0@ABV0@@Z @ 13251 NONAME ; class QScrollerProperties & QScrollerProperties::operator=(class QScrollerProperties const &) ?d_func@QScroller@@AAEPAVQScrollerPrivate@@XZ @ 13252 NONAME ; class QScrollerPrivate * QScroller::d_func(void) @@ -13258,48 +13258,48 @@ EXPORTS ??0QScrollerProperties@@QAE@XZ @ 13257 NONAME ; QScrollerProperties::QScrollerProperties(void) ?setLineHeight@QTextBlockFormat@@QAEXMH@Z @ 13258 NONAME ; void QTextBlockFormat::setLineHeight(float, int) ?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 13259 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const - ??0QTextImageFormat@@QAE@ABV0@@Z @ 13260 NONAME ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &) - ??0QMoveEvent@@QAE@ABV0@@Z @ 13261 NONAME ; QMoveEvent::QMoveEvent(class QMoveEvent const &) + ??0QTextImageFormat@@QAE@ABV0@@Z @ 13260 NONAME ABSENT ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &) + ??0QMoveEvent@@QAE@ABV0@@Z @ 13261 NONAME ABSENT ; QMoveEvent::QMoveEvent(class QMoveEvent const &) ?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 13262 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const - ??0QInputContextFactoryInterface@@QAE@XZ @ 13263 NONAME ; QInputContextFactoryInterface::QInputContextFactoryInterface(void) - ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13264 NONAME ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &) + ??0QInputContextFactoryInterface@@QAE@XZ @ 13263 NONAME ABSENT ; QInputContextFactoryInterface::QInputContextFactoryInterface(void) + ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13264 NONAME ABSENT ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &) ?resetInternalData@QAbstractProxyModel@@IAEXXZ @ 13265 NONAME ; void QAbstractProxyModel::resetInternalData(void) - ??0Symbol@QCss@@QAE@ABU01@@Z @ 13266 NONAME ; QCss::Symbol::Symbol(struct QCss::Symbol const &) + ??0Symbol@QCss@@QAE@ABU01@@Z @ 13266 NONAME ABSENT ; QCss::Symbol::Symbol(struct QCss::Symbol const &) ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQVectorPath@@@Z @ 13267 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QVectorPath const &) - ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13268 NONAME ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &) + ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13268 NONAME ABSENT ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &) ?scrollTo@QScroller@@QAEXABVQPointF@@@Z @ 13269 NONAME ; void QScroller::scrollTo(class QPointF const &) - ??0QGraphicsSystem@@QAE@XZ @ 13270 NONAME ; QGraphicsSystem::QGraphicsSystem(void) - ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13271 NONAME ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &) - ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13272 NONAME ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &) + ??0QGraphicsSystem@@QAE@XZ @ 13270 NONAME ABSENT ; QGraphicsSystem::QGraphicsSystem(void) + ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13271 NONAME ABSENT ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &) + ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13272 NONAME ABSENT ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &) ?clip@QBlitterPaintEngine@@QAEPBVQClipData@@XZ @ 13273 NONAME ; class QClipData const * QBlitterPaintEngine::clip(void) ?d_func@QScroller@@ABEPBVQScrollerPrivate@@XZ @ 13274 NONAME ; class QScrollerPrivate const * QScroller::d_func(void) const ?setNumberSuffix@QTextListFormat@@QAEXABVQString@@@Z @ 13275 NONAME ; void QTextListFormat::setNumberSuffix(class QString const &) ?swap@QPicture@@QAEXAAV1@@Z @ 13276 NONAME ; void QPicture::swap(class QPicture &) ?swap@QPainterPath@@QAEXAAV1@@Z @ 13277 NONAME ; void QPainterPath::swap(class QPainterPath &) - ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13278 NONAME ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &) + ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13278 NONAME ABSENT ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &) ?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 13279 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const ?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 13280 NONAME ; class QFont QFontEngine::createExplicitFont(void) const ?alphaMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@@Z @ 13281 NONAME ; class QImage QFontEngine::alphaMapForGlyph(unsigned int, struct QFixed) ?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 13282 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) ?swap@QIcon@@QAEXAAV1@@Z @ 13283 NONAME ; void QIcon::swap(class QIcon &) ?unmarkRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13284 NONAME ; void QBlittablePixmapData::unmarkRasterOverlay(class QRectF const &) - ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13285 NONAME ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &) - ??0QIconEngine@@QAE@XZ @ 13286 NONAME ; QIconEngine::QIconEngine(void) + ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13285 NONAME ABSENT ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &) + ??0QIconEngine@@QAE@XZ @ 13286 NONAME ABSENT ; QIconEngine::QIconEngine(void) ?brushOriginChanged@QBlitterPaintEngine@@UAEXXZ @ 13287 NONAME ; void QBlitterPaintEngine::brushOriginChanged(void) ?openFile@QFileOpenEvent@@QBE_NAAVQFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13288 NONAME ; bool QFileOpenEvent::openFile(class QFile &, class QFlags<enum QIODevice::OpenModeFlag>) const - ??_EQBrush@@QAE@I@Z @ 13289 NONAME ; QBrush::~QBrush(unsigned int) + ??_EQBrush@@QAE@I@Z @ 13289 NONAME ABSENT ; QBrush::~QBrush(unsigned int) ??0QApplicationPrivate@@QAE@AAHPAPADW4Type@QApplication@@H@Z @ 13290 NONAME ; QApplicationPrivate::QApplicationPrivate(int &, char * *, enum QApplication::Type, int) ?handleInput@QScroller@@QAE_NW4Input@1@ABVQPointF@@_J@Z @ 13291 NONAME ; bool QScroller::handleInput(enum QScroller::Input, class QPointF const &, long long) ??8QScrollerProperties@@QBE_NABV0@@Z @ 13292 NONAME ; bool QScrollerProperties::operator==(class QScrollerProperties const &) const ?inFontUcs4@QFontMetrics@@QBE_NI@Z @ 13293 NONAME ; bool QFontMetrics::inFontUcs4(unsigned int) const - ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13294 NONAME ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int) - ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13295 NONAME ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &) - ??0QTextObjectInterface@@QAE@XZ @ 13296 NONAME ; QTextObjectInterface::QTextObjectInterface(void) + ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13294 NONAME ABSENT ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int) + ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13295 NONAME ABSENT ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &) + ??0QTextObjectInterface@@QAE@XZ @ 13296 NONAME ABSENT ; QTextObjectInterface::QTextObjectInterface(void) ?unlock@QBlittable@@QAEXXZ @ 13297 NONAME ; void QBlittable::unlock(void) ?metaObject@QScroller@@UBEPBUQMetaObject@@XZ @ 13298 NONAME ; struct QMetaObject const * QScroller::metaObject(void) const ?d_func@QScrollEvent@@ABEPBVQScrollEventPrivate@@XZ @ 13299 NONAME ; class QScrollEventPrivate const * QScrollEvent::d_func(void) const ?swap@QRegion@@QAEXAAV1@@Z @ 13300 NONAME ; void QRegion::swap(class QRegion &) - ??0QHideEvent@@QAE@ABV0@@Z @ 13301 NONAME ; QHideEvent::QHideEvent(class QHideEvent const &) + ??0QHideEvent@@QAE@ABV0@@Z @ 13301 NONAME ABSENT ; QHideEvent::QHideEvent(class QHideEvent const &) ?ensureVisible@QScroller@@QAEXABVQRectF@@MMH@Z @ 13302 NONAME ; void QScroller::ensureVisible(class QRectF const &, float, float, int) ?qt_metacall@QFlickGesture@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13303 NONAME ; int QFlickGesture::qt_metacall(enum QMetaObject::Call, int, void * *) ?setItemData@QAbstractProxyModel@@UAE_NABVQModelIndex@@ABV?$QMap@HVQVariant@@@@@Z @ 13304 NONAME ; bool QAbstractProxyModel::setItemData(class QModelIndex const &, class QMap<int, class QVariant> const &) @@ -13318,57 +13318,57 @@ EXPORTS ??9QGlyphs@@QBE_NABV0@@Z @ 13317 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const ??1QBlittable@@UAE@XZ @ 13318 NONAME ; QBlittable::~QBlittable(void) ??_EQBlitterPaintEngine@@UAE@I@Z @ 13319 NONAME ; QBlitterPaintEngine::~QBlitterPaintEngine(unsigned int) - ??0QCloseEvent@@QAE@ABV0@@Z @ 13320 NONAME ; QCloseEvent::QCloseEvent(class QCloseEvent const &) + ??0QCloseEvent@@QAE@ABV0@@Z @ 13320 NONAME ABSENT ; QCloseEvent::QCloseEvent(class QCloseEvent const &) ?grabbedGesture@QScroller@@SA?AW4GestureType@Qt@@PAVQObject@@@Z @ 13321 NONAME ; enum Qt::GestureType QScroller::grabbedGesture(class QObject *) ?buffer@QBlittablePixmapData@@UAEPAVQImage@@XZ @ 13322 NONAME ; class QImage * QBlittablePixmapData::buffer(void) - ??0QTextFrameLayoutData@@QAE@XZ @ 13323 NONAME ; QTextFrameLayoutData::QTextFrameLayoutData(void) + ??0QTextFrameLayoutData@@QAE@XZ @ 13323 NONAME ABSENT ; QTextFrameLayoutData::QTextFrameLayoutData(void) ?staticMetaObject@QFlickGesture@@2UQMetaObject@@B @ 13324 NONAME ; struct QMetaObject const QFlickGesture::staticMetaObject ?finalPosition@QScroller@@QBE?AVQPointF@@XZ @ 13325 NONAME ; class QPointF QScroller::finalPosition(void) const - ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13326 NONAME ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &) + ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13326 NONAME ABSENT ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &) ?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13327 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *) ??0QGlyphs@@QAE@ABV0@@Z @ 13328 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &) ?lock@QBlittable@@QAEPAVQImage@@XZ @ 13329 NONAME ; class QImage * QBlittable::lock(void) ?setFontHintingPreference@QTextCharFormat@@QAEXW4HintingPreference@QFont@@@Z @ 13330 NONAME ; void QTextCharFormat::setFontHintingPreference(enum QFont::HintingPreference) - ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13331 NONAME ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &) + ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13331 NONAME ABSENT ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &) ??_EQInternalMimeData@@UAE@I@Z @ 13332 NONAME ; QInternalMimeData::~QInternalMimeData(unsigned int) - ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13333 NONAME ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &) - ??_EQPalette@@QAE@I@Z @ 13334 NONAME ; QPalette::~QPalette(unsigned int) - ??0QFocusEvent@@QAE@ABV0@@Z @ 13335 NONAME ; QFocusEvent::QFocusEvent(class QFocusEvent const &) - ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13336 NONAME ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &) + ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13333 NONAME ABSENT ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &) + ??_EQPalette@@QAE@I@Z @ 13334 NONAME ABSENT ; QPalette::~QPalette(unsigned int) + ??0QFocusEvent@@QAE@ABV0@@Z @ 13335 NONAME ABSENT ; QFocusEvent::QFocusEvent(class QFocusEvent const &) + ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13336 NONAME ABSENT ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &) ?markRasterOverlay@QBlittablePixmapData@@QAEXABVQPointF@@ABVQTextItem@@@Z @ 13337 NONAME ; void QBlittablePixmapData::markRasterOverlay(class QPointF const &, class QTextItem const &) ?trUtf8@QScroller@@SA?AVQString@@PBD0@Z @ 13338 NONAME ; class QString QScroller::trUtf8(char const *, char const *) - ??_EQIcon@@QAE@I@Z @ 13339 NONAME ; QIcon::~QIcon(unsigned int) + ??_EQIcon@@QAE@I@Z @ 13339 NONAME ABSENT ; QIcon::~QIcon(unsigned int) ??YQGlyphs@@AAEAAV0@ABV0@@Z @ 13340 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &) ??9QScrollerProperties@@QBE_NABV0@@Z @ 13341 NONAME ; bool QScrollerProperties::operator!=(class QScrollerProperties const &) const - ??0QTextListFormat@@QAE@ABV0@@Z @ 13342 NONAME ; QTextListFormat::QTextListFormat(class QTextListFormat const &) + ??0QTextListFormat@@QAE@ABV0@@Z @ 13342 NONAME ABSENT ; QTextListFormat::QTextListFormat(class QTextListFormat const &) ?drawEllipse@QBlitterPaintEngine@@UAEXABVQRectF@@@Z @ 13343 NONAME ; void QBlitterPaintEngine::drawEllipse(class QRectF const &) - ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13344 NONAME ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void) - ??_EQTextLayout@@QAE@I@Z @ 13345 NONAME ; QTextLayout::~QTextLayout(unsigned int) - ??0QWheelEvent@@QAE@ABV0@@Z @ 13346 NONAME ; QWheelEvent::QWheelEvent(class QWheelEvent const &) + ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13344 NONAME ABSENT ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void) + ??_EQTextLayout@@QAE@I@Z @ 13345 NONAME ABSENT ; QTextLayout::~QTextLayout(unsigned int) + ??0QWheelEvent@@QAE@ABV0@@Z @ 13346 NONAME ABSENT ; QWheelEvent::QWheelEvent(class QWheelEvent const &) ?blittable@QBlittablePixmapData@@QBEPAVQBlittable@@XZ @ 13347 NONAME ; class QBlittable * QBlittablePixmapData::blittable(void) const ?resizeCache@QTextureGlyphCache@@QAEXHH@Z @ 13348 NONAME ; void QTextureGlyphCache::resizeCache(int, int) ??0QScrollerProperties@@QAE@ABV0@@Z @ 13349 NONAME ; QScrollerProperties::QScrollerProperties(class QScrollerProperties const &) - ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13350 NONAME ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &) + ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13350 NONAME ABSENT ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &) ?metaObject@QInternalMimeData@@UBEPBUQMetaObject@@XZ @ 13351 NONAME ; struct QMetaObject const * QInternalMimeData::metaObject(void) const ?setContentPos@QScrollPrepareEvent@@QAEXABVQPointF@@@Z @ 13352 NONAME ; void QScrollPrepareEvent::setContentPos(class QPointF const &) - ??_EQTextEngine@@QAE@I@Z @ 13353 NONAME ; QTextEngine::~QTextEngine(unsigned int) - ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13354 NONAME ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &) - ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13355 NONAME ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &) + ??_EQTextEngine@@QAE@I@Z @ 13353 NONAME ABSENT ; QTextEngine::~QTextEngine(unsigned int) + ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13354 NONAME ABSENT ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &) + ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13355 NONAME ABSENT ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &) ?staticMetaObject@QScroller@@2UQMetaObject@@B @ 13356 NONAME ; struct QMetaObject const QScroller::staticMetaObject ?hasFormatHelper@QInternalMimeData@@SA_NABVQString@@PBVQMimeData@@@Z @ 13357 NONAME ; bool QInternalMimeData::hasFormatHelper(class QString const &, class QMimeData const *) ?state@QBlitterPaintEngine@@QAEPAVQPainterState@@XZ @ 13358 NONAME ; class QPainterState * QBlitterPaintEngine::state(void) ?penChanged@QBlitterPaintEngine@@UAEXXZ @ 13359 NONAME ; void QBlitterPaintEngine::penChanged(void) ??0QFileOpenEvent@@QAE@ABVRFile@@@Z @ 13360 NONAME ; QFileOpenEvent::QFileOpenEvent(class RFile const &) ?hasHeightForWidth@QWidgetPrivate@@UBE_NXZ @ 13361 NONAME ; bool QWidgetPrivate::hasHeightForWidth(void) const - ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13362 NONAME ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &) + ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13362 NONAME ABSENT ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &) ?toImage@QBlittablePixmapData@@UBE?AVQImage@@XZ @ 13363 NONAME ; class QImage QBlittablePixmapData::toImage(void) const ??_EQBlittable@@UAE@I@Z @ 13364 NONAME ; QBlittable::~QBlittable(unsigned int) - ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13365 NONAME ; class QBitmap & QBitmap::operator=(class QBitmap const &) + ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13365 NONAME ABSENT ; class QBitmap & QBitmap::operator=(class QBitmap const &) ??1QInternalMimeData@@UAE@XZ @ 13366 NONAME ; QInternalMimeData::~QInternalMimeData(void) - ??0QItemSelection@@QAE@ABV0@@Z @ 13367 NONAME ; QItemSelection::QItemSelection(class QItemSelection const &) + ??0QItemSelection@@QAE@ABV0@@Z @ 13367 NONAME ABSENT ; QItemSelection::QItemSelection(class QItemSelection const &) ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13368 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) ?staticMetaObject@QInternalMimeData@@2UQMetaObject@@B @ 13369 NONAME ; struct QMetaObject const QInternalMimeData::staticMetaObject ?activeScrollers@QScroller@@SA?AV?$QList@PAVQScroller@@@@XZ @ 13370 NONAME ; class QList<class QScroller *> QScroller::activeScrollers(void) ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 13371 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &) - ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13372 NONAME ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) + ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13372 NONAME ABSENT ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &) -- cgit v0.12