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

Change-Id: I2532c7f7db5e6cc3ef09753d886279816dd662b2
This commit is contained in:
Simon Hausmann 2015-12-08 07:09:26 +01:00
commit 3ec31ef9c5
63 changed files with 623 additions and 308 deletions

View File

@ -357,7 +357,7 @@ sub check_header {
print STDERR "$lib: ERROR: $iheader includes private header $include\n" if ($include =~ /_p.h$/);
for my $trylib (keys(%modules)) {
if (-e "$out_basedir/include/$trylib/$include") {
print "$lib: WARNING: $iheader includes $include when it should include $trylib/$include\n";
print STDERR "$lib: WARNING: $iheader includes $include when it should include $trylib/$include\n";
}
}
}
@ -376,15 +376,15 @@ sub check_header {
if ($public_header) {
if ($header_skip_qt_begin_namespace_test == 0 and $stop_processing == 0) {
if ($qt_begin_namespace_found == 0) {
print "$lib: WARNING: $iheader does not include QT_BEGIN_NAMESPACE\n";
print STDERR "$lib: WARNING: $iheader does not include QT_BEGIN_NAMESPACE\n";
}
if ($qt_begin_namespace_found && $qt_end_namespace_found == 0) {
print "$lib: WARNING: $iheader has QT_BEGIN_NAMESPACE$qt_namespace_suffix but no QT_END_NAMESPACE$qt_namespace_suffix\n";
print STDERR "$lib: WARNING: $iheader has QT_BEGIN_NAMESPACE$qt_namespace_suffix but no QT_END_NAMESPACE$qt_namespace_suffix\n";
}
}
} elsif ($private_header) {
print "$lib: WARNING: $iheader does not have the \"We mean it.\" warning\n" if (!$we_mean_it);
print STDERR "$lib: WARNING: $iheader does not have the \"We mean it.\" warning\n" if (!$we_mean_it);
}
close(F);
@ -764,7 +764,7 @@ while ( @ARGV ) {
$var = "version";
$val = shift @ARGV;
} elsif($arg =~/^-/) {
print "Unknown option: $arg\n\n" if(!$var);
print STDERR "Unknown option: $arg\n\n" if (!$var);
showUsage();
} else {
$basedir = locateSyncProfile($arg);
@ -777,7 +777,7 @@ while ( @ARGV ) {
#do something
if(!$var || $var eq "show_help") {
print "Unknown option: $arg\n\n" if(!$var);
print STDERR "Unknown option: $arg\n\n" if (!$var);
showUsage();
} elsif ($var eq "copy") {
if($val eq "yes") {

View File

@ -595,6 +595,21 @@ ol.a > li{
margin-left: 15px
}
.flowList {
padding: 25px
}
.flowList dd {
display: inline-block;
margin-left: 10px;
width: 255px;
line-height: 1.15em;
overflow-x: hidden;
text-overflow: ellipsis
}
.alphaChar {
font-size: 2em;
position: relative
}
/*
-----------
Content table

View File

@ -254,6 +254,13 @@
line-height:1.4;
font-size:0.875em
}
@media (min-width: 1320px) {
.context .flowListDiv dl.flowList {
-webkit-column-count:3;
-moz-column-count:3;
column-count:3
}
}
@media (min-width: 1120px) {
#navbar.fixed,#navbar.shadow_bottom {
-moz-box-shadow:0px 0px 8px rgba(0,0,0,0.2);
@ -293,6 +300,11 @@
#navbar.fixed #mainmenu li.current-menu-item a {
border-bottom:4px solid #80C342
}
.flowListDiv dl.flowList {
-webkit-column-count:2;
-moz-column-count:2;
column-count:2
}
}
@media (max-width: 1120px) {
#navbar {
@ -1220,6 +1232,19 @@ li a.active {
.flowList {
padding:25px
}
.flowListDiv dl {
-webkit-column-count:1;
-moz-column-count:1;
column-count:1
}
.flowList dd {
display:inline-block;
margin-left:10px;
width:90%;
line-height:1.15em;
overflow-x:hidden;
text-overflow:ellipsis
}
.alphaChar {
font-size:2em;
position:absolute

View File

@ -45,13 +45,18 @@
//! [0]
Client::Client(QWidget *parent)
: QDialog(parent), networkSession(0)
: QDialog(parent)
, hostCombo(new QComboBox)
, portLineEdit(new QLineEdit)
, getFortuneButton(new QPushButton(tr("Get Fortune")))
//! [1]
, tcpSocket(new QTcpSocket(this))
//! [1]
, blockSize(0)
, networkSession(Q_NULLPTR)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
//! [0]
hostLabel = new QLabel(tr("&Server name:"));
portLabel = new QLabel(tr("S&erver port:"));
hostCombo = new QComboBox;
hostCombo->setEditable(true);
// find out name of this machine
QString name = QHostInfo::localHostName();
@ -61,7 +66,7 @@ Client::Client(QWidget *parent)
if (!domain.isEmpty())
hostCombo->addItem(name + QChar('.') + domain);
}
if (name != QString("localhost"))
if (name != QLatin1String("localhost"))
hostCombo->addItem(QString("localhost"));
// find out IP addresses of this machine
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
@ -76,54 +81,64 @@ Client::Client(QWidget *parent)
hostCombo->addItem(ipAddressesList.at(i).toString());
}
portLineEdit = new QLineEdit;
portLineEdit->setValidator(new QIntValidator(1, 65535, this));
QLabel *hostLabel = new QLabel(tr("&Server name:"));
hostLabel->setBuddy(hostCombo);
QLabel *portLabel = new QLabel(tr("S&erver port:"));
portLabel->setBuddy(portLineEdit);
statusLabel = new QLabel(tr("This examples requires that you run the "
"Fortune Server example as well."));
getFortuneButton = new QPushButton(tr("Get Fortune"));
getFortuneButton->setDefault(true);
getFortuneButton->setEnabled(false);
quitButton = new QPushButton(tr("Quit"));
QPushButton *quitButton = new QPushButton(tr("Quit"));
buttonBox = new QDialogButtonBox;
QDialogButtonBox *buttonBox = new QDialogButtonBox;
buttonBox->addButton(getFortuneButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
//! [1]
tcpSocket = new QTcpSocket(this);
//! [1]
connect(hostCombo, SIGNAL(editTextChanged(QString)),
this, SLOT(enableGetFortuneButton()));
connect(portLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
connect(getFortuneButton, SIGNAL(clicked()),
this, SLOT(requestNewFortune()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
connect(hostCombo, &QComboBox::editTextChanged,
this, &Client::enableGetFortuneButton);
connect(portLineEdit, &QLineEdit::textChanged,
this, &Client::enableGetFortuneButton);
connect(getFortuneButton, &QAbstractButton::clicked,
this, &Client::requestNewFortune);
connect(quitButton, &QAbstractButton::clicked, this, &QWidget::close);
//! [2] //! [3]
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readFortune()));
connect(tcpSocket, &QIODevice::readyRead, this, &Client::readFortune);
//! [2] //! [4]
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
typedef void (QAbstractSocket::*QAbstractSocketErrorSignal)(QAbstractSocket::SocketError);
connect(tcpSocket, static_cast<QAbstractSocketErrorSignal>(&QAbstractSocket::error),
//! [3]
this, SLOT(displayError(QAbstractSocket::SocketError)));
this, &Client::displayError);
//! [4]
QGridLayout *mainLayout = new QGridLayout;
QGridLayout *mainLayout = Q_NULLPTR;
if (QGuiApplication::styleHints()->showIsFullScreen()) {
QVBoxLayout *outerVerticalLayout = new QVBoxLayout(this);
outerVerticalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
QHBoxLayout *outerHorizontalLayout = new QHBoxLayout;
outerHorizontalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
QGroupBox *groupBox = new QGroupBox(QGuiApplication::applicationDisplayName());
mainLayout = new QGridLayout(groupBox);
outerHorizontalLayout->addWidget(groupBox);
outerHorizontalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
outerVerticalLayout->addLayout(outerHorizontalLayout);
outerVerticalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
} else {
mainLayout = new QGridLayout(this);
}
mainLayout->addWidget(hostLabel, 0, 0);
mainLayout->addWidget(hostCombo, 0, 1);
mainLayout->addWidget(portLabel, 1, 0);
mainLayout->addWidget(portLineEdit, 1, 1);
mainLayout->addWidget(statusLabel, 2, 0, 1, 2);
mainLayout->addWidget(buttonBox, 3, 0, 1, 2);
setLayout(mainLayout);
setWindowTitle(tr("Fortune Client"));
setWindowTitle(QGuiApplication::applicationDisplayName());
portLineEdit->setFocus();
QNetworkConfigurationManager manager;
@ -142,7 +157,7 @@ Client::Client(QWidget *parent)
}
networkSession = new QNetworkSession(config, this);
connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened()));
connect(networkSession, &QNetworkSession::opened, this, &Client::sessionOpened);
getFortuneButton->setEnabled(false);
statusLabel->setText(tr("Opening network session."));
@ -189,7 +204,7 @@ void Client::readFortune()
in >> nextFortune;
if (nextFortune == currentFortune) {
QTimer::singleShot(0, this, SLOT(requestNewFortune()));
QTimer::singleShot(0, this, &Client::requestNewFortune);
return;
}
//! [11]

View File

@ -46,7 +46,6 @@
QT_BEGIN_NAMESPACE
class QComboBox;
class QDialogButtonBox;
class QLabel;
class QLineEdit;
class QPushButton;
@ -60,7 +59,7 @@ class Client : public QDialog
Q_OBJECT
public:
Client(QWidget *parent = 0);
explicit Client(QWidget *parent = Q_NULLPTR);
private slots:
void requestNewFortune();
@ -70,14 +69,10 @@ private slots:
void sessionOpened();
private:
QLabel *hostLabel;
QLabel *portLabel;
QComboBox *hostCombo;
QLineEdit *portLineEdit;
QLabel *statusLabel;
QPushButton *getFortuneButton;
QPushButton *quitButton;
QDialogButtonBox *buttonBox;
QTcpSocket *tcpSocket;
QString currentFortune;

View File

@ -44,6 +44,7 @@
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGuiApplication::setApplicationDisplayName(Client::tr("Fortune Client"));
Client client;
client.show();
return app.exec();

View File

@ -48,6 +48,7 @@
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGuiApplication::setApplicationDisplayName(Server::tr("Fortune Server"));
Server server;
server.show();
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

View File

@ -46,11 +46,13 @@
#include "server.h"
Server::Server(QWidget *parent)
: QDialog(parent), tcpServer(0), networkSession(0)
: QDialog(parent)
, statusLabel(new QLabel)
, tcpServer(Q_NULLPTR)
, networkSession(0)
{
statusLabel = new QLabel;
quitButton = new QPushButton(tr("Quit"));
quitButton->setAutoDefault(false);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
statusLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
QNetworkConfigurationManager manager;
if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) {
@ -68,7 +70,7 @@ Server::Server(QWidget *parent)
}
networkSession = new QNetworkSession(config, this);
connect(networkSession, SIGNAL(opened()), this, SLOT(sessionOpened()));
connect(networkSession, &QNetworkSession::opened, this, &Server::sessionOpened);
statusLabel->setText(tr("Opening network session."));
networkSession->open();
@ -85,10 +87,11 @@ Server::Server(QWidget *parent)
<< tr("You cannot kill time without injuring eternity.")
<< tr("Computers are not intelligent. They only think they are.");
//! [2]
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
QPushButton *quitButton = new QPushButton(tr("Quit"));
quitButton->setAutoDefault(false);
connect(quitButton, &QAbstractButton::clicked, this, &QWidget::close);
//! [3]
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));
connect(tcpServer, &QTcpServer::newConnection, this, &Server::sendFortune);
//! [3]
QHBoxLayout *buttonLayout = new QHBoxLayout;
@ -96,12 +99,26 @@ Server::Server(QWidget *parent)
buttonLayout->addWidget(quitButton);
buttonLayout->addStretch(1);
QVBoxLayout *mainLayout = new QVBoxLayout;
QVBoxLayout *mainLayout = Q_NULLPTR;
if (QGuiApplication::styleHints()->showIsFullScreen()) {
QVBoxLayout *outerVerticalLayout = new QVBoxLayout(this);
outerVerticalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
QHBoxLayout *outerHorizontalLayout = new QHBoxLayout;
outerHorizontalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
QGroupBox *groupBox = new QGroupBox(QGuiApplication::applicationDisplayName());
mainLayout = new QVBoxLayout(groupBox);
outerHorizontalLayout->addWidget(groupBox);
outerHorizontalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
outerVerticalLayout->addLayout(outerHorizontalLayout);
outerVerticalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
} else {
mainLayout = new QVBoxLayout(this);
}
mainLayout->addWidget(statusLabel);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
setWindowTitle(tr("Fortune Server"));
setWindowTitle(QGuiApplication::applicationDisplayName());
}
void Server::sessionOpened()
@ -165,8 +182,8 @@ void Server::sendFortune()
//! [6] //! [7]
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
connect(clientConnection, &QAbstractSocket::disconnected,
clientConnection, &QObject::deleteLater);
//! [7] //! [8]
clientConnection->write(block);

View File

@ -56,7 +56,7 @@ class Server : public QDialog
Q_OBJECT
public:
Server(QWidget *parent = 0);
explicit Server(QWidget *parent = Q_NULLPTR);
private slots:
void sessionOpened();
@ -64,7 +64,6 @@ private slots:
private:
QLabel *statusLabel;
QPushButton *quitButton;
QTcpServer *tcpServer;
QStringList fortunes;
QNetworkSession *networkSession;

View File

@ -5,11 +5,11 @@
include(../common/wince/qmake.conf)
CE_SDK = Toradex_CE8_SDK # replace with actual SDK name
CE_SDK = Toradex_CE800 # replace with actual SDK name
CE_ARCH = ARMV7
QT_CONFIG -= accessibility
DEFINES += QT_NO_CLIPBOARD QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x800 $$CE_ARCH _AMRV7_ armv7 _ARM_ UNDER_CE WINCE ARM
DEFINES += QT_NO_CLIPBOARD QT_NO_ACCESSIBILITY QT_NO_NATIVE_GESTURES QT_NOSTANDARDSHELL_UI_MODEL _CRT_SECURE_NO_DEPRECATE _WIN32_WCE=0x800 $$CE_ARCH _AMRV7_ armv7 _ARM_ UNDER_CE WINCE ARM QT_NO_WINCE_SHELLSDK QT_NO_WINCE_NUIOUSER
#QMAKE_CXXFLAGS += /P
QMAKE_CFLAGS_RELEASE += -O2 -MT
@ -25,7 +25,7 @@ QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -MD
QMAKE_CXXFLAGS_DEBUG -= -MDd
QMAKE_CXXFLAGS_DEBUG += -MTd
QMAKE_INCDIR_OPENGL_ES2 += $$(NV_WINCE_T2_PLAT)/include
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:WINDOWSCE,8.00 /MACHINE:ARM /ENTRY:mainCRTStartup
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:WINDOWSCE,8.00 /MACHINE:ARM
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWSCE,8.00 /MACHINE:ARM
QMAKE_LFLAGS_DLL = /SUBSYSTEM:WINDOWSCE,8.00 /MACHINE:ARM /DLL /SAFESEH:NO
QMAKE_LIBFLAGS_RELEASE = /LTCG
@ -33,13 +33,10 @@ QMAKE_LIBS = coredll.lib
QMAKE_LIBS_CORE = ole32.lib oleaut32.lib uuid.lib commctrl.lib coredll.lib winsock.lib
QMAKE_LIBS_GUI = ole32.lib $$QMAKE_LIBS_CORE
QMAKE_LIBS_NETWORK = ws2.lib $$QMAKE_LIBS_GUI
QMAKE_LIBS_OPENGL =
QMAKE_LIBS_COMPAT =
QMAKE_LIBS_OPENVG =
QMAKE_LIBS_OPENGL_ES2 = $${LIBEGL_NAME}.lib $${LIBGLESV2_NAME}.lib
QMAKE_LIBDIR_OPENGL_ES2 = $$(NV_WINCE_T2_PLAT)/lib/Test
QMAKE_INCDIR_EGL = $$(NV_WINCE_T2_PLAT)/include
QMAKE_LIBDIR_EGL = $$(NV_WINCE_T2_PLAT)/lib/Test
MAKEFILE_GENERATOR = MSBUILD
VCPROJ_EXTENSION = .vcxproj
QMAKE_RC = rc

View File

@ -520,7 +520,6 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
ProStringList tmpList;
tmpList += subdir.second;
tmpList += allDependencies;
QPair<QString, ProStringList> val = qMakePair(fi.absoluteFilePath(), tmpList);
// Initialize a 'fake' project to get the correct variables
// and to be able to extract all the dependencies
Option::QMAKE_MODE old_mode = Option::qmake_mode;
@ -552,8 +551,8 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
newDep->target = newDep->target.left(newDep->target.length()-3) + "lib";
projGuids.insert(newDep->orig_target, newDep->target);
if (val.second.size()) {
const ProStringList depends = val.second;
if (tmpList.size()) {
const ProStringList depends = tmpList;
foreach (const ProString &dep, depends) {
QString depend = dep.toQString();
if (!projGuids[depend].isEmpty()) {
@ -565,8 +564,7 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
newDep->dependencies << projGuids[projLookup[tmpDep]];
}
} else {
QStringList dependencies = val.second.toQStringList();
extraSubdirs.insert(newDep, dependencies);
extraSubdirs.insert(newDep, tmpList.toQStringList());
newDep->dependencies.clear();
break;
}
@ -585,7 +583,7 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
wit != where.end(); ++wit) {
const ProStringList &l = tmp_proj.values(ProKey(*wit));
for (ProStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {
QString opt = (*it).toQString();
const QString opt = fixLibFlag(*it).toQString();
if (!opt.startsWith("/") && // Not a switch
opt != newDep->target && // Not self
opt != "opengl32.lib" && // We don't care about these libs

View File

@ -671,7 +671,7 @@ public class ExtractStyle {
json.put("gradient",gradientStateClass.getField("mGradient").getInt(obj));
GradientDrawable.Orientation orientation=(Orientation) gradientStateClass.getField("mOrientation").get(obj);
json.put("orientation",orientation.name());
int [] intArray=(int[]) gradientStateClass.getField("mColors").get(obj);
int [] intArray=(int[]) gradientStateClass.getField((Build.VERSION.SDK_INT < 23) ? "mColors" : "mGradientColors").get(obj);
if (intArray != null)
json.put("colors",getJsonArray(intArray, 0, intArray.length));
json.put("positions",getJsonArray((float[]) gradientStateClass.getField("mPositions").get(obj)));
@ -707,7 +707,10 @@ public class ExtractStyle {
json.put("type", "rotate");
Object obj = drawable.getConstantState();
Class<?> rotateStateClass = obj.getClass();
json.put("drawable", getDrawable(getAccessibleField(rotateStateClass, "mDrawable").get(obj), filename, null));
if (Build.VERSION.SDK_INT < 23)
json.put("drawable", getDrawable(getAccessibleField(rotateStateClass, "mDrawable").get(obj), filename, null));
else
json.put("drawable", getDrawable(drawable.getClass().getMethod("getDrawable").invoke(drawable), filename, null));
json.put("pivotX", getAccessibleField(rotateStateClass, "mPivotX").getFloat(obj));
json.put("pivotXRel", getAccessibleField(rotateStateClass, "mPivotXRel").getBoolean(obj));
json.put("pivotY", getAccessibleField(rotateStateClass, "mPivotY").getFloat(obj));

View File

@ -66,6 +66,8 @@ import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.view.ViewTreeObserver;
import android.graphics.Rect;
import java.io.BufferedReader;
import java.io.DataOutputStream;
@ -859,6 +861,25 @@ public class QtActivityDelegate
QtNative.handleOrientationChanged(rotation, m_nativeOrientation);
m_currentRotation = rotation;
m_layout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (!m_keyboardIsVisible)
return true;
Rect r = new Rect();
m_activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
DisplayMetrics metrics = new DisplayMetrics();
m_activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
final int kbHeight = metrics.heightPixels - r.bottom;
final int[] location = new int[2];
m_layout.getLocationOnScreen(location);
QtNative.keyboardGeometryChanged(location[0], r.bottom - location[1],
r.width(), kbHeight);
return true;
}
});
}
public void initializeAccessibility()

View File

@ -40,6 +40,9 @@ import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputMethodManager;
import android.graphics.Rect;
import android.app.Activity;
import android.util.DisplayMetrics;
class QtExtractedText
{
@ -80,7 +83,15 @@ class HideKeyboardRunnable implements Runnable {
@Override
public void run() {
QtNative.activityDelegate().setKeyboardVisibility(false, m_hideTimeStamp);
// Check that the keyboard is really no longer there.
Activity activity = QtNative.activity();
Rect r = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
final int kbHeight = metrics.heightPixels - r.bottom;
if (kbHeight < 100)
QtNative.activityDelegate().setKeyboardVisibility(false, m_hideTimeStamp);
}
}

View File

@ -677,6 +677,7 @@ public class QtNative
public static native void keyDown(int key, int unicode, int modifier, boolean autoRepeat);
public static native void keyUp(int key, int unicode, int modifier, boolean autoRepeat);
public static native void keyboardVisibilityChanged(boolean visibility);
public static native void keyboardGeometryChanged(int x, int y, int width, int height);
// keyboard methods
// dispatch events methods

View File

@ -769,7 +769,7 @@ inline T *q_check_ptr(T *p) { Q_CHECK_PTR(p); return p; }
typedef void (*QFunctionPointer)();
#if !defined(Q_UNIMPLEMENTED)
# define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO)
# define Q_UNIMPLEMENTED() qWarning("Unimplemented code.")
#endif
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;

View File

@ -123,7 +123,8 @@ QString QStandardPaths::writableLocation(StandardLocation type)
QStringList QStandardPaths::standardLocations(StandardLocation type)
{
return QStringList(writableLocation(type));
const QString writable = writableLocation(type);
return writable.isEmpty() ? QStringList() : QStringList(writable);
}
QT_END_NAMESPACE

View File

@ -1646,7 +1646,6 @@ QModelIndexList QItemSelectionModel::selectedIndexes() const
/*!
\since 4.2
Returns the indexes in the given \a column for the rows where all columns are selected.
The list is not sorted.
\sa selectedIndexes(), selectedColumns()
*/

View File

@ -88,6 +88,7 @@ wince {
SOURCES += \
kernel/qfunctions_wince.cpp
HEADERS += \
kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_wince.h
}
@ -95,6 +96,7 @@ winrt {
SOURCES += \
kernel/qfunctions_winrt.cpp
HEADERS += \
kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_winrt.h
}

View File

@ -0,0 +1,101 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://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 2.1 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** As a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QFUNCTIONS_FAKE_ENV_P_H
#define QFUNCTIONS_FAKE_ENV_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of the QLibrary class. This header file may change from
// version to version without notice, or even be removed.
//
// We mean it.
//
#include "qbytearray.h"
#include "qhash.h"
QT_BEGIN_NAMESPACE
// Environment ------------------------------------------------------
Q_CORE_EXPORT QHash<QByteArray, QByteArray> &qt_app_environment()
{
static QHash<QByteArray, QByteArray> internalEnvironment;
return internalEnvironment;
}
errno_t qt_fake_getenv_s(size_t *sizeNeeded, char *buffer, size_t bufferSize, const char *varName)
{
if (!sizeNeeded)
return EINVAL;
QHash<QByteArray, QByteArray>::const_iterator iterator = qt_app_environment().constFind(varName);
if (iterator == qt_app_environment().constEnd()) {
if (buffer)
buffer[0] = '\0';
return ENOENT;
}
const int size = iterator->size() + 1;
if (bufferSize < size_t(size)) {
*sizeNeeded = size;
return ERANGE;
}
qstrcpy(buffer, iterator->constData());
return 0;
}
errno_t qt_fake__putenv_s(const char *varName, const char *value)
{
QHash<QByteArray, QByteArray>::iterator iterator = qt_app_environment().find(varName);
QHash<QByteArray, QByteArray>::iterator end = qt_app_environment().end();
if (!value || !*value) {
if (iterator != end)
qt_app_environment().erase(iterator);
} else {
if (iterator == end)
qt_app_environment()[varName] = QByteArray(value);
else
(*iterator) = value;
}
return 0;
}
QT_END_NAMESPACE
#endif // QFUNCTIONS_FAKE_ENV_P_H

View File

@ -44,9 +44,8 @@
#include "qplatformdefs.h"
#include "qfunctions_wince.h"
#include "qfunctions_fake_env_p.h"
#include "qstring.h"
#include "qbytearray.h"
#include "qhash.h"
QT_USE_NAMESPACE
@ -399,51 +398,4 @@ int qt_wince__getpid()
#ifdef __cplusplus
} // extern "C"
#endif
// Environment ------------------------------------------------------
inline QHash<QByteArray, QByteArray>& qt_app_environment()
{
static QHash<QByteArray, QByteArray> internalEnvironment;
return internalEnvironment;
}
errno_t qt_wince_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
{
if (!sizeNeeded)
return EINVAL;
if (!qt_app_environment().contains(varName)) {
if (buffer)
buffer[0] = '\0';
return ENOENT;
}
QByteArray value = qt_app_environment().value(varName);
if (!value.endsWith('\0')) // win32 guarantees terminated string
value.append('\0');
if (bufferSize < (size_t)value.size()) {
*sizeNeeded = value.size();
return 0;
}
strcpy(buffer, value.constData());
return 0;
}
errno_t qt_wince__putenv_s(const char* varName, const char* value)
{
QByteArray input = value;
if (input.isEmpty()) {
if (qt_app_environment().contains(varName))
qt_app_environment().remove(varName);
} else {
// win32 guarantees terminated string
if (!input.endsWith('\0'))
input.append('\0');
qt_app_environment()[varName] = input;
}
return 0;
}
#endif // Q_OS_WINCE

View File

@ -76,8 +76,8 @@ QT_END_NAMESPACE
#endif
// Environment ------------------------------------------------------
errno_t qt_wince_getenv_s(size_t*, char*, size_t, const char*);
errno_t qt_wince__putenv_s(const char*, const char*);
errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
errno_t qt_fake__putenv_s(const char*, const char*);
#ifdef __cplusplus // have this as tiff plugin is written in C
extern "C" {
@ -398,20 +398,20 @@ typedef DWORD OLE_COLOR;
{ \
return qt_wince_##funcname(p1); \
}
#define generate_inline_return_func2(funcname, returntype, param1, param2) \
#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
return qt_wince_##funcname(p1, p2); \
return prependnamespace##funcname(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return qt_wince_##funcname(p1, p2, p3); \
}
#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
return qt_wince_##funcname(p1, p2, p3, p4); \
return prependnamespace##funcname(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@ -433,28 +433,28 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(_getpid, int)
generate_inline_return_func1(time_tToFt, FILETIME, time_t)
generate_inline_return_func1(ftToTime_t, time_t, FILETIME)
generate_inline_return_func0(_getdrive, int)
generate_inline_return_func2(_waccess, int, const wchar_t *, int)
generate_inline_return_func2(_waccess, int, qt_wince_, const wchar_t *, int)
generate_inline_return_func3(_wopen, int, const wchar_t *, int, int)
generate_inline_return_func2(_fdopen, FILE *, int, const char *)
generate_inline_return_func2(fdopen, FILE *, int, const char *)
generate_inline_return_func2(_fdopen, FILE *, qt_wince_, int, const char *)
generate_inline_return_func2(fdopen, FILE *, qt_wince_, int, const char *)
generate_inline_return_func1(rewind, void, FILE *)
generate_inline_return_func0(tmpfile, FILE *)
generate_inline_return_func2(_rename, int, const char *, const char *)
generate_inline_return_func2(_rename, int, qt_wince_, const char *, const char *)
generate_inline_return_func1(_remove, int, const char *)
generate_inline_return_func1(SetErrorMode, int, int)
#if _WIN32_WCE < 0x800
generate_inline_return_func2(_chmod, bool, const char *, int)
generate_inline_return_func2(_wchmod, bool, const wchar_t *, int)
generate_inline_return_func2(_chmod, bool, qt_wince_, const char *, int)
generate_inline_return_func2(_wchmod, bool, qt_wince_, const wchar_t *, int)
#endif
generate_inline_return_func7(CreateFileA, HANDLE, LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)
generate_inline_return_func4(SetWindowOrgEx, BOOL, HDC, int, int, LPPOINT)
generate_inline_return_func2(calloc, void *, size_t, size_t)
generate_inline_return_func4(SetWindowOrgEx, BOOL, qt_wince_, HDC, int, int, LPPOINT)
generate_inline_return_func2(calloc, void *, qt_wince_, size_t, size_t)
generate_inline_return_func0(GetThreadLocale, DWORD)
generate_inline_return_func3(_beginthread, HANDLE, StartAdressFunc, unsigned, void *)
generate_inline_return_func6(_beginthreadex, unsigned long, void *, unsigned, StartAdressExFunc, void *, unsigned, unsigned *)

View File

@ -35,59 +35,10 @@
#ifdef Q_OS_WINRT
#include "qstring.h"
#include "qbytearray.h"
#include "qhash.h"
#include "qfunctions_fake_env_p.h"
QT_BEGIN_NAMESPACE
// Environment ------------------------------------------------------
inline QHash<QByteArray, QByteArray> &qt_app_environment()
{
static QHash<QByteArray, QByteArray> internalEnvironment;
return internalEnvironment;
}
errno_t qt_winrt_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
{
if (!sizeNeeded)
return EINVAL;
if (!qt_app_environment().contains(varName)) {
if (buffer)
buffer[0] = '\0';
return ENOENT;
}
QByteArray value = qt_app_environment().value(varName);
if (!value.endsWith('\0')) // win32 guarantees terminated string
value.append('\0');
if (bufferSize < (size_t)value.size()) {
*sizeNeeded = value.size();
return ERANGE;
}
strcpy(buffer, value.constData());
return 0;
}
errno_t qt_winrt__putenv_s(const char* varName, const char* value)
{
QByteArray input = value;
if (input.isEmpty()) {
if (qt_app_environment().contains(varName))
qt_app_environment().remove(varName);
} else {
// win32 on winrt guarantees terminated string
if (!input.endsWith('\0'))
input.append('\0');
qt_app_environment()[varName] = input;
}
return 0;
}
void qt_winrt_tzset()
{
}

View File

@ -49,10 +49,20 @@
ret; \
}
#define RETURN_IF_FAILED_WITH_ARGS(msg, ret, ...) \
if (FAILED(hr)) { \
qErrnoWarning(hr, msg, __VA_ARGS__); \
ret; \
}
#define RETURN_HR_IF_FAILED(msg) RETURN_IF_FAILED(msg, return hr)
#define RETURN_OK_IF_FAILED(msg) RETURN_IF_FAILED(msg, return S_OK)
#define RETURN_FALSE_IF_FAILED(msg) RETURN_IF_FAILED(msg, return false)
#define RETURN_VOID_IF_FAILED(msg) RETURN_IF_FAILED(msg, return)
#define RETURN_HR_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return hr, __VA_ARGS__)
#define RETURN_OK_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return S_OK, __VA_ARGS__)
#define RETURN_FALSE_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return false, __VA_ARGS__)
#define RETURN_VOID_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return, __VA_ARGS__)
#define Q_ASSERT_SUCCEEDED(hr) \
Q_ASSERT_X(SUCCEEDED(hr), Q_FUNC_INFO, qPrintable(qt_error_string(hr)));
@ -65,8 +75,8 @@ QT_BEGIN_NAMESPACE
#endif
// Environment ------------------------------------------------------
errno_t qt_winrt_getenv_s(size_t*, char*, size_t, const char*);
errno_t qt_winrt__putenv_s(const char*, const char*);
errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
errno_t qt_fake__putenv_s(const char*, const char*);
void qt_winrt_tzset();
void qt_winrt__tzset();
@ -91,20 +101,20 @@ QT_END_NAMESPACE
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1); \
}
#define generate_inline_return_func2(funcname, returntype, param1, param2) \
#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2); \
return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3); \
}
#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3, p4); \
return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@ -126,8 +136,8 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(tzset, void)
generate_inline_return_func0(_tzset, void)

