Merge remote-tracking branch 'origin/5.12' into dev

Change-Id: Id1e4664d3c942226b76e2c3b338df3116ff89297
This commit is contained in:
Qt Forward Merge Bot 2018-11-06 01:00:56 +01:00
commit 290aac23a7
42 changed files with 259 additions and 275 deletions

View File

@ -390,10 +390,10 @@
action concerned. When the QAction has been dragged to the toolbar, action concerned. When the QAction has been dragged to the toolbar,
clicking the icon will launch the associated slot. clicking the icon will launch the associated slot.
Complete the method \c on_actionNew_triggered(): Complete the method \c newDocument():
\quotefromfile tutorials/notepad/notepad.cpp \quotefromfile tutorials/notepad/notepad.cpp
\skipto on_actionNew_triggered() \skipto newDocument()
\printuntil } \printuntil }
\c current_file is a global variable containing the file presently \c current_file is a global variable containing the file presently
@ -411,10 +411,10 @@
In \c notepad.ui, right click on \c actionOpen and select \c {Go to In \c notepad.ui, right click on \c actionOpen and select \c {Go to
slot} slot}
Complete method \c on_actionOpen_triggered(). Complete method \c open().
\quotefromfile tutorials/notepad/notepad.cpp \quotefromfile tutorials/notepad/notepad.cpp
\skipto on_actionOpen_triggered() \skipto open()
\printuntil file.close \printuntil file.close
\printuntil } \printuntil }
@ -436,7 +436,7 @@
\l {Opening a file}, by right clicking on \c actionSave, and \l {Opening a file}, by right clicking on \c actionSave, and
selecting \c {Go to Slot}. selecting \c {Go to Slot}.
\skipto Notepad::on_actionSave_triggered \skipto Notepad::save
\printuntil file.close \printuntil file.close
\printuntil } \printuntil }
@ -449,7 +449,7 @@
\section2 Saving a file with \c {Save as} \section2 Saving a file with \c {Save as}
\skipto Notepad::on_actionSave_as_triggered \skipto Notepad::saveAs
\printuntil file.close \printuntil file.close
\printuntil } \printuntil }
@ -475,7 +475,7 @@
\section2 Select a Font \section2 Select a Font
\skipto Notepad::on_actionFont_triggered \skipto Notepad::selectFont
\printuntil ui->textEdit->setFont \printuntil ui->textEdit->setFont
\printline } \printline }

View File

