Merge "Merge remote-tracking branch 'origin/5.11' into dev" into refs/staging/dev
This commit is contained in:
commit
40c83e43cc
@ -44,7 +44,9 @@
|
||||
#include "qset.h"
|
||||
#include "qlocale.h"
|
||||
#include "qdatetime.h"
|
||||
#if QT_CONFIG(timezone)
|
||||
#include "qtimezone.h"
|
||||
#endif
|
||||
#include "qregexp.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
|
@ -661,10 +661,16 @@ void QShortcutMap::dispatchEvent(QKeyEvent *e)
|
||||
// Find next
|
||||
const QShortcutEntry *current = 0, *next = 0;
|
||||
int i = 0, enabledShortcuts = 0;
|
||||
#if defined(DEBUG_QSHORTCUTMAP)
|
||||
QVector<const QShortcutEntry*> ambiguousShortcuts;
|
||||
#endif
|
||||
while(i < d->identicals.size()) {
|
||||
current = d->identicals.at(i);
|
||||
if (current->enabled || !next){
|
||||
++enabledShortcuts;
|
||||
#if defined(DEBUG_QSHORTCUTMAP)
|
||||
ambiguousShortcuts.append(current);
|
||||
#endif
|
||||
if (enabledShortcuts > d->ambigCount + 1)
|
||||
break;
|
||||
next = current;
|
||||
@ -678,6 +684,13 @@ void QShortcutMap::dispatchEvent(QKeyEvent *e)
|
||||
return;
|
||||
// Dispatch next enabled
|
||||
#if defined(DEBUG_QSHORTCUTMAP)
|
||||
if (ambiguousShortcuts.size() > 1) {
|
||||
qDebug() << "The following shortcuts are about to be activated ambiguously:";
|
||||
for (const QShortcutEntry *entry : qAsConst(ambiguousShortcuts)) {
|
||||
qDebug().nospace() << "- " << entry->keyseq << " (belonging to " << entry->owner << ")";
|
||||
}
|
||||
}
|
||||
|
||||
qDebug().nospace()
|
||||
<< "QShortcutMap::dispatchEvent(): Sending QShortcutEvent(\""
|
||||
<< next->keyseq.toString() << "\", " << next->id << ", "
|
||||
|
@ -258,11 +258,12 @@ QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowStateChanged, QWindow *window, Qt:
|
||||
QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
|
||||
}
|
||||
|
||||
void QWindowSystemInterface::handleWindowScreenChanged(QWindow *window, QScreen *screen)
|
||||
QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowScreenChanged, QWindow *window, QScreen *screen)
|
||||
{
|
||||
|
||||
QWindowSystemInterfacePrivate::WindowScreenChangedEvent *e =
|
||||
new QWindowSystemInterfacePrivate::WindowScreenChangedEvent(window, screen);
|
||||
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
|
||||
QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
|
||||
}
|
||||
|
||||
QT_DEFINE_QPA_EVENT_HANDLER(void, handleSafeAreaMarginsChanged, QWindow *window)
|
||||
|
@ -206,6 +206,7 @@ public:
|
||||
|
||||
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
|
||||
static void handleWindowStateChanged(QWindow *window, Qt::WindowStates newState, int oldState = -1);
|
||||
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
|
||||
static void handleWindowScreenChanged(QWindow *window, QScreen *newScreen);
|
||||
|
||||
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
|
||||
|
@ -896,8 +896,12 @@ bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, con
|
||||
sendExtendedPressRelease(receiver, qtKey, Qt::KeyboardModifier(state), 0, 0, 0);
|
||||
// QTBUG-43343: Make sure to return false if Qt does not handle the key, otherwise,
|
||||
// the keys are not passed to the active media player.
|
||||
# if QT_CONFIG(shortcut)
|
||||
const QKeySequence sequence(Qt::Modifier(state) + qtKey);
|
||||
return QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(sequence);
|
||||
# else
|
||||
return false;
|
||||
# endif
|
||||
#else
|
||||
Q_UNREACHABLE();
|
||||
return false;
|
||||
|
@ -390,6 +390,7 @@ void QWindowsMenuItem::setChecked(bool isChecked)
|
||||
menuItemSetChangeState(parentMenuHandle(), m_id, FALSE, m_checked, MF_CHECKED, MF_UNCHECKED);
|
||||
}
|
||||
|
||||
#if QT_CONFIG(shortcut)
|
||||
void QWindowsMenuItem::setShortcut(const QKeySequence &shortcut)
|
||||
{
|
||||
qCDebug(lcQpaMenus) << __FUNCTION__ << '(' << shortcut << ')' << this;
|
||||
@ -399,6 +400,7 @@ void QWindowsMenuItem::setShortcut(const QKeySequence &shortcut)
|
||||
if (m_parentMenu != nullptr)
|
||||
updateText();
|
||||
}
|
||||
#endif
|
||||
|
||||
void QWindowsMenuItem::setEnabled(bool enabled)
|
||||
{
|
||||
@ -441,10 +443,12 @@ UINT QWindowsMenuItem::state() const
|
||||
QString QWindowsMenuItem::nativeText() const
|
||||
{
|
||||
QString result = m_text;
|
||||
#if QT_CONFIG(shortcut)
|
||||
if (!m_shortcut.isEmpty()) {
|
||||
result += QLatin1Char('\t');
|
||||
result += m_shortcut.toString(QKeySequence::NativeText);
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -894,8 +898,10 @@ void QWindowsMenuItem::formatDebug(QDebug &d) const
|
||||
d << ", subMenu=" << static_cast<const void *>(m_subMenu);
|
||||
d << ", tag=" << showbase << hex
|
||||
<< tag() << noshowbase << dec << ", id=" << m_id;
|
||||
#if QT_CONFIG(shortcut)
|
||||
if (!m_shortcut.isEmpty())
|
||||
d << ", shortcut=" << m_shortcut;
|
||||
#endif
|
||||
if (m_visible)
|
||||
d << " [visible]";
|
||||
if (m_enabled)
|
||||
|
@ -55,7 +55,6 @@
|
||||
#include <qcache.h>
|
||||
#include <qregularexpression.h>
|
||||
#endif
|
||||
#include <QTimeZone>
|
||||
#include <QScopedValueRollback>
|
||||
|
||||
#if defined Q_OS_WIN
|
||||
|
@ -4,9 +4,9 @@
|
||||
** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
** This file is part of the QtTest module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
@ -15,13 +15,24 @@
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -3,9 +3,9 @@
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
** This file is part of the QtTest module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
@ -14,13 +14,24 @@
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
|
@ -186,7 +186,7 @@ void CppGenerator::operator () ()
|
||||
else if (u < 0)
|
||||
{
|
||||
if (verbose)
|
||||
qout << "*** Warning. Found a reduce/reduce conflict in state " << q << " on token ``" << s << "'' between rule "
|
||||
qout() << "*** Warning. Found a reduce/reduce conflict in state " << q << " on token ``" << s << "'' between rule "
|
||||
<< r << " and " << -u << endl;
|
||||
|
||||
++reduce_reduce_conflict_count;
|
||||
@ -194,7 +194,7 @@ void CppGenerator::operator () ()
|
||||
u = qMax (u, -r);
|
||||
|
||||
if (verbose)
|
||||
qout << "\tresolved using rule " << -u << endl;
|
||||
qout() << "\tresolved using rule " << -u << endl;
|
||||
}
|
||||
|
||||
else if (u > 0)
|
||||
@ -227,7 +227,7 @@ void CppGenerator::operator () ()
|
||||
++shift_reduce_conflict_count;
|
||||
|
||||
if (verbose)
|
||||
qout << "*** Warning. Found a shift/reduce conflict in state " << q << " on token ``" << s << "'' with rule " << r << endl;
|
||||
qout() << "*** Warning. Found a shift/reduce conflict in state " << q << " on token ``" << s << "'' with rule " << r << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -238,10 +238,10 @@ void CppGenerator::operator () ()
|
||||
{
|
||||
if (shift_reduce_conflict_count != grammar.expected_shift_reduce
|
||||
|| reduce_reduce_conflict_count != grammar.expected_reduce_reduce)
|
||||
qerr << "*** Conflicts: " << shift_reduce_conflict_count << " shift/reduce, " << reduce_reduce_conflict_count << " reduce/reduce" << endl;
|
||||
qerr() << "*** Conflicts: " << shift_reduce_conflict_count << " shift/reduce, " << reduce_reduce_conflict_count << " reduce/reduce" << endl;
|
||||
|
||||
if (verbose)
|
||||
qout << endl << "*** Conflicts: " << shift_reduce_conflict_count << " shift/reduce, " << reduce_reduce_conflict_count << " reduce/reduce" << endl
|
||||
qout() << endl << "*** Conflicts: " << shift_reduce_conflict_count << " shift/reduce, " << reduce_reduce_conflict_count << " reduce/reduce" << endl
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ void CppGenerator::operator () ()
|
||||
RulePointer rule = grammar.rules.begin () + i;
|
||||
|
||||
if (rule != grammar.goal)
|
||||
qerr << "*** Warning: Rule ``" << *rule << "'' is useless!" << endl;
|
||||
qerr() << "*** Warning: Rule ``" << *rule << "'' is useless!" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,8 +40,17 @@
|
||||
#define QLALR_NO_DEBUG_LOOKAHEADS
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
QTextStream qerr (stderr, QIODevice::WriteOnly);
|
||||
QTextStream qout (stdout, QIODevice::WriteOnly);
|
||||
QTextStream &qerr()
|
||||
{
|
||||
static QTextStream result(stderr, QIODevice::WriteOnly);
|
||||
return result;
|
||||
}
|
||||
|
||||
QTextStream &qout()
|
||||
{
|
||||
static QTextStream result(stdout, QIODevice::WriteOnly);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool operator < (Name a, Name b)
|
||||
{
|
||||
@ -303,7 +312,7 @@ void Automaton::buildNullables ()
|
||||
}
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_NULLABLES
|
||||
qerr << "nullables = {" << nullables << endl;
|
||||
qerr() << "nullables = {" << nullables << endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -446,7 +455,7 @@ void Automaton::buildLookbackSets ()
|
||||
lookbacks.insert (item, Lookback (p, A));
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_LOOKBACKS
|
||||
qerr << "*** (" << id (q) << ", " << *rule << ") lookback (" << id (p) << ", " << *A << ")" << endl;
|
||||
qerr() << "*** (" << id (q) << ", " << *rule << ") lookback (" << id (p) << ", " << *A << ")" << endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -477,7 +486,7 @@ void Automaton::buildDirectReads ()
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_DIRECT_READS
|
||||
for (QMap<Name, NameSet>::iterator dr = q->reads.begin (); dr != q->reads.end (); ++dr)
|
||||
qerr << "*** DR(" << id (q) << ", " << dr.key () << ") = " << dr.value () << endl;
|
||||
qerr() << "*** DR(" << id (q) << ", " << dr.key () << ") = " << dr.value () << endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -506,11 +515,11 @@ void Automaton::buildReadsDigraph ()
|
||||
source->insertEdge (target);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_READS
|
||||
qerr << "*** ";
|
||||
dump (qerr, source);
|
||||
qerr << " reads ";
|
||||
dump (qerr, target);
|
||||
qerr << endl;
|
||||
qerr() << "*** ";
|
||||
dump (qerr(), source);
|
||||
qerr() << " reads ";
|
||||
dump (qerr(), target);
|
||||
qerr() << endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -545,7 +554,7 @@ void Automaton::visitReadNode (ReadNode node)
|
||||
_M_reads_stack.push (node);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_INCLUDES
|
||||
// qerr << "*** Debug. visit node (" << id (node->data.state) << ", " << node->data.nt << ") N = " << N << endl;
|
||||
// qerr() << "*** Debug. visit node (" << id (node->data.state) << ", " << node->data.nt << ") N = " << N << endl;
|
||||
#endif
|
||||
|
||||
for (ReadsGraph::edge_iterator edge = node->begin (); edge != node->end (); ++edge)
|
||||
@ -625,7 +634,7 @@ void Automaton::buildIncludesDigraph ()
|
||||
source->insertEdge (target);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_INCLUDES
|
||||
qerr << "*** (" << id (p) << ", " << *A << ") includes (" << id (pp) << ", " << *name << ")" << endl;
|
||||
qerr() << "*** (" << id (p) << ", " << *A << ") includes (" << id (pp) << ", " << *name << ")" << endl;
|
||||
#endif // QLALR_NO_DEBUG_INCLUDES
|
||||
|
||||
continue;
|
||||
@ -647,7 +656,7 @@ void Automaton::buildIncludesDigraph ()
|
||||
source->insertEdge (target);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_INCLUDES
|
||||
qerr << "*** (" << id (p) << ", " << *A << ") includes (" << id (pp) << ", " << *name << ")" << endl;
|
||||
qerr() << "*** (" << id (p) << ", " << *A << ") includes (" << id (pp) << ", " << *name << ")" << endl;
|
||||
#endif // QLALR_NO_DEBUG_INCLUDES
|
||||
}
|
||||
}
|
||||
@ -664,7 +673,7 @@ void Automaton::visitIncludeNode (IncludeNode node)
|
||||
_M_includes_stack.push (node);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_INCLUDES
|
||||
// qerr << "*** Debug. visit node (" << id (node->data.state) << ", " << node->data.nt << ") N = " << N << endl;
|
||||
// qerr() << "*** Debug. visit node (" << id (node->data.state) << ", " << node->data.nt << ") N = " << N << endl;
|
||||
#endif
|
||||
|
||||
for (IncludesGraph::edge_iterator edge = node->begin (); edge != node->end (); ++edge)
|
||||
@ -676,11 +685,11 @@ void Automaton::visitIncludeNode (IncludeNode node)
|
||||
node->dfn = qMin (N, r->dfn);
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_INCLUDES
|
||||
qerr << "*** Merge. follows";
|
||||
dump (qerr, node);
|
||||
qerr << " += follows";
|
||||
dump (qerr, r);
|
||||
qerr << endl;
|
||||
qerr() << "*** Merge. follows";
|
||||
dump (qerr(), node);
|
||||
qerr() << " += follows";
|
||||
dump (qerr(), r);
|
||||
qerr() << endl;
|
||||
#endif
|
||||
|
||||
NameSet &dst = node->data.state->follows [node->data.nt];
|
||||
@ -714,9 +723,9 @@ void Automaton::buildLookaheads ()
|
||||
StatePointer q = lookback.state;
|
||||
|
||||
#ifndef QLALR_NO_DEBUG_LOOKAHEADS
|
||||
qerr << "(" << id (p) << ", " << *item->rule << ") lookbacks ";
|
||||
dump (qerr, lookback);
|
||||
qerr << " with follows (" << id (q) << ", " << lookback.nt << ") = " << q->follows [lookback.nt] << endl;
|
||||
qerr() << "(" << id (p) << ", " << *item->rule << ") lookbacks ";
|
||||
dump (qerr(), lookback);
|
||||
qerr() << " with follows (" << id (q) << ", " << lookback.nt << ") = " << q->follows [lookback.nt] << endl;
|
||||
#endif
|
||||
|
||||
lookaheads [item].insert (q->follows [lookback.nt].begin (), q->follows [lookback.nt].end ());
|
||||
|
@ -261,7 +261,7 @@ int Recognizer::nextToken()
|
||||
if (ch == QLatin1Char ('"'))
|
||||
inp ();
|
||||
else
|
||||
qerr << _M_input_file << ":" << _M_line << ": Warning. Expected `\"'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Warning. Expected `\"'" << endl;
|
||||
|
||||
_M_current_value = text;
|
||||
return (token = STRING_LITERAL);
|
||||
@ -314,7 +314,7 @@ int Recognizer::nextToken()
|
||||
return (token = PREC);
|
||||
else
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Unknown keyword `" << text << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Unknown keyword `" << text << "'" << endl;
|
||||
exit (EXIT_FAILURE);
|
||||
return (token = ERROR);
|
||||
}
|
||||
@ -439,7 +439,7 @@ bool Recognizer::parse (const QString &input_file)
|
||||
QFile file(_M_input_file);
|
||||
if (! file.open(QFile::ReadOnly))
|
||||
{
|
||||
qerr << "qlalr: no input file\n";
|
||||
qerr() << "qlalr: no input file\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -659,7 +659,7 @@ case $rule_number: {
|
||||
|
||||
if (_M_grammar->terminals.find (_M_current_rule->lhs) != _M_grammar->terminals.end ())
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -683,7 +683,7 @@ case $rule_number: {
|
||||
|
||||
if (_M_grammar->terminals.find (_M_current_rule->lhs) != _M_grammar->terminals.end ())
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -712,7 +712,7 @@ case $rule_number: {
|
||||
Name tok = _M_grammar->intern (sym(2));
|
||||
if (! _M_grammar->isTerminal (tok))
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": `" << *tok << " is not a terminal symbol" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": `" << *tok << " is not a terminal symbol" << endl;
|
||||
_M_current_rule->prec = _M_grammar->names.end ();
|
||||
}
|
||||
else
|
||||
@ -758,7 +758,7 @@ case $rule_number: {
|
||||
}
|
||||
}
|
||||
|
||||
qerr << _M_input_file << ":" << _M_line << ": Syntax error" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Syntax error" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -501,9 +501,8 @@ QTextStream &operator << (QTextStream &out, const Item &item);
|
||||
QTextStream &operator << (QTextStream &out, const NameSet &ns);
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
// ... hmm
|
||||
extern QTextStream qerr;
|
||||
extern QTextStream qout;
|
||||
QTextStream &qerr();
|
||||
QTextStream &qout();
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // LALR_H
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
static void help_me ()
|
||||
{
|
||||
qerr << "Usage: qlalr [options] [input file name]" << endl
|
||||
qerr() << "Usage: qlalr [options] [input file name]" << endl
|
||||
<< endl
|
||||
<< " --help, -h\t\tdisplay this help and exit" << endl
|
||||
<< " --verbose, -v\t\tverbose output" << endl
|
||||
@ -91,7 +91,7 @@ int main (int argc, char *argv[])
|
||||
file_name = arg;
|
||||
|
||||
else
|
||||
qerr << "*** Warning. Ignore argument `" << arg << "'" << endl;
|
||||
qerr() << "*** Warning. Ignore argument `" << arg << "'" << endl;
|
||||
}
|
||||
|
||||
if (file_name.isEmpty ())
|
||||
@ -108,13 +108,13 @@ int main (int argc, char *argv[])
|
||||
|
||||
if (grammar.rules.isEmpty ())
|
||||
{
|
||||
qerr << "*** Fatal. No rules!" << endl;
|
||||
qerr() << "*** Fatal. No rules!" << endl;
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
else if (grammar.start == grammar.names.end ())
|
||||
{
|
||||
qerr << "*** Fatal. No start symbol!" << endl;
|
||||
qerr() << "*** Fatal. No start symbol!" << endl;
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@ -131,13 +131,13 @@ int main (int argc, char *argv[])
|
||||
|
||||
if (generate_dot)
|
||||
{
|
||||
DotGraph genDotFile (qout);
|
||||
DotGraph genDotFile (qout());
|
||||
genDotFile (&aut);
|
||||
}
|
||||
|
||||
else if (generate_report)
|
||||
{
|
||||
ParseTable genParseTable (qout);
|
||||
ParseTable genParseTable (qout());
|
||||
genParseTable(&aut);
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ int Recognizer::nextToken()
|
||||
if (ch == QLatin1Char ('"'))
|
||||
inp ();
|
||||
else
|
||||
qerr << _M_input_file << ":" << _M_line << ": Warning. Expected `\"'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Warning. Expected `\"'" << endl;
|
||||
|
||||
_M_current_value = text;
|
||||
return (token = STRING_LITERAL);
|
||||
@ -150,7 +150,7 @@ int Recognizer::nextToken()
|
||||
return (token = PREC);
|
||||
else
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Unknown keyword `" << text << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Unknown keyword `" << text << "'" << endl;
|
||||
exit (EXIT_FAILURE);
|
||||
return (token = ERROR);
|
||||
}
|
||||
@ -275,7 +275,7 @@ bool Recognizer::parse (const QString &input_file)
|
||||
QFile file(_M_input_file);
|
||||
if (! file.open(QFile::ReadOnly))
|
||||
{
|
||||
qerr << "qlalr: no input file\n";
|
||||
qerr() << "qlalr: no input file\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -405,7 +405,7 @@ case 34: {
|
||||
|
||||
if (_M_grammar->terminals.find (_M_current_rule->lhs) != _M_grammar->terminals.end ())
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -420,7 +420,7 @@ case 38: {
|
||||
|
||||
if (_M_grammar->terminals.find (_M_current_rule->lhs) != _M_grammar->terminals.end ())
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Invalid non terminal `" << *_M_current_rule->lhs << "'" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -443,7 +443,7 @@ case 40: {
|
||||
Name tok = _M_grammar->intern (sym(2));
|
||||
if (! _M_grammar->isTerminal (tok))
|
||||
{
|
||||
qerr << _M_input_file << ":" << _M_line << ": `" << *tok << " is not a terminal symbol" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": `" << *tok << " is not a terminal symbol" << endl;
|
||||
_M_current_rule->prec = _M_grammar->names.end ();
|
||||
}
|
||||
else
|
||||
@ -474,7 +474,7 @@ case 43: {
|
||||
}
|
||||
}
|
||||
|
||||
qerr << _M_input_file << ":" << _M_line << ": Syntax error" << endl;
|
||||
qerr() << _M_input_file << ":" << _M_line << ": Syntax error" << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,9 @@ QVistaBackButton::QVistaBackButton(QWidget *widget)
|
||||
{
|
||||
setFocusPolicy(Qt::NoFocus);
|
||||
// Native dialogs use ALT-Left even in RTL mode, so do the same, even if it might be counter-intuitive.
|
||||
#if QT_CONFIG(shortcut)
|
||||
setShortcut(QKeySequence(Qt::ALT | Qt::Key_Left));
|
||||
#endif
|
||||
}
|
||||
|
||||
QSize QVistaBackButton::sizeHint() const
|
||||
|
@ -104,6 +104,9 @@ void tst_QIODevice::getSetCheck()
|
||||
//----------------------------------------------------------------------------------
|
||||
void tst_QIODevice::constructing_QTcpSocket()
|
||||
{
|
||||
#if defined(Q_OS_WINRT)
|
||||
QSKIP("Synchronous socket calls are broken on winrt. See QTBUG-40922");
|
||||
#endif
|
||||
if (!QtNetworkSettings::verifyTestNetworkSettings())
|
||||
QSKIP("No network test server available");
|
||||
|
||||
@ -263,6 +266,9 @@ void tst_QIODevice::unget()
|
||||
buffer.ungetChar('Q');
|
||||
QCOMPARE(buffer.readLine(buf, 3), qint64(1));
|
||||
|
||||
#if defined(Q_OS_WINRT)
|
||||
QSKIP("Synchronous socket calls are broken on winrt. See QTBUG-40922");
|
||||
#endif
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
QTcpSocket socket;
|
||||
QIODevice *dev;
|
||||
|
@ -29,3 +29,5 @@ win32 {
|
||||
LIBS += -Lstaticplugin
|
||||
}
|
||||
LIBS += -lmoctestplugin
|
||||
|
||||
builtin_testdata: DEFINES += BUILTIN_TESTDATA
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtCore/QMimeDatabase>
|
||||
|
||||
class tst_QResourceEngine: public QObject
|
||||
{
|
||||
@ -127,9 +128,19 @@ void tst_QResourceEngine::checkStructure_data()
|
||||
rootContents.insert(1, QLatin1String("android_testdata"));
|
||||
#endif
|
||||
|
||||
#if defined(BUILTIN_TESTDATA)
|
||||
rootContents.insert(8, QLatin1String("testqrc"));
|
||||
#endif
|
||||
|
||||
|
||||
QTest::newRow("root dir") << QString(":/")
|
||||
<< QString()
|
||||
<< (QStringList() << "search_file.txt")
|
||||
<< (QStringList()
|
||||
#if defined(BUILTIN_TESTDATA)
|
||||
<< "parentdir.txt"
|
||||
<< "runtime_resource.rcc"
|
||||
#endif
|
||||
<< "search_file.txt")
|
||||
<< rootContents
|
||||
<< QLocale::c()
|
||||
<< qlonglong(0);
|
||||
@ -336,6 +347,11 @@ void tst_QResourceEngine::checkStructure()
|
||||
QFETCH(QLocale, locale);
|
||||
QFETCH(qlonglong, contentsSize);
|
||||
|
||||
// We rely on the existence of the root "qt-project.org" in resources. For
|
||||
// static builds on MSVC these resources are only added if they are used.
|
||||
QMimeDatabase db;
|
||||
Q_UNUSED(db);
|
||||
|
||||
bool directory = (containedDirs.size() + containedFiles.size() > 0);
|
||||
QLocale::setDefault(locale);
|
||||
|
||||
|
@ -2078,8 +2078,6 @@ void tst_QFtp::doneSignal()
|
||||
if (QTestEventLoop::instance().timeout())
|
||||
QFAIL("Network operation timed out");
|
||||
|
||||
QTest::qWait(200);
|
||||
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(spy.first().first().toBool(), false);
|
||||
}
|
||||
|
@ -7816,13 +7816,14 @@ void tst_QNetworkReply::closeDuringDownload()
|
||||
QFETCH(QUrl, url);
|
||||
QNetworkRequest request(url);
|
||||
QNetworkReply* reply = manager.get(request);
|
||||
connect(reply, SIGNAL(readyRead()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
QTestEventLoop::instance().enterLoop(10);
|
||||
QVERIFY(!QTestEventLoop::instance().timeout());
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
QSignalSpy readyReadSpy(reply, &QNetworkReply::readyRead);
|
||||
QVERIFY(readyReadSpy.wait(10000));
|
||||
QSignalSpy destroySpy(reply, &QObject::destroyed);
|
||||
reply->close();
|
||||
reply->deleteLater();
|
||||
QTest::qWait(1000); //cancelling ftp takes some time, this avoids a warning caused by test's cleanup() destroying the connection cache before the abort is finished
|
||||
// Wait for destruction to avoid a warning caused by test's cleanup()
|
||||
// destroying the connection cache before the abort is finished
|
||||
QVERIFY(destroySpy.wait());
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ftpAuthentication_data()
|
||||
|
@ -1225,12 +1225,13 @@ public:
|
||||
socket.write("testing\n");
|
||||
exec();
|
||||
}
|
||||
signals:
|
||||
void bytesWrittenReceived();
|
||||
public slots:
|
||||
void bytesWritten(qint64) {
|
||||
void bytesWritten(qint64) {
|
||||
emit bytesWrittenReceived();
|
||||
exit();
|
||||
}
|
||||
|
||||
private:
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
@ -1248,11 +1249,12 @@ void tst_QLocalSocket::bytesWrittenSignal()
|
||||
QLocalServer server;
|
||||
QVERIFY(server.listen("qlocalsocket_readyread"));
|
||||
WriteThread writeThread;
|
||||
QSignalSpy receivedSpy(&writeThread, &WriteThread::bytesWrittenReceived);
|
||||
writeThread.start();
|
||||
bool timedOut = false;
|
||||
QVERIFY(server.waitForNewConnection(3000, &timedOut));
|
||||
QVERIFY(!timedOut);
|
||||
QTest::qWait(2000);
|
||||
QVERIFY(receivedSpy.wait(2000));
|
||||
QVERIFY(writeThread.wait(2000));
|
||||
}
|
||||
|
||||
|
@ -2048,11 +2048,7 @@ void tst_QTcpSocket::connectToLocalHostNoService()
|
||||
// port with no service listening.
|
||||
QTcpSocket *socket = newSocket();
|
||||
socket->connectToHost("localhost", 31415); // no service running here, one suspects
|
||||
|
||||
while(socket->state() == QTcpSocket::HostLookupState || socket->state() == QTcpSocket::ConnectingState) {
|
||||
QTest::qWait(100);
|
||||
}
|
||||
QCOMPARE(socket->state(), QTcpSocket::UnconnectedState);
|
||||
QTRY_COMPARE(socket->state(), QTcpSocket::UnconnectedState);
|
||||
delete socket;
|
||||
}
|
||||
#endif
|
||||
|
@ -2908,10 +2908,7 @@ void tst_QSslSocket::qtbug18498_peek2()
|
||||
QScopedPointer<QSslSocket> server(listener.socket);
|
||||
|
||||
QVERIFY(server->write("HELLO\r\n", 7));
|
||||
QElapsedTimer stopwatch;
|
||||
stopwatch.start();
|
||||
while (client->bytesAvailable() < 7 && stopwatch.elapsed() < 5000)
|
||||
QTest::qWait(100);
|
||||
QTRY_COMPARE(client->bytesAvailable(), 7);
|
||||
char c;
|
||||
QCOMPARE(client->peek(&c,1), 1);
|
||||
QCOMPARE(c, 'H');
|
||||
@ -2930,8 +2927,7 @@ void tst_QSslSocket::qtbug18498_peek2()
|
||||
bigblock.fill('#', QIODEVICE_BUFFERSIZE + 1024);
|
||||
QVERIFY(client->write(QByteArray("head")));
|
||||
QVERIFY(client->write(bigblock));
|
||||
while (server->bytesAvailable() < bigblock.length() + 4 && stopwatch.elapsed() < 5000)
|
||||
QTest::qWait(100);
|
||||
QTRY_COMPARE(server->bytesAvailable(), bigblock.length() + 4);
|
||||
QCOMPARE(server->read(4), QByteArray("head"));
|
||||
QCOMPARE(server->peek(bigblock.length()), bigblock);
|
||||
b.reserve(bigblock.length());
|
||||
@ -2947,10 +2943,7 @@ void tst_QSslSocket::qtbug18498_peek2()
|
||||
QCOMPARE(server->readAll(), bigblock);
|
||||
|
||||
QVERIFY(client->write("STARTTLS\r\n"));
|
||||
stopwatch.start();
|
||||
// ### Qt5 use QTRY_VERIFY
|
||||
while (server->bytesAvailable() < 10 && stopwatch.elapsed() < 5000)
|
||||
QTest::qWait(100);
|
||||
QTRY_COMPARE(server->bytesAvailable(), 10);
|
||||
QCOMPARE(server->peek(&c,1), 1);
|
||||
QCOMPARE(c, 'S');
|
||||
b = server->peek(3);
|
||||
@ -2983,9 +2976,7 @@ void tst_QSslSocket::qtbug18498_peek2()
|
||||
client->startClientEncryption();
|
||||
|
||||
QVERIFY(server->write("hello\r\n", 7));
|
||||
stopwatch.start();
|
||||
while (client->bytesAvailable() < 7 && stopwatch.elapsed() < 5000)
|
||||
QTest::qWait(100);
|
||||
QTRY_COMPARE(client->bytesAvailable(), 7);
|
||||
QVERIFY(server->mode() == QSslSocket::SslServerMode && client->mode() == QSslSocket::SslClientMode);
|
||||
QCOMPARE(client->peek(&c,1), 1);
|
||||
QCOMPARE(c, 'h');
|
||||
@ -2996,9 +2987,7 @@ void tst_QSslSocket::qtbug18498_peek2()
|
||||
QCOMPARE(client->readAll(), QByteArray("ello\r\n"));
|
||||
|
||||
QVERIFY(client->write("goodbye\r\n"));
|
||||
stopwatch.start();
|
||||
while (server->bytesAvailable() < 9 && stopwatch.elapsed() < 5000)
|
||||
QTest::qWait(100);
|
||||
QTRY_COMPARE(server->bytesAvailable(), 9);
|
||||
QCOMPARE(server->peek(&c,1), 1);
|
||||
QCOMPARE(c, 'g');
|
||||
QCOMPARE(server->readAll(), QByteArray("goodbye\r\n"));
|
||||
|
@ -33,10 +33,13 @@
|
||||
#include "wizardpanel.h"
|
||||
#include "messageboxpanel.h"
|
||||
|
||||
#include <QLibraryInfo>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QMainWindow>
|
||||
#include <QApplication>
|
||||
#include <QMenuBar>
|
||||
#include <QTabWidget>
|
||||
#include <QFormLayout>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QKeySequence>
|
||||
@ -44,10 +47,40 @@
|
||||
// Test for dialogs, allowing to play with all dialog options for implementing native dialogs.
|
||||
// Compiles with Qt 4.8 and Qt 5.
|
||||
|
||||
class AboutDialog : public QDialog
|
||||
{
|
||||
public:
|
||||
explicit AboutDialog(QWidget *parent = 0);
|
||||
};
|
||||
|
||||
AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
QFormLayout *mainLayout = new QFormLayout(this);
|
||||
#if QT_VERSION >= 0x050600
|
||||
mainLayout->addRow(new QLabel(QLibraryInfo::build()));
|
||||
#else
|
||||
mainLayout->addRow(new QLabel(QLatin1String("Qt ") + QLatin1String(QT_VERSION_STR )));
|
||||
#endif
|
||||
mainLayout->addRow("Style:", new QLabel(qApp->style()->objectName()));
|
||||
#if QT_VERSION >= 0x050600
|
||||
mainLayout->addRow("DPR:", new QLabel(QString::number(qApp->devicePixelRatio())));
|
||||
#endif
|
||||
const QString resolution = QString::number(logicalDpiX()) + QLatin1Char(',')
|
||||
+ QString::number(logicalDpiY()) + QLatin1String("dpi");
|
||||
mainLayout->addRow("Resolution:", new QLabel(resolution));
|
||||
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal);
|
||||
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
||||
mainLayout->addRow(buttonBox);
|
||||
}
|
||||
|
||||
class MainWindow : public QMainWindow {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
|
||||
public slots:
|
||||
void aboutDialog();
|
||||
};
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
@ -66,6 +99,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
action->setShortcut(QKeySequence(QKeySequence::Paste));
|
||||
action = editMenu->addAction(tr("Select All"));
|
||||
action->setShortcut(QKeySequence(QKeySequence::SelectAll));
|
||||
QMenu *aboutMenu = menuBar()->addMenu(tr("&About"));
|
||||
QAction *aboutAction = aboutMenu->addAction(tr("About..."), this, SLOT(aboutDialog()));
|
||||
aboutAction->setShortcut(Qt::Key_F1);
|
||||
QTabWidget *tabWidget = new QTabWidget;
|
||||
tabWidget->addTab(new FileDialogPanel, tr("QFileDialog"));
|
||||
tabWidget->addTab(new ColorDialogPanel, tr("QColorDialog"));
|
||||
@ -78,6 +114,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
setCentralWidget(tabWidget);
|
||||
}
|
||||
|
||||
void MainWindow::aboutDialog()
|
||||
{
|
||||
AboutDialog dialog(this);
|
||||
dialog.setWindowTitle(tr("About Dialogs"));
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if QT_VERSION >= 0x050700
|
||||
|
Loading…
Reference in New Issue
Block a user