View File

@ -4822,7 +4822,7 @@ bool QObject::disconnect(const QMetaObject::Connection &connection)
\note It is not possible to use this overload to diconnect signals
connected to functors or lambda expressions. That is because it is not
possible to compare them. Instead, use the olverload that take a
possible to compare them. Instead, use the overload that takes a
QMetaObject::Connection
\sa connect()

View File

@ -2930,9 +2930,9 @@ QByteArray QByteArray::toUpper_helper(QByteArray &a)
/*! \fn void QByteArray::clear()
Clears the contents of the byte array and makes it empty.
Clears the contents of the byte array and makes it null.
\sa resize(), isEmpty()
\sa resize(), isNull()
*/
void QByteArray::clear()

View File

@ -918,6 +918,13 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const
if (!ianaId.isEmpty() && ianaId.at(0) == ':')
ianaId = ianaId.mid(1);
// The TZ value can be ":/etc/localtime" which libc considers
// to be a "default timezone", in which case it will be read
// by one of the blocks below, so unset it here so it is not
// considered as a valid/found ianaId
if (ianaId == "/etc/localtime")
ianaId.clear();
// On Debian Etch and later /etc/localtime is real file with name held in /etc/timezone
if (ianaId.isEmpty()) {
QFile tzif(QStringLiteral("/etc/timezone"));

View File

@ -852,18 +852,17 @@ void QAccessible::updateAccessibility(QAccessibleEvent *event)
// during construction of widgets. If you see cases where the
// cache seems wrong, this call is "to blame", but the code that
// caches dynamic data should be updated to handle change events.
if (!isActive() || !event->accessibleInterface())
return;
QAccessibleInterface *iface = event->accessibleInterface();
if (isActive() && iface) {
if (event->type() == QAccessible::TableModelChanged) {
if (iface->tableInterface())
iface->tableInterface()->modelChange(static_cast<QAccessibleTableModelChangeEvent*>(event));
}
if (event->type() == QAccessible::TableModelChanged) {
QAccessibleInterface *iface = event->accessibleInterface();
if (iface && iface->tableInterface())
iface->tableInterface()->modelChange(static_cast<QAccessibleTableModelChangeEvent*>(event));
}
if (updateHandler) {
updateHandler(event);
return;
if (updateHandler) {
updateHandler(event);
return;
}
}
if (QPlatformAccessibility *pfAccessibility = platformAccessibility())

View File

@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2015 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@ -1420,15 +1421,15 @@ QString qt_findAtNxFile(const QString &baseFileName, qreal targetDevicePixelRati
if (disableNxImageLoading)
return baseFileName;
QString atNx = QLatin1String("@%1x");
int dotIndex = baseFileName.lastIndexOf(QLatin1Char('.'));
if (dotIndex == -1) /* no dot */
dotIndex = baseFileName.size(); /* append */
QString atNxfileName = baseFileName;
atNxfileName.insert(dotIndex, QLatin1String("@2x"));
// Check for @Nx, ..., @3x, @2x file versions,
for (int n = qCeil(targetDevicePixelRatio); n > 1; --n) {
QString atNxfileName = baseFileName;
atNxfileName.insert(dotIndex, atNx.arg(n));
for (int n = qMin(qCeil(targetDevicePixelRatio), 9); n > 1; --n) {
atNxfileName[dotIndex + 1] = QLatin1Char('0' + n);
if (QFile::exists(atNxfileName)) {
if (sourceDevicePixelRatio)
*sourceDevicePixelRatio = n;

View File

@ -2380,17 +2380,25 @@ QColor QImage::pixelColor(int x, int y) const
return QColor();
}
QRgba64 c;
const uchar * s = constScanLine(y);
switch (d->format) {
case Format_BGR30:
case Format_A2BGR30_Premultiplied:
return QColor(qConvertA2rgb30ToRgb64<PixelOrderBGR>(reinterpret_cast<const quint32 *>(s)[x]));
c = qConvertA2rgb30ToRgb64<PixelOrderBGR>(reinterpret_cast<const quint32 *>(s)[x]);
break;
case Format_RGB30:
case Format_A2RGB30_Premultiplied:
return QColor(qConvertA2rgb30ToRgb64<PixelOrderRGB>(reinterpret_cast<const quint32 *>(s)[x]));
c = qConvertA2rgb30ToRgb64<PixelOrderRGB>(reinterpret_cast<const quint32 *>(s)[x]);
break;
default:
return QColor(pixel(x, y));
c = QRgba64::fromArgb32(pixel(x, y));
break;
}
// QColor is always unpremultiplied
if (hasAlphaChannel() && qPixelLayouts[d->format].premultiplied)
c = c.unpremultiplied();
return QColor(c);
}
/*!
@ -2421,6 +2429,12 @@ void QImage::setPixelColor(int x, int y, const QColor &color)
qWarning("QImage::setPixelColor: coordinate (%d,%d) out of range", x, y);
return;
}
// QColor is always unpremultiplied
QRgba64 c = color.rgba64();
if (!hasAlphaChannel())
c.setAlpha(65535);
else if (qPixelLayouts[d->format].premultiplied)
c = c.premultiplied();
// detach is called from within scanLine
uchar * s = scanLine(y);
switch (d->format) {
@ -2430,19 +2444,19 @@ void QImage::setPixelColor(int x, int y, const QColor &color)
qWarning("QImage::setPixelColor: called on monochrome or indexed format");
return;
case Format_BGR30:
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderBGR>(color.rgba64()) | 0xc0000000;
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderBGR>(c) | 0xc0000000;
return;
case Format_A2BGR30_Premultiplied:
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderBGR>(color.rgba64());
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderBGR>(c);
return;
case Format_RGB30:
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderRGB>(color.rgba64()) | 0xc0000000;
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderRGB>(c) | 0xc0000000;
return;
case Format_A2RGB30_Premultiplied:
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderRGB>(color.rgba64());
((uint *)s)[x] = qConvertRgb64ToRgb30<PixelOrderRGB>(c);
return;
default:
setPixel(x, y, color.rgba());
setPixel(x, y, c.toArgb32());
return;
}
}

View File

@ -2920,7 +2920,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
} // Format_Grayscale8
};
void qInitImageConversions()
static void qInitImageConversions()
{
#if defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSSE3)
if (qCpuHasFeature(SSSE3)) {
@ -2967,4 +2967,15 @@ void qInitImageConversions()
#endif
}
class QImageConversionsInitializer {
public:
QImageConversionsInitializer()
{
qInitImageConversions();
}
};
// Ensure initialization if this object file is linked.
static QImageConversionsInitializer qImageConversionsInitializer;
QT_END_NAMESPACE

View File

@ -111,8 +111,6 @@ bool convert_generic_inplace(QImageData *data, QImage::Format dst_format, Qt::Im
void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha);
void qInitImageConversions();
const uchar *qt_get_bitflip_array();
Q_GUI_EXPORT void qGamma_correct_back_to_linear_cs(QImage *image);

View File

@ -194,9 +194,6 @@ extern void qRegisterGuiVariant();
#ifndef QT_NO_ANIMATION
extern void qRegisterGuiGetInterpolator();
#endif
extern void qInitBlendFunctions();
extern void qInitDrawhelperAsm();
extern void qInitImageConversions();
static bool qt_detectRTLLanguage()
{
@ -1359,13 +1356,6 @@ void QGuiApplicationPrivate::init()
if (platform_integration == 0)
createPlatformIntegration();
// Set up blend function tables.
qInitBlendFunctions();
// Set up which span functions should be used in raster engine...
qInitDrawhelperAsm();
// and QImage conversion functions
qInitImageConversions();
initPalette();
QFont::initialize();

View File

@ -147,6 +147,9 @@ QRectF QInputMethod::cursorRectangle() const
/*!
\property QInputMethod::keyboardRectangle
\brief Virtual keyboard's geometry in window coordinates.
This might be an empty rectangle if it is not possible to know the geometry
of the keyboard. This is the case for a floating keyboard on android.
*/
QRectF QInputMethod::keyboardRectangle() const
{

View File

@ -581,6 +581,9 @@ void QPlatformWindow::invalidateSurface()
QRect QPlatformWindow::initialGeometry(const QWindow *w,
const QRect &initialGeometry, int defaultWidth, int defaultHeight)
{
const QScreen *screen = effectiveScreen(w);
if (!screen)
return initialGeometry;
QRect rect(QHighDpi::fromNativePixels(initialGeometry, w));
if (rect.width() == 0) {
const int minWidth = w->minimumWidth();
@ -591,25 +594,23 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w,
rect.setHeight(minHeight > 0 ? minHeight : defaultHeight);
}
if (w->isTopLevel() && qt_window_private(const_cast<QWindow*>(w))->positionAutomatic
&& w->type() != Qt::Popup) {
if (const QScreen *screen = effectiveScreen(w)) {
const QRect availableGeometry = screen->availableGeometry();
// Center unless the geometry ( + unknown window frame) is too large for the screen).
if (rect.height() < (availableGeometry.height() * 8) / 9
&& w->type() != Qt::Popup) {
const QRect availableGeometry = screen->availableGeometry();
// Center unless the geometry ( + unknown window frame) is too large for the screen).
if (rect.height() < (availableGeometry.height() * 8) / 9
&& rect.width() < (availableGeometry.width() * 8) / 9) {
const QWindow *tp = w->transientParent();
if (tp) {
// A transient window should be centered w.r.t. its transient parent.
rect.moveCenter(tp->geometry().center());
} else {
// Center the window on the screen. (Only applicable on platforms
// which do not provide a better way.)
rect.moveCenter(availableGeometry.center());
}
const QWindow *tp = w->transientParent();
if (tp) {
// A transient window should be centered w.r.t. its transient parent.
rect.moveCenter(tp->geometry().center());
} else {
// Center the window on the screen. (Only applicable on platforms
// which do not provide a better way.)
rect.moveCenter(availableGeometry.center());
}
}
}
return QHighDpi::toNativePixels(rect, w);
return QHighDpi::toNativePixels(rect, screen);
}
/*!

View File

@ -325,13 +325,29 @@ int QStyleHints::cursorFlashTime() const
\note The platform may still choose to show certain windows non-fullscreen,
such as popups or dialogs. This property only reports the default behavior.
\sa QWindow::show()
\sa QWindow::show(), showIsMaximized()
*/
bool QStyleHints::showIsFullScreen() const
{
return hint(QPlatformIntegration::ShowIsFullScreen).toBool();
}
/*!
\property QStyleHints::showIsMaximized
\brief \c true if the platform defaults to windows being maximized,
otherwise \c false.
\note The platform may still choose to show certain windows non-maximized,
such as popups or dialogs. This property only reports the default behavior.
\sa QWindow::show(), showIsFullScreen()
\since 5.6
*/
bool QStyleHints::showIsMaximized() const
{
return hint(QPlatformIntegration::ShowIsMaximized).toBool();
}
/*!
\property QStyleHints::passwordMaskDelay
\brief the time, in milliseconds, a typed letter is displayed unshrouded

View File

@ -56,6 +56,7 @@ class Q_GUI_EXPORT QStyleHints : public QObject
Q_PROPERTY(int passwordMaskDelay READ passwordMaskDelay STORED false CONSTANT FINAL)
Q_PROPERTY(bool setFocusOnTouchRelease READ setFocusOnTouchRelease STORED false CONSTANT FINAL)
Q_PROPERTY(bool showIsFullScreen READ showIsFullScreen STORED false CONSTANT FINAL)
Q_PROPERTY(bool showIsMaximized READ showIsMaximized STORED false CONSTANT FINAL)
Q_PROPERTY(int startDragDistance READ startDragDistance NOTIFY startDragDistanceChanged FINAL)
Q_PROPERTY(int startDragTime READ startDragTime NOTIFY startDragTimeChanged FINAL)
Q_PROPERTY(int startDragVelocity READ startDragVelocity STORED false CONSTANT FINAL)
@ -79,6 +80,7 @@ public:
void setCursorFlashTime(int cursorFlashTime);
int cursorFlashTime() const;
bool showIsFullScreen() const;
bool showIsMaximized() const;
int passwordMaskDelay() const;
QChar passwordMaskCharacter() const;
qreal fontSmoothingGamma() const;

View File

@ -6328,7 +6328,7 @@ void qt_memfill32(quint32 *dest, quint32 color, int count)
template<QtPixelOrder> const uint *QT_FASTCALL convertA2RGB30PMFromARGB32PM_sse4(uint *buffer, const uint *src, int count, const QPixelLayout *, const QRgb *);
#endif
void qInitDrawhelperAsm()
static void qInitDrawhelperFunctions()
{
#ifdef __SSE2__
qDrawHelper[QImage::Format_RGB32].bitmapBlit = qt_bitmapblit32_sse2;
@ -6523,4 +6523,19 @@ void qInitDrawhelperAsm()
#endif // QT_COMPILER_SUPPORTS_MIPS_DSP || QT_COMPILER_SUPPORTS_MIPS_DSPR2
}
extern void qInitBlendFunctions();
class DrawHelperInitializer {
public:
DrawHelperInitializer()
{
// Set up basic blend function tables.
qInitBlendFunctions();
// Set up architecture optimized methods for the current machine.
qInitDrawhelperFunctions();
}
};
// Ensure initialization if this object file is linked.
static DrawHelperInitializer drawHelperInitializer;
QT_END_NAMESPACE

View File

@ -213,8 +213,6 @@ struct Operator
};
};
void qInitDrawhelperAsm();
class QRasterPaintEngine;
struct QSolidData

View File

@ -717,8 +717,12 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format,
FT_Set_Transform(face, &matrix, 0);
freetype->matrix = matrix;
// fake bold
if ((fontDef.weight >= QFont::Bold) && !(face->style_flags & FT_STYLE_FLAG_BOLD) && !FT_IS_FIXED_WIDTH(face))
embolden = true;
if ((fontDef.weight >= QFont::Bold) && !(face->style_flags & FT_STYLE_FLAG_BOLD) && !FT_IS_FIXED_WIDTH(face)) {
if (const TT_OS2 *os2 = reinterpret_cast<const TT_OS2 *>(FT_Get_Sfnt_Table(face, ft_sfnt_os2))) {
if (os2->usWeightClass < 750)
embolden = true;
}
}
// underline metrics
line_thickness = QFixed::fromFixed(FT_MulFix(face->underline_thickness, face->size->metrics.y_scale));
underline_position = QFixed::fromFixed(-FT_MulFix(face->underline_position, face->size->metrics.y_scale));

View File

@ -986,8 +986,8 @@ void QTextTable::removeColumns(int pos, int num)
Merges the cell at the specified \a row and \a column with the adjacent cells
into one cell. The new cell will span \a numRows rows and \a numCols columns.
If \a numRows or \a numCols is less than the current number of rows or columns
the cell spans then this method does nothing.
This method does nothing if \a numRows or \a numCols is less than the current
number of rows or columns spanned by the cell.
\sa splitCell()
*/

View File

@ -40,9 +40,9 @@
//! [0]
QNetworkConfigurationManager mgr;
QList<QNetworkConfiguration> activeConfigs = mgr.allConfigurations(QNetworkConfiguration::Active)
QList<QNetworkConfiguration> activeConfigs = mgr.allConfigurations(QNetworkConfiguration::Active);
if (activeConfigs.count() > 0)
Q_ASSERT(mgr.isOnline())
Q_ASSERT(mgr.isOnline());
else
Q_ASSERT(!mgr.isOnline())
Q_ASSERT(!mgr.isOnline());
//! [0]

View File

@ -380,8 +380,10 @@ int QNativeSocketEngine::accept()
Q_CHECK_STATE(QNativeSocketEngine::accept(), QAbstractSocket::ListeningState, -1);
Q_CHECK_TYPE(QNativeSocketEngine::accept(), QAbstractSocket::TcpSocket, -1);
if (d->socketDescriptor == -1 || d->pendingConnections.isEmpty())
if (d->socketDescriptor == -1 || d->pendingConnections.isEmpty()) {
d->setError(QAbstractSocket::TemporaryError, QNativeSocketEnginePrivate::TemporaryErrorString);
return -1;
}
// Start processing incoming data
if (d->socketType == QAbstractSocket::TcpSocket) {

View File

@ -99,7 +99,7 @@ void QSpiAccessibleBridge::notifyAccessibilityUpdate(QAccessibleEvent *event)
{
if (!dbusAdaptor)
return;
if (isActive())
if (isActive() && event->accessibleInterface())
dbusAdaptor->notify(event);
}

View File

@ -51,6 +51,7 @@ namespace QtAndroidInput
static bool m_ignoreMouseEvents = false;
static bool m_softwareKeyboardVisible = false;
static QRect m_softwareKeyboardRect;
static QList<QWindowSystemInterface::TouchPoint> m_touchPoints;
@ -108,6 +109,11 @@ namespace QtAndroidInput
return m_softwareKeyboardVisible;
}
QRect softwareKeyboardRect()
{
return m_softwareKeyboardRect;
}
static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y)
{
@ -734,14 +740,35 @@ namespace QtAndroidInput
static void keyboardVisibilityChanged(JNIEnv */*env*/, jobject /*thiz*/, jboolean visibility)
{
m_softwareKeyboardVisible = visibility;
if (!visibility)
m_softwareKeyboardRect = QRect();
QAndroidInputContext *inputContext = QAndroidInputContext::androidInputContext();
if (inputContext && qGuiApp)
if (inputContext && qGuiApp) {
inputContext->emitInputPanelVisibleChanged();
if (!visibility)
inputContext->emitKeyboardRectChanged();
}
#ifdef QT_DEBUG_ANDROID_IM_PROTOCOL
qDebug() << "@@@ KEYBOARDVISIBILITYCHANGED" << inputContext;
#endif
}
static void keyboardGeometryChanged(JNIEnv */*env*/, jobject /*thiz*/, jint x, jint y, jint w, jint h)
{
QRect r = QRect(x, y, w, h);
if (r == m_softwareKeyboardRect)
return;
m_softwareKeyboardRect = r;
QAndroidInputContext *inputContext = QAndroidInputContext::androidInputContext();
if (inputContext && qGuiApp)
inputContext->emitKeyboardRectChanged();
#ifdef QT_DEBUG_ANDROID_IM_PROTOCOL
qDebug() << "@@@ KEYBOARDRECTCHANGED" << m_softwareKeyboardRect;
#endif
}
static JNINativeMethod methods[] = {
{"touchBegin","(I)V",(void*)touchBegin},
{"touchAdd","(IIIZIIFF)V",(void*)touchAdd},
@ -753,7 +780,8 @@ namespace QtAndroidInput
{"tabletEvent", "(IIJIIIFFF)V", (void *)tabletEvent},
{"keyDown", "(IIIZ)V", (void *)keyDown},
{"keyUp", "(IIIZ)V", (void *)keyUp},
{"keyboardVisibilityChanged", "(Z)V", (void *)keyboardVisibilityChanged}
{"keyboardVisibilityChanged", "(Z)V", (void *)keyboardVisibilityChanged},
{"keyboardGeometryChanged", "(IIII)V", (void *)keyboardGeometryChanged}
};
bool registerNatives(JNIEnv *env)

View File

@ -35,6 +35,7 @@
#define ANDROIDJNIINPUT_H
#include <jni.h>
#include <QtCore/qglobal.h>
#include <QtCore/QRect>
QT_BEGIN_NAMESPACE
@ -45,6 +46,7 @@ namespace QtAndroidInput
void resetSoftwareKeyboard();
void hideSoftwareKeyboard();
bool isSoftwareKeyboardVisible();
QRect softwareKeyboardRect();
void updateSelection(int selStart, int selEnd, int candidatesStart, int candidatesEnd);
// Software keyboard support

View File

@ -512,7 +512,7 @@ void QAndroidInputContext::invokeAction(QInputMethod::Action action, int cursorP
QRectF QAndroidInputContext::keyboardRect() const
{
return QPlatformInputContext::keyboardRect();
return QtAndroidInput::softwareKeyboardRect();
}
bool QAndroidInputContext::isAnimating() const

View File

@ -51,6 +51,8 @@ QCocoaAccessibility::~QCocoaAccessibility()
void QCocoaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
{
if (!isActive() || !event->accessibleInterface())
return;
QMacAccessibilityElement *element = [QMacAccessibilityElement elementWithId: event->uniqueId()];
if (!element) {
qWarning() << "QCocoaAccessibility::notifyAccessibilityUpdate: invalid element";

View File

@ -160,10 +160,10 @@ QSizeF QEglFSKmsScreen::physicalSize() const
QDpi QEglFSKmsScreen::logicalDpi() const
{
QSizeF ps = physicalSize();
QSize s = geometry().size();
const QSizeF ps = physicalSize();
const QSize s = geometry().size();
if (ps.isValid() && s.isValid())
if (!ps.isEmpty() && !s.isEmpty())
return QDpi(25.4 * s.width() / ps.width(),
25.4 * s.height() / ps.height());
else

View File

@ -33,6 +33,7 @@
#include "qeglfskmsegldeviceintegration.h"
#include <QLoggingCategory>
#include <private/qmath_p.h>
QT_BEGIN_NAMESPACE
@ -115,7 +116,18 @@ EGLDisplay QEglFSKmsEglDeviceIntegration::createDisplay(EGLNativeDisplayType nat
QSizeF QEglFSKmsEglDeviceIntegration::physicalScreenSize() const
{
return QSizeF(m_drm_connector->mmWidth, m_drm_connector->mmHeight);
const int defaultPhysicalDpi = 100;
static const int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_WIDTH");
static const int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_HEIGHT");
QSizeF size(width, height);
if (size.isEmpty()) {
size = QSizeF(m_drm_connector->mmWidth, m_drm_connector->mmHeight);
if (size.isEmpty()) {
const float pixelsPerMm = Q_MM_PER_INCH / defaultPhysicalDpi;
size = QSizeF(screenSize().width() * pixelsPerMm, screenSize().height() * pixelsPerMm);
}
}
return size;
}
QSize QEglFSKmsEglDeviceIntegration::screenSize() const

View File

@ -212,11 +212,14 @@ QSize QEGLDeviceIntegration::screenSize() const
QDpi QEGLDeviceIntegration::logicalDpi() const
{
QSizeF ps = physicalScreenSize();
QSize s = screenSize();
const QSizeF ps = physicalScreenSize();
const QSize s = screenSize();
return QDpi(25.4 * s.width() / ps.width(),
25.4 * s.height() / ps.height());
if (!ps.isEmpty() && !s.isEmpty())
return QDpi(25.4 * s.width() / ps.width(),
25.4 * s.height() / ps.height());
else
return QDpi(100, 100);
}
qreal QEGLDeviceIntegration::pixelDensity() const

View File

@ -66,6 +66,8 @@ void invalidateCache(QAccessibleInterface *iface)
void QIOSPlatformAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
{
if (!isActive() || !event->accessibleInterface())
return;
switch (event->type()) {
case QAccessible::ObjectCreated:
case QAccessible::ObjectShow:

View File

@ -151,7 +151,7 @@ void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
// An event has to be associated with a window,
// so find the first parent that is a widget and that has a WId
QAccessibleInterface *iface = event->accessibleInterface();
if (!iface || !iface->isValid())
if (!isActive() || !iface || !iface->isValid())
return;
QWindow *window = QWindowsAccessibility::windowHelper(iface);

View File

@ -1033,7 +1033,17 @@ void QWindowsWindow::destroyWindow()
void QWindowsWindow::updateDropSite(bool topLevel)
{
bool enabled = false;
if (topLevel) {
bool parentIsEmbedded = false;
if (!topLevel) {
// if the parent window is a foreign window wrapped via QWindow::fromWinId, we need to enable the drop site
// on the first child window
const QWindow *parent = window()->parent();
if (parent && (parent->type() == Qt::ForeignWindow))
parentIsEmbedded = true;
}
if (topLevel || parentIsEmbedded) {
switch (window()->type()) {
case Qt::Window:
case Qt::Dialog:

View File

@ -444,12 +444,14 @@ bool QWinRTFileDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModalit
}
}
const QString suffix = dialogOptions->defaultSuffix();
QString suffix = dialogOptions->defaultSuffix();
if (!suffix.isEmpty()) {
if (!suffix.startsWith(QLatin1Char('.')))
suffix.prepend(QLatin1Char('.'));
HStringReference nativeSuffix(reinterpret_cast<const wchar_t *>(suffix.utf16()),
suffix.length());
hr = picker->put_DefaultFileExtension(nativeSuffix.Get());
RETURN_FALSE_IF_FAILED("Failed to set default file extension");
RETURN_FALSE_IF_FAILED_WITH_ARGS("Failed to set default file extension \"%s\"", qPrintable(suffix));
}
const QString suggestedName = QFileInfo(d->saveFileName.toLocalFile()).fileName();

View File

@ -37,6 +37,7 @@
#include "qwinrtmessagedialoghelper.h"
#include "qwinrttheme.h"
#include <QtGui/QTextDocument>
#include <QtCore/qfunctions_winrt.h>
#include <private/qeventdispatcher_winrt_p.h>
@ -110,6 +111,10 @@ bool QWinRTMessageDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModa
const QString informativeText = options->informativeText();
const QString title = options->windowTitle();
const QString text = informativeText.isEmpty() ? options->text() : (options->text() + QLatin1Char('\n') + informativeText);
if (Qt::mightBeRichText(text)) {
qWarning("Rich text detected, defaulting to QtWidgets-based dialog.");
return false;
}
HRESULT hr;
ComPtr<IMessageDialogFactory> dialogFactory;

View File

@ -38,16 +38,6 @@
**
****************************************************************************/
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of an example program for Qt.
** EDITIONS: NOLIMITS
**
****************************************************************************/
/*
model.cpp

View File

@ -38,16 +38,6 @@
**
****************************************************************************/
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of an example program for Qt.
** EDITIONS: NOLIMITS
**
****************************************************************************/
#ifndef MODEL_H
#define MODEL_H

View File

@ -2199,6 +2199,54 @@
\snippet code/doc_src_stylesheet.qdoc 68
\row
\li \b outline
\li
\li The outline drawn around the object's border.
\row
\li \b outline-color
\li \l{#Color}{Color}
\li The color of the outline.
See also \l{Qt Style Sheets Reference#border-color-prop}{border-color}
\row
\li \b outline-offset
\li \l{#Length}{Length}
\li The outline's offset from the border of the widget.
\row
\li \b outline-style
\li
\li Specifies the pattern used to draw the outline.
See also \l{Qt Style Sheets Reference#border-style-prop}{border-style}
\row
\li \b outline-radius
\li
\li Adds rounded corners to the outline
\row
\li \b outline-bottom-left-radius
\li \l{#Radius}{Radius}
\li The radius for the bottom-left rounded corner of the outline.
\row
\li \b outline-bottom-right-radius
\li \l{#Radius}{Radius}
\li The radius for the bottom-right rounded corner of the outline.
\row
\li \b outline-top-left-radius
\li \l{#Radius}{Radius}
\li The radius for the top-left corner of the outline.
\row
\li \b outline-top-right-radius
\li \l{#Radius}{Radius}
\li The radius for the top-right rounded corner of the outline.
\row
\li \b{\c padding} \target padding-prop
\li \l{#Box Lengths}{Box Lengths}

View File

@ -196,6 +196,8 @@ private slots:
void metadataPassthrough();
void pixelColor();
private:
const QString m_prefix;
};
@ -3027,5 +3029,21 @@ void tst_QImage::metadataPassthrough()
QCOMPARE(swapped.devicePixelRatio(), a.devicePixelRatio());
}
void tst_QImage::pixelColor()
{
QImage argb32(1, 1, QImage::Format_ARGB32);
QImage argb32pm(1, 1, QImage::Format_ARGB32_Premultiplied);
QColor c(Qt::red);
c.setAlpha(128);
argb32.setPixelColor(QPoint(0, 0), c);
argb32pm.setPixelColor(QPoint(0, 0), c);
QCOMPARE(argb32.pixelColor(QPoint(0, 0)), c);
QCOMPARE(argb32pm.pixelColor(QPoint(0, 0)), c);
QImage t = argb32.convertToFormat(QImage::Format_ARGB32_Premultiplied);
QCOMPARE(t.pixel(0,0), argb32pm.pixel(0,0));
}
QTEST_GUILESS_MAIN(tst_QImage)
#include "tst_qimage.moc"

View File

@ -733,7 +733,10 @@ public:
int done = clients;
while (done > 0) {
bool timedOut = true;
QVERIFY(server.waitForNewConnection(7000, &timedOut));
QVERIFY2(server.waitForNewConnection(7000, &timedOut),
(QByteArrayLiteral("done=") + QByteArray::number(done)
+ QByteArrayLiteral(", timedOut=")
+ (timedOut ? "true" : "false")).constData());
QVERIFY(!timedOut);
QLocalSocket *serverSocket = server.nextPendingConnection();
QVERIFY(serverSocket);

View File

@ -4562,8 +4562,18 @@ void tst_QWidget::setWindowGeometry_data()
QList<int> windowFlags;
windowFlags << 0 << Qt::FramelessWindowHint;
const bool skipEmptyRects = (m_platform == QStringLiteral("windows"));
foreach (QList<QRect> l, rects) {
QRect rect = l.first();
if (skipEmptyRects) {
QList<QRect>::iterator it = l.begin();
while (it != l.end()) {
if (it->isEmpty())
it = l.erase(it);
else
++it;
}
}
foreach (int windowFlag, windowFlags) {
QTest::newRow(QString("%1,%2 %3x%4, flags %5")
.arg(rect.x())
@ -4612,8 +4622,13 @@ void tst_QWidget::setWindowGeometry()
widget.setGeometry(rect);
widget.showNormal();
if (rect.isValid())
if (rect.isValid()) {
QVERIFY(QTest::qWaitForWindowExposed(&widget));
} else {
// in case of an invalid rect, wait for the geometry to become
// adjusted to the actual (valid) value.
QApplication::processEvents();
}
QTRY_COMPARE(widget.geometry(), rect);
// setGeometry() while shown

View File

@ -1,11 +1,20 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
qtHaveModule(printsupport): QT += printsupport
}
TARGET = dialogs
TEMPLATE = app
SOURCES += main.cpp filedialogpanel.cpp colordialogpanel.cpp fontdialogpanel.cpp \
wizardpanel.cpp messageboxpanel.cpp printdialogpanel.cpp utils.cpp
wizardpanel.cpp messageboxpanel.cpp utils.cpp
HEADERS += filedialogpanel.h colordialogpanel.h fontdialogpanel.h \
wizardpanel.h messageboxpanel.h printdialogpanel.h utils.h
FORMS += printdialogpanel.ui
wizardpanel.h messageboxpanel.h utils.h
!contains(DEFINES, QT_NO_PRINTER) {
SOURCES += printdialogpanel.cpp
HEADERS += printdialogpanel.h
FORMS += printdialogpanel.ui
}