@ -74,6 +74,23 @@ Notepad::Notepad(QWidget *parent) :
ui->setupUi(this); ui->setupUi(this);
this->setCentralWidget(ui->textEdit); this->setCentralWidget(ui->textEdit);
connect(ui->actionNew, &QAction::triggered, this, &Notepad::newDocument);
connect(ui->actionOpen, &QAction::triggered, this, &Notepad::open);
connect(ui->actionSave, &QAction::triggered, this, &Notepad::save);
connect(ui->actionSave_as, &QAction::triggered, this, &Notepad::saveAs);
connect(ui->actionPrint, &QAction::triggered, this, &Notepad::print);
connect(ui->actionExit, &QAction::triggered, this, &Notepad::exit);
connect(ui->actionCopy, &QAction::triggered, this, &Notepad::copy);
connect(ui->actionCut, &QAction::triggered, this, &Notepad::cut);
connect(ui->actionPaste, &QAction::triggered, this, &Notepad::paste);
connect(ui->actionUndo, &QAction::triggered, this, &Notepad::undo);
connect(ui->actionRedo, &QAction::triggered, this, &Notepad::redo);
connect(ui->actionFont, &QAction::triggered, this, &Notepad::selectFont);
connect(ui->actionBold, &QAction::triggered, this, &Notepad::setFontBold);
connect(ui->actionUnderline, &QAction::triggered, this, &Notepad::setFontUnderline);
connect(ui->actionItalic, &QAction::triggered, this, &Notepad::setFontItalic);
connect(ui->actionAbout, &QAction::triggered, this, &Notepad::about);
// Disable menu actions for unavailable features // Disable menu actions for unavailable features
#if !QT_CONFIG(printer) #if !QT_CONFIG(printer)
ui->actionPrint->setEnabled(false); ui->actionPrint->setEnabled(false);
@ -91,13 +108,13 @@ Notepad::~Notepad()
delete ui; delete ui;
} }
void Notepad::on_actionNew_triggered() void Notepad::newDocument()
{ {
currentFile.clear(); currentFile.clear();
ui->textEdit->setText(QString()); ui->textEdit->setText(QString());
} }
void Notepad::on_actionOpen_triggered() void Notepad::open()
{ {
QString fileName = QFileDialog::getOpenFileName(this, "Open the file"); QString fileName = QFileDialog::getOpenFileName(this, "Open the file");
QFile file(fileName); QFile file(fileName);
@ -113,7 +130,7 @@ void Notepad::on_actionOpen_triggered()
file.close(); file.close();
} }
void Notepad::on_actionSave_triggered() void Notepad::save()
{ {
QString fileName; QString fileName;
// If we don't have a filename from before, get one. // If we don't have a filename from before, get one.
@ -135,7 +152,7 @@ void Notepad::on_actionSave_triggered()
file.close(); file.close();
} }
void Notepad::on_actionSave_as_triggered() void Notepad::saveAs()
{ {
QString fileName = QFileDialog::getSaveFileName(this, "Save as"); QString fileName = QFileDialog::getSaveFileName(this, "Save as");
QFile file(fileName); QFile file(fileName);
@ -152,7 +169,7 @@ void Notepad::on_actionSave_as_triggered()
file.close(); file.close();
} }
void Notepad::on_actionPrint_triggered() void Notepad::print()
{ {
#if QT_CONFIG(printer) #if QT_CONFIG(printer)
QPrinter printDev; QPrinter printDev;
@ -165,43 +182,43 @@ void Notepad::on_actionPrint_triggered()
#endif // QT_CONFIG(printer) #endif // QT_CONFIG(printer)
} }
void Notepad::on_actionExit_triggered() void Notepad::exit()
{ {
QCoreApplication::quit(); QCoreApplication::quit();
} }
void Notepad::on_actionCopy_triggered() void Notepad::copy()
{ {
#if QT_CONFIG(clipboard) #if QT_CONFIG(clipboard)
ui->textEdit->copy(); ui->textEdit->copy();
#endif #endif
} }
void Notepad::on_actionCut_triggered() void Notepad::cut()
{ {
#if QT_CONFIG(clipboard) #if QT_CONFIG(clipboard)
ui->textEdit->cut(); ui->textEdit->cut();
#endif #endif
} }
void Notepad::on_actionPaste_triggered() void Notepad::paste()
{ {
#if QT_CONFIG(clipboard) #if QT_CONFIG(clipboard)
ui->textEdit->paste(); ui->textEdit->paste();
#endif #endif
} }
void Notepad::on_actionUndo_triggered() void Notepad::undo()
{ {
ui->textEdit->undo(); ui->textEdit->undo();
} }
void Notepad::on_actionRedo_triggered() void Notepad::redo()
{ {
ui->textEdit->redo(); ui->textEdit->redo();
} }
void Notepad::on_actionFont_triggered() void Notepad::selectFont()
{ {
bool fontSelected; bool fontSelected;
QFont font = QFontDialog::getFont(&fontSelected, this); QFont font = QFontDialog::getFont(&fontSelected, this);
@ -209,23 +226,23 @@ void Notepad::on_actionFont_triggered()
ui->textEdit->setFont(font); ui->textEdit->setFont(font);
} }
void Notepad::on_actionUnderline_triggered() void Notepad::setFontUnderline(bool underline)
{ {
ui->textEdit->setFontUnderline(ui->actionUnderline->isChecked()); ui->textEdit->setFontUnderline(underline);
} }
void Notepad::on_actionItalic_triggered() void Notepad::setFontItalic(bool italic)
{ {
ui->textEdit->setFontItalic(ui->actionItalic->isChecked()); ui->textEdit->setFontItalic(italic);
} }
void Notepad::on_actionBold_triggered() void Notepad::setFontBold(bool bold)
{ {
ui->actionBold->isChecked() ? ui->textEdit->setFontWeight(QFont::Bold) : bold ? ui->textEdit->setFontWeight(QFont::Bold) :
ui->textEdit->setFontWeight(QFont::Normal); ui->textEdit->setFontWeight(QFont::Normal);
} }
void Notepad::on_actionAbout_triggered() void Notepad::about()
{ {
QMessageBox::about(this, tr("About MDI"), QMessageBox::about(this, tr("About MDI"),
tr("The <b>Notepad</b> example demonstrates how to code a basic " tr("The <b>Notepad</b> example demonstrates how to code a basic "

View File

@ -79,37 +79,37 @@ public:
//! [5] //! [5]
private slots: private slots:
void on_actionNew_triggered(); void newDocument();
void on_actionOpen_triggered(); void open();
void on_actionSave_triggered(); void save();
void on_actionSave_as_triggered(); void saveAs();
void on_actionPrint_triggered(); void print();
void on_actionExit_triggered(); void exit();
void on_actionCopy_triggered(); void copy();
void on_actionCut_triggered(); void cut();
void on_actionPaste_triggered(); void paste();
void on_actionUndo_triggered(); void undo();
void on_actionRedo_triggered(); void redo();
void on_actionFont_triggered(); void selectFont();
void on_actionBold_triggered(); void setFontBold(bool bold);
void on_actionUnderline_triggered(); void setFontUnderline(bool underline);
void on_actionItalic_triggered(); void setFontItalic(bool italic);
void on_actionAbout_triggered(); void about();
//! [6] //! [6]
private: private:

View File

@ -224,7 +224,7 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
qWarning() << error; qWarning() << error;
#endif #endif
} }
// FALL-THROUGH Q_FALLTHROUGH();
case QTabletEvent::Stylus: case QTabletEvent::Stylus:
painter.setPen(m_pen); painter.setPen(m_pen);
painter.drawLine(lastPoint.pos, event->posF()); painter.drawLine(lastPoint.pos, event->posF());

View File

@ -3,7 +3,10 @@
"Name": "Easing Equations by Robert Penner", "Name": "Easing Equations by Robert Penner",
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QEasingCurve).", "QtUsage": "Used in Qt Core (QEasingCurve).",
"Files": "easing.cpp",
"Homepage": "treat as final",
"Homepage": "http://robertpenner.com/easing/",
"License": "BSD 3-clause \"New\" or \"Revised\" License", "License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseId": "BSD-3-Clause", "LicenseId": "BSD-3-Clause",
"LicenseFile": "LICENSE", "LicenseFile": "LICENSE",

View File

@ -3,6 +3,8 @@
"Name": "forkfd", "Name": "forkfd",
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used on most Unix platforms in Qt Core.", "QtUsage": "Used on most Unix platforms in Qt Core.",
"Files": "No upstream; treat as final",
"Files": "forkfd.c forkfd.h forkfd_gcc.h",
"License": "MIT License", "License": "MIT License",
"LicenseId": "MIT", "LicenseId": "MIT",

View File

@ -3,8 +3,13 @@
"Name": "FreeBSD strtoll and strtoull", "Name": "FreeBSD strtoll and strtoull",
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used in Qt Core.", "QtUsage": "Used in Qt Core.",
"Files": "strtoll.c strtoull.c",
"Description": "strtoll() and strtoull() are functions for converting a string to (unsigned) long long integer.", "Description": "strtoll() and strtoull() are functions for converting a string to (unsigned) long long integer.",
"Homepage": "https://github.com/freebsd/freebsd/",
"Upstream": "https://raw.githubusercontent.com/freebsd/freebsd/raw/tree/master/lib/libc/stdlib/$file",
"Version": "upstream has complicated with std locales; do not update",
"Version": "18b29f3fb8abee5d57ed8f4a44f806bec7e0eeff",
"License": "BSD 3-clause \"New\" or \"Revised\" License", "License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseId": "BSD-3-Clause", "LicenseId": "BSD-3-Clause",
"LicenseFile": "LICENSE", "LicenseFile": "LICENSE",

View File

@ -5,7 +5,7 @@
"QtUsage": "Optionally used in the Windows platform plugin. Configure with -no-accessibility to avoid.", "QtUsage": "Optionally used in the Windows platform plugin. Configure with -no-accessibility to avoid.",
"Description": "IAccessible2 is a new accessibility API which complements Microsoft's earlier work on MSAA", "Description": "IAccessible2 is a new accessibility API which complements Microsoft's earlier work on MSAA",
"Homepage": "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2", "Homepage": "https://wiki.linuxfoundation.org/accessibility/iaccessible2/",
"Version": "1.3.0", "Version": "1.3.0",
"License": "BSD 3-clause \"New\" or \"Revised\" License", "License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseId": "BSD-3-Clause", "LicenseId": "BSD-3-Clause",

View File

@ -4,9 +4,11 @@
"Name": "sRGB color profile icc file", "Name": "sRGB color profile icc file",
"QDocModule": "qtgui", "QDocModule": "qtgui",
"QtUsage": "Used in Qt Gui (Embedded into PDF/A-1b files generated by QPrinter/QPdfWriter).", "QtUsage": "Used in Qt Gui (Embedded into PDF/A-1b files generated by QPrinter/QPdfWriter).",
"Files": "No upstream: treat as final",
"Files": "sRGB2014.icc", "Files": "sRGB2014.icc",
"Description": "An ICC color profile for PDF/A-1b compatible PDF files.", "Description": "An ICC color profile for PDF/A-1b compatible PDF files.",
"Homepage": "http://www.color.org/",
"LicenseId": "ICC License", "LicenseId": "ICC License",
"License": "International Color Consortium License", "License": "International Color Consortium License",
"LicenseFile": "LICENSE.txt", "LicenseFile": "LICENSE.txt",

View File

@ -10,7 +10,7 @@ MODULE_INCLUDEPATH = $$PWD
load(qt_helper_lib) load(qt_helper_lib)
DEFINES += PNG_ARM_NEON_OPT=0 DEFINES += PNG_ARM_NEON_OPT=0 PNG_POWERPC_VSX_OPT=0
SOURCES += \ SOURCES += \
png.c \ png.c \
pngerror.c \ pngerror.c \

View File

@ -4,6 +4,7 @@
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.", "QtUsage": "Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.",
"Description": "Treat as final version; no upstream known",
"Description": "An OpenSSL-compatible implementation of the RSA Data Security, Inc. MD4 Message-Digest Algorithm.", "Description": "An OpenSSL-compatible implementation of the RSA Data Security, Inc. MD4 Message-Digest Algorithm.",
"License": "Public Domain", "License": "Public Domain",
"Copyright": "Written by Alexander Peslyak - better known as Solar Designer <solar@openwall.com> - in 2001, and placed in the public domain. There's absolutely no warranty." "Copyright": "Written by Alexander Peslyak - better known as Solar Designer <solar@openwall.com> - in 2001, and placed in the public domain. There's absolutely no warranty."

View File

@ -4,6 +4,7 @@
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.", "QtUsage": "Used in Qt Core (QCryptographicHash). Configure with -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1 to avoid.",
"Description": "Treat as final version; no upstream known",
"Description": "MD5 message-digest algorithm.", "Description": "MD5 message-digest algorithm.",
"License": "Public Domain", "License": "Public Domain",
"Copyright": "Written by Colin Plumb in 1993, no copyright is claimed. "Copyright": "Written by Colin Plumb in 1993, no copyright is claimed.

View File

@ -4,6 +4,7 @@
"QDocModule": "qtcore", "QDocModule": "qtcore",
"QtUsage": "Used in Qt Core (QCryptographicHash and QMessageAuthenticationCode)", "QtUsage": "Used in Qt Core (QCryptographicHash and QMessageAuthenticationCode)",
"Description": "The RFC actually contains the code, embedded in RFC-boilerplate; presumably we extracted it; treat as final",
"Description": "Implements the Secure Hash Algorithms SHA 384 and SHA-521", "Description": "Implements the Secure Hash Algorithms SHA 384 and SHA-521",
"License": "BSD 3-clause \"New\" or \"Revised\" License", "License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseFile": "LICENSE", "LicenseFile": "LICENSE",

View File

@ -5,6 +5,7 @@
"QtUsage": "Used for QCborStreamReader and QCborStreamWriter.", "QtUsage": "Used for QCborStreamReader and QCborStreamWriter.",
"Description": "Concise Binary Object Representation (CBOR) Library", "Description": "Concise Binary Object Representation (CBOR) Library",
"Version": "0.6.0",
"Homepage": "https://github.com/intel/tinycbor", "Homepage": "https://github.com/intel/tinycbor",
"License": "MIT License", "License": "MIT License",
"LicenseId": "MIT", "LicenseId": "MIT",

View File

@ -5,6 +5,7 @@
"QtUsage": "Used in the Qt platform plugin for Windows. Configure with -no-feature-tabletevent to avoid.", "QtUsage": "Used in the Qt platform plugin for Windows. Configure with -no-feature-tabletevent to avoid.",
"Description": "Wintab is a de facto API for pointing devices on Windows.", "Description": "Wintab is a de facto API for pointing devices on Windows.",
"Version": "Upstream no longer offers updates; treat as final",
"Homepage": "http://www.pointing.com/Wintab.html", "Homepage": "http://www.pointing.com/Wintab.html",
"License": "Public Domain", "License": "Public Domain",
"LicenseId": "NONE", "LicenseId": "NONE",

View File

@ -6,6 +6,7 @@
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qbig5codec.cpp", "Path": "qbig5codec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The Big5 codecs (QBig5Codec, QBig5hkscsCodec) "Description": "The Big5 codecs (QBig5Codec, QBig5hkscsCodec)
provide conversion to and from the Big5 encodings.", provide conversion to and from the Big5 encodings.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
@ -23,6 +24,7 @@ Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd."
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qeucjpcodec.cpp", "Path": "qeucjpcodec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The EUC-JP text codec provides conversion to and from EUC-JP, "Description": "The EUC-JP text codec provides conversion to and from EUC-JP,
the main legacy encoding for Unix machines in Japan.", the main legacy encoding for Unix machines in Japan.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
@ -37,6 +39,7 @@ the main legacy encoding for Unix machines in Japan.",
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qeuckrcodec.cpp", "Path": "qeuckrcodec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The EUC-KR text codec provides conversion to and from EUC-KR, KR, "Description": "The EUC-KR text codec provides conversion to and from EUC-KR, KR,
the main legacy encoding for Unix machines in Korea.", the main legacy encoding for Unix machines in Korea.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
@ -51,6 +54,7 @@ the main legacy encoding for Unix machines in Korea.",
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qjiscodec.cpp", "Path": "qjiscodec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.", "Description": "The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
"LicenseId": "BSD-2-Clause", "LicenseId": "BSD-2-Clause",
@ -64,6 +68,7 @@ the main legacy encoding for Unix machines in Korea.",
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qsjiscodec.cpp", "Path": "qsjiscodec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The Shift-JIS text codec provides conversion to and from Shift-JIS.", "Description": "The Shift-JIS text codec provides conversion to and from Shift-JIS.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
"LicenseId": "BSD-2-Clause", "LicenseId": "BSD-2-Clause",
@ -77,6 +82,7 @@ the main legacy encoding for Unix machines in Korea.",
"QtUsage": "Used in Qt Core.", "QtUsage": "Used in Qt Core.",
"Path": "qtsciicodec.cpp", "Path": "qtsciicodec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The TSCII text codec provides conversion to and from the Tamil TSCII "Description": "The TSCII text codec provides conversion to and from the Tamil TSCII
encoding.", encoding.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",
@ -91,6 +97,7 @@ encoding.",
"QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.",
"Path": "qgb18030codec.cpp", "Path": "qgb18030codec.cpp",
"Description": "Treat as final version; no upstream known",
"Description": "The GBK codec provides conversion to and from the Chinese "Description": "The GBK codec provides conversion to and from the Chinese
GB18030/GBK/GB2312 encoding.", GB18030/GBK/GB2312 encoding.",
"License": "BSD 2-clause \"Simplified\" License", "License": "BSD 2-clause \"Simplified\" License",

View File

@ -717,7 +717,7 @@ QString decodeMSG(const MSG& msg)
else if (const char *wmmsgC = findWMstr(msg.message)) else if (const char *wmmsgC = findWMstr(msg.message))
message = QString::fromLatin1(wmmsgC); message = QString::fromLatin1(wmmsgC);
else else
message = QString::fromLatin1("WM_(%1)").arg(msg.message); // Unknown WM_, so use number message = QString::fromLatin1("WM_(0x%1)").arg(msg.message, 0, 16); // Unknown WM_, so use number
// Yes, we want to give the WM_ names 20 chars of space before showing the // Yes, we want to give the WM_ names 20 chars of space before showing the
// decoded message, since some of the common messages are quite long, and // decoded message, since some of the common messages are quite long, and

View File

@ -5,6 +5,7 @@
"QtUsage": "Used in Qt Core on macOS.", "QtUsage": "Used in Qt Core on macOS.",
"Path": "qeventdispatcher_cf_p.h", "Path": "qeventdispatcher_cf_p.h",
"Description": "Treat as final version; no upstream known",
"Description": "Implementation of QAbstractEventDispatcher for macOS.", "Description": "Implementation of QAbstractEventDispatcher for macOS.",
"License": "BSD 3-clause \"New\" or \"Revised\" License", "License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseId": "BSD-3-Clause", "LicenseId": "BSD-3-Clause",

View File

@ -3523,13 +3523,19 @@ bool QVariant::canConvert(int targetTypeId) const
} }
// TODO Reimplement this function, currently it works but it is a historical mess. // TODO Reimplement this function, currently it works but it is a historical mess.
uint currentType = ((d.type == QMetaType::Float) ? QVariant::Double : d.type); uint currentType = d.type;
if (currentType == QMetaType::SChar || currentType == QMetaType::Char) if (currentType == QMetaType::SChar || currentType == QMetaType::Char)
currentType = QMetaType::UInt; currentType = QMetaType::UInt;
if (targetTypeId == QMetaType::SChar || currentType == QMetaType::Char) if (targetTypeId == QMetaType::SChar || currentType == QMetaType::Char)
targetTypeId = QMetaType::UInt; targetTypeId = QMetaType::UInt;
if (uint(targetTypeId) == uint(QMetaType::Float)) targetTypeId = QVariant::Double; if (currentType == QMetaType::Short || currentType == QMetaType::UShort)
currentType = QMetaType::Int;
if (targetTypeId == QMetaType::Short || currentType == QMetaType::UShort)
targetTypeId = QMetaType::Int;
if (currentType == QMetaType::Float)
currentType = QMetaType::Double;
if (targetTypeId == QMetaType::Float)
targetTypeId = QMetaType::Double;
if (currentType == uint(targetTypeId)) if (currentType == uint(targetTypeId))
return true; return true;

View File

@ -502,7 +502,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
QString lang = xml.attributes().value(QLatin1String("xml:lang")).toString(); QString lang = xml.attributes().value(QLatin1String("xml:lang")).toString();
const QString text = xml.readElementText(); const QString text = xml.readElementText();
if (lang.isEmpty()) { if (lang.isEmpty()) {
lang = QLatin1String("en_US"); lang = QLatin1String("default"); // no locale attribute provided, treat it as default.
} }
data.localeComments.insert(lang, text); data.localeComments.insert(lang, text);
continue; // we called readElementText, so we're at the EndElement already. continue; // we called readElementText, so we're at the EndElement already.

View File

@ -258,6 +258,7 @@ QString QMimeType::comment() const
QStringList languageList; QStringList languageList;
languageList << QLocale().name(); languageList << QLocale().name();
languageList << QLocale().uiLanguages(); languageList << QLocale().uiLanguages();
languageList << QLatin1String("default"); // use the default locale if possible.
for (const QString &language : qAsConst(languageList)) { for (const QString &language : qAsConst(languageList)) {
const QString lang = language == QLatin1String("C") ? QLatin1String("en_US") : language; const QString lang = language == QLatin1String("C") ? QLatin1String("en_US") : language;
const QString comm = d->localeComments.value(lang); const QString comm = d->localeComments.value(lang);

View File

@ -248,11 +248,11 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString
} }
break; break;
case ParseComment: { case ParseComment: {
// comments have locale attributes. We want the default, English one // comments have locale attributes.
QString locale = atts.value(QLatin1String(localeAttributeC)).toString(); QString locale = atts.value(QLatin1String(localeAttributeC)).toString();
const QString comment = reader.readElementText(); const QString comment = reader.readElementText();
if (locale.isEmpty()) if (locale.isEmpty())
locale = QString::fromLatin1("en_US"); locale = QString::fromLatin1("default");
data.localeComments.insert(locale, comment); data.localeComments.insert(locale, comment);
} }
break; break;

View File

@ -114,7 +114,7 @@ qsizetype QOpenGLTextureUploader::textureImage(GLenum target, const QImage &imag
externalFormat = GL_BGRA; externalFormat = GL_BGRA;
internalFormat = GL_RGBA; internalFormat = GL_RGBA;
pixelType = GL_UNSIGNED_INT_8_8_8_8_REV; pixelType = GL_UNSIGNED_INT_8_8_8_8_REV;
} else if (funcs->hasOpenGLExtension(QOpenGLExtensions::TextureSwizzle) && false) { } else if (funcs->hasOpenGLExtension(QOpenGLExtensions::TextureSwizzle)) {
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
GLint swizzle[4] = { GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA }; GLint swizzle[4] = { GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA };
funcs->glTexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle); funcs->glTexParameteriv(target, GL_TEXTURE_SWIZZLE_RGBA, swizzle);

View File

@ -474,7 +474,12 @@ void QSslSocketPrivate::resetDefaultCiphers()
#else #else
SSL_CTX *myCtx = q_SSL_CTX_new(q_SSLv23_client_method()); SSL_CTX *myCtx = q_SSL_CTX_new(q_SSLv23_client_method());
#endif #endif
// Note, we assert, not just silently return/bail out early:
// this should never happen and problems with OpenSSL's initialization
// must be caught before this (see supportsSsl()).
Q_ASSERT(myCtx);
SSL *mySsl = q_SSL_new(myCtx); SSL *mySsl = q_SSL_new(myCtx);
Q_ASSERT(mySsl);
QList<QSslCipher> ciphers; QList<QSslCipher> ciphers;
QList<QSslCipher> defaultCiphers; QList<QSslCipher> defaultCiphers;

View File

@ -88,8 +88,6 @@ bool QSslSocketPrivate::ensureLibraryLoaded()
const QMutexLocker locker(qt_opensslInitMutex); const QMutexLocker locker(qt_opensslInitMutex);
if (!s_libraryLoaded) { if (!s_libraryLoaded) {
s_libraryLoaded = true;
// Initialize OpenSSL. // Initialize OpenSSL.
if (q_OPENSSL_init_ssl(0, nullptr) != 1) if (q_OPENSSL_init_ssl(0, nullptr) != 1)
return false; return false;
@ -105,6 +103,8 @@ bool QSslSocketPrivate::ensureLibraryLoaded()
qWarning("Random number generator not seeded, disabling SSL support"); qWarning("Random number generator not seeded, disabling SSL support");
return false; return false;
} }
s_libraryLoaded = true;
} }
return true; return true;
} }

