Merge remote-tracking branch 'base/master' into refactor
Conflicts: src/gui/embedded/qmousepc_qws.cpp src/gui/embedded/qwslock.cpp src/plugins/decorations/default/default.pro src/plugins/decorations/styled/styled.pro src/plugins/decorations/windows/windows.pro src/plugins/gfxdrivers/ahi/ahi.pro src/plugins/gfxdrivers/directfb/directfb.pro src/plugins/gfxdrivers/eglnullws/eglnullws.pro src/plugins/gfxdrivers/linuxfb/linuxfb.pro src/plugins/gfxdrivers/qvfb/qvfb.pro src/plugins/gfxdrivers/transformed/transformed.pro src/plugins/gfxdrivers/vnc/vnc.pro src/plugins/graphicssystems/meego/meego.pro src/plugins/graphicssystems/opengl/opengl.pro src/plugins/graphicssystems/openvg/openvg.pro src/plugins/graphicssystems/shivavg/shivavg.pro src/plugins/graphicssystems/trace/trace.pro src/plugins/kbddrivers/linuxinput/linuxinput.pro src/plugins/mousedrivers/linuxtp/linuxtp.pro src/plugins/mousedrivers/pc/pc.pro src/plugins/mousedrivers/tslib/tslib.pro src/plugins/platforms/minimal/minimal.pro tests/auto/qerrormessage/qerrormessage.pro
This commit is contained in:
commit
00ef07fe96
43
configure
vendored
43
configure
vendored
@ -8471,22 +8471,6 @@ fi
|
|||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
QTMODULE="$outpath/mkspecs/qmodule.pri"
|
QTMODULE="$outpath/mkspecs/qmodule.pri"
|
||||||
|
|
||||||
cat >>"$QTMODULE.tmp" <<EOF
|
|
||||||
#paths
|
|
||||||
QT_SOURCE_TREE = \$\$quote($relpath)
|
|
||||||
QT_BUILD_TREE = \$\$quote($outpath)
|
|
||||||
QT_BUILD_PARTS = $CFG_BUILD_PARTS
|
|
||||||
|
|
||||||
#local paths that cannot be queried from the QT_INSTALL_* properties while building QTDIR
|
|
||||||
QMAKE_MOC = \$\$QT_BUILD_TREE/bin/moc
|
|
||||||
QMAKE_UIC = \$\$QT_BUILD_TREE/bin/uic
|
|
||||||
QMAKE_RCC = \$\$QT_BUILD_TREE/bin/rcc
|
|
||||||
QMAKE_QDBUSXML2CPP = \$\$QT_BUILD_TREE/bin/qdbusxml2cpp
|
|
||||||
QMAKE_INCDIR_QT = \$\$QT_BUILD_TREE/include
|
|
||||||
QMAKE_LIBDIR_QT = \$\$QT_BUILD_TREE/lib
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Ensure we can link to uninistalled libraries
|
# Ensure we can link to uninistalled libraries
|
||||||
if [ "$XPLATFORM_MINGW" != "yes" ] && [ "$CFG_EMBEDDED" != "nacl" ] && linkerSupportsFlag -rpath-link "$outpath/lib"; then
|
if [ "$XPLATFORM_MINGW" != "yes" ] && [ "$CFG_EMBEDDED" != "nacl" ] && linkerSupportsFlag -rpath-link "$outpath/lib"; then
|
||||||
echo "QMAKE_LFLAGS = -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib \$\$QMAKE_LFLAGS" >> "$QTMODULE.tmp"
|
echo "QMAKE_LFLAGS = -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib \$\$QMAKE_LFLAGS" >> "$QTMODULE.tmp"
|
||||||
@ -8537,13 +8521,6 @@ if [ "$CFG_MAC_XARCH" = "no" ]; then
|
|||||||
echo "QMAKE_MAC_XARCH = no" >> "$QTMODULE.tmp"
|
echo "QMAKE_MAC_XARCH = no" >> "$QTMODULE.tmp"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#dump the qmake spec
|
|
||||||
if [ -d "$outpath/mkspecs/$XPLATFORM" ]; then
|
|
||||||
echo "QMAKESPEC = \$\$QT_BUILD_TREE/mkspecs/$XPLATFORM" >> "$QTMODULE.tmp"
|
|
||||||
else
|
|
||||||
echo "QMAKESPEC = $XPLATFORM" >> "$QTMODULE.tmp"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# cmdline args
|
# cmdline args
|
||||||
cat "$QMAKE_VARS_FILE" >> "$QTMODULE.tmp"
|
cat "$QMAKE_VARS_FILE" >> "$QTMODULE.tmp"
|
||||||
rm -f "$QMAKE_VARS_FILE" 2>/dev/null
|
rm -f "$QMAKE_VARS_FILE" 2>/dev/null
|
||||||
@ -8562,6 +8539,19 @@ fi
|
|||||||
CACHEFILE="$outpath/.qmake.cache"
|
CACHEFILE="$outpath/.qmake.cache"
|
||||||
[ -f "$CACHEFILE.tmp" ] && rm -f "$CACHEFILE.tmp"
|
[ -f "$CACHEFILE.tmp" ] && rm -f "$CACHEFILE.tmp"
|
||||||
cat >>"$CACHEFILE.tmp" <<EOF
|
cat >>"$CACHEFILE.tmp" <<EOF
|
||||||
|
#paths
|
||||||
|
QT_SOURCE_TREE = \$\$quote($relpath)
|
||||||
|
QT_BUILD_TREE = \$\$quote($outpath)
|
||||||
|
QT_BUILD_PARTS = $CFG_BUILD_PARTS
|
||||||
|
|
||||||
|
#local paths that cannot be queried from the QT_INSTALL_* properties while building QTDIR
|
||||||
|
QMAKE_MOC = \$\$QT_BUILD_TREE/bin/moc
|
||||||
|
QMAKE_UIC = \$\$QT_BUILD_TREE/bin/uic
|
||||||
|
QMAKE_RCC = \$\$QT_BUILD_TREE/bin/rcc
|
||||||
|
QMAKE_QDBUSXML2CPP = \$\$QT_BUILD_TREE/bin/qdbusxml2cpp
|
||||||
|
QMAKE_INCDIR_QT = \$\$QT_BUILD_TREE/include
|
||||||
|
QMAKE_LIBDIR_QT = \$\$QT_BUILD_TREE/lib
|
||||||
|
|
||||||
include(\$\$PWD/mkspecs/qmodule.pri)
|
include(\$\$PWD/mkspecs/qmodule.pri)
|
||||||
CONFIG += $QMAKE_CONFIG dylib create_prl link_prl depend_includepath fix_output_dirs no_private_qt_headers_warning QTDIR_build
|
CONFIG += $QMAKE_CONFIG dylib create_prl link_prl depend_includepath fix_output_dirs no_private_qt_headers_warning QTDIR_build
|
||||||
QMAKE_ABSOLUTE_SOURCE_ROOT = \$\$QT_SOURCE_TREE
|
QMAKE_ABSOLUTE_SOURCE_ROOT = \$\$QT_SOURCE_TREE
|
||||||
@ -8569,6 +8559,13 @@ QMAKE_MOC_SRC = \$\$QT_BUILD_TREE/src/moc
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
#dump the qmake spec
|
||||||
|
if [ -d "$outpath/mkspecs/$XPLATFORM" ]; then
|
||||||
|
echo "QMAKESPEC = \$\$QT_BUILD_TREE/mkspecs/$XPLATFORM" >> "$CACHEFILE.tmp"
|
||||||
|
else
|
||||||
|
echo "QMAKESPEC = $XPLATFORM" >> "$CACHEFILE.tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
# incrementals
|
# incrementals
|
||||||
INCREMENTAL=""
|
INCREMENTAL=""
|
||||||
[ "$CFG_INCREMENTAL" = "auto" ] && "$WHICH" p4 >/dev/null 2>&1 && [ "$CFG_DEV" = "yes" ] && CFG_INCREMENTAL="yes"
|
[ "$CFG_INCREMENTAL" = "auto" ] && "$WHICH" p4 >/dev/null 2>&1 && [ "$CFG_DEV" = "yes" ] && CFG_INCREMENTAL="yes"
|
||||||
|
22
dist/changes-4.8.0
vendored
22
dist/changes-4.8.0
vendored
@ -39,12 +39,29 @@ QtCore
|
|||||||
- Removed support for QT_NO_THREAD define for QHostInfo.
|
- Removed support for QT_NO_THREAD define for QHostInfo.
|
||||||
- Optimized plugin loading on ELF platforms.
|
- Optimized plugin loading on ELF platforms.
|
||||||
Print failure reason at runtime with QT_DEBUG_PLUGINS=1 in environment.
|
Print failure reason at runtime with QT_DEBUG_PLUGINS=1 in environment.
|
||||||
|
- QMutexLocker: improved performence of the non contended case by inlining some function
|
||||||
|
- QThreadStorage: Added possibility to store object by value instead of by pointer [QTBUG-15033]
|
||||||
|
- QThread: fixed few race conditions [QTBUG-17257, QTBUG-15030]
|
||||||
|
- QtConcurrent: added support for c++0x lambda in few functions
|
||||||
|
- QObject: Improved performence of the signal activation
|
||||||
|
- QObject: added ways to connect signals using QMetaMethod
|
||||||
|
- QObject: deprecated qFindChild and qFindChildren
|
||||||
|
- QObject: optimize constructions and destruction of objects
|
||||||
|
- QObject: Qt::BlockingQueuedConnection can handle the return value [QTBUG-10440]
|
||||||
|
- QList/QVector/QStringList: added C++0x initilizer lists constructors.
|
||||||
|
- QVarLenghtArray: added method for consistency with QVector
|
||||||
|
- QStringBuilder: added support for QByteArray
|
||||||
|
- qSwap now uses std::swap, specialized std::swap for our container to work better with stl algoritms
|
||||||
|
- QVariant: deprecated global function qVariantSetValue, qVariantValue, qVariantCanConvert, qVariantFromValue
|
||||||
|
|
||||||
QtGui
|
QtGui
|
||||||
-----
|
-----
|
||||||
|
|
||||||
- QTabBar: reduced minimumSizeHint if ElideMode is set.
|
- QTabBar: reduced minimumSizeHint if ElideMode is set.
|
||||||
- QComboBox: Fixed a color propagation issue with the lineedit. [QTBUG-5950]
|
- QComboBox: Fixed a color propagation issue with the lineedit. [QTBUG-5950]
|
||||||
|
- Deprecate qGenericMatrixFromMatrix4x4 and qGenericMatrixToMatrix4x4
|
||||||
|
- QListView diverses optimisations [QTBUG-11438]
|
||||||
|
- QTreeWidget/QListWidget: use localeAwareCompare for string comparisons [QTBUG-10839]
|
||||||
|
|
||||||
QtOpenGL
|
QtOpenGL
|
||||||
--------
|
--------
|
||||||
@ -54,6 +71,10 @@ QtGui
|
|||||||
- Including <QtOpenGL> will not work in combination with GLEW, as
|
- Including <QtOpenGL> will not work in combination with GLEW, as
|
||||||
QGLFunctions will undefine GLEW's defines.
|
QGLFunctions will undefine GLEW's defines.
|
||||||
|
|
||||||
|
QtScript
|
||||||
|
--------
|
||||||
|
- Deprecated qScriptValueFromQMetaObject, qScriptValueToValue, qScriptValueFromValue
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Database Drivers *
|
* Database Drivers *
|
||||||
@ -136,6 +157,7 @@ Qt for Windows CE
|
|||||||
|
|
||||||
|
|
||||||
- qtconfig
|
- qtconfig
|
||||||
|
* removed Qt3support dependency
|
||||||
|
|
||||||
|
|
||||||
- qt3to4
|
- qt3to4
|
||||||
|
@ -21,6 +21,8 @@ GeometryEngine::~GeometryEngine()
|
|||||||
|
|
||||||
void GeometryEngine::init()
|
void GeometryEngine::init()
|
||||||
{
|
{
|
||||||
|
initializeGLFunctions();
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
// Generate 2 VBOs
|
// Generate 2 VBOs
|
||||||
glGenBuffers(2, vboIds);
|
glGenBuffers(2, vboIds);
|
||||||
|
@ -78,6 +78,8 @@ void MainWidget::timerEvent(QTimerEvent *e)
|
|||||||
|
|
||||||
void MainWidget::initializeGL()
|
void MainWidget::initializeGL()
|
||||||
{
|
{
|
||||||
|
initializeGLFunctions();
|
||||||
|
|
||||||
qglClearColor(Qt::black);
|
qglClearColor(Qt::black);
|
||||||
|
|
||||||
qDebug() << "Initializing shaders...";
|
qDebug() << "Initializing shaders...";
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define MAINWIDGET_H
|
#define MAINWIDGET_H
|
||||||
|
|
||||||
#include <QtOpenGL/QGLWidget>
|
#include <QtOpenGL/QGLWidget>
|
||||||
|
#include <QtOpenGL/QGLFunctions>
|
||||||
|
|
||||||
#include <QMatrix4x4>
|
#include <QMatrix4x4>
|
||||||
#include <QQuaternion>
|
#include <QQuaternion>
|
||||||
@ -12,7 +13,7 @@ class QGLShaderProgram;
|
|||||||
|
|
||||||
class GeometryEngine;
|
class GeometryEngine;
|
||||||
|
|
||||||
class MainWidget : public QGLWidget
|
class MainWidget : public QGLWidget, protected QGLFunctions
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCES = testqstring.cpp
|
SOURCES = testqstring.cpp
|
||||||
CONFIG += qtestlib
|
QT += testlib
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial1
|
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCES = testqstring.cpp
|
SOURCES = testqstring.cpp
|
||||||
CONFIG += qtestlib
|
QT += testlib
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial2
|
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCES = testgui.cpp
|
SOURCES = testgui.cpp
|
||||||
CONFIG += qtestlib
|
QT += testlib
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial3
|
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial3
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCES = testgui.cpp
|
SOURCES = testgui.cpp
|
||||||
CONFIG += qtestlib
|
QT += testlib
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial4
|
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial4
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
SOURCES = benchmarking.cpp
|
SOURCES = benchmarking.cpp
|
||||||
CONFIG += qtestlib
|
QT += testlib
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial5
|
target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/qtestlib/tutorial5
|
||||||
|
22
examples/widgets/applicationicon/applicationicon.svg
Normal file
22
examples/widgets/applicationicon/applicationicon.svg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" baseProfile="tiny" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 44 44">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="linearGradient2824" y2="1051.4" gradientUnits="userSpaceOnUse" x2="30.217" y1="1009.4" x1="15.109">
|
||||||
|
<stop stop-color="#41a200" offset="0"/>
|
||||||
|
<stop stop-color="#9be948" offset="0.63897"/>
|
||||||
|
<stop stop-color="#beff61" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linearGradient2848" y2="1009.4" gradientUnits="userSpaceOnUse" y1="1053.7" gradientTransform="matrix(0.85714286,0,0,0.85714286,2.1428572,146.19467)" x2="15.085" x1="31.027">
|
||||||
|
<stop stop-color="#41a200" offset="0"/>
|
||||||
|
<stop stop-color="#9be948" offset="0.88602"/>
|
||||||
|
<stop stop-color="#beff61" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="layer1" transform="translate(0,-1008.3622)">
|
||||||
|
<path id="rect2816" d="m8.412,1009h27.18c4.106,0,7.412,3.306,7.412,7.412v27.18c0,4.106-3.306,7.412-7.412,7.412h-27.18c-4.106,0-7.412-3-7.412-7v-27.18c0-4.106,3.306-7.412,7.412-7.412z" stroke-linecap="round" stroke-miterlimit="4" stroke-width="0.64300001" fill="url(#linearGradient2824)"/>
|
||||||
|
<path id="rect2816-4" d="m9.353,1011h25.29c3.52,0,6.353,2.833,6.353,6.353v25.29c0,3.519-2.833,6.353-6.353,6.353h-25.29c-3.52-0.1-6.353-2.1-6.353-6.1v-25.29c0-3.519,2.833-6.353,6.353-6.353z" stroke-linecap="round" stroke-miterlimit="4" stroke-width="0.64300001" fill="url(#linearGradient2848)"/>
|
||||||
|
<g id="text2893" font-weight="normal" transform="translate(-1.100281,1010.3622)" font-style="normal" font-stretch="normal" font-size="48px" font-variant="normal" font-family="Cambria Math" fill="#e5ffd5">
|
||||||
|
<path id="path2908" fill="#e5ffd5" d="m11.92,35.44c1.359-1.719,2.672-3.828,3.938-6.328l7.522-14.742c-0.8-3.13-1.54-5.321-2.24-6.586-0.69-1.266-1.76-1.899-3.2-1.899-1.328,0.0000307-2.594,0.6563-3.797,1.969l-1.148-1.266c2.156-2.359,4.289-3.539,6.398-3.539,1.469,0.0000335,2.609,0.418,3.422,1.254,0.8125,0.836,1.492,2.168,2.039,3.996,0.5469,1.828,1.32,5.359,2.32,10.59,1.297,6.828,2.309,11.14,3.035,12.93,0.7265,1.789,1.59,2.684,2.59,2.684,0.7187,0.000002,1.383-0.25,1.992-0.75l0.8906,1.406c-1.547,1.203-2.938,1.805-4.172,1.805-1.75,0-3-0.8984-3.75-2.695-0.75-1.797-1.797-6.633-3.141-14.51h-0.1406c-2.658,5.391-5.258,11.001-7.798,16.831h-4.758z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
14
examples/widgets/applicationicon/main.cpp
Normal file
14
examples/widgets/applicationicon/main.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include <QtGui/QLabel>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
QLabel label(QObject::tr("Hello, world!"));
|
||||||
|
#if defined(Q_WS_S60)
|
||||||
|
label.showMaximized();
|
||||||
|
#else
|
||||||
|
label.show();
|
||||||
|
#endif
|
||||||
|
return a.exec();
|
||||||
|
}
|
71
examples/widgets/elidedlabel/elidedlabel.cpp
Normal file
71
examples/widgets/elidedlabel/elidedlabel.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#include "elidedlabel.h"
|
||||||
|
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QTextLayout>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
ElidedLabel::ElidedLabel(const QString &text, QWidget *parent)
|
||||||
|
: QFrame(parent)
|
||||||
|
, elided(false)
|
||||||
|
, content(text)
|
||||||
|
{
|
||||||
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||||
|
}
|
||||||
|
//! [0]
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
void ElidedLabel::setText(const QString &newText)
|
||||||
|
{
|
||||||
|
content = newText;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
void ElidedLabel::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
QFrame::paintEvent(event);
|
||||||
|
|
||||||
|
QPainter painter(this);
|
||||||
|
QFontMetrics fontMetrics = painter.fontMetrics();
|
||||||
|
|
||||||
|
bool didElide = false;
|
||||||
|
int lineSpacing = fontMetrics.lineSpacing();
|
||||||
|
int y = 0;
|
||||||
|
|
||||||
|
QTextLayout textLayout(content, painter.font());
|
||||||
|
textLayout.beginLayout();
|
||||||
|
forever {
|
||||||
|
QTextLine line = textLayout.createLine();
|
||||||
|
|
||||||
|
if (!line.isValid())
|
||||||
|
break;
|
||||||
|
|
||||||
|
line.setLineWidth(width());
|
||||||
|
int nextLineY = y + lineSpacing;
|
||||||
|
|
||||||
|
if (height() >= nextLineY + lineSpacing) {
|
||||||
|
line.draw(&painter, QPoint(0, y));
|
||||||
|
y = nextLineY;
|
||||||
|
//! [2]
|
||||||
|
//! [3]
|
||||||
|
} else {
|
||||||
|
QString lastLine = content.mid(line.textStart());
|
||||||
|
QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width());
|
||||||
|
painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine);
|
||||||
|
line = textLayout.createLine();
|
||||||
|
didElide = line.isValid();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
textLayout.endLayout();
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
if (didElide != elided) {
|
||||||
|
elided = didElide;
|
||||||
|
emit elisionChanged(didElide);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! [4]
|
36
examples/widgets/elidedlabel/elidedlabel.h
Normal file
36
examples/widgets/elidedlabel/elidedlabel.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef ELIDEDLABEL_H
|
||||||
|
#define ELIDEDLABEL_H
|
||||||
|
|
||||||
|
#include <QFrame>
|
||||||
|
#include <QRect>
|
||||||
|
#include <QResizeEvent>
|
||||||
|
#include <QString>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
class ElidedLabel : public QFrame
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString text READ text WRITE setText)
|
||||||
|
Q_PROPERTY(bool isElided READ isElided)
|
||||||
|
|
||||||
|
public:
|
||||||
|
ElidedLabel(const QString &text, QWidget *parent = 0);
|
||||||
|
|
||||||
|
void setText(const QString &text);
|
||||||
|
const QString & text() const { return content; }
|
||||||
|
bool isElided() const { return elided; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void elisionChanged(bool elided);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool elided;
|
||||||
|
QString content;
|
||||||
|
};
|
||||||
|
//! [0]
|
||||||
|
|
||||||
|
#endif // TEXTWRAPPINGWIDGET_H
|
13
examples/widgets/elidedlabel/main.cpp
Normal file
13
examples/widgets/elidedlabel/main.cpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "testwidget.h"
|
||||||
|
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
int main( int argc, char *argv[] )
|
||||||
|
{
|
||||||
|
QApplication application( argc, argv );
|
||||||
|
TestWidget w;
|
||||||
|
w.showFullScreen();
|
||||||
|
return application.exec();
|
||||||
|
}
|
||||||
|
//! [0]
|
124
examples/widgets/elidedlabel/testwidget.cpp
Normal file
124
examples/widgets/elidedlabel/testwidget.cpp
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
#include "testwidget.h"
|
||||||
|
#include "elidedlabel.h"
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QSizePolicy>
|
||||||
|
#include <QGridLayout>
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
TestWidget::TestWidget(QWidget *parent):
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
const QString romeo = tr(
|
||||||
|
"But soft, what light through yonder window breaks? / "
|
||||||
|
"It is the east, and Juliet is the sun. / "
|
||||||
|
"Arise, fair sun, and kill the envious moon, / "
|
||||||
|
"Who is already sick and pale with grief / "
|
||||||
|
"That thou, her maid, art far more fair than she."
|
||||||
|
);
|
||||||
|
|
||||||
|
const QString macbeth = tr(
|
||||||
|
"To-morrow, and to-morrow, and to-morrow, / "
|
||||||
|
"Creeps in this petty pace from day to day, / "
|
||||||
|
"To the last syllable of recorded time; / "
|
||||||
|
"And all our yesterdays have lighted fools / "
|
||||||
|
"The way to dusty death. Out, out, brief candle! / "
|
||||||
|
"Life's but a walking shadow, a poor player, / "
|
||||||
|
"That struts and frets his hour upon the stage, / "
|
||||||
|
"And then is heard no more. It is a tale / "
|
||||||
|
"Told by an idiot, full of sound and fury, / "
|
||||||
|
"Signifying nothing."
|
||||||
|
);
|
||||||
|
|
||||||
|
const QString harry = tr("Feeling lucky, punk?");
|
||||||
|
|
||||||
|
textSamples << romeo << macbeth << harry;
|
||||||
|
//! [0]
|
||||||
|
|
||||||
|
//! [1]
|
||||||
|
sampleIndex = 0;
|
||||||
|
elidedText = new ElidedLabel(textSamples[sampleIndex], this);
|
||||||
|
elidedText->setFrameStyle(QFrame::Box);
|
||||||
|
//! [1]
|
||||||
|
|
||||||
|
//! [2]
|
||||||
|
QPushButton *switchButton = new QPushButton(tr("Switch text"));
|
||||||
|
connect(switchButton, SIGNAL(clicked(bool)), this, SLOT(switchText()));
|
||||||
|
|
||||||
|
QPushButton *exitButton = new QPushButton(tr("Exit"));
|
||||||
|
connect(exitButton, SIGNAL(clicked(bool)), this, SLOT(close()));
|
||||||
|
|
||||||
|
QLabel *label = new QLabel(tr("Elided"));
|
||||||
|
label->setVisible(elidedText->isElided());
|
||||||
|
connect(elidedText, SIGNAL(elisionChanged(bool)), label, SLOT(setVisible(bool)));
|
||||||
|
//! [2]
|
||||||
|
|
||||||
|
//! [3]
|
||||||
|
widthSlider = new QSlider(Qt::Horizontal);
|
||||||
|
widthSlider->setMinimum(0);
|
||||||
|
connect(widthSlider, SIGNAL(valueChanged(int)), this, SLOT(onWidthChanged(int)));
|
||||||
|
|
||||||
|
heightSlider = new QSlider(Qt::Vertical);
|
||||||
|
heightSlider->setInvertedAppearance(true);
|
||||||
|
heightSlider->setMinimum(0);
|
||||||
|
connect(heightSlider, SIGNAL(valueChanged(int)), this, SLOT(onHeightChanged(int)));
|
||||||
|
//! [3]
|
||||||
|
|
||||||
|
//! [4]
|
||||||
|
QGridLayout *layout = new QGridLayout();
|
||||||
|
layout->addWidget(label, 0, 1, Qt::AlignCenter);
|
||||||
|
layout->addWidget(switchButton, 0, 2);
|
||||||
|
layout->addWidget(exitButton, 0, 3);
|
||||||
|
layout->addWidget(widthSlider, 1, 1, 1, 3);
|
||||||
|
layout->addWidget(heightSlider, 2, 0);
|
||||||
|
layout->addWidget(elidedText, 2, 1, 1, 3, Qt::AlignTop | Qt::AlignLeft);
|
||||||
|
|
||||||
|
setLayout(layout);
|
||||||
|
//! [4]
|
||||||
|
|
||||||
|
//! [5]
|
||||||
|
#ifdef Q_WS_MAEMO_5
|
||||||
|
setAttribute(Qt::WA_Maemo5AutoOrientation, true);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//! [5]
|
||||||
|
|
||||||
|
//! [6]
|
||||||
|
void TestWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
|
||||||
|
int maxWidth = widthSlider->width();
|
||||||
|
widthSlider->setMaximum(maxWidth);
|
||||||
|
widthSlider->setValue(maxWidth / 2);
|
||||||
|
|
||||||
|
int maxHeight = heightSlider->height();
|
||||||
|
heightSlider->setMaximum(maxHeight);
|
||||||
|
heightSlider->setValue(maxHeight / 2);
|
||||||
|
|
||||||
|
elidedText->setFixedSize(widthSlider->value(), heightSlider->value());
|
||||||
|
}
|
||||||
|
//! [6]
|
||||||
|
|
||||||
|
//! [7]
|
||||||
|
void TestWidget::switchText()
|
||||||
|
{
|
||||||
|
sampleIndex = (sampleIndex + 1) % textSamples.size();
|
||||||
|
elidedText->setText(textSamples.at(sampleIndex));
|
||||||
|
}
|
||||||
|
//! [7]
|
||||||
|
|
||||||
|
//! [8]
|
||||||
|
void TestWidget::onWidthChanged(int width)
|
||||||
|
{
|
||||||
|
elidedText->setFixedWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestWidget::onHeightChanged(int height)
|
||||||
|
{
|
||||||
|
elidedText->setFixedHeight(height);
|
||||||
|
}
|
||||||
|
//! [8]
|
||||||
|
|
||||||
|
|
36
examples/widgets/elidedlabel/testwidget.h
Normal file
36
examples/widgets/elidedlabel/testwidget.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef TESTWIDGET_H
|
||||||
|
#define TESTWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QSlider>
|
||||||
|
#include <QComboBox>
|
||||||
|
|
||||||
|
class ElidedLabel;
|
||||||
|
|
||||||
|
//! [0]
|
||||||
|
class TestWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TestWidget(QWidget *parent = 0);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void switchText();
|
||||||
|
void onWidthChanged(int width);
|
||||||
|
void onHeightChanged(int height);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int sampleIndex;
|
||||||
|
QStringList textSamples;
|
||||||
|
ElidedLabel *elidedText;
|
||||||
|
QSlider *heightSlider;
|
||||||
|
QSlider *widthSlider;
|
||||||
|
};
|
||||||
|
//! [0]
|
||||||
|
|
||||||
|
#endif // TESTWIDGET_H
|
@ -26,7 +26,11 @@ exists($$_PRO_FILE_PWD_/sync.profile) {
|
|||||||
|
|
||||||
message("Running syncqt for $$PRO_BASENAME in $$OUT_PWD")
|
message("Running syncqt for $$PRO_BASENAME in $$OUT_PWD")
|
||||||
qtPrepareTool(QMAKE_SYNCQT, syncqt)
|
qtPrepareTool(QMAKE_SYNCQT, syncqt)
|
||||||
system("$$QMAKE_SYNCQT $$QTFWD -outdir $$OUT_PWD $$_PRO_FILE_PWD_")
|
system("$$QMAKE_SYNCQT $$QTFWD -outdir $$OUT_PWD $$_PRO_FILE_PWD_") {
|
||||||
|
# success! Nothing to do
|
||||||
|
} else {
|
||||||
|
error("Failed to run: $$QMAKE_SYNCQT $$QTFWD -outdir $$OUT_PWD $$_PRO_FILE_PWD_")
|
||||||
|
}
|
||||||
unset(QTFWD)
|
unset(QTFWD)
|
||||||
unset(PRO_BASENAME)
|
unset(PRO_BASENAME)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
QT += xml
|
QT += xml uilib
|
||||||
contains(QT_CONFIG, script): QT += script
|
!isEmpty(QT.script.name): QT += script
|
||||||
|
!isEmpty(QT.designer.name): QT += designer
|
||||||
qt:load(qt)
|
qt:load(qt)
|
||||||
|
|
||||||
plugin:DEFINES += QDESIGNER_EXPORT_WIDGETS
|
plugin:DEFINES += QDESIGNER_EXPORT_WIDGETS
|
||||||
|
|
||||||
qtAddLibrary(QtDesigner, true)
|
|
||||||
|
@ -1,20 +1,6 @@
|
|||||||
CONFIG += testcase
|
CONFIG += testcase
|
||||||
|
|
||||||
!symbian {
|
QT += declarative qmltest
|
||||||
INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtQuickTest
|
|
||||||
} else {
|
|
||||||
load(data_caging_paths)
|
|
||||||
|
|
||||||
INCLUDEPATH+=$$MW_LAYER_PUBLIC_EXPORT_PATH(QtQuickTest)
|
|
||||||
}
|
|
||||||
|
|
||||||
QT += declarative
|
|
||||||
|
|
||||||
win32:CONFIG(debug, debug|release) {
|
|
||||||
LIBS += -lQtQuickTest$${QT_LIBINFIX}d
|
|
||||||
} else {
|
|
||||||
LIBS += -lQtQuickTest$${QT_LIBINFIX}
|
|
||||||
}
|
|
||||||
|
|
||||||
# If the .pro file specified an IMPORTPATH, then add that to
|
# If the .pro file specified an IMPORTPATH, then add that to
|
||||||
# the command-line when the test is run.
|
# the command-line when the test is run.
|
||||||
|
@ -160,7 +160,7 @@ for(QTLIB, $$list($$lower($$unique(QT)))) {
|
|||||||
|
|
||||||
# add include paths for all .depends, since module/application might need f.ex. template specializations etc.
|
# add include paths for all .depends, since module/application might need f.ex. template specializations etc.
|
||||||
QT_DEPENDS -= $$QT
|
QT_DEPENDS -= $$QT
|
||||||
for(QTLIB, $$list($$lower($$unique(QT_DEPENDS)))):INCLUDEPATH += $$INCLUDEPATH $$eval(QT.$${QTLIB}.includes)
|
for(QTLIB, $$list($$lower($$unique(QT_DEPENDS)))):INCLUDEPATH *= $$INCLUDEPATH $$eval(QT.$${QTLIB}.includes)
|
||||||
|
|
||||||
!isEmpty(using_privates):!no_private_qt_headers_warning:if(!debug_and_release|!build_pass) {
|
!isEmpty(using_privates):!no_private_qt_headers_warning:if(!debug_and_release|!build_pass) {
|
||||||
message("This project is using private headers and will therefore be tied to this specific Qt module build version.")
|
message("This project is using private headers and will therefore be tied to this specific Qt module build version.")
|
||||||
|
41
mkspecs/features/qt_plugin.prf
Normal file
41
mkspecs/features/qt_plugin.prf
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
TEMPLATE = lib
|
||||||
|
isEmpty(QT_MAJOR_VERSION) {
|
||||||
|
VERSION=5.0.0
|
||||||
|
} else {
|
||||||
|
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
|
||||||
|
}
|
||||||
|
CONFIG += qt plugin
|
||||||
|
|
||||||
|
win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release
|
||||||
|
TARGET = $$qtLibraryTarget($$TARGET)
|
||||||
|
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
|
||||||
|
|
||||||
|
load(qt_targets)
|
||||||
|
|
||||||
|
wince*:LIBS += $$QMAKE_LIBS_GUI
|
||||||
|
|
||||||
|
symbian: {
|
||||||
|
TARGET.EPOCALLOWDLLDATA=1
|
||||||
|
TARGET.CAPABILITY = All -Tcb
|
||||||
|
TARGET = $${TARGET}$${QT_LIBINFIX}
|
||||||
|
load(armcc_warnings)
|
||||||
|
|
||||||
|
# Make partial upgrade SIS file for Qt plugin dll's
|
||||||
|
# Partial upgrade SIS file
|
||||||
|
vendorinfo = \
|
||||||
|
"; Localised Vendor name" \
|
||||||
|
"%{\"Nokia\"}" \
|
||||||
|
" " \
|
||||||
|
"; Unique Vendor name" \
|
||||||
|
":\"Nokia, Qt\"" \
|
||||||
|
" "
|
||||||
|
isEmpty(QT_LIBINFIX): PARTIAL_UPGRADE_UID = 0x2001E61C
|
||||||
|
else: PARTIAL_UPGRADE_UID = 0xE001E61C
|
||||||
|
|
||||||
|
pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \
|
||||||
|
"$${LITERAL_HASH}{\"$${TARGET}\"}, ($$PARTIAL_UPGRADE_UID), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
|
||||||
|
partial_upgrade.pkg_prerules = pu_header vendorinfo
|
||||||
|
partial_upgrade.files = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
|
||||||
|
partial_upgrade.path = c:/sys/bin
|
||||||
|
DEPLOYMENT += partial_upgrade
|
||||||
|
}
|
42
qtbase.pro
42
qtbase.pro
@ -10,26 +10,34 @@ cross_compile: CONFIG += nostrip
|
|||||||
module_qtbase_tests.subdir = tests
|
module_qtbase_tests.subdir = tests
|
||||||
module_qtbase_tests.target = module-qtbase-tests
|
module_qtbase_tests.target = module-qtbase-tests
|
||||||
module_qtbase_tests.depends = module_qtbase_src
|
module_qtbase_tests.depends = module_qtbase_src
|
||||||
module_qtbase_tests.CONFIG = no_default_target no_default_install
|
module_qtbase_tests.CONFIG = no_default_install
|
||||||
|
|
||||||
#process the projects
|
#process the projects
|
||||||
for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) {
|
PROJECTS=$$eval($$list($$lower($$unique(QT_BUILD_PARTS))))
|
||||||
isEqual(PROJECT, examples) {
|
# note that the order matters for these blocks!
|
||||||
SUBDIRS += examples
|
contains(PROJECTS, qmake) {
|
||||||
} else:isEqual(PROJECT, demos) {
|
PROJECTS -= qmake
|
||||||
SUBDIRS += demos
|
# nothing to be done
|
||||||
} else:isEqual(PROJECT, tests) {
|
}
|
||||||
module_qtbase_tests.CONFIG -= no_default_target
|
contains(PROJECTS, libs) {
|
||||||
} else:isEqual(PROJECT, libs) {
|
PROJECTS -= libs
|
||||||
include(src/src.pro)
|
include(src/src.pro)
|
||||||
} else:isEqual(PROJECT, qmake) {
|
}
|
||||||
# SUBDIRS += qmake
|
contains(PROJECTS, examples) {
|
||||||
} else {
|
PROJECTS -= examples
|
||||||
message(Unknown PROJECT: $$PROJECT)
|
SUBDIRS += examples
|
||||||
}
|
}
|
||||||
|
contains(PROJECTS, demos) {
|
||||||
|
PROJECTS -= demos
|
||||||
|
SUBDIRS += demos
|
||||||
|
}
|
||||||
|
contains(PROJECTS, tests) {
|
||||||
|
PROJECTS -= tests
|
||||||
|
SUBDIRS += module_qtbase_tests
|
||||||
|
}
|
||||||
|
!isEmpty(PROJECTS) {
|
||||||
|
message(Unknown PROJECTS: $$PROJECTS)
|
||||||
}
|
}
|
||||||
|
|
||||||
SUBDIRS += module_qtbase_tests
|
|
||||||
|
|
||||||
!symbian: confclean.depends += clean
|
!symbian: confclean.depends += clean
|
||||||
confclean.commands =
|
confclean.commands =
|
||||||
|
@ -57,6 +57,20 @@ QT_MODULE(Core)
|
|||||||
# define QT_TYPENAME typename
|
# define QT_TYPENAME typename
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace QtPrivate {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
class HasResultType {
|
||||||
|
typedef char Yes;
|
||||||
|
typedef void *No;
|
||||||
|
template<typename U> static Yes test(int, const typename U::result_type * = 0);
|
||||||
|
template<typename U> static No test(double);
|
||||||
|
public:
|
||||||
|
enum { Value = (sizeof(test<T>(0)) == sizeof(Yes)) };
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
QT_END_HEADER
|
QT_END_HEADER
|
||||||
|
|
||||||
|
@ -195,17 +195,10 @@ QtConcurrent::ConstMemberFunctionWrapper<T, C> createFunctionWrapper(T (C::*func
|
|||||||
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
|
return QtConcurrent::ConstMemberFunctionWrapper<T, C>(func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Functor, bool foo = HasResultType<Functor>::Value>
|
||||||
template<typename T>
|
|
||||||
void *lazyResultType_helper(int, typename T::result_type * = 0);
|
|
||||||
template<typename T>
|
|
||||||
char lazyResultType_helper(double);
|
|
||||||
|
|
||||||
template <typename Functor, bool foo = sizeof(lazyResultType_helper<Functor>(0)) != sizeof(void*)>
|
|
||||||
struct LazyResultType { typedef typename Functor::result_type Type; };
|
struct LazyResultType { typedef typename Functor::result_type Type; };
|
||||||
template <typename Functor>
|
template <typename Functor>
|
||||||
struct LazyResultType<Functor, true> { typedef void Type; };
|
struct LazyResultType<Functor, false> { typedef void Type; };
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct ReduceResultType;
|
struct ReduceResultType;
|
||||||
|
@ -71,63 +71,114 @@ namespace QtConcurrent {
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
QFuture<T> run(T (*functionPointer)())
|
QFuture<T> run(T (*functionPointer)())
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall0<T, T (*)()>::type(functionPointer))->start();
|
return (new StoredFunctorCall0<T, T (*)()>(functionPointer))->start();
|
||||||
}
|
}
|
||||||
template <typename T, typename Param1, typename Arg1>
|
template <typename T, typename Param1, typename Arg1>
|
||||||
QFuture<T> run(T (*functionPointer)(Param1), const Arg1 &arg1)
|
QFuture<T> run(T (*functionPointer)(Param1), const Arg1 &arg1)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall1<T, T (*)(Param1), Arg1>::type(functionPointer, arg1))->start();
|
return (new StoredFunctorCall1<T, T (*)(Param1), Arg1>(functionPointer, arg1))->start();
|
||||||
}
|
}
|
||||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2>
|
||||||
QFuture<T> run(T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
QFuture<T> run(T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>::type(functionPointer, arg1, arg2))->start();
|
return (new StoredFunctorCall2<T, T (*)(Param1, Param2), Arg1, Arg2>(functionPointer, arg1, arg2))->start();
|
||||||
}
|
}
|
||||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
|
||||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>::type(functionPointer, arg1, arg2, arg3))->start();
|
return (new StoredFunctorCall3<T, T (*)(Param1, Param2, Param3), Arg1, Arg2, Arg3>(functionPointer, arg1, arg2, arg3))->start();
|
||||||
}
|
}
|
||||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
|
||||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>::type(functionPointer, arg1, arg2, arg3, arg4))->start();
|
return (new StoredFunctorCall4<T, T (*)(Param1, Param2, Param3, Param4), Arg1, Arg2, Arg3, Arg4>(functionPointer, arg1, arg2, arg3, arg4))->start();
|
||||||
}
|
}
|
||||||
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
template <typename T, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
|
||||||
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
QFuture<T> run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
|
return (new StoredFunctorCall5<T, T (*)(Param1, Param2, Param3, Param4, Param5), Arg1, Arg2, Arg3, Arg4, Arg5>(functionPointer, arg1, arg2, arg3, arg4, arg5))->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Q_COMPILER_DECLTYPE
|
||||||
|
|
||||||
|
template <typename Functor>
|
||||||
|
auto run(Functor functor) -> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor())> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor()) result_type;
|
||||||
|
return (new StoredFunctorCall0<result_type, Functor>(functor))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Functor, typename Arg1>
|
||||||
|
auto run(Functor functor, const Arg1 &arg1)
|
||||||
|
-> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1))> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor(arg1)) result_type;
|
||||||
|
return (new StoredFunctorCall1<result_type, Functor, Arg1>(functor, arg1))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Functor, typename Arg1, typename Arg2>
|
||||||
|
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2)
|
||||||
|
-> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2))> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor(arg1, arg2)) result_type;
|
||||||
|
return (new StoredFunctorCall2<result_type, Functor, Arg1, Arg2>(functor, arg1, arg2))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Functor, typename Arg1, typename Arg2, typename Arg3>
|
||||||
|
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||||
|
-> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3))> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor(arg1, arg2, arg3)) result_type;
|
||||||
|
return (new StoredFunctorCall3<result_type, Functor, Arg1, Arg2, Arg3>(functor, arg1, arg2, arg3))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||||
|
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||||
|
-> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4))> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type;
|
||||||
|
return (new StoredFunctorCall4<result_type, Functor, Arg1, Arg2, Arg3, Arg4>(functor, arg1, arg2, arg3, arg4))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Functor, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||||
|
auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||||
|
-> typename QtPrivate::QEnableIf<!QtPrivate::HasResultType<Functor>::Value, QFuture<decltype(functor(arg1, arg2, arg3, arg4, arg5))> >::Type
|
||||||
|
{
|
||||||
|
typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type;
|
||||||
|
return (new StoredFunctorCall5<result_type, Functor, Arg1, Arg2, Arg3, Arg4, Arg5>(functor, arg1, arg2, arg3, arg4, arg5))->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename FunctionObject>
|
template <typename FunctionObject>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall0<QT_TYPENAME FunctionObject::result_type, FunctionObject>::type(functionObject))->start();
|
return (new StoredFunctorCall0<QT_TYPENAME FunctionObject::result_type, FunctionObject>(functionObject))->start();
|
||||||
}
|
}
|
||||||
template <typename FunctionObject, typename Arg1>
|
template <typename FunctionObject, typename Arg1>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall1<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1>::type(functionObject, arg1))->start();
|
return (new StoredFunctorCall1<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1>(functionObject, arg1))->start();
|
||||||
}
|
}
|
||||||
template <typename FunctionObject, typename Arg1, typename Arg2>
|
template <typename FunctionObject, typename Arg1, typename Arg2>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall2<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2>::type(functionObject, arg1, arg2))->start();
|
return (new StoredFunctorCall2<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2>(functionObject, arg1, arg2))->start();
|
||||||
}
|
}
|
||||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall3<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>::type(functionObject, arg1, arg2, arg3))->start();
|
return (new StoredFunctorCall3<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3>(functionObject, arg1, arg2, arg3))->start();
|
||||||
}
|
}
|
||||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall4<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>::type(functionObject, arg1, arg2, arg3, arg4))->start();
|
return (new StoredFunctorCall4<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4>(functionObject, arg1, arg2, arg3, arg4))->start();
|
||||||
}
|
}
|
||||||
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
template <typename FunctionObject, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||||
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
QFuture<typename FunctionObject::result_type> run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
|
||||||
{
|
{
|
||||||
return (new QT_TYPENAME SelectStoredFunctorCall5<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
|
return (new StoredFunctorCall5<QT_TYPENAME FunctionObject::result_type, FunctionObject, Arg1, Arg2, Arg3, Arg4, Arg5>(functionObject, arg1, arg2, arg3, arg4, arg5))->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename FunctionObject>
|
template <typename FunctionObject>
|
||||||
|
@ -66,23 +66,16 @@ struct StoredFunctorCall0: public RunFunctionTask<T>
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer>
|
template <typename FunctionPointer>
|
||||||
struct VoidStoredFunctorCall0: public RunFunctionTask<T>
|
struct StoredFunctorCall0<void, FunctionPointer>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall0(FunctionPointer _function)
|
inline StoredFunctorCall0(FunctionPointer _function)
|
||||||
: function(_function) {}
|
: function(_function) {}
|
||||||
void runFunctor() { function(); }
|
void runFunctor() { function(); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer>
|
|
||||||
struct SelectStoredFunctorCall0
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall0 <T, FunctionPointer>,
|
|
||||||
VoidStoredFunctorCall0<T, FunctionPointer> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer>
|
template <typename T, typename FunctionPointer>
|
||||||
struct StoredFunctorPointerCall0: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall0: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -276,23 +269,16 @@ struct StoredFunctorCall1: public RunFunctionTask<T>
|
|||||||
Arg1 arg1;
|
Arg1 arg1;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1>
|
template <typename FunctionPointer, typename Arg1>
|
||||||
struct VoidStoredFunctorCall1: public RunFunctionTask<T>
|
struct StoredFunctorCall1<void, FunctionPointer, Arg1>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1)
|
inline StoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1)
|
||||||
: function(_function), arg1(_arg1) {}
|
: function(_function), arg1(_arg1) {}
|
||||||
void runFunctor() { function(arg1); }
|
void runFunctor() { function(arg1); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
Arg1 arg1;
|
Arg1 arg1;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1>
|
|
||||||
struct SelectStoredFunctorCall1
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall1 <T, FunctionPointer, Arg1>,
|
|
||||||
VoidStoredFunctorCall1<T, FunctionPointer, Arg1> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1>
|
template <typename T, typename FunctionPointer, typename Arg1>
|
||||||
struct StoredFunctorPointerCall1: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall1: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -486,23 +472,16 @@ struct StoredFunctorCall2: public RunFunctionTask<T>
|
|||||||
Arg1 arg1; Arg2 arg2;
|
Arg1 arg1; Arg2 arg2;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2>
|
template <typename FunctionPointer, typename Arg1, typename Arg2>
|
||||||
struct VoidStoredFunctorCall2: public RunFunctionTask<T>
|
struct StoredFunctorCall2<void, FunctionPointer, Arg1, Arg2>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2)
|
inline StoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2)
|
||||||
: function(_function), arg1(_arg1), arg2(_arg2) {}
|
: function(_function), arg1(_arg1), arg2(_arg2) {}
|
||||||
void runFunctor() { function(arg1, arg2); }
|
void runFunctor() { function(arg1, arg2); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
Arg1 arg1; Arg2 arg2;
|
Arg1 arg1; Arg2 arg2;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2>
|
|
||||||
struct SelectStoredFunctorCall2
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall2 <T, FunctionPointer, Arg1, Arg2>,
|
|
||||||
VoidStoredFunctorCall2<T, FunctionPointer, Arg1, Arg2> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2>
|
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2>
|
||||||
struct StoredFunctorPointerCall2: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall2: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -696,23 +675,16 @@ struct StoredFunctorCall3: public RunFunctionTask<T>
|
|||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
|
template <typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
|
||||||
struct VoidStoredFunctorCall3: public RunFunctionTask<T>
|
struct StoredFunctorCall3<void, FunctionPointer, Arg1, Arg2, Arg3>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3)
|
inline StoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3)
|
||||||
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {}
|
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {}
|
||||||
void runFunctor() { function(arg1, arg2, arg3); }
|
void runFunctor() { function(arg1, arg2, arg3); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
|
|
||||||
struct SelectStoredFunctorCall3
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall3 <T, FunctionPointer, Arg1, Arg2, Arg3>,
|
|
||||||
VoidStoredFunctorCall3<T, FunctionPointer, Arg1, Arg2, Arg3> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
|
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3>
|
||||||
struct StoredFunctorPointerCall3: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall3: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -906,23 +878,16 @@ struct StoredFunctorCall4: public RunFunctionTask<T>
|
|||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
template <typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||||
struct VoidStoredFunctorCall4: public RunFunctionTask<T>
|
struct StoredFunctorCall4<void, FunctionPointer, Arg1, Arg2, Arg3, Arg4>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4)
|
inline StoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4)
|
||||||
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {}
|
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {}
|
||||||
void runFunctor() { function(arg1, arg2, arg3, arg4); }
|
void runFunctor() { function(arg1, arg2, arg3, arg4); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
|
||||||
struct SelectStoredFunctorCall4
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall4 <T, FunctionPointer, Arg1, Arg2, Arg3, Arg4>,
|
|
||||||
VoidStoredFunctorCall4<T, FunctionPointer, Arg1, Arg2, Arg3, Arg4> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
|
||||||
struct StoredFunctorPointerCall4: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall4: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -1116,23 +1081,16 @@ struct StoredFunctorCall5: public RunFunctionTask<T>
|
|||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
template <typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||||
struct VoidStoredFunctorCall5: public RunFunctionTask<T>
|
struct StoredFunctorCall5<void, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5>: public RunFunctionTask<void>
|
||||||
{
|
{
|
||||||
inline VoidStoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5)
|
inline StoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5)
|
||||||
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {}
|
: function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {}
|
||||||
void runFunctor() { function(arg1, arg2, arg3, arg4, arg5); }
|
void runFunctor() { function(arg1, arg2, arg3, arg4, arg5); }
|
||||||
FunctionPointer function;
|
FunctionPointer function;
|
||||||
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
|
Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
|
||||||
struct SelectStoredFunctorCall5
|
|
||||||
{
|
|
||||||
typedef typename SelectSpecialization<T>::template
|
|
||||||
Type<StoredFunctorCall5 <T, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5>,
|
|
||||||
VoidStoredFunctorCall5<T, FunctionPointer, Arg1, Arg2, Arg3, Arg4, Arg5> >::type type;
|
|
||||||
};
|
|
||||||
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
template <typename T, typename FunctionPointer, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5>
|
||||||
struct StoredFunctorPointerCall5: public RunFunctionTask<T>
|
struct StoredFunctorPointerCall5: public RunFunctionTask<T>
|
||||||
{
|
{
|
||||||
@ -1316,6 +1274,33 @@ struct SelectStoredConstMemberFunctionPointerCall5
|
|||||||
Type<StoredConstMemberFunctionPointerCall5 <T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>,
|
Type<StoredConstMemberFunctionPointerCall5 <T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5>,
|
||||||
VoidStoredConstMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5> >::type type;
|
VoidStoredConstMemberFunctionPointerCall5<T, Class, Param1, Arg1, Param2, Arg2, Param3, Arg3, Param4, Arg4, Param5, Arg5> >::type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T, typename Functor>
|
||||||
|
class StoredFunctorCall : public RunFunctionTask<T>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StoredFunctorCall(const Functor &f) : functor(f) { }
|
||||||
|
void runFunctor()
|
||||||
|
{
|
||||||
|
this->result = functor();
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
Functor functor;
|
||||||
|
};
|
||||||
|
template <typename Functor>
|
||||||
|
class StoredFunctorCall<void, Functor> : public RunFunctionTask<void>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StoredFunctorCall(const Functor &f) : functor(f) { }
|
||||||
|
void runFunctor()
|
||||||
|
{
|
||||||
|
functor();
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
Functor functor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
} //namespace QtConcurrent
|
} //namespace QtConcurrent
|
||||||
|
|
||||||
#endif // qdoc
|
#endif // qdoc
|
||||||
|
@ -363,6 +363,11 @@ template <typename T> inline void qToLittleEndian(T src, uchar *dest)
|
|||||||
|
|
||||||
#endif // Q_BYTE_ORDER == Q_BIG_ENDIAN
|
#endif // Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||||
|
|
||||||
|
template <> inline quint8 qbswap<quint8>(quint8 source)
|
||||||
|
{
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
QT_END_HEADER
|
QT_END_HEADER
|
||||||
|
@ -425,14 +425,11 @@ namespace QT_NAMESPACE {}
|
|||||||
|
|
||||||
#if defined(Q_CC_MSVC) && _MSC_VER >= 1600
|
#if defined(Q_CC_MSVC) && _MSC_VER >= 1600
|
||||||
# define Q_COMPILER_RVALUE_REFS
|
# define Q_COMPILER_RVALUE_REFS
|
||||||
# define Q_COMPILER_INITIALIZER_LISTS
|
|
||||||
# define Q_COMPILER_AUTO_TYPE
|
# define Q_COMPILER_AUTO_TYPE
|
||||||
# define Q_COMPILER_LAMBDA
|
# define Q_COMPILER_LAMBDA
|
||||||
//# define Q_COMPILER_VARIADIC_TEMPLATES
|
# define Q_COMPILER_DECLTYPE
|
||||||
//# define Q_COMPILER_CLASS_ENUM
|
// MSCV has std::initilizer_list, but do not support the braces initialization
|
||||||
//# define Q_COMPILER_DEFAULT_DELETE_MEMBERS
|
//# define Q_COMPILER_INITIALIZER_LISTS
|
||||||
//# define Q_COMPILER_UNICODE_STRINGS
|
|
||||||
//# define Q_COMPILER_EXTERN_TEMPLATES
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
@ -524,6 +521,7 @@ namespace QT_NAMESPACE {}
|
|||||||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
|
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
|
||||||
/* C++0x features supported in GCC 4.3: */
|
/* C++0x features supported in GCC 4.3: */
|
||||||
# define Q_COMPILER_RVALUE_REFS
|
# define Q_COMPILER_RVALUE_REFS
|
||||||
|
# define Q_COMPILER_DECLTYPE
|
||||||
# endif
|
# endif
|
||||||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
|
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
|
||||||
/* C++0x features supported in GCC 4.4: */
|
/* C++0x features supported in GCC 4.4: */
|
||||||
@ -791,6 +789,7 @@ namespace QT_NAMESPACE {}
|
|||||||
# if __INTEL_COMPILER >= 1100
|
# if __INTEL_COMPILER >= 1100
|
||||||
# define Q_COMPILER_RVALUE_REFS
|
# define Q_COMPILER_RVALUE_REFS
|
||||||
# define Q_COMPILER_EXTERN_TEMPLATES
|
# define Q_COMPILER_EXTERN_TEMPLATES
|
||||||
|
# define Q_COMPILER_DECLTYPE
|
||||||
# elif __INTEL_COMPILER >= 1200
|
# elif __INTEL_COMPILER >= 1200
|
||||||
# define Q_COMPILER_VARIADIC_TEMPLATES
|
# define Q_COMPILER_VARIADIC_TEMPLATES
|
||||||
# define Q_COMPILER_AUTO_TYPE
|
# define Q_COMPILER_AUTO_TYPE
|
||||||
@ -2792,6 +2791,12 @@ QT_LICENSED_MODULE(Sensors)
|
|||||||
# define QT_NO_RAWFONT
|
# define QT_NO_RAWFONT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace QtPrivate {
|
||||||
|
//like std::enable_if
|
||||||
|
template <bool B, typename T = void> struct QEnableIf;
|
||||||
|
template <typename T> struct QEnableIf<true, T> { typedef T Type; };
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
QT_END_HEADER
|
QT_END_HEADER
|
||||||
|
|
||||||
|
@ -1121,7 +1121,7 @@
|
|||||||
\value WA_X11NetWmWindowTypeToolBar Adds _NET_WM_WINDOW_TYPE_TOOLBAR to the
|
\value WA_X11NetWmWindowTypeToolBar Adds _NET_WM_WINDOW_TYPE_TOOLBAR to the
|
||||||
window's _NET_WM_WINDOW_TYPE X11 window property. See
|
window's _NET_WM_WINDOW_TYPE X11 window property. See
|
||||||
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
|
http://standards.freedesktop.org/wm-spec/ for more details. This attribute
|
||||||
has no effect on non-X11 platforms. \note Qt automaticaly sets this
|
has no effect on non-X11 platforms. \note Qt automatically sets this
|
||||||
attribute for QToolBar.
|
attribute for QToolBar.
|
||||||
|
|
||||||
\value WA_X11NetWmWindowTypeMenu Adds _NET_WM_WINDOW_TYPE_MENU to the
|
\value WA_X11NetWmWindowTypeMenu Adds _NET_WM_WINDOW_TYPE_MENU to the
|
||||||
@ -2593,7 +2593,7 @@
|
|||||||
\value ImhFormattedNumbersOnly Only number input is allowed. This includes decimal point and minus sign.
|
\value ImhFormattedNumbersOnly Only number input is allowed. This includes decimal point and minus sign.
|
||||||
\value ImhUppercaseOnly Only upper case letter input is allowed.
|
\value ImhUppercaseOnly Only upper case letter input is allowed.
|
||||||
\value ImhLowercaseOnly Only lower case letter input is allowed.
|
\value ImhLowercaseOnly Only lower case letter input is allowed.
|
||||||
\value ImhDialableCharactersOnly Only characters suitable for phone dialling are allowed.
|
\value ImhDialableCharactersOnly Only characters suitable for phone dialing are allowed.
|
||||||
\value ImhEmailCharactersOnly Only characters suitable for email addresses are allowed.
|
\value ImhEmailCharactersOnly Only characters suitable for email addresses are allowed.
|
||||||
\value ImhUrlCharactersOnly Only characters suitable for URLs are allowed.
|
\value ImhUrlCharactersOnly Only characters suitable for URLs are allowed.
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ HEADERS += \
|
|||||||
io/qresource_p.h \
|
io/qresource_p.h \
|
||||||
io/qresource_iterator_p.h \
|
io/qresource_iterator_p.h \
|
||||||
io/qurl.h \
|
io/qurl.h \
|
||||||
|
io/qurltlds_p.h \
|
||||||
|
io/qtldurl_p.h \
|
||||||
io/qsettings.h \
|
io/qsettings.h \
|
||||||
io/qsettings_p.h \
|
io/qsettings_p.h \
|
||||||
io/qfsfileengine.h \
|
io/qfsfileengine.h \
|
||||||
@ -41,6 +43,7 @@ SOURCES += \
|
|||||||
io/qbuffer.cpp \
|
io/qbuffer.cpp \
|
||||||
io/qdatastream.cpp \
|
io/qdatastream.cpp \
|
||||||
io/qdataurl.cpp \
|
io/qdataurl.cpp \
|
||||||
|
io/qtldurl.cpp \
|
||||||
io/qdebug.cpp \
|
io/qdebug.cpp \
|
||||||
io/qdir.cpp \
|
io/qdir.cpp \
|
||||||
io/qdiriterator.cpp \
|
io/qdiriterator.cpp \
|
||||||
|
117
src/corelib/io/qtldurl.cpp
Normal file
117
src/corelib/io/qtldurl.cpp
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qplatformdefs.h"
|
||||||
|
#include "qurl.h"
|
||||||
|
#include "private/qurltlds_p.h"
|
||||||
|
#include "private/qtldurl_p.h"
|
||||||
|
#include "QtCore/qstringlist.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
static bool containsTLDEntry(const QString &entry)
|
||||||
|
{
|
||||||
|
int index = qHash(entry) % tldCount;
|
||||||
|
int currentDomainIndex = tldIndices[index];
|
||||||
|
while (currentDomainIndex < tldIndices[index+1]) {
|
||||||
|
QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex);
|
||||||
|
if (currentEntry == entry)
|
||||||
|
return true;
|
||||||
|
currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
|
||||||
|
Return the top-level-domain per Qt's copy of the Mozilla public suffix list of
|
||||||
|
\a domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Q_CORE_EXPORT QString qTopLevelDomain(const QString &domain)
|
||||||
|
{
|
||||||
|
QStringList sections = domain.toLower().split(QLatin1Char('.'), QString::SkipEmptyParts);
|
||||||
|
if (sections.isEmpty())
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
QString level, tld;
|
||||||
|
for (int j = sections.count() - 1; j >= 0; --j) {
|
||||||
|
level.prepend(QLatin1Char('.') + sections.at(j));
|
||||||
|
if (qIsEffectiveTLD(level.right(level.size() - 1)))
|
||||||
|
tld = level;
|
||||||
|
}
|
||||||
|
return tld;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
|
||||||
|
Return true if \a domain is a top-level-domain per Qt's copy of the Mozilla public suffix list.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Q_CORE_EXPORT bool qIsEffectiveTLD(const QString &domain)
|
||||||
|
{
|
||||||
|
// for domain 'foo.bar.com':
|
||||||
|
// 1. return if TLD table contains 'foo.bar.com'
|
||||||
|
if (containsTLDEntry(domain))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (domain.contains(QLatin1Char('.'))) {
|
||||||
|
int count = domain.size() - domain.indexOf(QLatin1Char('.'));
|
||||||
|
QString wildCardDomain;
|
||||||
|
wildCardDomain.reserve(count + 1);
|
||||||
|
wildCardDomain.append(QLatin1Char('*'));
|
||||||
|
wildCardDomain.append(domain.right(count));
|
||||||
|
// 2. if table contains '*.bar.com',
|
||||||
|
// test if table contains '!foo.bar.com'
|
||||||
|
if (containsTLDEntry(wildCardDomain)) {
|
||||||
|
QString exceptionDomain;
|
||||||
|
exceptionDomain.reserve(domain.size() + 1);
|
||||||
|
exceptionDomain.append(QLatin1Char('!'));
|
||||||
|
exceptionDomain.append(domain);
|
||||||
|
return (! containsTLDEntry(exceptionDomain));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
66
src/corelib/io/qtldurl_p.h
Normal file
66
src/corelib/io/qtldurl_p.h
Normal file
@ -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 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 QTLDURL_P_H
|
||||||
|
#define QTLDURL_P_H
|
||||||
|
|
||||||
|
//
|
||||||
|
// W A R N I N G
|
||||||
|
// -------------
|
||||||
|
//
|
||||||
|
// This file is not part of the Qt API. It exists for the convenience
|
||||||
|
// of qDecodeDataUrl. This header file may change from version to
|
||||||
|
// version without notice, or even be removed.
|
||||||
|
//
|
||||||
|
// We mean it.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "QtCore/qurl.h"
|
||||||
|
#include "QtCore/qstring.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
Q_CORE_EXPORT QString qTopLevelDomain(const QString &domain);
|
||||||
|
Q_CORE_EXPORT bool qIsEffectiveTLD(const QString &domain);
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QDATAURL_P_H
|
@ -192,7 +192,9 @@
|
|||||||
#if defined QT3_SUPPORT
|
#if defined QT3_SUPPORT
|
||||||
#include "qfileinfo.h"
|
#include "qfileinfo.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef QT_BOOTSTRAPPED
|
||||||
|
#include "qtldurl_p.h"
|
||||||
|
#endif
|
||||||
#if defined(Q_OS_WINCE_WM)
|
#if defined(Q_OS_WINCE_WM)
|
||||||
#pragma optimize("g", off)
|
#pragma optimize("g", off)
|
||||||
#endif
|
#endif
|
||||||
@ -5592,6 +5594,21 @@ bool QUrl::hasFragment() const
|
|||||||
return d->hasFragment;
|
return d->hasFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 4.8
|
||||||
|
|
||||||
|
Returns the TLD (Top-Level Domain) of the URL, (e.g. .co.uk, .net).
|
||||||
|
Note that the return value is prefixed with a '.' unless the
|
||||||
|
URL does not contain a valid TLD, in which case the function returns
|
||||||
|
an empty string.
|
||||||
|
*/
|
||||||
|
#ifndef QT_BOOTSTRAPPED
|
||||||
|
QString QUrl::topLevelDomain() const
|
||||||
|
{
|
||||||
|
return qTopLevelDomain(host());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the result of the merge of this URL with \a relative. This
|
Returns the result of the merge of this URL with \a relative. This
|
||||||
URL is used as a base to convert \a relative to an absolute URL.
|
URL is used as a base to convert \a relative to an absolute URL.
|
||||||
|
@ -181,6 +181,9 @@ public:
|
|||||||
void setEncodedFragment(const QByteArray &fragment);
|
void setEncodedFragment(const QByteArray &fragment);
|
||||||
QByteArray encodedFragment() const;
|
QByteArray encodedFragment() const;
|
||||||
bool hasFragment() const;
|
bool hasFragment() const;
|
||||||
|
#ifndef QT_BOOTSTRAPPED
|
||||||
|
QString topLevelDomain() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
QUrl resolved(const QUrl &relative) const;
|
QUrl resolved(const QUrl &relative) const;
|
||||||
|
|
||||||
|
@ -38,15 +38,15 @@
|
|||||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef QNETWORKCOOKIEJARTLD_P_H
|
#ifndef QURLTLD_P_H
|
||||||
#define QNETWORKCOOKIEJARTLD_P_H
|
#define QURLTLD_P_H
|
||||||
|
|
||||||
//
|
//
|
||||||
// W A R N I N G
|
// W A R N I N G
|
||||||
// -------------
|
// -------------
|
||||||
//
|
//
|
||||||
// This file is not part of the Qt API. It exists for the convenience
|
// This file is not part of the Qt API. It exists for the convenience
|
||||||
// of the Network Access framework. This header file may change from
|
// of the Network Access and Core framework. This header file may change from
|
||||||
// version to version without notice, or even be removed.
|
// version to version without notice, or even be removed.
|
||||||
//
|
//
|
||||||
// We mean it.
|
// We mean it.
|
||||||
@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
// note to maintainer:
|
// note to maintainer:
|
||||||
// this file should be updated before each release ->
|
// this file should be updated before each release ->
|
||||||
// for instructions see the program at
|
// for instructions see the program at
|
||||||
// util/network/cookiejar-generateTLDs
|
// util/corelib/qurl-generateTLDs
|
||||||
|
|
||||||
static const quint16 tldCount = 3949;
|
static const quint16 tldCount = 3949;
|
||||||
static const quint16 tldIndices[] = {
|
static const quint16 tldIndices[] = {
|
||||||
@ -6478,4 +6478,4 @@ static const char tldData[] = {
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QNETWORKCOOKIEJARTLD_P_H
|
#endif // QURLTLD_P_H
|
@ -1,15 +1,15 @@
|
|||||||
The file qnetworkcookiejartlds_p.h is generated from the Public Suffix
|
The file qurltlds_p.h is generated from the Public Suffix
|
||||||
List (see [1] and [2]), by the program residing at
|
List (see [1] and [2]), by the program residing at
|
||||||
util/network/cookiejar-generateTLDs in the Qt source tree.
|
util/corelib/qurl-generateTLDs in the Qt source tree.
|
||||||
|
|
||||||
That program generates a character array and an index array from the
|
That program generates a character array and an index array from the
|
||||||
list to provide fast lookups of elements within C++.
|
list to provide fast lookups of elements within C++.
|
||||||
|
|
||||||
Those arrays in qnetworkcookiejartlds_p.h are derived from the Public
|
Those arrays in qurltlds_p.h are derived from the Public
|
||||||
Suffix List ([2]), which was originally provided by
|
Suffix List ([2]), which was originally provided by
|
||||||
Jo Hermans <jo.hermans@gmail.com>.
|
Jo Hermans <jo.hermans@gmail.com>.
|
||||||
|
|
||||||
The file qnetworkcookiejartlds_p.h was last generated Friday,
|
The file qurltlds_p.h was last generated Friday,
|
||||||
November 19th 15:24 2010.
|
November 19th 15:24 2010.
|
||||||
|
|
||||||
----
|
----
|
@ -42,9 +42,96 @@
|
|||||||
#include "quuid.h"
|
#include "quuid.h"
|
||||||
|
|
||||||
#include "qdatastream.h"
|
#include "qdatastream.h"
|
||||||
|
#include "qendian.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
#ifndef QT_NO_QUUID_STRING
|
||||||
|
template <class Char, class Integral>
|
||||||
|
void _q_toHex(Char *&dst, Integral value)
|
||||||
|
{
|
||||||
|
static const char digits[] = "0123456789abcdef";
|
||||||
|
|
||||||
|
value = qToBigEndian(value);
|
||||||
|
|
||||||
|
const char* p = reinterpret_cast<const char*>(&value);
|
||||||
|
|
||||||
|
for (uint i = 0; i < sizeof(Integral); ++i, dst += 2) {
|
||||||
|
uint j = (p[i] >> 4) & 0xf;
|
||||||
|
dst[0] = Char(digits[j]);
|
||||||
|
j = p[i] & 0xf;
|
||||||
|
dst[1] = Char(digits[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Char, class Integral>
|
||||||
|
bool _q_fromHex(const Char *&src, Integral &value)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
|
||||||
|
for (uint i = 0; i < sizeof(Integral) * 2; ++i) {
|
||||||
|
int ch = *src++;
|
||||||
|
int tmp;
|
||||||
|
if (ch >= '0' && ch <= '9')
|
||||||
|
tmp = ch - '0';
|
||||||
|
else if (ch >= 'a' && ch <= 'f')
|
||||||
|
tmp = ch - 'a' + 10;
|
||||||
|
else if (ch >= 'A' && ch <= 'F')
|
||||||
|
tmp = ch - 'A' + 10;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
value = value * 16 + tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Char>
|
||||||
|
void _q_uuidToHex(Char *&dst, const uint &d1, const ushort &d2, const ushort &d3, const uchar (&d4)[8])
|
||||||
|
{
|
||||||
|
*dst++ = Char('{');
|
||||||
|
_q_toHex(dst, d1);
|
||||||
|
*dst++ = Char('-');
|
||||||
|
_q_toHex(dst, d2);
|
||||||
|
*dst++ = Char('-');
|
||||||
|
_q_toHex(dst, d3);
|
||||||
|
*dst++ = Char('-');
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
_q_toHex(dst, d4[i]);
|
||||||
|
*dst++ = Char('-');
|
||||||
|
for (int i = 2; i < 8; i++)
|
||||||
|
_q_toHex(dst, d4[i]);
|
||||||
|
*dst = Char('}');
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Char>
|
||||||
|
bool _q_uuidFromHex(const Char *&src, uint &d1, ushort &d2, ushort &d3, uchar (&d4)[8])
|
||||||
|
{
|
||||||
|
if (*src == Char('{'))
|
||||||
|
src++;
|
||||||
|
if (!_q_fromHex(src, d1)
|
||||||
|
|| *src++ != Char('-')
|
||||||
|
|| !_q_fromHex(src, d2)
|
||||||
|
|| *src++ != Char('-')
|
||||||
|
|| !_q_fromHex(src, d3)
|
||||||
|
|| *src++ != Char('-')
|
||||||
|
|| !_q_fromHex(src, d4[0])
|
||||||
|
|| !_q_fromHex(src, d4[1])
|
||||||
|
|| *src++ != Char('-')
|
||||||
|
|| !_q_fromHex(src, d4[2])
|
||||||
|
|| !_q_fromHex(src, d4[3])
|
||||||
|
|| !_q_fromHex(src, d4[4])
|
||||||
|
|| !_q_fromHex(src, d4[5])
|
||||||
|
|| !_q_fromHex(src, d4[6])
|
||||||
|
|| !_q_fromHex(src, d4[7])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QUuid
|
\class QUuid
|
||||||
\brief The QUuid class stores a Universally Unique Identifier (UUID).
|
\brief The QUuid class stores a Universally Unique Identifier (UUID).
|
||||||
@ -231,50 +318,22 @@ QT_BEGIN_NAMESPACE
|
|||||||
*/
|
*/
|
||||||
QUuid::QUuid(const QString &text)
|
QUuid::QUuid(const QString &text)
|
||||||
{
|
{
|
||||||
bool ok;
|
if (text.length() < 36) {
|
||||||
if (text.isEmpty()) {
|
|
||||||
*this = QUuid();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QString temp = text.toUpper();
|
|
||||||
if (temp[0] != QLatin1Char('{'))
|
|
||||||
temp = QLatin1Char('{') + text;
|
|
||||||
if (text[(int)text.length()-1] != QLatin1Char('}'))
|
|
||||||
temp += QLatin1Char('}');
|
|
||||||
|
|
||||||
data1 = temp.mid(1, 8).toULongLong(&ok, 16);
|
|
||||||
if (!ok) {
|
|
||||||
*this = QUuid();
|
*this = QUuid();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data2 = temp.mid(10, 4).toUInt(&ok, 16);
|
const ushort *data = reinterpret_cast<const ushort *>(text.unicode());
|
||||||
if (!ok) {
|
|
||||||
|
if (*data == '{' && text.length() < 37) {
|
||||||
*this = QUuid();
|
*this = QUuid();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data3 = temp.mid(15, 4).toUInt(&ok, 16);
|
|
||||||
if (!ok) {
|
if (!_q_uuidFromHex(data, data1, data2, data3, data4)) {
|
||||||
*this = QUuid();
|
*this = QUuid();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data4[0] = temp.mid(20, 2).toUInt(&ok, 16);
|
|
||||||
if (!ok) {
|
|
||||||
*this = QUuid();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
data4[1] = temp.mid(22, 2).toUInt(&ok, 16);
|
|
||||||
if (!ok) {
|
|
||||||
*this = QUuid();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 2; i<8; i++) {
|
|
||||||
data4[i] = temp.mid(25 + (i-2)*2, 2).toUShort(&ok, 16);
|
|
||||||
if (!ok) {
|
|
||||||
*this = QUuid();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -282,10 +341,90 @@ QUuid::QUuid(const QString &text)
|
|||||||
*/
|
*/
|
||||||
QUuid::QUuid(const char *text)
|
QUuid::QUuid(const char *text)
|
||||||
{
|
{
|
||||||
*this = QUuid(QString::fromLatin1(text));
|
if (!text) {
|
||||||
|
*this = QUuid();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_q_uuidFromHex(text, data1, data2, data3, data4)) {
|
||||||
|
*this = QUuid();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Creates a QUuid object from the QByteArray \a text, which must be
|
||||||
|
formatted as five hex fields separated by '-', e.g.,
|
||||||
|
"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" where 'x' is a hex
|
||||||
|
digit. The curly braces shown here are optional, but it is normal to
|
||||||
|
include them. If the conversion fails, a null UUID is created. See
|
||||||
|
toByteArray() for an explanation of how the five hex fields map to the
|
||||||
|
public data members in QUuid.
|
||||||
|
|
||||||
|
\since 4.8
|
||||||
|
|
||||||
|
\sa toByteArray(), QUuid()
|
||||||
|
*/
|
||||||
|
QUuid::QUuid(const QByteArray &text)
|
||||||
|
{
|
||||||
|
if (text.length() < 36) {
|
||||||
|
*this = QUuid();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *data = text.constData();
|
||||||
|
|
||||||
|
if (*data == '{' && text.length() < 37) {
|
||||||
|
*this = QUuid();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_q_uuidFromHex(data, data1, data2, data3, data4)) {
|
||||||
|
*this = QUuid();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Creates a QUuid object from the binary representation of the UUID, as
|
||||||
|
specified by RFC 4122 section 4.1.2. See toRfc4122() for a further
|
||||||
|
explanation of the order of bytes required.
|
||||||
|
|
||||||
|
The byte array accepted is NOT a human readable format.
|
||||||
|
|
||||||
|
If the conversion fails, a null UUID is created.
|
||||||
|
|
||||||
|
\since 4.8
|
||||||
|
|
||||||
|
\sa toRfc4122(), QUuid()
|
||||||
|
*/
|
||||||
|
QUuid QUuid::fromRfc4122(const QByteArray &bytes)
|
||||||
|
{
|
||||||
|
if (bytes.isEmpty() || bytes.length() != 16)
|
||||||
|
return QUuid();
|
||||||
|
|
||||||
|
uint d1;
|
||||||
|
ushort d2, d3;
|
||||||
|
uchar d4[8];
|
||||||
|
|
||||||
|
const uchar *data = reinterpret_cast<const uchar *>(bytes.constData());
|
||||||
|
|
||||||
|
d1 = qFromBigEndian<quint32>(data);
|
||||||
|
data += sizeof(quint32);
|
||||||
|
d2 = qFromBigEndian<quint16>(data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
d3 = qFromBigEndian<quint16>(data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
d4[i] = *(data);
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QUuid(d1, d2, d3, d4[0], d4[1], d4[2], d4[3], d4[4], d4[5], d4[6], d4[7]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn bool QUuid::operator==(const QUuid &other) const
|
\fn bool QUuid::operator==(const QUuid &other) const
|
||||||
|
|
||||||
@ -308,11 +447,6 @@ QUuid::QUuid(const char *text)
|
|||||||
\sa toString()
|
\sa toString()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static QString uuidhex(uint data, int digits)
|
|
||||||
{
|
|
||||||
return QString::number(data, 16).rightJustified(digits, QLatin1Char('0'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the string representation of this QUuid. The string is
|
Returns the string representation of this QUuid. The string is
|
||||||
formatted as five hex fields separated by '-' and enclosed in
|
formatted as five hex fields separated by '-' and enclosed in
|
||||||
@ -349,25 +483,114 @@ static QString uuidhex(uint data, int digits)
|
|||||||
*/
|
*/
|
||||||
QString QUuid::toString() const
|
QString QUuid::toString() const
|
||||||
{
|
{
|
||||||
QString result;
|
QString result(38, Qt::Uninitialized);
|
||||||
|
ushort *data = (ushort *)result.unicode();
|
||||||
|
|
||||||
QChar dash = QLatin1Char('-');
|
_q_uuidToHex(data, data1, data2, data3, data4);
|
||||||
result = QLatin1Char('{') + uuidhex(data1,8);
|
|
||||||
result += dash;
|
|
||||||
result += uuidhex(data2,4);
|
|
||||||
result += dash;
|
|
||||||
result += uuidhex(data3,4);
|
|
||||||
result += dash;
|
|
||||||
result += uuidhex(data4[0],2);
|
|
||||||
result += uuidhex(data4[1],2);
|
|
||||||
result += dash;
|
|
||||||
for (int i = 2; i < 8; i++)
|
|
||||||
result += uuidhex(data4[i],2);
|
|
||||||
|
|
||||||
return result + QLatin1Char('}');
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the binary representation of this QUuid. The byte array is
|
||||||
|
formatted as five hex fields separated by '-' and enclosed in
|
||||||
|
curly braces, i.e., "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" where
|
||||||
|
'x' is a hex digit. From left to right, the five hex fields are
|
||||||
|
obtained from the four public data members in QUuid as follows:
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\o Field #
|
||||||
|
\o Source
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 1
|
||||||
|
\o data1
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 2
|
||||||
|
\o data2
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 3
|
||||||
|
\o data3
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 4
|
||||||
|
\o data4[0] .. data4[1]
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 5
|
||||||
|
\o data4[2] .. data4[7]
|
||||||
|
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\since 4.8
|
||||||
|
*/
|
||||||
|
QByteArray QUuid::toByteArray() const
|
||||||
|
{
|
||||||
|
QByteArray result(38, Qt::Uninitialized);
|
||||||
|
char *data = result.data();
|
||||||
|
|
||||||
|
_q_uuidToHex(data, data1, data2, data3, data4);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the binary representation of this QUuid. The byte array is in big
|
||||||
|
endian format, and formatted according to RFC 4122, section 4.1.2 -
|
||||||
|
"Layout and byte order".
|
||||||
|
|
||||||
|
The order is as follows:
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header
|
||||||
|
\o Field #
|
||||||
|
\o Source
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 1
|
||||||
|
\o data1
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 2
|
||||||
|
\o data2
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 3
|
||||||
|
\o data3
|
||||||
|
|
||||||
|
\row
|
||||||
|
\o 4
|
||||||
|
\o data4[0] .. data4[7]
|
||||||
|
|
||||||
|
\endtable
|
||||||
|
|
||||||
|
\since 4.8
|
||||||
|
*/
|
||||||
|
QByteArray QUuid::toRfc4122() const
|
||||||
|
{
|
||||||
|
// we know how many bytes a UUID has, I hope :)
|
||||||
|
QByteArray bytes(16, Qt::Uninitialized);
|
||||||
|
uchar *data = reinterpret_cast<uchar*>(bytes.data());
|
||||||
|
|
||||||
|
qToBigEndian(data1, data);
|
||||||
|
data += sizeof(quint32);
|
||||||
|
qToBigEndian(data2, data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
qToBigEndian(data3, data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
*(data) = data4[i];
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_DATASTREAM
|
#ifndef QT_NO_DATASTREAM
|
||||||
/*!
|
/*!
|
||||||
\relates QUuid
|
\relates QUuid
|
||||||
@ -375,11 +598,30 @@ QString QUuid::toString() const
|
|||||||
*/
|
*/
|
||||||
QDataStream &operator<<(QDataStream &s, const QUuid &id)
|
QDataStream &operator<<(QDataStream &s, const QUuid &id)
|
||||||
{
|
{
|
||||||
s << (quint32)id.data1;
|
QByteArray bytes;
|
||||||
s << (quint16)id.data2;
|
if (s.byteOrder() == QDataStream::BigEndian) {
|
||||||
s << (quint16)id.data3;
|
bytes = id.toRfc4122();
|
||||||
for (int i = 0; i < 8; i++)
|
} else {
|
||||||
s << (quint8)id.data4[i];
|
// we know how many bytes a UUID has, I hope :)
|
||||||
|
bytes = QByteArray(16, Qt::Uninitialized);
|
||||||
|
uchar *data = reinterpret_cast<uchar*>(bytes.data());
|
||||||
|
|
||||||
|
qToLittleEndian(id.data1, data);
|
||||||
|
data += sizeof(quint32);
|
||||||
|
qToLittleEndian(id.data2, data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
qToLittleEndian(id.data3, data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
*(data) = id.data4[i];
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s.writeRawData(bytes.data(), 16) != 16) {
|
||||||
|
s.setStatus(QDataStream::WriteFailed);
|
||||||
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,19 +631,30 @@ QDataStream &operator<<(QDataStream &s, const QUuid &id)
|
|||||||
*/
|
*/
|
||||||
QDataStream &operator>>(QDataStream &s, QUuid &id)
|
QDataStream &operator>>(QDataStream &s, QUuid &id)
|
||||||
{
|
{
|
||||||
quint32 u32;
|
QByteArray bytes(16, Qt::Uninitialized);
|
||||||
quint16 u16;
|
if (s.readRawData(bytes.data(), 16) != 16) {
|
||||||
quint8 u8;
|
s.setStatus(QDataStream::ReadPastEnd);
|
||||||
s >> u32;
|
return s;
|
||||||
id.data1 = u32;
|
|
||||||
s >> u16;
|
|
||||||
id.data2 = u16;
|
|
||||||
s >> u16;
|
|
||||||
id.data3 = u16;
|
|
||||||
for (int i = 0; i < 8; i++) {
|
|
||||||
s >> u8;
|
|
||||||
id.data4[i] = u8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s.byteOrder() == QDataStream::BigEndian) {
|
||||||
|
id = QUuid::fromRfc4122(bytes);
|
||||||
|
} else {
|
||||||
|
const uchar *data = reinterpret_cast<const uchar *>(bytes.constData());
|
||||||
|
|
||||||
|
id.data1 = qFromLittleEndian<quint32>(data);
|
||||||
|
data += sizeof(quint32);
|
||||||
|
id.data2 = qFromLittleEndian<quint16>(data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
id.data3 = qFromLittleEndian<quint16>(data);
|
||||||
|
data += sizeof(quint16);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
id.data4[i] = *(data);
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
#endif // QT_NO_DATASTREAM
|
#endif // QT_NO_DATASTREAM
|
||||||
|
@ -108,8 +108,12 @@ struct Q_CORE_EXPORT QUuid
|
|||||||
QUuid(const QString &);
|
QUuid(const QString &);
|
||||||
QUuid(const char *);
|
QUuid(const char *);
|
||||||
QString toString() const;
|
QString toString() const;
|
||||||
operator QString() const { return toString(); }
|
operator QString() const { return toString(); } // ### Qt5 remove
|
||||||
|
QUuid(const QByteArray &);
|
||||||
|
QByteArray toByteArray() const;
|
||||||
#endif
|
#endif
|
||||||
|
QByteArray toRfc4122() const;
|
||||||
|
static QUuid fromRfc4122(const QByteArray &);
|
||||||
bool isNull() const;
|
bool isNull() const;
|
||||||
|
|
||||||
bool operator==(const QUuid &orig) const
|
bool operator==(const QUuid &orig) const
|
||||||
|
@ -641,6 +641,8 @@ Q_OUTOFLINE_TEMPLATE QList<T> QList<T>::mid(int pos, int alength) const
|
|||||||
if (pos == 0 && alength == size())
|
if (pos == 0 && alength == size())
|
||||||
return *this;
|
return *this;
|
||||||
QList<T> cpy;
|
QList<T> cpy;
|
||||||
|
if (alength <= 0)
|
||||||
|
return cpy;
|
||||||
cpy.reserve(alength);
|
cpy.reserve(alength);
|
||||||
cpy.d->end = alength;
|
cpy.d->end = alength;
|
||||||
QT_TRY {
|
QT_TRY {
|
||||||
|
@ -879,10 +879,10 @@ QStringList QFontDatabasePrivate::addTTFile(const QByteArray &file, const QByteA
|
|||||||
TT_OS2 *os2 = (TT_OS2 *)FT_Get_Sfnt_Table(face, ft_sfnt_os2);
|
TT_OS2 *os2 = (TT_OS2 *)FT_Get_Sfnt_Table(face, ft_sfnt_os2);
|
||||||
if (os2) {
|
if (os2) {
|
||||||
quint32 unicodeRange[4] = {
|
quint32 unicodeRange[4] = {
|
||||||
os2->ulUnicodeRange1, os2->ulUnicodeRange2, os2->ulUnicodeRange3, os2->ulUnicodeRange4
|
static_cast<quint32>(os2->ulUnicodeRange1), static_cast<quint32>(os2->ulUnicodeRange2), static_cast<quint32>(os2->ulUnicodeRange3), static_cast<quint32>(os2->ulUnicodeRange4)
|
||||||
};
|
};
|
||||||
quint32 codePageRange[2] = {
|
quint32 codePageRange[2] = {
|
||||||
os2->ulCodePageRange1, os2->ulCodePageRange2
|
static_cast<quint32>(os2->ulCodePageRange1), static_cast<quint32>(os2->ulCodePageRange2)
|
||||||
};
|
};
|
||||||
|
|
||||||
writingSystems = qt_determine_writing_systems_from_truetype_bits(unicodeRange, codePageRange);
|
writingSystems = qt_determine_writing_systems_from_truetype_bits(unicodeRange, codePageRange);
|
||||||
|
@ -2825,6 +2825,75 @@ QFixed QTextEngine::offsetInLigature(const QScriptItem *si, int pos, int max, in
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Scan in logClusters[from..to-1] for glyph_pos
|
||||||
|
int QTextEngine::getClusterLength(unsigned short *logClusters,
|
||||||
|
const HB_CharAttributes *attributes,
|
||||||
|
int from, int to, int glyph_pos, int *start)
|
||||||
|
{
|
||||||
|
int clusterLength = 0;
|
||||||
|
for (int i = from; i < to; i++) {
|
||||||
|
if (logClusters[i] == glyph_pos && attributes[i].charStop) {
|
||||||
|
if (*start < 0)
|
||||||
|
*start = i;
|
||||||
|
clusterLength++;
|
||||||
|
}
|
||||||
|
else if (clusterLength)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return clusterLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
int QTextEngine::positionInLigature(const QScriptItem *si, int end,
|
||||||
|
QFixed x, QFixed edge, int glyph_pos,
|
||||||
|
bool cursorOnCharacter)
|
||||||
|
{
|
||||||
|
unsigned short *logClusters = this->logClusters(si);
|
||||||
|
int clusterStart = -1;
|
||||||
|
int clusterLength = 0;
|
||||||
|
|
||||||
|
if (si->analysis.script != QUnicodeTables::Common &&
|
||||||
|
si->analysis.script != QUnicodeTables::Greek) {
|
||||||
|
if (glyph_pos == -1)
|
||||||
|
return si->position + end;
|
||||||
|
else {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < end; i++)
|
||||||
|
if (logClusters[i] == glyph_pos)
|
||||||
|
break;
|
||||||
|
return si->position + i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (glyph_pos == -1 && end > 0)
|
||||||
|
glyph_pos = logClusters[end - 1];
|
||||||
|
else {
|
||||||
|
if (x <= edge)
|
||||||
|
glyph_pos--;
|
||||||
|
}
|
||||||
|
|
||||||
|
const HB_CharAttributes *attrs = attributes();
|
||||||
|
clusterLength = getClusterLength(logClusters, attrs, 0, end, glyph_pos, &clusterStart);
|
||||||
|
|
||||||
|
if (clusterLength) {
|
||||||
|
const QGlyphLayout &glyphs = shapedGlyphs(si);
|
||||||
|
QFixed glyphWidth = glyphs.effectiveAdvance(glyph_pos);
|
||||||
|
// the approximate width of each individual element of the ligature
|
||||||
|
QFixed perItemWidth = glyphWidth / clusterLength;
|
||||||
|
QFixed left = x > edge ? edge : edge - glyphWidth;
|
||||||
|
int n = ((x - left) / perItemWidth).floor().toInt();
|
||||||
|
QFixed dist = x - left - n * perItemWidth;
|
||||||
|
int closestItem = dist > (perItemWidth / 2) ? n + 1 : n;
|
||||||
|
if (cursorOnCharacter && closestItem > 0)
|
||||||
|
closestItem--;
|
||||||
|
int pos = si->position + clusterStart + closestItem;
|
||||||
|
// Jump to the next charStop
|
||||||
|
while (!attrs[pos].charStop && pos < end)
|
||||||
|
pos++;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
return si->position + end;
|
||||||
|
}
|
||||||
|
|
||||||
int QTextEngine::previousLogicalPosition(int oldPos) const
|
int QTextEngine::previousLogicalPosition(int oldPos) const
|
||||||
{
|
{
|
||||||
const HB_CharAttributes *attrs = attributes();
|
const HB_CharAttributes *attrs = attributes();
|
||||||
|
@ -620,6 +620,7 @@ public:
|
|||||||
QFixed leadingSpaceWidth(const QScriptLine &line);
|
QFixed leadingSpaceWidth(const QScriptLine &line);
|
||||||
|
|
||||||
QFixed offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos);
|
QFixed offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos);
|
||||||
|
int positionInLigature(const QScriptItem *si, int end, QFixed x, QFixed edge, int glyph_pos, bool cursorOnCharacter);
|
||||||
int previousLogicalPosition(int oldPos) const;
|
int previousLogicalPosition(int oldPos) const;
|
||||||
int nextLogicalPosition(int oldPos) const;
|
int nextLogicalPosition(int oldPos) const;
|
||||||
int lineNumberForTextPosition(int pos);
|
int lineNumberForTextPosition(int pos);
|
||||||
@ -642,6 +643,7 @@ private:
|
|||||||
void resolveAdditionalFormats() const;
|
void resolveAdditionalFormats() const;
|
||||||
int endOfLine(int lineNum);
|
int endOfLine(int lineNum);
|
||||||
int beginningOfLine(int lineNum);
|
int beginningOfLine(int lineNum);
|
||||||
|
int getClusterLength(unsigned short *logClusters, const HB_CharAttributes *attributes, int from, int to, int glyph_pos, int *start);
|
||||||
};
|
};
|
||||||
|
|
||||||
class Q_GUI_EXPORT QStackTextEngine : public QTextEngine {
|
class Q_GUI_EXPORT QStackTextEngine : public QTextEngine {
|
||||||
|
@ -2607,8 +2607,8 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const
|
|||||||
} else {
|
} else {
|
||||||
bool rtl = eng->isRightToLeft();
|
bool rtl = eng->isRightToLeft();
|
||||||
bool visual = eng->visualCursorMovement();
|
bool visual = eng->visualCursorMovement();
|
||||||
|
int end = qMin(lineEnd, si->position + l) - si->position;
|
||||||
if (reverse) {
|
if (reverse) {
|
||||||
int end = qMin(lineEnd, si->position + l) - si->position;
|
|
||||||
int glyph_end = end == l ? si->num_glyphs : logClusters[end];
|
int glyph_end = end == l ? si->num_glyphs : logClusters[end];
|
||||||
int glyph_start = glyph_pos;
|
int glyph_start = glyph_pos;
|
||||||
if (visual && !rtl && !(lastLine && itm == (visualOrder[nItems - 1] + firstItem)))
|
if (visual && !rtl && !(lastLine && itm == (visualOrder[nItems - 1] + firstItem)))
|
||||||
@ -2624,7 +2624,7 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const
|
|||||||
for (int i = glyph_start; i <= glyph_end; i++)
|
for (int i = glyph_start; i <= glyph_end; i++)
|
||||||
x += glyphs.effectiveAdvance(i);
|
x += glyphs.effectiveAdvance(i);
|
||||||
}
|
}
|
||||||
x += eng->offsetInLigature(si, pos, line.length, glyph_pos);
|
x += eng->offsetInLigature(si, pos, end, glyph_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
*cursorPos = pos + si->position;
|
*cursorPos = pos + si->position;
|
||||||
@ -2739,6 +2739,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
int glyph_pos = -1;
|
int glyph_pos = -1;
|
||||||
|
QFixed edge;
|
||||||
// has to be inside run
|
// has to be inside run
|
||||||
if (cpos == QTextLine::CursorOnCharacter) {
|
if (cpos == QTextLine::CursorOnCharacter) {
|
||||||
if (si.analysis.bidiLevel % 2) {
|
if (si.analysis.bidiLevel % 2) {
|
||||||
@ -2749,6 +2750,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
if (pos < x)
|
if (pos < x)
|
||||||
break;
|
break;
|
||||||
glyph_pos = gs;
|
glyph_pos = gs;
|
||||||
|
edge = pos;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pos -= glyphs.effectiveAdvance(gs);
|
pos -= glyphs.effectiveAdvance(gs);
|
||||||
@ -2761,6 +2763,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
if (pos > x)
|
if (pos > x)
|
||||||
break;
|
break;
|
||||||
glyph_pos = gs;
|
glyph_pos = gs;
|
||||||
|
edge = pos;
|
||||||
}
|
}
|
||||||
pos += glyphs.effectiveAdvance(gs);
|
pos += glyphs.effectiveAdvance(gs);
|
||||||
++gs;
|
++gs;
|
||||||
@ -2774,6 +2777,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
while (gs <= ge) {
|
while (gs <= ge) {
|
||||||
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
||||||
glyph_pos = gs;
|
glyph_pos = gs;
|
||||||
|
edge = pos;
|
||||||
dist = qAbs(x-pos);
|
dist = qAbs(x-pos);
|
||||||
}
|
}
|
||||||
pos -= glyphs.effectiveAdvance(gs);
|
pos -= glyphs.effectiveAdvance(gs);
|
||||||
@ -2783,6 +2787,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
while (ge >= gs) {
|
while (ge >= gs) {
|
||||||
if (glyphs.attributes[ge].clusterStart && qAbs(x-pos) < dist) {
|
if (glyphs.attributes[ge].clusterStart && qAbs(x-pos) < dist) {
|
||||||
glyph_pos = ge;
|
glyph_pos = ge;
|
||||||
|
edge = pos;
|
||||||
dist = qAbs(x-pos);
|
dist = qAbs(x-pos);
|
||||||
}
|
}
|
||||||
pos += glyphs.effectiveAdvance(ge);
|
pos += glyphs.effectiveAdvance(ge);
|
||||||
@ -2794,6 +2799,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
while (gs <= ge) {
|
while (gs <= ge) {
|
||||||
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
||||||
glyph_pos = gs;
|
glyph_pos = gs;
|
||||||
|
edge = pos;
|
||||||
dist = qAbs(x-pos);
|
dist = qAbs(x-pos);
|
||||||
}
|
}
|
||||||
pos += glyphs.effectiveAdvance(gs);
|
pos += glyphs.effectiveAdvance(gs);
|
||||||
@ -2805,6 +2811,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
pos += glyphs.effectiveAdvance(gs);
|
pos += glyphs.effectiveAdvance(gs);
|
||||||
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) {
|
||||||
glyph_pos = gs;
|
glyph_pos = gs;
|
||||||
|
edge = pos;
|
||||||
dist = qAbs(x-pos);
|
dist = qAbs(x-pos);
|
||||||
}
|
}
|
||||||
++gs;
|
++gs;
|
||||||
@ -2821,16 +2828,13 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||||||
if (rtl && nchars > 0)
|
if (rtl && nchars > 0)
|
||||||
return insertionPoints[lastLine ? nchars : nchars - 1];
|
return insertionPoints[lastLine ? nchars : nchars - 1];
|
||||||
}
|
}
|
||||||
return si.position + end;
|
return eng->positionInLigature(&si, end, x, pos, -1,
|
||||||
|
cpos == QTextLine::CursorOnCharacter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Q_ASSERT(glyph_pos != -1);
|
Q_ASSERT(glyph_pos != -1);
|
||||||
int j;
|
return eng->positionInLigature(&si, end, x, edge, glyph_pos,
|
||||||
for (j = 0; j < eng->length(item); ++j)
|
cpos == QTextLine::CursorOnCharacter);
|
||||||
if (logClusters[j] == glyph_pos)
|
|
||||||
break;
|
|
||||||
// qDebug("at pos %d (in run: %d)", si.position + j, j);
|
|
||||||
return si.position + j;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// right of last item
|
// right of last item
|
||||||
|
@ -21,7 +21,6 @@ HEADERS += \
|
|||||||
access/qnetworkcookie_p.h \
|
access/qnetworkcookie_p.h \
|
||||||
access/qnetworkcookiejar.h \
|
access/qnetworkcookiejar.h \
|
||||||
access/qnetworkcookiejar_p.h \
|
access/qnetworkcookiejar_p.h \
|
||||||
access/qnetworkcookiejartlds_p.h \
|
|
||||||
access/qnetworkrequest.h \
|
access/qnetworkrequest.h \
|
||||||
access/qnetworkrequest_p.h \
|
access/qnetworkrequest_p.h \
|
||||||
access/qnetworkreply.h \
|
access/qnetworkreply.h \
|
||||||
|
@ -261,7 +261,17 @@ void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair)
|
|||||||
// set the host
|
// set the host
|
||||||
value = request.headerField("host");
|
value = request.headerField("host");
|
||||||
if (value.isEmpty()) {
|
if (value.isEmpty()) {
|
||||||
QByteArray host = QUrl::toAce(hostName);
|
QHostAddress add;
|
||||||
|
QByteArray host;
|
||||||
|
if (add.setAddress(hostName)) {
|
||||||
|
if (add.protocol() == QAbstractSocket::IPv6Protocol)
|
||||||
|
host = "[" + hostName.toAscii() + "]";//format the ipv6 in the standard way
|
||||||
|
else
|
||||||
|
host = hostName.toAscii();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
host = QUrl::toAce(hostName);
|
||||||
|
}
|
||||||
|
|
||||||
int port = request.url().port();
|
int port = request.url().port();
|
||||||
if (port != -1) {
|
if (port != -1) {
|
||||||
|
@ -40,12 +40,12 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qnetworkcookiejar.h"
|
#include "qnetworkcookiejar.h"
|
||||||
#include "qnetworkcookiejartlds_p.h"
|
|
||||||
#include "qnetworkcookiejar_p.h"
|
#include "qnetworkcookiejar_p.h"
|
||||||
|
|
||||||
#include "QtNetwork/qnetworkcookie.h"
|
#include "QtNetwork/qnetworkcookie.h"
|
||||||
#include "QtCore/qurl.h"
|
#include "QtCore/qurl.h"
|
||||||
#include "QtCore/qdatetime.h"
|
#include "QtCore/qdatetime.h"
|
||||||
|
#include "private/qtldurl_p.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieLis
|
|||||||
// the check for effective TLDs makes the "embedded dot" rule from RFC 2109 section 4.3.2
|
// the check for effective TLDs makes the "embedded dot" rule from RFC 2109 section 4.3.2
|
||||||
// redundant; the "leading dot" rule has been relaxed anyway, see above
|
// redundant; the "leading dot" rule has been relaxed anyway, see above
|
||||||
// we remove the leading dot for this check
|
// we remove the leading dot for this check
|
||||||
if (QNetworkCookieJarPrivate::isEffectiveTLD(domain.remove(0, 1)))
|
if (qIsEffectiveTLD(domain.remove(0, 1)))
|
||||||
continue; // not accepted
|
continue; // not accepted
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,43 +304,4 @@ QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QNetworkCookieJarPrivate::isEffectiveTLD(const QString &domain)
|
|
||||||
{
|
|
||||||
// for domain 'foo.bar.com':
|
|
||||||
// 1. return if TLD table contains 'foo.bar.com'
|
|
||||||
if (containsTLDEntry(domain))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (domain.contains(QLatin1Char('.'))) {
|
|
||||||
int count = domain.size() - domain.indexOf(QLatin1Char('.'));
|
|
||||||
QString wildCardDomain;
|
|
||||||
wildCardDomain.reserve(count + 1);
|
|
||||||
wildCardDomain.append(QLatin1Char('*'));
|
|
||||||
wildCardDomain.append(domain.right(count));
|
|
||||||
// 2. if table contains '*.bar.com',
|
|
||||||
// test if table contains '!foo.bar.com'
|
|
||||||
if (containsTLDEntry(wildCardDomain)) {
|
|
||||||
QString exceptionDomain;
|
|
||||||
exceptionDomain.reserve(domain.size() + 1);
|
|
||||||
exceptionDomain.append(QLatin1Char('!'));
|
|
||||||
exceptionDomain.append(domain);
|
|
||||||
return (! containsTLDEntry(exceptionDomain));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QNetworkCookieJarPrivate::containsTLDEntry(const QString &entry)
|
|
||||||
{
|
|
||||||
int index = qHash(entry) % tldCount;
|
|
||||||
int currentDomainIndex = tldIndices[index];
|
|
||||||
while (currentDomainIndex < tldIndices[index+1]) {
|
|
||||||
QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex);
|
|
||||||
if (currentEntry == entry)
|
|
||||||
return true;
|
|
||||||
currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -63,9 +63,6 @@ class QNetworkCookieJarPrivate: public QObjectPrivate
|
|||||||
public:
|
public:
|
||||||
QList<QNetworkCookie> allCookies;
|
QList<QNetworkCookie> allCookies;
|
||||||
|
|
||||||
static bool Q_AUTOTEST_EXPORT isEffectiveTLD(const QString &domain);
|
|
||||||
static bool containsTLDEntry(const QString &entry);
|
|
||||||
|
|
||||||
Q_DECLARE_PUBLIC(QNetworkCookieJar)
|
Q_DECLARE_PUBLIC(QNetworkCookieJar)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@ void QNetworkConfigurationManagerPrivate::enablePolling()
|
|||||||
++forcedPolling;
|
++forcedPolling;
|
||||||
|
|
||||||
if (forcedPolling == 1)
|
if (forcedPolling == 1)
|
||||||
startPolling();
|
QMetaObject::invokeMethod(this, "startPolling");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QNetworkConfigurationManagerPrivate::disablePolling()
|
void QNetworkConfigurationManagerPrivate::disablePolling()
|
||||||
|
@ -107,7 +107,7 @@ private Q_SLOTS:
|
|||||||
void pollEngines();
|
void pollEngines();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void startPolling();
|
Q_INVOKABLE void startPolling();
|
||||||
QTimer *pollTimer;
|
QTimer *pollTimer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -149,6 +149,8 @@ bool QHttpSocketEngine::connectInternal()
|
|||||||
// Handshake isn't done. If unconnected, start connecting.
|
// Handshake isn't done. If unconnected, start connecting.
|
||||||
if (d->state == None && d->socket->state() == QAbstractSocket::UnconnectedState) {
|
if (d->state == None && d->socket->state() == QAbstractSocket::UnconnectedState) {
|
||||||
setState(QAbstractSocket::ConnectingState);
|
setState(QAbstractSocket::ConnectingState);
|
||||||
|
//limit buffer in internal socket, data is buffered in the external socket under application control
|
||||||
|
d->socket->setReadBufferSize(65536);
|
||||||
d->socket->connectToHost(d->proxy.hostName(), d->proxy.port());
|
d->socket->connectToHost(d->proxy.hostName(), d->proxy.port());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1126,6 +1126,8 @@ bool QSocks5SocketEngine::connectInternal()
|
|||||||
if (d->socks5State == QSocks5SocketEnginePrivate::Uninitialized
|
if (d->socks5State == QSocks5SocketEnginePrivate::Uninitialized
|
||||||
&& d->socketState != QAbstractSocket::ConnectingState) {
|
&& d->socketState != QAbstractSocket::ConnectingState) {
|
||||||
setState(QAbstractSocket::ConnectingState);
|
setState(QAbstractSocket::ConnectingState);
|
||||||
|
//limit buffer in internal socket, data is buffered in the external socket under application control
|
||||||
|
d->data->controlSocket->setReadBufferSize(65536);
|
||||||
d->data->controlSocket->connectToHost(d->proxyInfo.hostName(), d->proxyInfo.port());
|
d->data->controlSocket->connectToHost(d->proxyInfo.hostName(), d->proxyInfo.port());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@
|
|||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
// forward declaration
|
// forward declaration
|
||||||
static QMap<QString, QString> _q_mapFromOnelineName(char *name);
|
static QMap<QString, QString> _q_mapFromX509Name(X509_NAME *name);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Constructs a QSslCertificate by reading \a format encoded data
|
Constructs a QSslCertificate by reading \a format encoded data
|
||||||
@ -324,7 +324,7 @@ QString QSslCertificate::issuerInfo(SubjectInfo info) const
|
|||||||
// lazy init
|
// lazy init
|
||||||
if (d->issuerInfo.isEmpty() && d->x509)
|
if (d->issuerInfo.isEmpty() && d->x509)
|
||||||
d->issuerInfo =
|
d->issuerInfo =
|
||||||
_q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_issuer_name(d->x509), 0, 0));
|
_q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
|
||||||
|
|
||||||
return d->issuerInfo.value(_q_SubjectInfoToString(info));
|
return d->issuerInfo.value(_q_SubjectInfoToString(info));
|
||||||
}
|
}
|
||||||
@ -341,7 +341,7 @@ QString QSslCertificate::issuerInfo(const QByteArray &tag) const
|
|||||||
// lazy init
|
// lazy init
|
||||||
if (d->issuerInfo.isEmpty() && d->x509)
|
if (d->issuerInfo.isEmpty() && d->x509)
|
||||||
d->issuerInfo =
|
d->issuerInfo =
|
||||||
_q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_issuer_name(d->x509), 0, 0));
|
_q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
|
||||||
|
|
||||||
return d->issuerInfo.value(QString::fromLatin1(tag));
|
return d->issuerInfo.value(QString::fromLatin1(tag));
|
||||||
}
|
}
|
||||||
@ -360,7 +360,7 @@ QString QSslCertificate::subjectInfo(SubjectInfo info) const
|
|||||||
// lazy init
|
// lazy init
|
||||||
if (d->subjectInfo.isEmpty() && d->x509)
|
if (d->subjectInfo.isEmpty() && d->x509)
|
||||||
d->subjectInfo =
|
d->subjectInfo =
|
||||||
_q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_subject_name(d->x509), 0, 0));
|
_q_mapFromX509Name(q_X509_get_subject_name(d->x509));
|
||||||
|
|
||||||
return d->subjectInfo.value(_q_SubjectInfoToString(info));
|
return d->subjectInfo.value(_q_SubjectInfoToString(info));
|
||||||
}
|
}
|
||||||
@ -376,7 +376,7 @@ QString QSslCertificate::subjectInfo(const QByteArray &tag) const
|
|||||||
// lazy init
|
// lazy init
|
||||||
if (d->subjectInfo.isEmpty() && d->x509)
|
if (d->subjectInfo.isEmpty() && d->x509)
|
||||||
d->subjectInfo =
|
d->subjectInfo =
|
||||||
_q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_subject_name(d->x509), 0, 0));
|
_q_mapFromX509Name(q_X509_get_subject_name(d->x509));
|
||||||
|
|
||||||
return d->subjectInfo.value(QString::fromLatin1(tag));
|
return d->subjectInfo.value(QString::fromLatin1(tag));
|
||||||
}
|
}
|
||||||
@ -666,37 +666,17 @@ QByteArray QSslCertificatePrivate::QByteArray_from_X509(X509 *x509, QSsl::Encodi
|
|||||||
return BEGINCERTSTRING "\n" + tmp + ENDCERTSTRING "\n";
|
return BEGINCERTSTRING "\n" + tmp + ENDCERTSTRING "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
static QMap<QString, QString> _q_mapFromOnelineName(char *name)
|
static QMap<QString, QString> _q_mapFromX509Name(X509_NAME *name)
|
||||||
{
|
{
|
||||||
QMap<QString, QString> info;
|
QMap<QString, QString> info;
|
||||||
QString infoStr = QString::fromLocal8Bit(name);
|
for (int i = 0; i < q_X509_NAME_entry_count(name); ++i) {
|
||||||
q_CRYPTO_free(name);
|
X509_NAME_ENTRY *e = q_X509_NAME_get_entry(name, i);
|
||||||
|
const char *obj = q_OBJ_nid2sn(q_OBJ_obj2nid(q_X509_NAME_ENTRY_get_object(e)));
|
||||||
// ### The right-hand encoding seems to allow hex (Regulierungsbeh\xC8orde)
|
unsigned char *data = 0;
|
||||||
//entry.replace(QLatin1String("\\x"), QLatin1String("%"));
|
int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
|
||||||
//entry = QUrl::fromPercentEncoding(entry.toLatin1());
|
info[QString::fromUtf8(obj)] = QString::fromUtf8((char*)data, size);
|
||||||
// ### See RFC-4630 for more details!
|
q_CRYPTO_free(data);
|
||||||
|
|
||||||
QRegExp rx(QLatin1String("/([A-Za-z]+)=(.+)"));
|
|
||||||
|
|
||||||
int pos = 0;
|
|
||||||
while ((pos = rx.indexIn(infoStr, pos)) != -1) {
|
|
||||||
const QString name = rx.cap(1);
|
|
||||||
|
|
||||||
QString value = rx.cap(2);
|
|
||||||
const int valuePos = rx.pos(2);
|
|
||||||
|
|
||||||
const int next = rx.indexIn(value);
|
|
||||||
if (next == -1) {
|
|
||||||
info.insert(name, value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
value = value.left(next);
|
|
||||||
info.insert(name, value);
|
|
||||||
pos = valuePos + value.length();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ DEFINEFUNC3(void *, ASN1_dup, i2d_of_void *a, a, d2i_of_void *b, b, char *c, c,
|
|||||||
DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, return 0, return)
|
DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, return 0, return)
|
||||||
DEFINEFUNC(unsigned char *, ASN1_STRING_data, ASN1_STRING *a, a, return 0, return)
|
DEFINEFUNC(unsigned char *, ASN1_STRING_data, ASN1_STRING *a, a, return 0, return)
|
||||||
DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return)
|
DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return)
|
||||||
|
DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return);
|
||||||
DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
|
DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
|
||||||
DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
|
DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
|
||||||
DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
|
DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
|
||||||
@ -248,7 +249,10 @@ DEFINEFUNC4(void *, X509_get_ext_d2i, X509 *a, a, int b, b, int *c, c, int *d, d
|
|||||||
DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return)
|
DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return)
|
||||||
DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return)
|
DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return)
|
||||||
DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return)
|
DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return)
|
||||||
DEFINEFUNC3(char *, X509_NAME_oneline, X509_NAME *a, a, char *b, b, int c, c, return 0, return)
|
DEFINEFUNC(int, X509_NAME_entry_count, X509_NAME *a, a, return 0, return)
|
||||||
|
DEFINEFUNC2(X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a, int b, b, return 0, return)
|
||||||
|
DEFINEFUNC(ASN1_STRING *, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY *a, a, return 0, return)
|
||||||
|
DEFINEFUNC(ASN1_OBJECT *, X509_NAME_ENTRY_get_object, X509_NAME_ENTRY *a, a, return 0, return)
|
||||||
DEFINEFUNC(EVP_PKEY *, X509_PUBKEY_get, X509_PUBKEY *a, a, return 0, return)
|
DEFINEFUNC(EVP_PKEY *, X509_PUBKEY_get, X509_PUBKEY *a, a, return 0, return)
|
||||||
DEFINEFUNC(void, X509_STORE_free, X509_STORE *a, a, return, DUMMYARG)
|
DEFINEFUNC(void, X509_STORE_free, X509_STORE *a, a, return, DUMMYARG)
|
||||||
DEFINEFUNC(X509_STORE *, X509_STORE_new, DUMMYARG, DUMMYARG, return 0, return)
|
DEFINEFUNC(X509_STORE *, X509_STORE_new, DUMMYARG, DUMMYARG, return 0, return)
|
||||||
@ -518,6 +522,7 @@ bool q_resolveOpenSslSymbols()
|
|||||||
RESOLVEFUNC(ASN1_INTEGER_get, 48, libs.second )
|
RESOLVEFUNC(ASN1_INTEGER_get, 48, libs.second )
|
||||||
RESOLVEFUNC(ASN1_STRING_data, 71, libs.second )
|
RESOLVEFUNC(ASN1_STRING_data, 71, libs.second )
|
||||||
RESOLVEFUNC(ASN1_STRING_length, 76, libs.second )
|
RESOLVEFUNC(ASN1_STRING_length, 76, libs.second )
|
||||||
|
RESOLVEFUNC(ASN1_STRING_to_UTF8, 86, libs.second )
|
||||||
RESOLVEFUNC(BIO_ctrl, 184, libs.second )
|
RESOLVEFUNC(BIO_ctrl, 184, libs.second )
|
||||||
RESOLVEFUNC(BIO_free, 209, libs.second )
|
RESOLVEFUNC(BIO_free, 209, libs.second )
|
||||||
RESOLVEFUNC(BIO_new, 222, libs.second )
|
RESOLVEFUNC(BIO_new, 222, libs.second )
|
||||||
@ -608,7 +613,10 @@ bool q_resolveOpenSslSymbols()
|
|||||||
RESOLVEFUNC(SSLv23_server_method, 191, libs.first )
|
RESOLVEFUNC(SSLv23_server_method, 191, libs.first )
|
||||||
RESOLVEFUNC(TLSv1_server_method, 200, libs.first )
|
RESOLVEFUNC(TLSv1_server_method, 200, libs.first )
|
||||||
RESOLVEFUNC(SSL_CTX_load_verify_locations, 34, libs.first )
|
RESOLVEFUNC(SSL_CTX_load_verify_locations, 34, libs.first )
|
||||||
RESOLVEFUNC(X509_NAME_oneline, 1830, libs.second )
|
RESOLVEFUNC(X509_NAME_entry_count, 1821, libs.second )
|
||||||
|
RESOLVEFUNC(X509_NAME_get_entry, 1823, libs.second )
|
||||||
|
RESOLVEFUNC(X509_NAME_ENTRY_get_data, 1808, libs.second )
|
||||||
|
RESOLVEFUNC(X509_NAME_ENTRY_get_object, 1809, libs.second )
|
||||||
RESOLVEFUNC(X509_PUBKEY_get, 1844, libs.second )
|
RESOLVEFUNC(X509_PUBKEY_get, 1844, libs.second )
|
||||||
RESOLVEFUNC(X509_STORE_free, 1939, libs.second )
|
RESOLVEFUNC(X509_STORE_free, 1939, libs.second )
|
||||||
RESOLVEFUNC(X509_STORE_new, 1942, libs.second )
|
RESOLVEFUNC(X509_STORE_new, 1942, libs.second )
|
||||||
@ -647,6 +655,7 @@ bool q_resolveOpenSslSymbols()
|
|||||||
RESOLVEFUNC(ASN1_INTEGER_get)
|
RESOLVEFUNC(ASN1_INTEGER_get)
|
||||||
RESOLVEFUNC(ASN1_STRING_data)
|
RESOLVEFUNC(ASN1_STRING_data)
|
||||||
RESOLVEFUNC(ASN1_STRING_length)
|
RESOLVEFUNC(ASN1_STRING_length)
|
||||||
|
RESOLVEFUNC(ASN1_STRING_to_UTF8)
|
||||||
RESOLVEFUNC(BIO_ctrl)
|
RESOLVEFUNC(BIO_ctrl)
|
||||||
RESOLVEFUNC(BIO_free)
|
RESOLVEFUNC(BIO_free)
|
||||||
RESOLVEFUNC(BIO_new)
|
RESOLVEFUNC(BIO_new)
|
||||||
@ -736,7 +745,10 @@ bool q_resolveOpenSslSymbols()
|
|||||||
RESOLVEFUNC(SSLv3_server_method)
|
RESOLVEFUNC(SSLv3_server_method)
|
||||||
RESOLVEFUNC(SSLv23_server_method)
|
RESOLVEFUNC(SSLv23_server_method)
|
||||||
RESOLVEFUNC(TLSv1_server_method)
|
RESOLVEFUNC(TLSv1_server_method)
|
||||||
RESOLVEFUNC(X509_NAME_oneline)
|
RESOLVEFUNC(X509_NAME_entry_count)
|
||||||
|
RESOLVEFUNC(X509_NAME_get_entry)
|
||||||
|
RESOLVEFUNC(X509_NAME_ENTRY_get_data)
|
||||||
|
RESOLVEFUNC(X509_NAME_ENTRY_get_object)
|
||||||
RESOLVEFUNC(X509_PUBKEY_get)
|
RESOLVEFUNC(X509_PUBKEY_get)
|
||||||
RESOLVEFUNC(X509_STORE_free)
|
RESOLVEFUNC(X509_STORE_free)
|
||||||
RESOLVEFUNC(X509_STORE_new)
|
RESOLVEFUNC(X509_STORE_new)
|
||||||
|
@ -204,6 +204,7 @@ bool q_resolveOpenSslSymbols();
|
|||||||
long q_ASN1_INTEGER_get(ASN1_INTEGER *a);
|
long q_ASN1_INTEGER_get(ASN1_INTEGER *a);
|
||||||
unsigned char * q_ASN1_STRING_data(ASN1_STRING *a);
|
unsigned char * q_ASN1_STRING_data(ASN1_STRING *a);
|
||||||
int q_ASN1_STRING_length(ASN1_STRING *a);
|
int q_ASN1_STRING_length(ASN1_STRING *a);
|
||||||
|
int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b);
|
||||||
long q_BIO_ctrl(BIO *a, int b, long c, void *d);
|
long q_BIO_ctrl(BIO *a, int b, long c, void *d);
|
||||||
int q_BIO_free(BIO *a);
|
int q_BIO_free(BIO *a);
|
||||||
BIO *q_BIO_new(BIO_METHOD *a);
|
BIO *q_BIO_new(BIO_METHOD *a);
|
||||||
@ -360,7 +361,10 @@ void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d);
|
|||||||
X509_NAME *q_X509_get_issuer_name(X509 *a);
|
X509_NAME *q_X509_get_issuer_name(X509 *a);
|
||||||
X509_NAME *q_X509_get_subject_name(X509 *a);
|
X509_NAME *q_X509_get_subject_name(X509 *a);
|
||||||
int q_X509_verify_cert(X509_STORE_CTX *ctx);
|
int q_X509_verify_cert(X509_STORE_CTX *ctx);
|
||||||
char *q_X509_NAME_oneline(X509_NAME *a, char *b, int c);
|
int q_X509_NAME_entry_count(X509_NAME *a);
|
||||||
|
X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b);
|
||||||
|
ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a);
|
||||||
|
ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a);
|
||||||
EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a);
|
EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a);
|
||||||
void q_X509_STORE_free(X509_STORE *store);
|
void q_X509_STORE_free(X509_STORE *store);
|
||||||
X509_STORE *q_X509_STORE_new();
|
X509_STORE *q_X509_STORE_new();
|
||||||
|
@ -1795,7 +1795,7 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo
|
|||||||
img = img.mirrored();
|
img = img.mirrored();
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha)
|
Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha)
|
||||||
{
|
{
|
||||||
QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32_Premultiplied
|
QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32_Premultiplied
|
||||||
: QImage::Format_RGB32);
|
: QImage::Format_RGB32);
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool);
|
extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool);
|
||||||
|
|
||||||
#define QGL_FUNC_CONTEXT const QGLContext *ctx = d_ptr->fbo_guard.context();
|
#define QGL_FUNC_CONTEXT const QGLContext *ctx = d_ptr->fbo_guard.context();
|
||||||
#define QGL_FUNCP_CONTEXT const QGLContext *ctx = fbo_guard.context();
|
#define QGL_FUNCP_CONTEXT const QGLContext *ctx = fbo_guard.context();
|
||||||
|
@ -113,7 +113,7 @@ extern void qgl_cleanup_glyph_cache(QGLContext *);
|
|||||||
void qgl_cleanup_glyph_cache(QGLContext *) {}
|
void qgl_cleanup_glyph_cache(QGLContext *) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool);
|
extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool);
|
||||||
|
|
||||||
|
|
||||||
QGLContext* QGLPBufferGLPaintDevice::context() const
|
QGLContext* QGLPBufferGLPaintDevice::context() const
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qtaccessiblewidgets
|
TARGET = qtaccessiblewidgets
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
include (../qaccessiblebase.pri)
|
include (../qaccessiblebase.pri)
|
||||||
|
|
||||||
QT += core-private gui-private widgets-private
|
QT += core-private gui-private widgets-private
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qconnmanbearer
|
TARGET = qconnmanbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core network-private dbus
|
QT = core network-private dbus
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qcorewlanbearer
|
TARGET = qcorewlanbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core-private network-private
|
QT = core-private network-private
|
||||||
LIBS += -framework Foundation -framework SystemConfiguration
|
LIBS += -framework Foundation -framework SystemConfiguration
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qgenericbearer
|
TARGET = qgenericbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core-private network-private
|
QT = core-private network-private
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qicdbearer
|
TARGET = qicdbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core network dbus
|
QT = core network dbus
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qnativewifibearer
|
TARGET = qnativewifibearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core-private network-private
|
QT = core-private network-private
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qnmbearer
|
TARGET = qnmbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core network-private dbus
|
QT = core network-private dbus
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qnlabearer
|
TARGET = qnlabearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core network
|
QT = core network
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qsymbianbearer
|
TARGET = qsymbianbearer
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT = core network
|
QT = core network
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qcncodecs
|
TARGET = qcncodecs
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
CONFIG += warn_on
|
CONFIG += warn_on
|
||||||
DESTDIR = $$QT.core.plugins/codecs
|
DESTDIR = $$QT.core.plugins/codecs
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qjpcodecs
|
TARGET = qjpcodecs
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
CONFIG += warn_on
|
CONFIG += warn_on
|
||||||
DESTDIR = $$QT.core.plugins/codecs
|
DESTDIR = $$QT.core.plugins/codecs
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qkrcodecs
|
TARGET = qkrcodecs
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
CONFIG += warn_on
|
CONFIG += warn_on
|
||||||
DESTDIR = $$QT.core.plugins/codecs
|
DESTDIR = $$QT.core.plugins/codecs
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qtwcodecs
|
TARGET = qtwcodecs
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
CONFIG += warn_on
|
CONFIG += warn_on
|
||||||
DESTDIR = $$QT.core.plugins/codecs
|
DESTDIR = $$QT.core.plugins/codecs
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qlinuxinputplugin
|
TARGET = qlinuxinputplugin
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/generic
|
DESTDIR = $$QT.gui.plugins/generic
|
||||||
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qlinuxinputplugin
|
TARGET = qlinuxinputplugin
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/generic
|
DESTDIR = $$QT.gui.plugins/generic
|
||||||
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qgif
|
TARGET = qgif
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
include(../../../gui/image/qgifhandler.pri)
|
include(../../../gui/image/qgifhandler.pri)
|
||||||
SOURCES += $$PWD/main.cpp
|
SOURCES += $$PWD/main.cpp
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qico
|
TARGET = qico
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-ico)"
|
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-ico)"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qjpeg
|
TARGET = qjpeg
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT += core-private
|
QT += core-private
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qmng
|
TARGET = qmng
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-mng)"
|
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-mng)"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qtiff
|
TARGET = qtiff
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-tiff)"
|
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-tiff)"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qimsw-multi
|
TARGET = qimsw-multi
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
CONFIG += warn_on
|
CONFIG += warn_on
|
||||||
QT += widgets
|
QT += widgets
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qcocoa
|
TARGET = qcocoa
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
OBJECTIVE_SOURCES = main.mm \
|
OBJECTIVE_SOURCES = main.mm \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qdirectfb
|
TARGET = qdirectfb
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
isEmpty(DIRECTFB_LIBS) {
|
isEmpty(DIRECTFB_LIBS) {
|
||||||
|
@ -2,7 +2,7 @@ TARGET = qeglfs
|
|||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
CONFIG += plugin
|
CONFIG += plugin
|
||||||
|
|
||||||
QT += opengl
|
QT += opengl core-private gui-private opengl-private
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
|
@ -26,4 +26,4 @@
|
|||||||
QT_SOURCE_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_SOURCE_TREE)
|
QT_SOURCE_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_SOURCE_TREE)
|
||||||
QT_BUILD_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_BUILD_TREE)
|
QT_BUILD_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_BUILD_TREE)
|
||||||
|
|
||||||
include($$QT_SOURCE_TREE/src/plugins/qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#QT -= core gui
|
#QT -= core gui
|
||||||
TARGET = fb_base
|
TARGET = fb_base
|
||||||
#include(../../qpluginbase.pri)
|
#load(qt_plugin)
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/graphicssystems
|
DESTDIR = $$QT.gui.plugins/graphicssystems
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qlinuxfbgraphicssystem
|
TARGET = qlinuxfbgraphicssystem
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
TARGET = qminimal
|
TARGET = qminimal
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
QT += gui-private core-private
|
|
||||||
|
|
||||||
QT = core-private gui-private
|
QT = core-private gui-private
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qopenkodeintegration
|
TARGET = qopenkodeintegration
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT += opengl
|
QT += opengl
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qvglitegraphicssystem
|
TARGET = qvglitegraphicssystem
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT += openvg
|
QT += openvg
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qvfbintegration
|
TARGET = qvfbintegration
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = quikit
|
TARGET = quikit
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
|
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
|
||||||
|
|
||||||
QT += opengl
|
QT += opengl
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qvncgraphicssystem
|
TARGET = qvncgraphicssystem
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT += network
|
QT += network
|
||||||
|
|
||||||
|
@ -139,6 +139,11 @@ QWaylandDisplay::QWaylandDisplay(void)
|
|||||||
#ifdef QT_WAYLAND_GL_SUPPORT
|
#ifdef QT_WAYLAND_GL_SUPPORT
|
||||||
mEglIntegration = QWaylandGLIntegration::createGLIntegration(this);
|
mEglIntegration = QWaylandGLIntegration::createGLIntegration(this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||||
|
mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this);
|
||||||
|
#endif
|
||||||
|
|
||||||
blockingReadEvents();
|
blockingReadEvents();
|
||||||
|
|
||||||
qRegisterMetaType<uint32_t>("uint32_t");
|
qRegisterMetaType<uint32_t>("uint32_t");
|
||||||
@ -147,10 +152,6 @@ QWaylandDisplay::QWaylandDisplay(void)
|
|||||||
mEglIntegration->initialize();
|
mEglIntegration->initialize();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
|
||||||
mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), this, SLOT(flushRequests()));
|
connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), this, SLOT(flushRequests()));
|
||||||
|
|
||||||
mFd = wl_display_get_fd(mDisplay, sourceUpdate, this);
|
mFd = wl_display_get_fd(mDisplay, sourceUpdate, this);
|
||||||
|
@ -68,6 +68,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
|
|||||||
|
|
||||||
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT
|
||||||
mDisplay->windowManagerIntegration()->mapClientToProcess(qApp->applicationPid());
|
mDisplay->windowManagerIntegration()->mapClientToProcess(qApp->applicationPid());
|
||||||
|
mDisplay->windowManagerIntegration()->authenticateWithToken();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mSurface = mDisplay->createSurface(this);
|
mSurface = mDisplay->createSurface(this);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = qwayland
|
TARGET = qwayland
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
|
|
||||||
QT+=gui-private core-private opengl-private
|
QT+=gui-private core-private opengl-private
|
||||||
|
|
||||||
|
@ -36,16 +36,37 @@ struct wl_client;
|
|||||||
|
|
||||||
struct wl_windowmanager;
|
struct wl_windowmanager;
|
||||||
|
|
||||||
|
struct wl_proxy;
|
||||||
|
|
||||||
|
extern void
|
||||||
|
wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...);
|
||||||
|
extern struct wl_proxy *
|
||||||
|
wl_proxy_create(struct wl_proxy *factory,
|
||||||
|
const struct wl_interface *interface);
|
||||||
|
extern struct wl_proxy *
|
||||||
|
wl_proxy_create_for_id(struct wl_display *display,
|
||||||
|
const struct wl_interface *interface, uint32_t id);
|
||||||
|
extern void
|
||||||
|
wl_proxy_destroy(struct wl_proxy *proxy);
|
||||||
|
|
||||||
|
extern int
|
||||||
|
wl_proxy_add_listener(struct wl_proxy *proxy,
|
||||||
|
void (**implementation)(void), void *data);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data);
|
||||||
|
|
||||||
|
extern void *
|
||||||
|
wl_proxy_get_user_data(struct wl_proxy *proxy);
|
||||||
|
|
||||||
extern const struct wl_interface wl_windowmanager_interface;
|
extern const struct wl_interface wl_windowmanager_interface;
|
||||||
|
|
||||||
#define WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0
|
#define wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0
|
||||||
|
#define wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN 1
|
||||||
|
|
||||||
static inline struct wl_windowmanager *
|
static inline struct wl_windowmanager *
|
||||||
wl_windowmanager_create(struct wl_display *display, uint32_t id, uint32_t /*version*/)
|
wl_windowmanager_create(struct wl_display *display, uint32_t id)
|
||||||
{
|
{
|
||||||
// ### does not run without latest wayland. must be enabled later
|
|
||||||
//wl_display_bind(display, id, "wl_windowmanager", version);
|
|
||||||
|
|
||||||
return (struct wl_windowmanager *)
|
return (struct wl_windowmanager *)
|
||||||
wl_proxy_create_for_id(display, &wl_windowmanager_interface, id);
|
wl_proxy_create_for_id(display, &wl_windowmanager_interface, id);
|
||||||
}
|
}
|
||||||
@ -72,7 +93,14 @@ static inline void
|
|||||||
wl_windowmanager_map_client_to_process(struct wl_windowmanager *wl_windowmanager, uint32_t processid)
|
wl_windowmanager_map_client_to_process(struct wl_windowmanager *wl_windowmanager, uint32_t processid)
|
||||||
{
|
{
|
||||||
wl_proxy_marshal((struct wl_proxy *) wl_windowmanager,
|
wl_proxy_marshal((struct wl_proxy *) wl_windowmanager,
|
||||||
WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid);
|
wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
wl_windowmanager_authenticate_with_token(struct wl_windowmanager *wl_windowmanager, const char *wl_authentication_token)
|
||||||
|
{
|
||||||
|
wl_proxy_marshal((struct wl_proxy *) wl_windowmanager,
|
||||||
|
wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN, wl_authentication_token);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -68,12 +68,11 @@ struct wl_windowmanager *QWaylandWindowManagerIntegration::windowManager() const
|
|||||||
return mWaylandWindowManager;
|
return mWaylandWindowManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface,
|
void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data)
|
||||||
uint32_t version, void *data)
|
|
||||||
{
|
{
|
||||||
if (strcmp(interface, "wl_windowmanager") == 0) {
|
if (strcmp(interface, "wl_windowmanager") == 0) {
|
||||||
QWaylandWindowManagerIntegration *integration = static_cast<QWaylandWindowManagerIntegration *>(data);
|
QWaylandWindowManagerIntegration *integration = static_cast<QWaylandWindowManagerIntegration *>(data);
|
||||||
integration->mWaylandWindowManager = wl_windowmanager_create(display,id, version);
|
integration->mWaylandWindowManager = wl_windowmanager_create(display, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,3 +82,11 @@ void QWaylandWindowManagerIntegration::mapClientToProcess(long long processId)
|
|||||||
wl_windowmanager_map_client_to_process(mWaylandWindowManager, (uint32_t) processId);
|
wl_windowmanager_map_client_to_process(mWaylandWindowManager, (uint32_t) processId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QWaylandWindowManagerIntegration::authenticateWithToken(const QByteArray &token)
|
||||||
|
{
|
||||||
|
QByteArray authToken = token;
|
||||||
|
if (authToken.isEmpty())
|
||||||
|
authToken = qgetenv("WL_AUTHENTICATION_TOKEN");
|
||||||
|
if (mWaylandWindowManager)
|
||||||
|
wl_windowmanager_authenticate_with_token(mWaylandWindowManager, authToken.constData());
|
||||||
|
}
|
||||||
|
@ -56,6 +56,7 @@ public:
|
|||||||
|
|
||||||
void mapSurfaceToProcess(struct wl_surface *surface, long long processId);
|
void mapSurfaceToProcess(struct wl_surface *surface, long long processId);
|
||||||
void mapClientToProcess(long long processId);
|
void mapClientToProcess(long long processId);
|
||||||
|
void authenticateWithToken(const QByteArray &token = QByteArray());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void wlHandleListenerGlobal(wl_display *display, uint32_t id,
|
static void wlHandleListenerGlobal(wl_display *display, uint32_t id,
|
||||||
|
@ -26,7 +26,8 @@
|
|||||||
#include "wayland-util.h"
|
#include "wayland-util.h"
|
||||||
|
|
||||||
static const struct wl_message wl_windowmanager_requests[] = {
|
static const struct wl_message wl_windowmanager_requests[] = {
|
||||||
{ "map_client_to_process", "u", NULL },
|
{ "map_client_to_process", "u" },
|
||||||
|
{ "authenticate_with_token", "s" },
|
||||||
};
|
};
|
||||||
|
|
||||||
WL_EXPORT const struct wl_interface wl_windowmanager_interface = {
|
WL_EXPORT const struct wl_interface wl_windowmanager_interface = {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
TARGET = xcb
|
TARGET = xcb
|
||||||
|
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
|
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
|
||||||
|
|
||||||
QT += core-private gui-private
|
QT += core-private gui-private
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
TARGET = qxlib
|
TARGET = qxlib
|
||||||
|
|
||||||
include(../../qpluginbase.pri)
|
load(qt_plugin)
|
||||||
DESTDIR = $$QT.gui.plugins/platforms
|
DESTDIR = $$QT.gui.plugins/platforms
|
||||||
|
|
||||||
QT += core-private gui-private opengl-private
|
QT += core-private gui-private opengl-private
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user