Merge remote-tracking branch 'origin/5.6' into dev
Change-Id: I2532c7f7db5e6cc3ef09753d886279816dd662b2
This commit is contained in:
commit
3ec31ef9c5
@ -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") {
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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()));
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
*/
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
101
src/corelib/kernel/qfunctions_fake_env_p.h
Normal file
101
src/corelib/kernel/qfunctions_fake_env_p.h
Normal 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
|
@ -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
|
||||
|
@ -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 *)
|
||||
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
@ -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"));
|
||||
|
@ -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())
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -213,8 +213,6 @@ struct Operator
|
||||
};
|
||||
};
|
||||
|
||||
void qInitDrawhelperAsm();
|
||||
|
||||
class QRasterPaintEngine;
|
||||
|
||||
struct QSolidData
|
||||
|
@ -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));
|
||||
|
@ -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()
|
||||
*/
|
||||
|
@ -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]
|
||||
|
@ -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) {
|
||||
|
@ -99,7 +99,7 @@ void QSpiAccessibleBridge::notifyAccessibilityUpdate(QAccessibleEvent *event)
|
||||
{
|
||||
if (!dbusAdaptor)
|
||||
return;
|
||||
if (isActive())
|
||||
if (isActive() && event->accessibleInterface())
|
||||
dbusAdaptor->notify(event);
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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";
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user