View File

@ -215,8 +215,6 @@ bool QSslSocketPrivate::ensureLibraryLoaded()
QMutexLocker locker(openssl_locks()->initLock()); QMutexLocker locker(openssl_locks()->initLock());
if (!s_libraryLoaded) { if (!s_libraryLoaded) {
s_libraryLoaded = true;
// Initialize OpenSSL. // Initialize OpenSSL.
q_CRYPTO_set_id_callback(id_function); q_CRYPTO_set_id_callback(id_function);
q_CRYPTO_set_locking_callback(locking_function); q_CRYPTO_set_locking_callback(locking_function);
@ -235,6 +233,8 @@ bool QSslSocketPrivate::ensureLibraryLoaded()
qWarning("Random number generator not seeded, disabling SSL support"); qWarning("Random number generator not seeded, disabling SSL support");
return false; return false;
} }
s_libraryLoaded = true;
} }
return true; return true;
} }

View File

@ -1,12 +1,6 @@
HEADERS += $$PWD/qcoretextfontdatabase_p.h $$PWD/qfontengine_coretext_p.h HEADERS += $$PWD/qcoretextfontdatabase_p.h $$PWD/qfontengine_coretext_p.h
OBJECTIVE_SOURCES += $$PWD/qfontengine_coretext.mm $$PWD/qcoretextfontdatabase.mm OBJECTIVE_SOURCES += $$PWD/qfontengine_coretext.mm $$PWD/qcoretextfontdatabase.mm
qtConfig(freetype) {
QMAKE_USE_PRIVATE += freetype
HEADERS += freetype/qfontengine_ft_p.h
SOURCES += freetype/qfontengine_ft.cpp
}
LIBS_PRIVATE += \ LIBS_PRIVATE += \
-framework CoreFoundation \ -framework CoreFoundation \
-framework CoreGraphics \ -framework CoreGraphics \

View File

@ -107,9 +107,6 @@ class QXcbEventDispatcher
{ {
public: public:
static QAbstractEventDispatcher *createEventDispatcher(QXcbConnection *connection); static QAbstractEventDispatcher *createEventDispatcher(QXcbConnection *connection);
private:
QXcbConnection *m_connection;
}; };
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -755,7 +755,7 @@ void QXcbWindow::show()
xcb_delete_property(xcb_connection(), m_window, XCB_ATOM_WM_TRANSIENT_FOR); xcb_delete_property(xcb_connection(), m_window, XCB_ATOM_WM_TRANSIENT_FOR);
// update _NET_WM_STATE // update _NET_WM_STATE
updateNetWmStateBeforeMap(); setNetWmStateOnUnmappedWindow();
} }
// QWidget-attribute Qt::WA_ShowWithoutActivating. // QWidget-attribute Qt::WA_ShowWithoutActivating.
@ -961,46 +961,6 @@ QXcbWindow::NetWmStates QXcbWindow::netWmStates()
return result; return result;
} }
void QXcbWindow::setNetWmStates(NetWmStates states)
{
QVector<xcb_atom_t> atoms;
auto reply = Q_XCB_REPLY_UNCHECKED(xcb_get_property, xcb_connection(),
0, m_window, atom(QXcbAtom::_NET_WM_STATE),
XCB_ATOM_ATOM, 0, 1024);
if (reply && reply->format == 32 && reply->type == XCB_ATOM_ATOM && reply->value_len > 0) {
const xcb_atom_t *data = static_cast<const xcb_atom_t *>(xcb_get_property_value(reply.get()));
atoms.resize(reply->value_len);
memcpy((void *)&atoms.first(), (void *)data, reply->value_len * sizeof(xcb_atom_t));
}
if (states & NetWmStateAbove && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_ABOVE)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_ABOVE));
if (states & NetWmStateBelow && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_BELOW)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_BELOW));
if (states & NetWmStateFullScreen && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
if (states & NetWmStateMaximizedHorz && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ));
if (states & NetWmStateMaximizedVert && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
if (states & NetWmStateModal && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MODAL)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MODAL));
if (states & NetWmStateStaysOnTop && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP));
if (states & NetWmStateDemandsAttention && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
if (atoms.isEmpty()) {
xcb_delete_property(xcb_connection(), m_window, atom(QXcbAtom::_NET_WM_STATE));
} else {
xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window,
atom(QXcbAtom::_NET_WM_STATE), XCB_ATOM_ATOM, 32,
atoms.count(), atoms.constData());
}
xcb_flush(xcb_connection());
}
void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
{ {
Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask));
@ -1027,7 +987,7 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags)
} }
setWmWindowType(wmWindowTypes, flags); setWmWindowType(wmWindowTypes, flags);
setNetWmStateWindowFlags(flags); setNetWmState(flags);
setMotifWmHints(flags); setMotifWmHints(flags);
setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput); setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput);
@ -1111,7 +1071,7 @@ void QXcbWindow::setMotifWmHints(Qt::WindowFlags flags)
} }
} }
void QXcbWindow::changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two) void QXcbWindow::setNetWmState(bool set, xcb_atom_t one, xcb_atom_t two)
{ {
xcb_client_message_event_t event; xcb_client_message_event_t event;
@ -1131,6 +1091,96 @@ void QXcbWindow::changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two)
(const char *)&event); (const char *)&event);
} }
void QXcbWindow::setNetWmState(Qt::WindowStates state)
{
if ((m_windowState ^ state) & Qt::WindowMaximized) {
setNetWmState(state & Qt::WindowMaximized,
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
}
if ((m_windowState ^ state) & Qt::WindowFullScreen)
setNetWmState(state & Qt::WindowFullScreen, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
}
void QXcbWindow::setNetWmState(Qt::WindowFlags flags)
{
setNetWmState(flags & Qt::WindowStaysOnTopHint,
atom(QXcbAtom::_NET_WM_STATE_ABOVE),
atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP));
setNetWmState(flags & Qt::WindowStaysOnBottomHint, atom(QXcbAtom::_NET_WM_STATE_BELOW));
}
void QXcbWindow::setNetWmStateOnUnmappedWindow()
{
if (Q_UNLIKELY(m_mapped))
qCWarning(lcQpaXcb()) << "internal error: " << Q_FUNC_INFO << "called on mapped window";
NetWmStates states(0);
const Qt::WindowFlags flags = window()->flags();
if (flags & Qt::WindowStaysOnTopHint) {
states |= NetWmStateAbove;
states |= NetWmStateStaysOnTop;
} else if (flags & Qt::WindowStaysOnBottomHint) {
states |= NetWmStateBelow;
}
if (window()->windowStates() & Qt::WindowFullScreen)
states |= NetWmStateFullScreen;
if (window()->windowStates() & Qt::WindowMaximized) {
states |= NetWmStateMaximizedHorz;
states |= NetWmStateMaximizedVert;
}
if (window()->modality() != Qt::NonModal)
states |= NetWmStateModal;
// According to EWMH:
// "The Window Manager should remove _NET_WM_STATE whenever a window is withdrawn".
// Which means that we don't have to read this property before changing it on a withdrawn
// window. But there are situations where users want to adjust this property as well
// (e4cea305ed2ba3c9f580bf9d16c59a1048af0e8a), so instead of overwriting the property
// we first read it and then merge our hints with the existing values, allowing a user
// to set custom hints.
QVector<xcb_atom_t> atoms;
auto reply = Q_XCB_REPLY_UNCHECKED(xcb_get_property, xcb_connection(),
0, m_window, atom(QXcbAtom::_NET_WM_STATE),
XCB_ATOM_ATOM, 0, 1024);
if (reply && reply->format == 32 && reply->type == XCB_ATOM_ATOM && reply->value_len > 0) {
const xcb_atom_t *data = static_cast<const xcb_atom_t *>(xcb_get_property_value(reply.get()));
atoms.resize(reply->value_len);
memcpy((void *)&atoms.first(), (void *)data, reply->value_len * sizeof(xcb_atom_t));
}
if (states & NetWmStateAbove && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_ABOVE)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_ABOVE));
if (states & NetWmStateBelow && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_BELOW)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_BELOW));
if (states & NetWmStateFullScreen && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
if (states & NetWmStateMaximizedHorz && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ));
if (states & NetWmStateMaximizedVert && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
if (states & NetWmStateModal && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_MODAL)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_MODAL));
if (states & NetWmStateStaysOnTop && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP));
if (states & NetWmStateDemandsAttention && !atoms.contains(atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION)))
atoms.push_back(atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
if (atoms.isEmpty()) {
xcb_delete_property(xcb_connection(), m_window, atom(QXcbAtom::_NET_WM_STATE));
} else {
xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window,
atom(QXcbAtom::_NET_WM_STATE), XCB_ATOM_ATOM, 32,
atoms.count(), atoms.constData());
}
xcb_flush(xcb_connection());
}
void QXcbWindow::setWindowState(Qt::WindowStates state) void QXcbWindow::setWindowState(Qt::WindowStates state)
{ {
if (state == m_windowState) if (state == m_windowState)
@ -1158,14 +1208,7 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
m_minimized = true; m_minimized = true;
} }
if ((m_windowState ^ state) & Qt::WindowMaximized) { setNetWmState(state);
changeNetWmState(state & Qt::WindowMaximized, atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
}
if ((m_windowState ^ state) & Qt::WindowFullScreen) {
changeNetWmState(state & Qt::WindowFullScreen, atom(QXcbAtom::_NET_WM_STATE_FULLSCREEN));
}
xcb_get_property_cookie_t cookie = xcb_get_wm_hints_unchecked(xcb_connection(), m_window); xcb_get_property_cookie_t cookie = xcb_get_wm_hints_unchecked(xcb_connection(), m_window);
xcb_wm_hints_t hints; xcb_wm_hints_t hints;
@ -1181,41 +1224,6 @@ void QXcbWindow::setWindowState(Qt::WindowStates state)
m_windowState = state; m_windowState = state;
} }
void QXcbWindow::updateNetWmStateBeforeMap()
{
NetWmStates states(0);
const Qt::WindowFlags flags = window()->flags();
if (flags & Qt::WindowStaysOnTopHint) {
states |= NetWmStateAbove;
states |= NetWmStateStaysOnTop;
} else if (flags & Qt::WindowStaysOnBottomHint) {
states |= NetWmStateBelow;
}
if (window()->windowStates() & Qt::WindowFullScreen)
states |= NetWmStateFullScreen;
if (window()->windowStates() & Qt::WindowMaximized) {
states |= NetWmStateMaximizedHorz;
states |= NetWmStateMaximizedVert;
}
if (window()->modality() != Qt::NonModal)
states |= NetWmStateModal;
setNetWmStates(states);
}
void QXcbWindow::setNetWmStateWindowFlags(Qt::WindowFlags flags)
{
changeNetWmState(flags & Qt::WindowStaysOnTopHint,
atom(QXcbAtom::_NET_WM_STATE_ABOVE),
atom(QXcbAtom::_NET_WM_STATE_STAYS_ON_TOP));
changeNetWmState(flags & Qt::WindowStaysOnBottomHint,
atom(QXcbAtom::_NET_WM_STATE_BELOW));
}
void QXcbWindow::updateNetWmUserTime(xcb_timestamp_t timestamp) void QXcbWindow::updateNetWmUserTime(xcb_timestamp_t timestamp)
{ {
xcb_window_t wid = m_window; xcb_window_t wid = m_window;
@ -2588,7 +2596,7 @@ void QXcbWindow::setAlertState(bool enabled)
m_alertState = enabled; m_alertState = enabled;
changeNetWmState(enabled, atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION)); setNetWmState(enabled, atom(QXcbAtom::_NET_WM_STATE_DEMANDS_ATTENTION));
} }
uint QXcbWindow::visualId() const uint QXcbWindow::visualId() const

View File

@ -193,17 +193,16 @@ protected:
void setImageFormatForVisual(const xcb_visualtype_t *visual); void setImageFormatForVisual(const xcb_visualtype_t *visual);
QXcbScreen *parentScreen(); QXcbScreen *parentScreen();
QXcbScreen *initialScreen() const; QXcbScreen *initialScreen() const;
void changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two = 0);
void setNetWmState(bool set, xcb_atom_t one, xcb_atom_t two = 0);
void setNetWmState(Qt::WindowFlags flags);
void setNetWmState(Qt::WindowStates state);
void setNetWmStateOnUnmappedWindow();
NetWmStates netWmStates(); NetWmStates netWmStates();
void setNetWmStates(NetWmStates);
void setMotifWmHints(Qt::WindowFlags flags); void setMotifWmHints(Qt::WindowFlags flags);
void setNetWmStateWindowFlags(Qt::WindowFlags flags);
void updateNetWmStateBeforeMap();
void setTransparentForMouseEvents(bool transparent); void setTransparentForMouseEvents(bool transparent);
void updateDoesNotAcceptFocus(bool doesNotAcceptFocus); void updateDoesNotAcceptFocus(bool doesNotAcceptFocus);

View File

@ -1,7 +1,5 @@
INCLUDEPATH += $$PWD $$QT_BUILD_TREE/src/tools/uic INCLUDEPATH += $$PWD $$QT_BUILD_TREE/src/tools/uic
DEFINES += QT_UIC_CPP_GENERATOR
# Input # Input
HEADERS += $$PWD/cppwritedeclaration.h \ HEADERS += $$PWD/cppwritedeclaration.h \
$$PWD/cppwriteincludes.h \ $$PWD/cppwriteincludes.h \

View File

@ -256,18 +256,11 @@ bool Driver::uic(const QString &fileName, DomUI *ui, QTextStream *out)
m_output = out != 0 ? out : &m_stdout; m_output = out != 0 ? out : &m_stdout;
Uic tool(this); Uic tool(this);
bool rtn = false; const bool result = tool.write(ui);
#ifdef QT_UIC_CPP_GENERATOR
rtn = tool.write(ui);
#else
Q_UNUSED(ui);
fprintf(stderr, "uic: option to generate cpp code not compiled in [%s:%d]\n",
__FILE__, __LINE__);
#endif
m_output = oldOutput; m_output = oldOutput;
return rtn; return result;
} }
bool Driver::uic(const QString &fileName, QTextStream *out) bool Driver::uic(const QString &fileName, QTextStream *out)

View File

@ -115,7 +115,6 @@ int runUic(int argc, char *argv[])
driver.option().postfix = parser.value(postfixOption); driver.option().postfix = parser.value(postfixOption);
driver.option().translateFunction = parser.value(translateOption); driver.option().translateFunction = parser.value(translateOption);
driver.option().includeFile = parser.value(includeOption); driver.option().includeFile = parser.value(includeOption);
driver.option().generator = (parser.value(generatorOption).toLower() == QLatin1String("java")) ? Option::JavaGenerator : Option::CppGenerator;
if (parser.isSet(noStringLiteralOption)) if (parser.isSet(noStringLiteralOption))
fprintf(stderr, "The -s, --no-stringliteral option is deprecated and it won't take any effect.\n"); fprintf(stderr, "The -s, --no-stringliteral option is deprecated and it won't take any effect.\n");

View File

@ -36,12 +36,6 @@ QT_BEGIN_NAMESPACE
struct Option struct Option
{ {
enum Generator
{
CppGenerator,
JavaGenerator
};
unsigned int headerProtection : 1; unsigned int headerProtection : 1;
unsigned int copyrightHeader : 1; unsigned int copyrightHeader : 1;
unsigned int generateImplemetation : 1; unsigned int generateImplemetation : 1;
@ -51,7 +45,6 @@ struct Option
unsigned int limitXPM_LineLength : 1; unsigned int limitXPM_LineLength : 1;
unsigned int implicitIncludes: 1; unsigned int implicitIncludes: 1;
unsigned int idBased: 1; unsigned int idBased: 1;
Generator generator;
QString inputFile; QString inputFile;
QString outputFile; QString outputFile;
@ -61,10 +54,6 @@ struct Option
QString postfix; QString postfix;
QString translateFunction; QString translateFunction;
QString includeFile; QString includeFile;
#ifdef QT_UIC_JAVA_GENERATOR
QString javaPackage;
QString javaOutputDirectory;
#endif
Option() Option()
: headerProtection(1), : headerProtection(1),
@ -76,7 +65,6 @@ struct Option
limitXPM_LineLength(0), limitXPM_LineLength(0),
implicitIncludes(1), implicitIncludes(1),
idBased(0), idBased(0),
generator(CppGenerator),
prefix(QLatin1String("Ui_")) prefix(QLatin1String("Ui_"))
{ indent.fill(QLatin1Char(' '), 4); } { indent.fill(QLatin1Char(' '), 4); }

View File

@ -33,18 +33,12 @@
#include "treewalker.h" #include "treewalker.h"
#include "validator.h" #include "validator.h"
#ifdef QT_UIC_CPP_GENERATOR
#include "cppwriteincludes.h" #include "cppwriteincludes.h"
#include "cppwritedeclaration.h" #include "cppwritedeclaration.h"
#endif
#ifdef QT_UIC_JAVA_GENERATOR
#include "javawriteincludes.h"
#include "javawritedeclaration.h"
#endif
#include <qxmlstream.h> #include <qxmlstream.h>
#include <qfileinfo.h> #include <qfileinfo.h>
#include <qscopedpointer.h>
#include <qtextstream.h> #include <qtextstream.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -172,65 +166,33 @@ DomUI *Uic::parseUiFile(QXmlStreamReader &reader)
bool Uic::write(QIODevice *in) bool Uic::write(QIODevice *in)
{ {
if (option().generator == Option::JavaGenerator) { QScopedPointer<DomUI> ui;
// the Java generator ignores header protection
opt.headerProtection = false;
}
DomUI *ui = 0;
{ {
QXmlStreamReader reader; QXmlStreamReader reader;
reader.setDevice(in); reader.setDevice(in);
ui = parseUiFile(reader); ui.reset(parseUiFile(reader));
if (!ui)
return false;
} }
if (ui.isNull())
return false;
double version = ui->attributeVersion().toDouble(); double version = ui->attributeVersion().toDouble();
if (version < 4.0) { if (version < 4.0) {
delete ui;
fprintf(stderr, "uic: File generated with too old version of Qt Designer\n"); fprintf(stderr, "uic: File generated with too old version of Qt Designer\n");
return false; return false;
} }
QString language = ui->attributeLanguage(); const QString &language = ui->attributeLanguage();
driver()->setUseIdBasedTranslations(ui->attributeIdbasedtr()); driver()->setUseIdBasedTranslations(ui->attributeIdbasedtr());
bool rtn = false; if (!language.isEmpty() && language.compare(QLatin1String("c++"), Qt::CaseInsensitive) != 0) {
fprintf(stderr, "uic: File is not a \"c++\" ui file, language=%s\n", qPrintable(language));
if (option().generator == Option::JavaGenerator) { return false;
#ifdef QT_UIC_JAVA_GENERATOR
if (language.toLower() != QLatin1String("jambi")) {
fprintf(stderr, "uic: File is not a 'jambi' form\n");
delete ui;
return false;
}
rtn = jwrite (ui);
#else
fprintf(stderr, "uic: option to generate java code not compiled in\n");
#endif
} else {
#ifdef QT_UIC_CPP_GENERATOR
if (!language.isEmpty() && language.toLower() != QLatin1String("c++")) {
fprintf(stderr, "uic: File is not a 'c++' ui file, language=%s\n", qPrintable(language));
delete ui;
return false;
}
rtn = write (ui);
#else
fprintf(stderr, "uic: option to generate cpp code not compiled in\n");
#endif
} }
delete ui; return write(ui.data());
return rtn;
} }
#ifdef QT_UIC_CPP_GENERATOR
bool Uic::write(DomUI *ui) bool Uic::write(DomUI *ui)
{ {
using namespace CPP; using namespace CPP;
@ -267,37 +229,6 @@ bool Uic::write(DomUI *ui)
return true; return true;
} }
#endif
#ifdef QT_UIC_JAVA_GENERATOR
bool Uic::jwrite(DomUI *ui)
{
using namespace Java;
if (!ui || !ui->elementWidget())
return false;
if (opt.copyrightHeader)
writeCopyrightHeader(ui);
pixFunction = ui->elementPixmapFunction();
if (pixFunction == QLatin1String("QPixmap::fromMimeSource"))
pixFunction = QLatin1String("qPixmapFromMimeSource");
externalPix = ui->elementImages() == 0;
info.acceptUI(ui);
cWidgetsInfo.acceptUI(ui);
WriteIncludes(this).acceptUI(ui);
Validator(this).acceptUI(ui);
WriteDeclaration(this).acceptUI(ui);
return true;
}
#endif
#ifdef QT_UIC_CPP_GENERATOR
void Uic::writeHeaderProtectionStart() void Uic::writeHeaderProtectionStart()
{ {
@ -311,7 +242,6 @@ void Uic::writeHeaderProtectionEnd()
QString h = drv->headerFileName(); QString h = drv->headerFileName();
out << "#endif // " << h << "\n"; out << "#endif // " << h << "\n";
} }
#endif
bool Uic::isMainWindow(const QString &className) const bool Uic::isMainWindow(const QString &className) const
{ {

View File

@ -83,13 +83,7 @@ public:
bool write(QIODevice *in); bool write(QIODevice *in);
#ifdef QT_UIC_JAVA_GENERATOR
bool jwrite(DomUI *ui);
#endif
#ifdef QT_UIC_CPP_GENERATOR
bool write(DomUI *ui); bool write(DomUI *ui);
#endif
bool isMainWindow(const QString &className) const; bool isMainWindow(const QString &className) const;
bool isToolBar(const QString &className) const; bool isToolBar(const QString &className) const;
@ -105,11 +99,9 @@ private:
void writeCopyrightHeader(DomUI *ui); void writeCopyrightHeader(DomUI *ui);
DomUI *parseUiFile(QXmlStreamReader &reader); DomUI *parseUiFile(QXmlStreamReader &reader);
#ifdef QT_UIC_CPP_GENERATOR
// header protection // header protection
void writeHeaderProtectionStart(); void writeHeaderProtectionStart();
void writeHeaderProtectionEnd(); void writeHeaderProtectionEnd();
#endif
private: private:
Driver *drv; Driver *drv;

View File

@ -1851,7 +1851,7 @@ void QColorDialogPrivate::_q_addCustom()
QColorDialogOptions::setCustomColor(nextCust, cs->currentColor()); QColorDialogOptions::setCustomColor(nextCust, cs->currentColor());
if (custom) if (custom)
custom->update(); custom->update();
nextCust = (nextCust+1) % 16; nextCust = (nextCust+1) % QColorDialogOptions::customColorCount();
} }
void QColorDialogPrivate::retranslateStrings() void QColorDialogPrivate::retranslateStrings()

View File

@ -525,6 +525,12 @@ void tst_QVariant::canConvert_data()
var = QVariant::fromValue<signed char>(-1); var = QVariant::fromValue<signed char>(-1);
QTest::newRow("SChar") QTest::newRow("SChar")
<< var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << N << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y; << var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << N << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
var = QVariant((short)-3);
QTest::newRow("Short")
<< var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << Y << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
var = QVariant((ushort)7);
QTest::newRow("UShort")
<< var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << Y << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
var = QVariant::fromValue<QJsonValue>(QJsonValue(QStringLiteral("hello"))); var = QVariant::fromValue<QJsonValue>(QJsonValue(QStringLiteral("hello")));
QTest::newRow("JsonValue") QTest::newRow("JsonValue")
<< var << N << N << Y << N << N << N << N << N << N << Y << N << N << Y << N << N << Y << Y << Y << N << N << N << N << N << N << N << N << Y << N << N << Y << Y; << var << N << N << Y << N << N << N << N << N << N << Y << N << N << Y << N << N << Y << Y << Y << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
@ -563,6 +569,8 @@ void tst_QVariant::toInt_data()
QTest::newRow( "char" ) << QVariant::fromValue('a') << int('a') << true; QTest::newRow( "char" ) << QVariant::fromValue('a') << int('a') << true;
signed char signedChar = -13; signed char signedChar = -13;
QTest::newRow( "signed char" ) << QVariant::fromValue(signedChar) << -13 << true; QTest::newRow( "signed char" ) << QVariant::fromValue(signedChar) << -13 << true;
QTest::newRow( "short" ) << QVariant::fromValue(short(-7)) << int(-7) << true;
QTest::newRow( "ushort" ) << QVariant::fromValue(ushort(30000)) << 30000 << true;
QTest::newRow( "double" ) << QVariant( 3.1415927 ) << 3 << true; QTest::newRow( "double" ) << QVariant( 3.1415927 ) << 3 << true;
QTest::newRow( "float" ) << QVariant( 3.1415927f ) << 3 << true; QTest::newRow( "float" ) << QVariant( 3.1415927f ) << 3 << true;
QTest::newRow( "uint" ) << QVariant( 123u ) << 123 << true; QTest::newRow( "uint" ) << QVariant( 123u ) << 123 << true;

View File

@ -992,6 +992,20 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
const QString fooTestFile2 = QLatin1String(RESOURCE_PREFIX "magic-and-hierarchy2.foo"); const QString fooTestFile2 = QLatin1String(RESOURCE_PREFIX "magic-and-hierarchy2.foo");
QCOMPARE(db.mimeTypeForFile(fooTestFile2).name(), QString::fromLatin1("application/vnd.qnx.bar-descriptor")); QCOMPARE(db.mimeTypeForFile(fooTestFile2).name(), QString::fromLatin1("application/vnd.qnx.bar-descriptor"));
// Test if we can use the default comment
{
struct RestoreLocale
{
~RestoreLocale() { QLocale::setDefault(QLocale::c()); }
} restoreLocale;
QLocale::setDefault(QLocale("zh_CN"));
QMimeType suseymp = db.mimeTypeForName("text/x-suse-ymp");
QVERIFY(suseymp.isValid());
QCOMPARE(suseymp.comment(),
QString::fromLatin1("YaST Meta Package"));
}
// Now test removing the mimetype definitions again // Now test removing the mimetype definitions again
for (int i = 0; i < m_additionalMimeFileNames.size(); ++i) for (int i = 0; i < m_additionalMimeFileNames.size(); ++i)
QFile::remove(destDir + m_additionalMimeFileNames.at(i)); QFile::remove(destDir + m_additionalMimeFileNames.at(i));

View File

@ -40,6 +40,7 @@ android
[exposeEventOnShrink_QTBUG54040] [exposeEventOnShrink_QTBUG54040]
# QTBUG-69155 # QTBUG-69155
android android
opensuse
[initialSize] [initialSize]
# QTBUG-69159 # QTBUG-69159
android android

View File

@ -502,6 +502,8 @@ void tst_QAccessibilityLinux::testSlider()
void tst_QAccessibilityLinux::testFocus() void tst_QAccessibilityLinux::testFocus()
{ {
m_window->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(m_window));
QLineEdit *lineEdit1 = new QLineEdit(m_window); QLineEdit *lineEdit1 = new QLineEdit(m_window);
lineEdit1->setText("lineEdit 1"); lineEdit1->setText("lineEdit 1");
QLineEdit *lineEdit2 = new QLineEdit(m_window); QLineEdit *lineEdit2 = new QLineEdit(m_window);

View File

@ -633,13 +633,20 @@ void tst_QSqlQuery::bindBool()
QVERIFY_SQL(q, exec()); QVERIFY_SQL(q, exec());
} }
QVERIFY_SQL(q, exec("SELECT id, flag FROM " + tableName)); QVERIFY_SQL(q, exec("SELECT id, flag FROM " + tableName + " ORDER BY id"));
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
bool flag = i; bool flag = i;
QVERIFY_SQL(q, next()); QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), i); QCOMPARE(q.value(0).toInt(), i);
QCOMPARE(q.value(1).toBool(), flag); QCOMPARE(q.value(1).toBool(), flag);
} }
QVERIFY_SQL(q, prepare("SELECT flag FROM " + tableName + " WHERE flag = :filter"));
const bool filter = true;
q.bindValue(":filter", filter);
QVERIFY_SQL(q, exec());
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toBool(), filter);
QFAIL_SQL(q, next());
QVERIFY_SQL(q, exec("DROP TABLE " + tableName)); QVERIFY_SQL(q, exec("DROP TABLE " + tableName));
} }