aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf4
-rw-r--r--examples/winextras/iconextractor/main.cpp14
-rw-r--r--examples/winextras/musicplayer/doc/src/qtwinextras-musicplayer.qdoc16
-rw-r--r--examples/winextras/musicplayer/musicplayer.cpp14
-rw-r--r--examples/winextras/musicplayer/musicplayer.h1
-rw-r--r--examples/winextras/musicplayer/volumebutton.cpp2
-rw-r--r--src/imports/winextras/plugin.cpp2
-rw-r--r--src/imports/winextras/qquickdwmfeatures.cpp21
-rw-r--r--src/imports/winextras/qquickdwmfeatures_p.h2
-rw-r--r--src/imports/winextras/qquickdwmfeatures_p_p.h16
-rw-r--r--src/imports/winextras/qquickiconloader.cpp6
-rw-r--r--src/imports/winextras/qquickiconloader_p.h4
-rw-r--r--src/imports/winextras/qquickjumplist.cpp18
-rw-r--r--src/imports/winextras/qquickjumplist_p.h12
-rw-r--r--src/imports/winextras/qquickjumplistcategory.cpp12
-rw-r--r--src/imports/winextras/qquickjumplistcategory_p.h4
-rw-r--r--src/imports/winextras/qquickjumplistitem.cpp6
-rw-r--r--src/imports/winextras/qquickjumplistitem_p.h5
-rw-r--r--src/imports/winextras/qquicktaskbarbutton.cpp4
-rw-r--r--src/imports/winextras/qquicktaskbarbutton_p.h4
-rw-r--r--src/imports/winextras/qquickthumbnailtoolbar.cpp12
-rw-r--r--src/imports/winextras/qquickthumbnailtoolbar_p.h4
-rw-r--r--src/imports/winextras/qquickthumbnailtoolbutton.cpp4
-rw-r--r--src/imports/winextras/qquickthumbnailtoolbutton_p.h2
-rw-r--r--src/imports/winextras/winextras.pro2
-rw-r--r--src/winextras/qwineventfilter.cpp12
-rw-r--r--src/winextras/qwineventfilter_p.h6
-rw-r--r--src/winextras/qwinfunctions.cpp30
-rw-r--r--src/winextras/qwinfunctions.h12
-rw-r--r--src/winextras/qwinfunctions_p.h2
-rw-r--r--src/winextras/qwinjumplist.cpp62
-rw-r--r--src/winextras/qwinjumplistcategory.cpp18
-rw-r--r--src/winextras/qwinjumplistitem.cpp2
-rw-r--r--src/winextras/qwintaskbarbutton.cpp20
-rw-r--r--src/winextras/qwintaskbarbutton.h2
-rw-r--r--src/winextras/qwintaskbarbutton_p.h4
-rw-r--r--src/winextras/qwinthumbnailtoolbar.cpp25
-rw-r--r--src/winextras/qwinthumbnailtoolbar_p.h20
-rw-r--r--src/winextras/winextras.pro2
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp28
-rw-r--r--tests/auto/qwinjumplist/tst_qwinjumplist.cpp8
-rw-r--r--tests/auto/qwinmime/tst_qwinmime.cpp4
-rw-r--r--tests/auto/qwintaskbarbutton/tst_qwintaskbarbutton.cpp4
-rw-r--r--tests/auto/qwinthumbnailtoolbar/tst_qwinthumbnailtoolbar.cpp10
-rw-r--r--tests/manual/dwmfeatures/testwidget.cpp11
-rw-r--r--tests/manual/dwmfeatures/testwidget.h6
-rw-r--r--tests/manual/imageconversion/imageconversion.pro5
-rw-r--r--tests/manual/imageconversion/main.cpp395
-rw-r--r--tests/manual/jumplist/main.cpp6
-rw-r--r--tests/manual/jumplist/testwidget.cpp2
-rw-r--r--tests/manual/manual.pro3
-rw-r--r--tests/manual/thumbnail/main.cpp2
52 files changed, 650 insertions, 242 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 543d0a8..76e7ef0 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,5 @@
load(qt_build_config)
-MODULE_VERSION = 5.13.2
+DEFINES += QT_NO_FOREACH
+
+MODULE_VERSION = 5.14.0
diff --git a/examples/winextras/iconextractor/main.cpp b/examples/winextras/iconextractor/main.cpp
index 0d7ebbd..b72a49a 100644
--- a/examples/winextras/iconextractor/main.cpp
+++ b/examples/winextras/iconextractor/main.cpp
@@ -77,7 +77,7 @@ struct PixmapEntry {
QPixmap pixmap;
};
-typedef QList<PixmapEntry> PixmapEntryList;
+using PixmapEntryList = QList<PixmapEntry>;
static std::wostream &operator<<(std::wostream &str, const QString &s)
{
@@ -98,8 +98,8 @@ static QString formatSize(const QSize &size)
static PixmapEntryList extractIcons(const QString &sourceFile, bool large)
{
const QString nativeName = QDir::toNativeSeparators(sourceFile);
- const wchar_t *sourceFileC = reinterpret_cast<const wchar_t *>(nativeName.utf16());
- const UINT iconCount = ExtractIconEx(sourceFileC, -1, 0, 0, 0);
+ const auto *sourceFileC = reinterpret_cast<const wchar_t *>(nativeName.utf16());
+ const UINT iconCount = ExtractIconEx(sourceFileC, -1, nullptr, nullptr, 0);
if (!iconCount) {
std::wcerr << sourceFile << " does not appear to contain icons.\n";
return PixmapEntryList();
@@ -107,8 +107,8 @@ static PixmapEntryList extractIcons(const QString &sourceFile, bool large)
QScopedArrayPointer<HICON> icons(new HICON[iconCount]);
const UINT extractedIconCount = large ?
- ExtractIconEx(sourceFileC, 0, icons.data(), 0, iconCount) :
- ExtractIconEx(sourceFileC, 0, 0, icons.data(), iconCount);
+ ExtractIconEx(sourceFileC, 0, icons.data(), nullptr, iconCount) :
+ ExtractIconEx(sourceFileC, 0, nullptr, icons.data(), iconCount);
if (!extractedIconCount) {
qErrnoWarning("Failed to extract icons from %s", qPrintable(sourceFile));
return PixmapEntryList();
@@ -145,7 +145,7 @@ static QPixmap pixmapFromShellImageList(int iImageList, const SHFILEINFO &info)
if (FAILED(SHGetImageList(iImageList, iID_IImageList, reinterpret_cast<void **>(&imageList))))
return result;
- HICON hIcon = 0;
+ HICON hIcon = nullptr;
if (SUCCEEDED(imageList->GetIcon(info.iIcon, ILD_TRANSPARENT, &hIcon))) {
result = QtWin::fromHICON(hIcon);
DestroyIcon(hIcon);
@@ -180,7 +180,7 @@ static PixmapEntryList extractShellIcons(const QString &sourceFile, bool addOver
};
const QString nativeName = QDir::toNativeSeparators(sourceFile);
- const wchar_t *sourceFileC = reinterpret_cast<const wchar_t *>(nativeName.utf16());
+ const auto *sourceFileC = reinterpret_cast<const wchar_t *>(nativeName.utf16());
SHFILEINFO info;
unsigned int baseFlags = SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_ICONLOCATION;
diff --git a/examples/winextras/musicplayer/doc/src/qtwinextras-musicplayer.qdoc b/examples/winextras/musicplayer/doc/src/qtwinextras-musicplayer.qdoc
index 8908699..8b8fd57 100644
--- a/examples/winextras/musicplayer/doc/src/qtwinextras-musicplayer.qdoc
+++ b/examples/winextras/musicplayer/doc/src/qtwinextras-musicplayer.qdoc
@@ -100,9 +100,19 @@
\image qtwinextras-musicplayer-taskbar.png Screenshot of the Music Player taskbar
- The following snippet shows how the taskbar button is prepared. The playback
- progress is wired directly to the taskbar progress indicator by using signals
- and slots.
+ The following snippets show how the taskbar button is prepared.
+
+ For the taskbar and the thumbnail toolbar to work, a native window handle
+ must be set by passing an instance of \c QWindow to
+ \c QWinTaskbarButton::setWindow() or \c QWinThumbnailToolBar::setWindow(),
+ respectively. This instance is created in the process of \c QWidget::show()
+ and can be retrieved by calling \c QWidget::windowHandle() afterwards.
+ We override \c QWidget::showEvent() for this purpose:
+
+ \snippet musicplayer/musicplayer.cpp 7
+
+ The playback progress is wired directly to the taskbar progress indicator
+ by using signals and slots.
\snippet musicplayer/musicplayer.cpp 5
diff --git a/examples/winextras/musicplayer/musicplayer.cpp b/examples/winextras/musicplayer/musicplayer.cpp
index 12c6854..2ecff56 100644
--- a/examples/winextras/musicplayer/musicplayer.cpp
+++ b/examples/winextras/musicplayer/musicplayer.cpp
@@ -140,6 +140,18 @@ bool MusicPlayer::event(QEvent *event)
}
//! [0]
+//! [7]
+void MusicPlayer::showEvent(QShowEvent *event)
+{
+ QWidget::showEvent(event);
+ if (!taskbarButton->window()) {
+ auto window = windowHandle();
+ taskbarButton->setWindow(window);
+ thumbnailToolBar->setWindow(window);
+ }
+}
+//! [7]
+
static bool canHandleDrop(const QDropEvent *event)
{
const QList<QUrl> urls = event->mimeData()->urls();
@@ -383,7 +395,6 @@ void MusicPlayer::createJumpList()
void MusicPlayer::createTaskbar()
{
taskbarButton = new QWinTaskbarButton(this);
- taskbarButton->setWindow(windowHandle());
taskbarProgress = taskbarButton->progress();
connect(positionSlider, &QAbstractSlider::valueChanged, taskbarProgress, &QWinTaskbarProgress::setValue);
@@ -397,7 +408,6 @@ void MusicPlayer::createTaskbar()
void MusicPlayer::createThumbnailToolBar()
{
thumbnailToolBar = new QWinThumbnailToolBar(this);
- thumbnailToolBar->setWindow(windowHandle());
playToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
playToolButton->setEnabled(false);
diff --git a/examples/winextras/musicplayer/musicplayer.h b/examples/winextras/musicplayer/musicplayer.h
index 56f4c67..49dd25b 100644
--- a/examples/winextras/musicplayer/musicplayer.h
+++ b/examples/winextras/musicplayer/musicplayer.h
@@ -82,6 +82,7 @@ public slots:
protected:
bool event(QEvent *event) override;
+ void showEvent(QShowEvent *event) override;
void dragEnterEvent(QDragEnterEvent *event) override;
void dropEvent(QDropEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
diff --git a/examples/winextras/musicplayer/volumebutton.cpp b/examples/winextras/musicplayer/volumebutton.cpp
index 9cecf08..908dba1 100644
--- a/examples/winextras/musicplayer/volumebutton.cpp
+++ b/examples/winextras/musicplayer/volumebutton.cpp
@@ -77,7 +77,7 @@ VolumeButton::VolumeButton(QWidget *parent) :
popupLayout->addWidget(slider);
popupLayout->addWidget(label);
- QWidgetAction *action = new QWidgetAction(this);
+ auto *action = new QWidgetAction(this);
action->setDefaultWidget(popup);
menu = new QMenu(this);
diff --git a/src/imports/winextras/plugin.cpp b/src/imports/winextras/plugin.cpp
index f53cdf7..41b3fe8 100644
--- a/src/imports/winextras/plugin.cpp
+++ b/src/imports/winextras/plugin.cpp
@@ -57,7 +57,7 @@ class QWinExtrasQmlPlugin : public QQmlExtensionPlugin
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
- QWinExtrasQmlPlugin(QObject *parent = 0) : QQmlExtensionPlugin(parent) { }
+ QWinExtrasQmlPlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) { }
void registerTypes(const char *uri) Q_DECL_OVERRIDE
{
Q_ASSERT(uri == QLatin1String("QtWinExtras"));
diff --git a/src/imports/winextras/qquickdwmfeatures.cpp b/src/imports/winextras/qquickdwmfeatures.cpp
index 5d1f565..a7ca158 100644
--- a/src/imports/winextras/qquickdwmfeatures.cpp
+++ b/src/imports/winextras/qquickdwmfeatures.cpp
@@ -71,9 +71,7 @@ QQuickDwmFeatures::QQuickDwmFeatures(QQuickItem *parent) :
QWinEventFilter::setup();
}
-QQuickDwmFeatures::~QQuickDwmFeatures()
-{
-}
+QQuickDwmFeatures::~QQuickDwmFeatures() = default;
void QQuickDwmFeatures::setCompositionEnabled(bool enabled)
{
@@ -230,10 +228,7 @@ void QQuickDwmFeatures::setBlurBehindEnabled(bool enabled)
bool QQuickDwmFeatures::isExcludedFromPeek() const
{
Q_D(const QQuickDwmFeatures);
- if (window())
- return QtWin::isWindowExcludedFromPeek(window());
- else
- return d->peekExcluded;
+ return window() ? QtWin::isWindowExcludedFromPeek(window()) : d->peekExcluded;
}
void QQuickDwmFeatures::setExcludedFromPeek(bool exclude)
@@ -257,10 +252,7 @@ void QQuickDwmFeatures::setExcludedFromPeek(bool exclude)
bool QQuickDwmFeatures::isPeekDisallowed() const
{
Q_D(const QQuickDwmFeatures);
- if (window())
- return QtWin::isWindowPeekDisallowed(window());
- else
- return d->peekDisallowed;
+ return window() ? QtWin::isWindowPeekDisallowed(window()) : d->peekDisallowed;
}
void QQuickDwmFeatures::setPeekDisallowed(bool disallow)
@@ -321,8 +313,8 @@ bool QQuickDwmFeatures::eventFilter(QObject *object, QEvent *event)
QQuickDwmFeatures *QQuickDwmFeatures::qmlAttachedProperties(QObject *parentObject)
{
- QQuickDwmFeatures *featuresObj = new QQuickDwmFeatures();
- QQuickItem *parentItem = qobject_cast<QQuickItem *>(parentObject);
+ auto *featuresObj = new QQuickDwmFeatures();
+ auto *parentItem = qobject_cast<QQuickItem *>(parentObject);
if (parentItem)
featuresObj->setParentItem(parentItem);
else
@@ -344,9 +336,6 @@ void QQuickDwmFeatures::itemChange(QQuickItem::ItemChange change, const QQuickIt
QQuickDwmFeaturesPrivate::QQuickDwmFeaturesPrivate(QQuickDwmFeatures *parent) :
- topMargin(0), rightMargin(0), bottomMargin(0), leftMargin(0),
- blurBehindEnabled(false),
- peekDisallowed(false), peekExcluded(false), flipPolicy(QQuickWin::FlipDefault),
q_ptr(parent)
{
}
diff --git a/src/imports/winextras/qquickdwmfeatures_p.h b/src/imports/winextras/qquickdwmfeatures_p.h
index a10a49b..d98aa00 100644
--- a/src/imports/winextras/qquickdwmfeatures_p.h
+++ b/src/imports/winextras/qquickdwmfeatures_p.h
@@ -79,7 +79,7 @@ class QQuickDwmFeatures : public QQuickItem
Q_PROPERTY(QQuickWin::WindowFlip3DPolicy flip3DPolicy READ flip3DPolicy WRITE setFlip3DPolicy NOTIFY flip3DPolicyChanged)
public:
- explicit QQuickDwmFeatures(QQuickItem *parent = 0);
+ explicit QQuickDwmFeatures(QQuickItem *parent = nullptr);
~QQuickDwmFeatures();
void setCompositionEnabled(bool enabled);
diff --git a/src/imports/winextras/qquickdwmfeatures_p_p.h b/src/imports/winextras/qquickdwmfeatures_p_p.h
index fc8bbb7..4ec1244 100644
--- a/src/imports/winextras/qquickdwmfeatures_p_p.h
+++ b/src/imports/winextras/qquickdwmfeatures_p_p.h
@@ -61,15 +61,15 @@ class QQuickDwmFeaturesPrivate
public:
QQuickDwmFeaturesPrivate(QQuickDwmFeatures *parent);
- int topMargin;
- int rightMargin;
- int bottomMargin;
- int leftMargin;
- bool blurBehindEnabled;
+ int topMargin = 0;
+ int rightMargin = 0;
+ int bottomMargin = 0;
+ int leftMargin = 0;
+ bool blurBehindEnabled = false;
- bool peekDisallowed;
- bool peekExcluded;
- QQuickWin::WindowFlip3DPolicy flipPolicy;
+ bool peekDisallowed = false;
+ bool peekExcluded = false;
+ QQuickWin::WindowFlip3DPolicy flipPolicy = QQuickWin::FlipDefault;
QColor originalSurfaceColor;
void updateAll();
diff --git a/src/imports/winextras/qquickiconloader.cpp b/src/imports/winextras/qquickiconloader.cpp
index df9a19d..b5b7e5b 100644
--- a/src/imports/winextras/qquickiconloader.cpp
+++ b/src/imports/winextras/qquickiconloader.cpp
@@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
QVariant QQuickIconLoader::loadFromFile(const QUrl &url, QVariant::Type type)
{
const QString path = QQmlFile::urlToLocalFileOrQrc(url);
- if (QFileInfo(path).exists()) {
+ if (QFileInfo::exists(path)) {
switch (type) {
case QMetaType::QIcon:
return QVariant(QIcon(path));
@@ -79,7 +79,7 @@ QVariant QQuickIconLoader::loadFromImageProvider(const QUrl &url, const QQmlEngi
const QString providerId = url.host();
const QString imageId = url.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority).mid(1);
QQuickImageProvider::ImageType imageType = QQuickImageProvider::Invalid;
- QQuickImageProvider *provider = static_cast<QQuickImageProvider *>(engine->imageProvider(providerId));
+ auto *provider = static_cast<QQuickImageProvider *>(engine->imageProvider(providerId));
QSize size;
if (!requestedSize.isValid())
requestedSize = QSize(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON));
@@ -122,7 +122,7 @@ QQuickIconLoaderNetworkReplyHandler::QQuickIconLoaderNetworkReplyHandler(QNetwor
void QQuickIconLoaderNetworkReplyHandler::onRequestFinished()
{
- QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+ auto *reply = qobject_cast<QNetworkReply *>(sender());
Q_ASSERT(reply);
if (reply->error() != QNetworkReply::NoError) {
qWarning() << Q_FUNC_INFO << reply->url() << "failed:" << reply->errorString();
diff --git a/src/imports/winextras/qquickiconloader_p.h b/src/imports/winextras/qquickiconloader_p.h
index ad359ee..bc23581 100644
--- a/src/imports/winextras/qquickiconloader_p.h
+++ b/src/imports/winextras/qquickiconloader_p.h
@@ -86,7 +86,7 @@ public:
Object *receiver, void (Object::*function)(const QVariant &));
private:
- QQuickIconLoader() {}
+ QQuickIconLoader() = default;
static QVariant loadFromFile(const QUrl &url, QVariant::Type type);
static QVariant loadFromImageProvider(const QUrl &url, const QQmlEngine *engine,
QVariant::Type type, QSize requestedSize);
@@ -120,7 +120,7 @@ QQuickIconLoader::LoadResult
const QString scheme = url.scheme();
if (scheme.startsWith(QLatin1String("http"))) {
if (QNetworkReply *reply = QQuickIconLoader::loadFromNetwork(url, engine)) {
- QQuickIconLoaderNetworkReplyHandler *handler = new QQuickIconLoaderNetworkReplyHandler(reply, type);
+ auto *handler = new QQuickIconLoaderNetworkReplyHandler(reply, type);
QObject::connect(handler, &QQuickIconLoaderNetworkReplyHandler::finished, receiver, function);
return LoadNetworkRequestStarted;
}
diff --git a/src/imports/winextras/qquickjumplist.cpp b/src/imports/winextras/qquickjumplist.cpp
index 0f210c7..615af08 100644
--- a/src/imports/winextras/qquickjumplist.cpp
+++ b/src/imports/winextras/qquickjumplist.cpp
@@ -65,13 +65,11 @@ QT_BEGIN_NAMESPACE
*/
QQuickJumpList::QQuickJumpList(QObject *parent) :
- QObject(parent), m_recent(0), m_frequent(0), m_tasks(0)
+ QObject(parent)
{
}
-QQuickJumpList::~QQuickJumpList()
-{
-}
+QQuickJumpList::~QQuickJumpList() = default;
/*!
\qmlproperty JumpListCategory JumpList::recent
@@ -82,7 +80,7 @@ QQuickJumpList::~QQuickJumpList()
QQuickJumpListCategory *QQuickJumpList::recent() const
{
if (!m_recent) {
- QQuickJumpList *that = const_cast<QQuickJumpList *>(this);
+ auto *that = const_cast<QQuickJumpList *>(this);
that->m_recent = new QQuickJumpListCategory(that);
connect(m_recent, &QQuickJumpListCategory::visibilityChanged, that, &QQuickJumpList::rebuild);
m_recent->setVisible(false);
@@ -99,7 +97,7 @@ QQuickJumpListCategory *QQuickJumpList::recent() const
QQuickJumpListCategory *QQuickJumpList::frequent() const
{
if (!m_frequent) {
- QQuickJumpList *that = const_cast<QQuickJumpList *>(this);
+ auto *that = const_cast<QQuickJumpList *>(this);
that->m_frequent = new QQuickJumpListCategory(that);
connect(m_frequent, &QQuickJumpListCategory::visibilityChanged, that, &QQuickJumpList::rebuild);
m_frequent->setVisible(false);
@@ -115,7 +113,7 @@ QQuickJumpListCategory *QQuickJumpList::frequent() const
QQuickJumpListCategory *QQuickJumpList::tasks() const
{
if (!m_tasks) {
- QQuickJumpList *that = const_cast<QQuickJumpList *>(this);
+ auto *that = const_cast<QQuickJumpList *>(this);
that->m_tasks = new QQuickJumpListCategory(that);
connect(m_tasks, &QQuickJumpListCategory::visibilityChanged, that, &QQuickJumpList::rebuild);
}
@@ -141,7 +139,7 @@ void QQuickJumpList::setTasks(QQuickJumpListCategory *tasks)
*/
QQmlListProperty<QObject> QQuickJumpList::data()
{
- return QQmlListProperty<QObject>(this, this, &QQuickJumpList::data_append, 0, 0, 0);
+ return QQmlListProperty<QObject>(this, this, &QQuickJumpList::data_append, nullptr, nullptr, nullptr);
}
/*!
@@ -182,8 +180,8 @@ void QQuickJumpList::rebuild()
void QQuickJumpList::data_append(QQmlListProperty<QObject> *property, QObject *object)
{
- if (QQuickJumpListCategory *category = qobject_cast<QQuickJumpListCategory *>(object)) {
- QQuickJumpList *jumpList = static_cast<QQuickJumpList *>(property->object);
+ if (auto *category = qobject_cast<QQuickJumpListCategory *>(object)) {
+ auto *jumpList = static_cast<QQuickJumpList *>(property->object);
connect(category, &QQuickJumpListCategory::visibilityChanged, jumpList, &QQuickJumpList::rebuild);
jumpList->m_categories.append(category);
emit jumpList->categoriesChanged();
diff --git a/src/imports/winextras/qquickjumplist_p.h b/src/imports/winextras/qquickjumplist_p.h
index 8efb2bc..c686294 100644
--- a/src/imports/winextras/qquickjumplist_p.h
+++ b/src/imports/winextras/qquickjumplist_p.h
@@ -72,7 +72,7 @@ class QQuickJumpList : public QObject, public QQmlParserStatus
Q_INTERFACES(QQmlParserStatus)
public:
- explicit QQuickJumpList(QObject *parent = 0);
+ explicit QQuickJumpList(QObject *parent = nullptr);
~QQuickJumpList();
QQuickJumpListCategory *recent() const;
@@ -84,8 +84,8 @@ public:
QQmlListProperty<QObject> data();
QQmlListProperty<QQuickJumpListCategory> categories();
- void classBegin();
- void componentComplete();
+ void classBegin() override;
+ void componentComplete() override;
Q_SIGNALS:
void tasksChanged();
@@ -99,9 +99,9 @@ private:
static int categories_count(QQmlListProperty<QQuickJumpListCategory> *property);
static QQuickJumpListCategory *categories_at(QQmlListProperty<QQuickJumpListCategory> *property, int index);
- QQuickJumpListCategory *m_recent;
- QQuickJumpListCategory *m_frequent;
- QQuickJumpListCategory *m_tasks;
+ QQuickJumpListCategory *m_recent = nullptr;
+ QQuickJumpListCategory *m_frequent = nullptr;
+ QQuickJumpListCategory *m_tasks = nullptr;
QList<QQuickJumpListCategory *> m_categories;
};
diff --git a/src/imports/winextras/qquickjumplistcategory.cpp b/src/imports/winextras/qquickjumplistcategory.cpp
index 052a4e6..30183f4 100644
--- a/src/imports/winextras/qquickjumplistcategory.cpp
+++ b/src/imports/winextras/qquickjumplistcategory.cpp
@@ -61,13 +61,11 @@ QT_BEGIN_NAMESPACE
*/
QQuickJumpListCategory::QQuickJumpListCategory(QObject *parent) :
- QObject(parent), m_visible(true)
+ QObject(parent)
{
}
-QQuickJumpListCategory::~QQuickJumpListCategory()
-{
-}
+QQuickJumpListCategory::~QQuickJumpListCategory() = default;
/*!
\qmlproperty list<QtObject> JumpListCategory::data
@@ -75,7 +73,7 @@ QQuickJumpListCategory::~QQuickJumpListCategory()
*/
QQmlListProperty<QObject> QQuickJumpListCategory::data()
{
- return QQmlListProperty<QObject>(this, this, &QQuickJumpListCategory::data_append, 0, 0, 0);
+ return QQmlListProperty<QObject>(this, this, &QQuickJumpListCategory::data_append, nullptr, nullptr, nullptr);
}
/*!
@@ -134,8 +132,8 @@ QList<QWinJumpListItem *> QQuickJumpListCategory::toItemList() const
void QQuickJumpListCategory::data_append(QQmlListProperty<QObject> *property, QObject *object)
{
- if (QQuickJumpListItem *item = qobject_cast<QQuickJumpListItem *>(object)) {
- QQuickJumpListCategory *category = static_cast<QQuickJumpListCategory *>(property->object);
+ if (auto *item = qobject_cast<QQuickJumpListItem *>(object)) {
+ auto *category = static_cast<QQuickJumpListCategory *>(property->object);
category->m_items.append(item);
emit category->itemsChanged();
}
diff --git a/src/imports/winextras/qquickjumplistcategory_p.h b/src/imports/winextras/qquickjumplistcategory_p.h
index 9ae4922..69663f8 100644
--- a/src/imports/winextras/qquickjumplistcategory_p.h
+++ b/src/imports/winextras/qquickjumplistcategory_p.h
@@ -71,7 +71,7 @@ class QQuickJumpListCategory : public QObject
Q_CLASSINFO("DefaultProperty", "data")
public:
- explicit QQuickJumpListCategory(QObject *parent = 0);
+ explicit QQuickJumpListCategory(QObject *parent = nullptr);
~QQuickJumpListCategory();
QString title() const;
@@ -95,7 +95,7 @@ private:
static int items_count(QQmlListProperty<QQuickJumpListItem> *property);
static QQuickJumpListItem *items_at(QQmlListProperty<QQuickJumpListItem> *property, int index);
- bool m_visible;
+ bool m_visible = true;
QString m_title;
QList<QQuickJumpListItem *> m_items;
};
diff --git a/src/imports/winextras/qquickjumplistitem.cpp b/src/imports/winextras/qquickjumplistitem.cpp
index 86b917a..bfc9543 100644
--- a/src/imports/winextras/qquickjumplistitem.cpp
+++ b/src/imports/winextras/qquickjumplistitem.cpp
@@ -48,9 +48,7 @@ QQuickJumpListItem::QQuickJumpListItem(QObject *parent) :
{
}
-QQuickJumpListItem::~QQuickJumpListItem()
-{
-}
+QQuickJumpListItem::~QQuickJumpListItem() = default;
int QQuickJumpListItem::type() const
{
@@ -64,7 +62,7 @@ void QQuickJumpListItem::setType(int type)
QWinJumpListItem *QQuickJumpListItem::toJumpListItem() const
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Separator);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Separator);
switch (m_type) {
case ItemTypeDestination:
item->setType(QWinJumpListItem::Destination);
diff --git a/src/imports/winextras/qquickjumplistitem_p.h b/src/imports/winextras/qquickjumplistitem_p.h
index a202c41..47d92d7 100644
--- a/src/imports/winextras/qquickjumplistitem_p.h
+++ b/src/imports/winextras/qquickjumplistitem_p.h
@@ -61,16 +61,15 @@ class QQuickJumpListItem : public QObject
{
Q_OBJECT
Q_PROPERTY(int __jumpListItemType READ type WRITE setType)
- Q_ENUMS(JumpListItemType)
-
public:
enum JumpListItemType {
ItemTypeLink = 1,
ItemTypeDestination = 2,
ItemTypeSeparator = 3
};
+ Q_ENUM(JumpListItemType)
- explicit QQuickJumpListItem(QObject *p = 0);
+ explicit QQuickJumpListItem(QObject *p = nullptr);
~QQuickJumpListItem();
int type() const;
diff --git a/src/imports/winextras/qquicktaskbarbutton.cpp b/src/imports/winextras/qquicktaskbarbutton.cpp
index 7e8fd88..688ef35 100644
--- a/src/imports/winextras/qquicktaskbarbutton.cpp
+++ b/src/imports/winextras/qquicktaskbarbutton.cpp
@@ -123,9 +123,7 @@ QQuickTaskbarButton::QQuickTaskbarButton(QQuickItem *parent) : QQuickItem(parent
{
}
-QQuickTaskbarButton::~QQuickTaskbarButton()
-{
-}
+QQuickTaskbarButton::~QQuickTaskbarButton() = default;
/*!
\qmlpropertygroup ::TaskbarButton::progress
diff --git a/src/imports/winextras/qquicktaskbarbutton_p.h b/src/imports/winextras/qquicktaskbarbutton_p.h
index 3c34c53..a26fa67 100644
--- a/src/imports/winextras/qquicktaskbarbutton_p.h
+++ b/src/imports/winextras/qquicktaskbarbutton_p.h
@@ -68,7 +68,7 @@ class QQuickTaskbarOverlay : public QObject
Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription NOTIFY accessibleDescriptionChanged)
public:
- explicit QQuickTaskbarOverlay(QWinTaskbarButton *button, QObject *parent = 0);
+ explicit QQuickTaskbarOverlay(QWinTaskbarButton *button, QObject *parent = nullptr);
QUrl iconSource() const;
void setIconSource(const QUrl &iconSource);
@@ -95,7 +95,7 @@ class QQuickTaskbarButton : public QQuickItem
Q_PROPERTY(QWinTaskbarProgress *progress READ progress CONSTANT)
public:
- explicit QQuickTaskbarButton(QQuickItem *parent = 0);
+ explicit QQuickTaskbarButton(QQuickItem *parent = nullptr);
~QQuickTaskbarButton();
QQuickTaskbarOverlay *overlay() const;
diff --git a/src/imports/winextras/qquickthumbnailtoolbar.cpp b/src/imports/winextras/qquickthumbnailtoolbar.cpp
index 00eb1b5..7bdf112 100644
--- a/src/imports/winextras/qquickthumbnailtoolbar.cpp
+++ b/src/imports/winextras/qquickthumbnailtoolbar.cpp
@@ -74,9 +74,7 @@ QQuickThumbnailToolBar::QQuickThumbnailToolBar(QQuickItem *parent) :
this, &QQuickThumbnailToolBar::iconicLivePreviewRequested);
}
-QQuickThumbnailToolBar::~QQuickThumbnailToolBar()
-{
-}
+QQuickThumbnailToolBar::~QQuickThumbnailToolBar() = default;
int QQuickThumbnailToolBar::count() const
{
@@ -85,12 +83,12 @@ int QQuickThumbnailToolBar::count() const
QQmlListProperty<QObject> QQuickThumbnailToolBar::data()
{
- return QQmlListProperty<QObject>(this, 0, &QQuickThumbnailToolBar::addData, 0, 0, 0);
+ return QQmlListProperty<QObject>(this, nullptr, &QQuickThumbnailToolBar::addData, nullptr, nullptr, nullptr);
}
QQmlListProperty<QQuickThumbnailToolButton> QQuickThumbnailToolBar::buttons()
{
- return QQmlListProperty<QQuickThumbnailToolButton>(this, 0, &QQuickThumbnailToolBar::buttonCount, &QQuickThumbnailToolBar::buttonAt);
+ return QQmlListProperty<QQuickThumbnailToolButton>(this, nullptr, &QQuickThumbnailToolBar::buttonCount, &QQuickThumbnailToolBar::buttonAt);
}
void QQuickThumbnailToolBar::addButton(QQuickThumbnailToolButton *button)
@@ -226,8 +224,8 @@ void QQuickThumbnailToolBar::itemChange(QQuickItem::ItemChange change, const QQu
void QQuickThumbnailToolBar::addData(QQmlListProperty<QObject> *property, QObject *object)
{
- if (QQuickThumbnailToolButton *button = qobject_cast<QQuickThumbnailToolButton *>(object)) {
- QQuickThumbnailToolBar *quickThumbbar = static_cast<QQuickThumbnailToolBar *>(property->object);
+ if (auto *button = qobject_cast<QQuickThumbnailToolButton *>(object)) {
+ auto *quickThumbbar = static_cast<QQuickThumbnailToolBar *>(property->object);
quickThumbbar->m_toolbar.addButton(button->m_button);
quickThumbbar->m_buttons.append(button);
emit quickThumbbar->countChanged();
diff --git a/src/imports/winextras/qquickthumbnailtoolbar_p.h b/src/imports/winextras/qquickthumbnailtoolbar_p.h
index 2b01849..12a9d27 100644
--- a/src/imports/winextras/qquickthumbnailtoolbar_p.h
+++ b/src/imports/winextras/qquickthumbnailtoolbar_p.h
@@ -74,7 +74,7 @@ class QQuickThumbnailToolBar : public QQuickItem
Q_CLASSINFO("DefaultProperty", "data")
public:
- explicit QQuickThumbnailToolBar(QQuickItem *parent = 0);
+ explicit QQuickThumbnailToolBar(QQuickItem *parent = nullptr);
~QQuickThumbnailToolBar();
int count() const;
@@ -109,7 +109,7 @@ private Q_SLOTS:
void iconicLivePreviewLoaded(const QVariant &);
protected:
- void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data);
+ void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) override;
private:
static void addData(QQmlListProperty<QObject> *property, QObject *button);
diff --git a/src/imports/winextras/qquickthumbnailtoolbutton.cpp b/src/imports/winextras/qquickthumbnailtoolbutton.cpp
index 268b303..e4a1f81 100644
--- a/src/imports/winextras/qquickthumbnailtoolbutton.cpp
+++ b/src/imports/winextras/qquickthumbnailtoolbutton.cpp
@@ -67,9 +67,7 @@ QQuickThumbnailToolButton::QQuickThumbnailToolButton(QObject *parent) :
connect(m_button, &QWinThumbnailToolButton::clicked, this, &QQuickThumbnailToolButton::clicked);
}
-QQuickThumbnailToolButton::~QQuickThumbnailToolButton()
-{
-}
+QQuickThumbnailToolButton::~QQuickThumbnailToolButton() = default;
/*!
\qmlproperty url ThumbnailToolButton::iconSource
diff --git a/src/imports/winextras/qquickthumbnailtoolbutton_p.h b/src/imports/winextras/qquickthumbnailtoolbutton_p.h
index 4fff55a..aca0e74 100644
--- a/src/imports/winextras/qquickthumbnailtoolbutton_p.h
+++ b/src/imports/winextras/qquickthumbnailtoolbutton_p.h
@@ -70,7 +70,7 @@ class QQuickThumbnailToolButton : public QObject
Q_PROPERTY(bool flat READ isFlat WRITE setFlat NOTIFY flatChanged)
public:
- explicit QQuickThumbnailToolButton(QObject *parent = 0);
+ explicit QQuickThumbnailToolButton(QObject *parent = nullptr);
~QQuickThumbnailToolButton();
void setIconSource(const QUrl &iconSource);
diff --git a/src/imports/winextras/winextras.pro b/src/imports/winextras/winextras.pro
index 35427ba..dc778e6 100644
--- a/src/imports/winextras/winextras.pro
+++ b/src/imports/winextras/winextras.pro
@@ -5,8 +5,6 @@ IMPORT_VERSION = 1.$$QT_MINOR_VERSION
QT += qml quick winextras winextras-private
-DEFINES += QT_NO_FOREACH
-
QML_FILES += \
JumpListLink.qml \
JumpListDestination.qml \
diff --git a/src/winextras/qwineventfilter.cpp b/src/winextras/qwineventfilter.cpp
index be9add4..4b88f54 100644
--- a/src/winextras/qwineventfilter.cpp
+++ b/src/winextras/qwineventfilter.cpp
@@ -51,7 +51,7 @@
# define WM_DWMCOMPOSITIONCHANGED 0x031E
#endif
-QWinEventFilter *QWinEventFilter::instance = 0;
+QWinEventFilter *QWinEventFilter::instance = nullptr;
QWinEventFilter::QWinEventFilter() :
tbButtonCreatedMsgId(RegisterWindowMessageW(L"TaskbarButtonCreated"))
@@ -60,16 +60,20 @@ QWinEventFilter::QWinEventFilter() :
QWinEventFilter::~QWinEventFilter()
{
- instance = 0;
+ instance = nullptr;
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+bool QWinEventFilter::nativeEventFilter(const QByteArray &, void *message, qintptr *result)
+#else
bool QWinEventFilter::nativeEventFilter(const QByteArray &, void *message, long *result)
+#endif
{
MSG *msg = static_cast<MSG *>(message);
bool filterOut = false;
- QEvent *event = 0;
- QWindow *window = 0;
+ QEvent *event = nullptr;
+ QWindow *window = nullptr;
switch (msg->message) {
case WM_DWMCOLORIZATIONCOLORCHANGED :
event = new QWinColorizationChangeEvent(QRgb(msg->wParam), msg->lParam);
diff --git a/src/winextras/qwineventfilter_p.h b/src/winextras/qwineventfilter_p.h
index 12b9d58..ad37177 100644
--- a/src/winextras/qwineventfilter_p.h
+++ b/src/winextras/qwineventfilter_p.h
@@ -64,7 +64,11 @@ class Q_WINEXTRAS_EXPORT QWinEventFilter : public QAbstractNativeEventFilter
public:
QWinEventFilter();
~QWinEventFilter();
- virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override;
+#else
+ bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override;
+#endif
static void setup();
diff --git a/src/winextras/qwinfunctions.cpp b/src/winextras/qwinfunctions.cpp
index 82fd25b..b237a50 100644
--- a/src/winextras/qwinfunctions.cpp
+++ b/src/winextras/qwinfunctions.cpp
@@ -209,9 +209,9 @@ HRGN QtWin::toHRGN(const QRegion &region)
{
const int size = region.rectCount();
if (size == 0)
- return 0;
+ return nullptr;
- HRGN resultRgn = 0;
+ HRGN resultRgn = nullptr;
const auto rects = region.begin();
resultRgn = qt_RectToHRGN(rects[0]);
for (int i = 1; i < size; i++) {
@@ -231,17 +231,17 @@ HRGN QtWin::toHRGN(const QRegion &region)
*/
QRegion QtWin::fromHRGN(HRGN hrgn)
{
- DWORD regionDataSize = GetRegionData(hrgn, 0, NULL);
+ DWORD regionDataSize = GetRegionData(hrgn, 0, nullptr);
if (regionDataSize == 0)
return QRegion();
- LPRGNDATA regionData = reinterpret_cast<LPRGNDATA>(malloc(regionDataSize));
+ auto regionData = reinterpret_cast<LPRGNDATA>(malloc(regionDataSize));
if (!regionData)
return QRegion();
QRegion region;
if (GetRegionData(hrgn, regionDataSize, regionData) == regionDataSize) {
- LPRECT pRect = reinterpret_cast<LPRECT>(regionData->Buffer);
+ auto pRect = reinterpret_cast<LPRECT>(regionData->Buffer);
for (DWORD i = 0; i < regionData->rdh.nCount; ++i)
region += QRect(pRect[i].left, pRect[i].top,
pRect[i].right - pRect[i].left,
@@ -1623,7 +1623,7 @@ QtWin::WindowFlip3DPolicy QtWin::windowFlip3DPolicy(QWindow *window)
{
Q_ASSERT_X(window, Q_FUNC_INFO, "window is null");
- const DWORD value =
+ const auto value =
QtDwmApiDll::windowAttribute<DWORD>(reinterpret_cast<HWND>(window->winId()),
DWMWA_FLIP3D_POLICY, DWORD(DWMFLIP3D_DEFAULT));
QtWin::WindowFlip3DPolicy policy = QtWin::FlipDefault;
@@ -1738,10 +1738,10 @@ void QtWin::enableBlurBehindWindow(QWindow *window, const QRegion &region)
{
Q_ASSERT_X(window, Q_FUNC_INFO, "window is null");
- DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
+ DWM_BLURBEHIND dwmbb = {0, 0, nullptr, 0};
dwmbb.dwFlags = DWM_BB_ENABLE;
dwmbb.fEnable = TRUE;
- HRGN rgn = 0;
+ HRGN rgn = nullptr;
if (!region.isNull()) {
rgn = toHRGN(region);
if (rgn) {
@@ -1788,7 +1788,7 @@ void QtWin::enableBlurBehindWindow(QWindow *window)
void QtWin::disableBlurBehindWindow(QWindow *window)
{
Q_ASSERT_X(window, Q_FUNC_INFO, "window is null");
- DWM_BLURBEHIND dwmbb = {0, 0, 0, 0};
+ DWM_BLURBEHIND dwmbb = {0, 0, nullptr, 0};
dwmbb.dwFlags = DWM_BB_ENABLE;
DwmEnableBlurBehindWindow(reinterpret_cast<HWND>(window->winId()), &dwmbb);
}
@@ -1859,12 +1859,12 @@ void QtWin::setCurrentProcessExplicitAppUserModelID(const QString &id)
*/
ITaskbarList3 *qt_createITaskbarList3()
{
- ITaskbarList3 *pTbList = 0;
- HRESULT result = CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, qIID_ITaskbarList3, reinterpret_cast<void **>(&pTbList));
+ ITaskbarList3 *pTbList = nullptr;
+ HRESULT result = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, qIID_ITaskbarList3, reinterpret_cast<void **>(&pTbList));
if (SUCCEEDED(result)) {
if (FAILED(pTbList->HrInit())) {
pTbList->Release();
- pTbList = 0;
+ pTbList = nullptr;
}
}
return pTbList;
@@ -1875,12 +1875,12 @@ ITaskbarList3 *qt_createITaskbarList3()
*/
ITaskbarList2 *qt_createITaskbarList2()
{
- ITaskbarList3 *pTbList = 0;
- HRESULT result = CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, qIID_ITaskbarList2, reinterpret_cast<void **>(&pTbList));
+ ITaskbarList3 *pTbList = nullptr;
+ HRESULT result = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, qIID_ITaskbarList2, reinterpret_cast<void **>(&pTbList));
if (SUCCEEDED(result)) {
if (FAILED(pTbList->HrInit())) {
pTbList->Release();
- pTbList = 0;
+ pTbList = nullptr;
}
}
return pTbList;
diff --git a/src/winextras/qwinfunctions.h b/src/winextras/qwinfunctions.h
index fe461d1..ef2aece 100644
--- a/src/winextras/qwinfunctions.h
+++ b/src/winextras/qwinfunctions.h
@@ -131,10 +131,8 @@ namespace QtWin
inline bool isWindowExcludedFromPeek(QWidget *window)
{
- if (!window->windowHandle())
- return false;
- else
- return isWindowExcludedFromPeek(window->windowHandle());
+ auto handle = window->windowHandle();
+ return handle && isWindowExcludedFromPeek(handle);
}
inline void setWindowDisallowPeek(QWidget *window, bool disallow)
@@ -145,10 +143,8 @@ namespace QtWin
inline bool isWindowPeekDisallowed(QWidget *window)
{
- if (!window->windowHandle())
- return false;
- else
- return isWindowPeekDisallowed(window->windowHandle());
+ auto handle = window->windowHandle();
+ return handle && isWindowPeekDisallowed(handle);
}
inline void setWindowFlip3DPolicy(QWidget *window, WindowFlip3DPolicy policy)
diff --git a/src/winextras/qwinfunctions_p.h b/src/winextras/qwinfunctions_p.h
index 03dff5e..0ee73cb 100644
--- a/src/winextras/qwinfunctions_p.h
+++ b/src/winextras/qwinfunctions_p.h
@@ -83,7 +83,7 @@ inline void qt_qstringToNullTerminated(const QString &src, wchar_t *dst)
inline wchar_t *qt_qstringToNullTerminated(const QString &src)
{
- wchar_t *buffer = new wchar_t[src.length() + 1];
+ auto *buffer = new wchar_t[src.length() + 1];
qt_qstringToNullTerminated(src, buffer);
return buffer;
}
diff --git a/src/winextras/qwinjumplist.cpp b/src/winextras/qwinjumplist.cpp
index ca1b20a..55c99f4 100644
--- a/src/winextras/qwinjumplist.cpp
+++ b/src/winextras/qwinjumplist.cpp
@@ -159,11 +159,11 @@ void QWinJumpListPrivate::_q_rebuild()
void QWinJumpListPrivate::destroy()
{
delete recent;
- recent = 0;
+ recent = nullptr;
delete frequent;
- frequent = 0;
+ frequent = nullptr;
delete tasks;
- tasks = 0;
+ tasks = nullptr;
qDeleteAll(categories);
categories.clear();
invalidate();
@@ -179,7 +179,7 @@ bool QWinJumpListPrivate::beginList()
}
if (SUCCEEDED(hresult)) {
UINT maxSlots = 0;
- IUnknown *array = 0;
+ IUnknown *array = nullptr;
hresult = pDestList->BeginList(&maxSlots, qIID_IUnknown, reinterpret_cast<void **>(&array));
if (array)
array->Release();
@@ -234,15 +234,15 @@ QList<QWinJumpListItem *> QWinJumpListPrivate::fromComCollection(IObjectArray *a
UINT count = 0;
array->GetCount(&count);
for (UINT i = 0; i < count; ++i) {
- IUnknown *collectionItem = 0;
+ IUnknown *collectionItem = nullptr;
HRESULT hresult = array->GetAt(i, qIID_IUnknown, reinterpret_cast<void **>(&collectionItem));
if (FAILED(hresult)) {
QWinJumpListPrivate::warning("GetAt", hresult);
continue;
}
- IShellItem2 *shellItem = 0;
- IShellLinkW *shellLink = 0;
- QWinJumpListItem *jumplistItem = 0;
+ IShellItem2 *shellItem = nullptr;
+ IShellLinkW *shellLink = nullptr;
+ QWinJumpListItem *jumplistItem = nullptr;
if (SUCCEEDED(collectionItem->QueryInterface(qIID_IShellItem2, reinterpret_cast<void **>(&shellItem)))) {
jumplistItem = fromIShellItem(shellItem);
shellItem->Release();
@@ -262,12 +262,12 @@ QList<QWinJumpListItem *> QWinJumpListPrivate::fromComCollection(IObjectArray *a
IObjectCollection *QWinJumpListPrivate::toComCollection(const QList<QWinJumpListItem *> &list)
{
if (list.isEmpty())
- return 0;
- IObjectCollection *collection = 0;
- HRESULT hresult = CoCreateInstance(qCLSID_EnumerableObjectCollection, 0, CLSCTX_INPROC_SERVER, qIID_IObjectCollection, reinterpret_cast<void **>(&collection));
+ return nullptr;
+ IObjectCollection *collection = nullptr;
+ HRESULT hresult = CoCreateInstance(qCLSID_EnumerableObjectCollection, nullptr, CLSCTX_INPROC_SERVER, qIID_IObjectCollection, reinterpret_cast<void **>(&collection));
if (FAILED(hresult)) {
QWinJumpListPrivate::warning("QWinJumpList: failed to instantiate IObjectCollection", hresult);
- return 0;
+ return nullptr;
}
for (QWinJumpListItem *item : list) {
IUnknown *iitem = toICustomDestinationListItem(item);
@@ -281,7 +281,7 @@ IObjectCollection *QWinJumpListPrivate::toComCollection(const QList<QWinJumpList
QWinJumpListItem *QWinJumpListPrivate::fromIShellLink(IShellLinkW *link)
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Link);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Link);
IPropertyStore *linkProps;
link->QueryInterface(qIID_IPropertyStore, reinterpret_cast<void **>(&linkProps));
@@ -309,7 +309,7 @@ QWinJumpListItem *QWinJumpListPrivate::fromIShellLink(IShellLinkW *link)
QWinJumpListItem *QWinJumpListPrivate::fromIShellItem(IShellItem2 *shellitem)
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Destination);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Destination);
wchar_t *strPtr;
shellitem->GetDisplayName(SIGDN_FILESYSPATH, &strPtr);
item->setFilePath(QDir::fromNativeSeparators(QString::fromWCharArray(strPtr)));
@@ -327,17 +327,17 @@ IUnknown *QWinJumpListPrivate::toICustomDestinationListItem(const QWinJumpListIt
case QWinJumpListItem::Separator :
return makeSeparatorShellItem();
default:
- return 0;
+ return nullptr;
}
}
IShellLinkW *QWinJumpListPrivate::toIShellLink(const QWinJumpListItem *item)
{
- IShellLinkW *link = 0;
- HRESULT hresult = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, qIID_IShellLinkW, reinterpret_cast<void **>(&link));
+ IShellLinkW *link = nullptr;
+ HRESULT hresult = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, qIID_IShellLinkW, reinterpret_cast<void **>(&link));
if (FAILED(hresult)) {
QWinJumpListPrivate::warning("QWinJumpList: failed to instantiate IShellLinkW", hresult);
- return 0;
+ return nullptr;
}
const QString args = createArguments(item->arguments());
@@ -348,7 +348,7 @@ IShellLinkW *QWinJumpListPrivate::toIShellLink(const QWinJumpListItem *item)
qMax(item->description().size(),
qMax(item->title().size(),
qMax(item->filePath().size(), iconPathSize))))) + 1;
- wchar_t *buffer = new wchar_t[bufferSize];
+ auto *buffer = new wchar_t[bufferSize];
if (!item->description().isEmpty()) {
qt_qstringToNullTerminated(item->description(), buffer);
@@ -380,7 +380,7 @@ IShellLinkW *QWinJumpListPrivate::toIShellLink(const QWinJumpListItem *item)
hresult = link->QueryInterface(qIID_IPropertyStore, reinterpret_cast<void **>(&properties));
if (FAILED(hresult)) {
link->Release();
- return 0;
+ return nullptr;
}
qt_qstringToNullTerminated(item->title(), buffer);
@@ -396,24 +396,24 @@ IShellLinkW *QWinJumpListPrivate::toIShellLink(const QWinJumpListItem *item)
IShellItem2 *QWinJumpListPrivate::toIShellItem(const QWinJumpListItem *item)
{
- IShellItem2 *shellitem = 0;
+ IShellItem2 *shellitem = nullptr;
QScopedArrayPointer<wchar_t> buffer(qt_qstringToNullTerminated(item->filePath()));
- SHCreateItemFromParsingName(buffer.data(), 0, qIID_IShellItem2, reinterpret_cast<void **>(&shellitem));
+ SHCreateItemFromParsingName(buffer.data(), nullptr, qIID_IShellItem2, reinterpret_cast<void **>(&shellitem));
return shellitem;
}
IShellLinkW *QWinJumpListPrivate::makeSeparatorShellItem()
{
IShellLinkW *separator;
- HRESULT res = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, qIID_IShellLinkW, reinterpret_cast<void **>(&separator));
+ HRESULT res = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, qIID_IShellLinkW, reinterpret_cast<void **>(&separator));
if (FAILED(res))
- return 0;
+ return nullptr;
IPropertyStore *properties;
res = separator->QueryInterface(qIID_IPropertyStore, reinterpret_cast<void **>(&properties));
if (FAILED(res)) {
separator->Release();
- return 0;
+ return nullptr;
}
PROPVARIANT isSeparator;
@@ -434,7 +434,7 @@ QWinJumpList::QWinJumpList(QObject *parent) :
{
Q_D(QWinJumpList);
d->q_ptr = this;
- HRESULT hresult = CoCreateInstance(qCLSID_DestinationList, 0, CLSCTX_INPROC_SERVER, qIID_ICustomDestinationList, reinterpret_cast<void **>(&d_ptr->pDestList));
+ HRESULT hresult = CoCreateInstance(qCLSID_DestinationList, nullptr, CLSCTX_INPROC_SERVER, qIID_ICustomDestinationList, reinterpret_cast<void **>(&d_ptr->pDestList));
if (FAILED(hresult))
QWinJumpListPrivate::warning("CoCreateInstance", hresult);
d->invalidate();
@@ -450,7 +450,7 @@ QWinJumpList::~QWinJumpList()
d->_q_rebuild();
if (d->pDestList) {
d->pDestList->Release();
- d->pDestList = 0;
+ d->pDestList = nullptr;
}
d->destroy();
}
@@ -496,7 +496,7 @@ QWinJumpListCategory *QWinJumpList::recent() const
{
Q_D(const QWinJumpList);
if (!d->recent) {
- QWinJumpList *that = const_cast<QWinJumpList *>(this);
+ auto *that = const_cast<QWinJumpList *>(this);
that->d_func()->recent = QWinJumpListCategoryPrivate::create(QWinJumpListCategory::Recent, that);
}
return d->recent;
@@ -509,7 +509,7 @@ QWinJumpListCategory *QWinJumpList::frequent() const
{
Q_D(const QWinJumpList);
if (!d->frequent) {
- QWinJumpList *that = const_cast<QWinJumpList *>(this);
+ auto *that = const_cast<QWinJumpList *>(this);
that->d_func()->frequent = QWinJumpListCategoryPrivate::create(QWinJumpListCategory::Frequent, that);
}
return d->frequent;
@@ -522,7 +522,7 @@ QWinJumpListCategory *QWinJumpList::tasks() const
{
Q_D(const QWinJumpList);
if (!d->tasks) {
- QWinJumpList *that = const_cast<QWinJumpList *>(this);
+ auto *that = const_cast<QWinJumpList *>(this);
that->d_func()->tasks = QWinJumpListCategoryPrivate::create(QWinJumpListCategory::Tasks, that);
}
return d->tasks;
@@ -558,7 +558,7 @@ void QWinJumpList::addCategory(QWinJumpListCategory *category)
*/
QWinJumpListCategory *QWinJumpList::addCategory(const QString &title, const QList<QWinJumpListItem *> items)
{
- QWinJumpListCategory *category = new QWinJumpListCategory(title);
+ auto *category = new QWinJumpListCategory(title);
for (QWinJumpListItem *item : items)
category->addItem(item);
addCategory(category);
diff --git a/src/winextras/qwinjumplistcategory.cpp b/src/winextras/qwinjumplistcategory.cpp
index 721a78c..a29c37e 100644
--- a/src/winextras/qwinjumplistcategory.cpp
+++ b/src/winextras/qwinjumplistcategory.cpp
@@ -104,8 +104,8 @@ void QWinJumpListCategoryPrivate::invalidate()
void QWinJumpListCategoryPrivate::loadRecents()
{
Q_ASSERT(jumpList);
- IApplicationDocumentLists *pDocList = 0;
- HRESULT hresult = CoCreateInstance(qCLSID_ApplicationDocumentLists, 0, CLSCTX_INPROC_SERVER, qIID_IApplicationDocumentLists, reinterpret_cast<void **>(&pDocList));
+ IApplicationDocumentLists *pDocList = nullptr;
+ HRESULT hresult = CoCreateInstance(qCLSID_ApplicationDocumentLists, nullptr, CLSCTX_INPROC_SERVER, qIID_IApplicationDocumentLists, reinterpret_cast<void **>(&pDocList));
if (SUCCEEDED(hresult)) {
if (!jumpList->identifier().isEmpty()) {
wchar_t *id = qt_qstringToNullTerminated(jumpList->identifier());
@@ -113,7 +113,7 @@ void QWinJumpListCategoryPrivate::loadRecents()
delete[] id;
}
if (SUCCEEDED(hresult)) {
- IObjectArray *array = 0;
+ IObjectArray *array = nullptr;
hresult = pDocList->GetList(type == QWinJumpListCategory::Recent ? ADLT_RECENT : ADLT_FREQUENT,
0, qIID_IObjectArray, reinterpret_cast<void **>(&array));
if (SUCCEEDED(hresult)) {
@@ -130,7 +130,7 @@ void QWinJumpListCategoryPrivate::loadRecents()
void QWinJumpListCategoryPrivate::addRecent(QWinJumpListItem *item)
{
Q_ASSERT(item->type() == QWinJumpListItem::Link);
- wchar_t *id = 0;
+ wchar_t *id = nullptr;
if (jumpList && !jumpList->identifier().isEmpty())
id = qt_qstringToNullTerminated(jumpList->identifier());
@@ -146,8 +146,8 @@ void QWinJumpListCategoryPrivate::addRecent(QWinJumpListItem *item)
void QWinJumpListCategoryPrivate::clearRecents()
{
- IApplicationDestinations *pDest = 0;
- HRESULT hresult = CoCreateInstance(qCLSID_ApplicationDestinations, 0, CLSCTX_INPROC_SERVER, qIID_IApplicationDestinations, reinterpret_cast<void **>(&pDest));
+ IApplicationDestinations *pDest = nullptr;
+ HRESULT hresult = CoCreateInstance(qCLSID_ApplicationDestinations, nullptr, CLSCTX_INPROC_SERVER, qIID_IApplicationDestinations, reinterpret_cast<void **>(&pDest));
if (SUCCEEDED(hresult)) {
const QString identifier = jumpList ? jumpList->identifier() : QString();
if (!identifier.isEmpty()) {
@@ -294,7 +294,7 @@ void QWinJumpListCategory::addItem(QWinJumpListItem *item)
*/
QWinJumpListItem *QWinJumpListCategory::addDestination(const QString &filePath)
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Destination);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Destination);
item->setFilePath(filePath);
addItem(item);
return item;
@@ -317,7 +317,7 @@ QWinJumpListItem *QWinJumpListCategory::addLink(const QString &title, const QStr
*/
QWinJumpListItem *QWinJumpListCategory::addLink(const QIcon &icon, const QString &title, const QString &executablePath, const QStringList &arguments)
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Link);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Link);
item->setFilePath(executablePath);
item->setTitle(title);
item->setArguments(arguments);
@@ -333,7 +333,7 @@ QWinJumpListItem *QWinJumpListCategory::addLink(const QIcon &icon, const QString
*/
QWinJumpListItem *QWinJumpListCategory::addSeparator()
{
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Separator);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Separator);
addItem(item);
return item;
}
diff --git a/src/winextras/qwinjumplistitem.cpp b/src/winextras/qwinjumplistitem.cpp
index 6c183ec..ee117bc 100644
--- a/src/winextras/qwinjumplistitem.cpp
+++ b/src/winextras/qwinjumplistitem.cpp
@@ -80,7 +80,7 @@ QWinJumpListItem::QWinJumpListItem(QWinJumpListItem::Type type) :
d_ptr(new QWinJumpListItemPrivate)
{
d_ptr->type = type;
- d_ptr->category = 0;
+ d_ptr->category = nullptr;
}
/*!
diff --git a/src/winextras/qwintaskbarbutton.cpp b/src/winextras/qwintaskbarbutton.cpp
index a1475d3..9df4c30 100644
--- a/src/winextras/qwintaskbarbutton.cpp
+++ b/src/winextras/qwintaskbarbutton.cpp
@@ -100,16 +100,16 @@ static TBPFLAG nativeProgressState(QWinTaskbarProgress *progress)
return TBPF_NORMAL;
}
-QWinTaskbarButtonPrivate::QWinTaskbarButtonPrivate() : progressBar(0), pTbList(0), window(0)
+QWinTaskbarButtonPrivate::QWinTaskbarButtonPrivate()
{
- HRESULT hresult = CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, qIID_ITaskbarList4, reinterpret_cast<void **>(&pTbList));
+ HRESULT hresult = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, qIID_ITaskbarList4, reinterpret_cast<void **>(&pTbList));
if (FAILED(hresult)) {
- pTbList = 0;
+ pTbList = nullptr;
const QString err = QtWin::errorStringFromHresult(hresult);
qWarning("QWinTaskbarButton: qIID_ITaskbarList4 was not created: %#010x, %s.", unsigned(hresult), qPrintable(err));
} else if (FAILED(pTbList->HrInit())) {
pTbList->Release();
- pTbList = 0;
+ pTbList = nullptr;
const QString err = QtWin::errorStringFromHresult(hresult);
qWarning("QWinTaskbarButton: qIID_ITaskbarList4 was not initialized: %#010x, %s.", unsigned(hresult), qPrintable(err));
}
@@ -136,8 +136,8 @@ void QWinTaskbarButtonPrivate::updateOverlayIcon()
if (!pTbList || !window)
return;
- wchar_t *descrPtr = 0;
- HICON hicon = 0;
+ wchar_t *descrPtr = nullptr;
+ HICON hicon = nullptr;
if (!overlayAccessibleDescription.isEmpty())
descrPtr = qt_qstringToNullTerminated(overlayAccessibleDescription);
if (!overlayIcon.isNull())
@@ -146,9 +146,9 @@ void QWinTaskbarButtonPrivate::updateOverlayIcon()
if (hicon)
pTbList->SetOverlayIcon(handle(), hicon, descrPtr);
else if (!hicon && !overlayIcon.isNull())
- pTbList->SetOverlayIcon(handle(), static_cast<HICON>(LoadImage(0, IDI_APPLICATION, IMAGE_ICON, SM_CXSMICON, SM_CYSMICON, LR_SHARED)), descrPtr);
+ pTbList->SetOverlayIcon(handle(), static_cast<HICON>(LoadImage(nullptr, IDI_APPLICATION, IMAGE_ICON, SM_CXSMICON, SM_CYSMICON, LR_SHARED)), descrPtr);
else
- pTbList->SetOverlayIcon(handle(), NULL, descrPtr);
+ pTbList->SetOverlayIcon(handle(), nullptr, descrPtr);
if (hicon)
DestroyIcon(hicon);
@@ -269,8 +269,8 @@ QWinTaskbarProgress *QWinTaskbarButton::progress() const
{
Q_D(const QWinTaskbarButton);
if (!d->progressBar) {
- QWinTaskbarButton *that = const_cast<QWinTaskbarButton *>(this);
- QWinTaskbarProgress *pbar = new QWinTaskbarProgress(that);
+ auto *that = const_cast<QWinTaskbarButton *>(this);
+ auto *pbar = new QWinTaskbarProgress(that);
connect(pbar, SIGNAL(destroyed()), this, SLOT(_q_updateProgress()));
connect(pbar, SIGNAL(valueChanged(int)), this, SLOT(_q_updateProgress()));
connect(pbar, SIGNAL(minimumChanged(int)), this, SLOT(_q_updateProgress()));
diff --git a/src/winextras/qwintaskbarbutton.h b/src/winextras/qwintaskbarbutton.h
index dc4d469..627beee 100644
--- a/src/winextras/qwintaskbarbutton.h
+++ b/src/winextras/qwintaskbarbutton.h
@@ -70,7 +70,7 @@ public:
QWinTaskbarProgress *progress() const;
- bool eventFilter(QObject *, QEvent *);
+ bool eventFilter(QObject *, QEvent *) override;
public Q_SLOTS:
void setOverlayIcon(const QIcon &icon);
diff --git a/src/winextras/qwintaskbarbutton_p.h b/src/winextras/qwintaskbarbutton_p.h
index ceafe47..e5445b2 100644
--- a/src/winextras/qwintaskbarbutton_p.h
+++ b/src/winextras/qwintaskbarbutton_p.h
@@ -80,8 +80,8 @@ public:
void _q_updateProgress();
- ITaskbarList4 *pTbList;
- QWindow *window;
+ ITaskbarList4 *pTbList = nullptr;
+ QWindow *window = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/winextras/qwinthumbnailtoolbar.cpp b/src/winextras/qwinthumbnailtoolbar.cpp
index 3aa39b6..fc8d76e 100644
--- a/src/winextras/qwinthumbnailtoolbar.cpp
+++ b/src/winextras/qwinthumbnailtoolbar.cpp
@@ -185,7 +185,7 @@ void QWinThumbnailToolBar::removeButton(QWinThumbnailToolButton *button)
{
Q_D(QWinThumbnailToolBar);
if (button && d->buttonList.contains(button)) {
- button->d_func()->toolbar = 0;
+ button->d_func()->toolbar = nullptr;
disconnect(button, &QWinThumbnailToolButton::changed,
d, &QWinThumbnailToolBarPrivate::_q_scheduleUpdate);
@@ -259,7 +259,7 @@ void QWinThumbnailToolBarPrivate::IconicPixmapCache::deleteBitmap()
if (m_bitmap) {
DeleteObject(m_bitmap);
m_size = QSize();
- m_bitmap = 0;
+ m_bitmap = nullptr;
}
}
@@ -275,7 +275,7 @@ bool QWinThumbnailToolBarPrivate::IconicPixmapCache::setPixmap(const QPixmap &pi
HBITMAP QWinThumbnailToolBarPrivate::IconicPixmapCache::bitmap(const QSize &maxSize)
{
if (m_pixmap.isNull())
- return 0;
+ return nullptr;
if (m_bitmap && m_size.width() <= maxSize.width() && m_size.height() <= maxSize.height())
return m_bitmap;
deleteBitmap();
@@ -421,13 +421,13 @@ void QWinThumbnailToolBar::clear()
static inline ITaskbarList4 *createTaskbarList()
{
- ITaskbarList4 *result = 0;
- HRESULT hresult = CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, qIID_ITaskbarList4, reinterpret_cast<void **>(&result));
+ ITaskbarList4 *result = nullptr;
+ HRESULT hresult = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, qIID_ITaskbarList4, reinterpret_cast<void **>(&result));
if (FAILED(hresult)) {
const QString err = QtWin::errorStringFromHresult(hresult);
qWarning("QWinThumbnailToolBar: qIID_ITaskbarList4 was not created: %#010x, %s.",
unsigned(hresult), qPrintable(err));
- return 0;
+ return nullptr;
}
hresult = result->HrInit();
if (FAILED(hresult)) {
@@ -435,14 +435,13 @@ static inline ITaskbarList4 *createTaskbarList()
const QString err = QtWin::errorStringFromHresult(hresult);
qWarning("QWinThumbnailToolBar: qIID_ITaskbarList4 was not initialized: %#010x, %s.",
unsigned(hresult), qPrintable(err));
- return 0;
+ return nullptr;
}
return result;
}
QWinThumbnailToolBarPrivate::QWinThumbnailToolBarPrivate() :
- QObject(0), updateScheduled(false), window(0), pTbList(createTaskbarList()), q_ptr(0),
- withinIconicThumbnailRequest(false), withinIconicLivePreviewRequest(false)
+ QObject(nullptr), pTbList(createTaskbarList())
{
buttonList.reserve(windowsLimitedThumbbarSize);
QCoreApplication::instance()->installNativeEventFilter(this);
@@ -462,7 +461,7 @@ inline bool QWinThumbnailToolBarPrivate::hasHandle() const
inline HWND QWinThumbnailToolBarPrivate::handle() const
{
- return hasHandle() ? reinterpret_cast<HWND>(window->winId()) : HWND(0);
+ return hasHandle() ? reinterpret_cast<HWND>(window->winId()) : nullptr;
}
void QWinThumbnailToolBarPrivate::initToolbar()
@@ -504,7 +503,7 @@ void QWinThumbnailToolBarPrivate::_q_updateToolbar()
if (!button->icon().isNull()) {;
buttons[i].hIcon = QtWin::toHICON(button->icon().pixmap(GetSystemMetrics(SM_CXSMICON)));
if (!buttons[i].hIcon)
- buttons[i].hIcon = static_cast<HICON>(LoadImage(0, IDI_APPLICATION, IMAGE_ICON, SM_CXSMICON, SM_CYSMICON, LR_SHARED));
+ buttons[i].hIcon = static_cast<HICON>(LoadImage(nullptr, IDI_APPLICATION, IMAGE_ICON, SM_CXSMICON, SM_CYSMICON, LR_SHARED));
else
createdIcons << buttons[i].hIcon;
}
@@ -543,7 +542,11 @@ bool QWinThumbnailToolBarPrivate::eventFilter(QObject *object, QEvent *event)
return QObject::eventFilter(object, event);
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+bool QWinThumbnailToolBarPrivate::nativeEventFilter(const QByteArray &, void *message, qintptr *result)
+#else
bool QWinThumbnailToolBarPrivate::nativeEventFilter(const QByteArray &, void *message, long *result)
+#endif
{
const MSG *msg = static_cast<const MSG *>(message);
if (handle() != msg->hwnd)
diff --git a/src/winextras/qwinthumbnailtoolbar_p.h b/src/winextras/qwinthumbnailtoolbar_p.h
index 38d210b..c3180f3 100644
--- a/src/winextras/qwinthumbnailtoolbar_p.h
+++ b/src/winextras/qwinthumbnailtoolbar_p.h
@@ -69,7 +69,7 @@ public:
class IconicPixmapCache
{
public:
- IconicPixmapCache() : m_bitmap(0) {}
+ IconicPixmapCache() = default;
~IconicPixmapCache() { deleteBitmap(); }
operator bool() const { return !m_pixmap.isNull(); }
@@ -84,7 +84,7 @@ public:
QPixmap m_pixmap;
QSize m_size;
- HBITMAP m_bitmap;
+ HBITMAP m_bitmap = nullptr;
};
QWinThumbnailToolBarPrivate();
@@ -95,16 +95,20 @@ public:
void _q_scheduleUpdate();
bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
- virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override;
+#else
+ bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override;
+#endif
static void initButtons(THUMBBUTTON *buttons);
static int makeNativeButtonFlags(const QWinThumbnailToolButton *button);
static int makeButtonMask(const QWinThumbnailToolButton *button);
static QString msgComFailed(const char *function, HRESULT hresult);
- bool updateScheduled;
+ bool updateScheduled = false;
QList<QWinThumbnailToolButton *> buttonList;
- QWindow *window;
+ QWindow *window = nullptr;
ITaskbarList4 * const pTbList;
IconicPixmapCache iconicThumbnail;
@@ -117,10 +121,10 @@ private:
void updateIconicThumbnail(const MSG *message);
void updateIconicLivePreview(const MSG *message);
- QWinThumbnailToolBar *q_ptr;
+ QWinThumbnailToolBar *q_ptr = nullptr;
Q_DECLARE_PUBLIC(QWinThumbnailToolBar)
- bool withinIconicThumbnailRequest;
- bool withinIconicLivePreviewRequest;
+ bool withinIconicThumbnailRequest = false;
+ bool withinIconicLivePreviewRequest = false;
};
QT_END_NAMESPACE
diff --git a/src/winextras/winextras.pro b/src/winextras/winextras.pro
index 705c48c..8f582a5 100644
--- a/src/winextras/winextras.pro
+++ b/src/winextras/winextras.pro
@@ -2,8 +2,6 @@ TARGET = QtWinExtras
QT += gui-private core-private
-DEFINES += QT_NO_FOREACH
-
SOURCES += \
qwinfunctions.cpp \
qwintaskbarbutton.cpp \
diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp
index 8383194..2791cd2 100644
--- a/tests/auto/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/qpixmap/tst_qpixmap.cpp
@@ -87,7 +87,7 @@ void tst_QPixmap::toHBITMAP()
const HBITMAP bitmap = QtWin::toHBITMAP(pm);
- QVERIFY(bitmap != 0);
+ QVERIFY(bitmap != nullptr);
// Verify size
BITMAP bitmapInfo;
@@ -98,10 +98,10 @@ void tst_QPixmap::toHBITMAP()
QCOMPARE(LONG(100), bitmapInfo.bmWidth);
QCOMPARE(LONG(100), bitmapInfo.bmHeight);
- const HDC displayDc = GetDC(0);
+ const HDC displayDc = GetDC(nullptr);
const HDC bitmapDc = CreateCompatibleDC(displayDc);
- const HBITMAP nullBitmap = static_cast<HBITMAP>(SelectObject(bitmapDc, bitmap));
+ const auto nullBitmap = static_cast<HBITMAP>(SelectObject(bitmapDc, bitmap));
const COLORREF pixel = GetPixel(bitmapDc, 0, 0);
QCOMPARE(int(GetRValue(pixel)), red);
@@ -112,7 +112,7 @@ void tst_QPixmap::toHBITMAP()
SelectObject(bitmapDc, nullBitmap);
DeleteObject(bitmap);
DeleteDC(bitmapDc);
- ReleaseDC(0, displayDc);
+ ReleaseDC(nullptr, displayDc);
}
void tst_QPixmap::fromHBITMAP_data()
@@ -126,7 +126,7 @@ void tst_QPixmap::fromHBITMAP()
QFETCH(int, green);
QFETCH(int, blue);
- const HDC displayDc = GetDC(0);
+ const HDC displayDc = GetDC(nullptr);
const HDC bitmapDc = CreateCompatibleDC(displayDc);
const HBITMAP bitmap = CreateCompatibleBitmap(displayDc, 100, 100);
SelectObject(bitmapDc, bitmap);
@@ -148,7 +148,7 @@ void tst_QPixmap::fromHBITMAP()
DeleteObject(SelectObject(bitmapDc, oldBrush));
DeleteObject(SelectObject(bitmapDc, bitmap));
DeleteDC(bitmapDc);
- ReleaseDC(0, displayDc);
+ ReleaseDC(nullptr, displayDc);
}
static bool compareImages(const QImage &actual, const QImage &expected,
@@ -221,20 +221,20 @@ void tst_QPixmap::toHICON()
QPixmap empty(width, height);
empty.fill(Qt::transparent);
- const HDC displayDc = GetDC(0);
+ const HDC displayDc = GetDC(nullptr);
const HDC bitmapDc = CreateCompatibleDC(displayDc);
const HBITMAP bitmap = QtWin::toHBITMAP(empty, QtWin::HBitmapAlpha);
SelectObject(bitmapDc, bitmap);
const QString imageFileName = pngFileName(image, width, height);
- QVERIFY2(QFileInfo(imageFileName).exists(), qPrintable(imageFileName));
+ QVERIFY2(QFileInfo::exists(imageFileName), qPrintable(imageFileName));
const QImage imageFromFile = QImage(imageFileName).convertToFormat(QImage::Format_ARGB32_Premultiplied);
QVERIFY(!imageFromFile.isNull());
const HICON icon = QtWin::toHICON(QPixmap::fromImage(imageFromFile));
- DrawIconEx(bitmapDc, 0, 0, icon, width, height, 0, 0, DI_NORMAL);
+ DrawIconEx(bitmapDc, 0, 0, icon, width, height, 0, nullptr, DI_NORMAL);
DestroyIcon(icon);
DeleteDC(bitmapDc);
@@ -242,7 +242,7 @@ void tst_QPixmap::toHICON()
const QImage imageFromHICON = QtWin::fromHBITMAP(bitmap, QtWin::HBitmapAlpha).toImage();
QVERIFY(!imageFromHICON.isNull());
- ReleaseDC(0, displayDc);
+ ReleaseDC(nullptr, displayDc);
// fuzzy comparison must be used, as the pixel values change slightly during conversion
// between QImage::Format_ARGB32 and QImage::Format_ARGB32_Premultiplied, or elsewhere
@@ -262,16 +262,16 @@ void tst_QPixmap::fromHICON()
QFETCH(QString, image);
const QString iconFileName = image + QStringLiteral(".ico");
- QVERIFY2(QFileInfo(iconFileName).exists(), qPrintable(iconFileName));
+ QVERIFY2(QFileInfo::exists(iconFileName), qPrintable(iconFileName));
- const HICON icon =
- static_cast<HICON>(LoadImage(0, reinterpret_cast<const wchar_t *>(iconFileName.utf16()),
+ const auto icon =
+ static_cast<HICON>(LoadImage(nullptr, reinterpret_cast<const wchar_t *>(iconFileName.utf16()),
IMAGE_ICON, width, height, LR_LOADFROMFILE));
const QImage imageFromHICON = QtWin::fromHICON(icon).toImage();
DestroyIcon(icon);
const QString imageFileName = pngFileName(image, width, height);
- QVERIFY2(QFileInfo(imageFileName).exists(), qPrintable(imageFileName));
+ QVERIFY2(QFileInfo::exists(imageFileName), qPrintable(imageFileName));
const QImage imageFromFile = QImage(imageFileName).convertToFormat(QImage::Format_ARGB32_Premultiplied);
QVERIFY(!imageFromFile.isNull());
diff --git a/tests/auto/qwinjumplist/tst_qwinjumplist.cpp b/tests/auto/qwinjumplist/tst_qwinjumplist.cpp
index 40d6b04..52b1ee5 100644
--- a/tests/auto/qwinjumplist/tst_qwinjumplist.cpp
+++ b/tests/auto/qwinjumplist/tst_qwinjumplist.cpp
@@ -67,7 +67,7 @@ void tst_QWinJumpList::testRecent()
recent1->clear();
QVERIFY(recent1->isEmpty());
- recent1->addItem(0);
+ recent1->addItem(nullptr);
QVERIFY(recent1->isEmpty());
recent1->setVisible(true);
@@ -116,7 +116,7 @@ void tst_QWinJumpList::testFrequent()
frequent1->clear();
QVERIFY(frequent1->isEmpty());
- frequent1->addItem(0);
+ frequent1->addItem(nullptr);
QVERIFY(frequent1->isEmpty());
frequent1->setVisible(true);
@@ -164,7 +164,7 @@ void tst_QWinJumpList::testTasks()
tasks->setVisible(true);
QVERIFY(tasks->isVisible());
- tasks->addItem(0);
+ tasks->addItem(nullptr);
QVERIFY(tasks->isEmpty());
QWinJumpListItem* link1 = tasks->addLink(QStringLiteral("tst_QWinJumpList"), QCoreApplication::applicationFilePath());
@@ -203,7 +203,7 @@ void tst_QWinJumpList::testCategories()
QWinJumpList jumplist;
QVERIFY(jumplist.categories().isEmpty());
- jumplist.addCategory(0);
+ jumplist.addCategory(nullptr);
QWinJumpListCategory *cat1 = new QWinJumpListCategory(QStringLiteral("tmp"));
QCOMPARE(cat1->title(), QStringLiteral("tmp"));
diff --git a/tests/auto/qwinmime/tst_qwinmime.cpp b/tests/auto/qwinmime/tst_qwinmime.cpp
index 666f292..0c57de4 100644
--- a/tests/auto/qwinmime/tst_qwinmime.cpp
+++ b/tests/auto/qwinmime/tst_qwinmime.cpp
@@ -36,7 +36,7 @@
class TestMime : public QWinMime
{
public:
- TestMime(bool verbose = false) : formatsForMimeCalled(false), m_verbose(verbose) {}
+ TestMime(bool verbose = false) : m_verbose(verbose) {}
bool canConvertFromMime(const FORMATETC &, const QMimeData *mimeData) const Q_DECL_OVERRIDE
{
@@ -81,7 +81,7 @@ public:
return QString();
}
- mutable bool formatsForMimeCalled;
+ mutable bool formatsForMimeCalled = false;
private:
const bool m_verbose;
diff --git a/tests/auto/qwintaskbarbutton/tst_qwintaskbarbutton.cpp b/tests/auto/qwintaskbarbutton/tst_qwintaskbarbutton.cpp
index 82c93f9..a9287a0 100644
--- a/tests/auto/qwintaskbarbutton/tst_qwintaskbarbutton.cpp
+++ b/tests/auto/qwintaskbarbutton/tst_qwintaskbarbutton.cpp
@@ -50,9 +50,9 @@ void tst_QWinTaskbarButton::testWindow()
btn1.setWindow(&window);
QCOMPARE(btn1.window(), &window);
- QWinTaskbarButton *btn2 = new QWinTaskbarButton(&window);
+ auto *btn2 = new QWinTaskbarButton(&window);
QCOMPARE(btn2->window(), &window);
- btn2->setWindow(0);
+ btn2->setWindow(nullptr);
QVERIFY(!btn2->window());
}
diff --git a/tests/auto/qwinthumbnailtoolbar/tst_qwinthumbnailtoolbar.cpp b/tests/auto/qwinthumbnailtoolbar/tst_qwinthumbnailtoolbar.cpp
index d5a722a..fc53a24 100644
--- a/tests/auto/qwinthumbnailtoolbar/tst_qwinthumbnailtoolbar.cpp
+++ b/tests/auto/qwinthumbnailtoolbar/tst_qwinthumbnailtoolbar.cpp
@@ -48,9 +48,9 @@ void tst_QWinThumbnailToolBar::testWindow()
tbar1.setWindow(&window);
QCOMPARE(tbar1.window(), &window);
- QWinThumbnailToolBar *tbar2 = new QWinThumbnailToolBar(&window);
+ auto *tbar2 = new QWinThumbnailToolBar(&window);
QCOMPARE(tbar2->window(), &window);
- tbar2->setWindow(0);
+ tbar2->setWindow(nullptr);
QVERIFY(!tbar2->window());
}
@@ -60,12 +60,12 @@ void tst_QWinThumbnailToolBar::testButtons()
QCOMPARE(tbar.count(), 0);
QVERIFY(tbar.buttons().isEmpty());
- tbar.addButton(0);
+ tbar.addButton(nullptr);
QCOMPARE(tbar.count(), 0);
QVERIFY(tbar.buttons().isEmpty());
- QWinThumbnailToolButton *btn1 = new QWinThumbnailToolButton;
- QWinThumbnailToolButton *btn2 = new QWinThumbnailToolButton;
+ auto *btn1 = new QWinThumbnailToolButton;
+ auto *btn2 = new QWinThumbnailToolButton;
tbar.addButton(btn1);
QCOMPARE(tbar.count(), 1);
diff --git a/tests/manual/dwmfeatures/testwidget.cpp b/tests/manual/dwmfeatures/testwidget.cpp
index 42f1f37..09b25ac 100644
--- a/tests/manual/dwmfeatures/testwidget.cpp
+++ b/tests/manual/dwmfeatures/testwidget.cpp
@@ -46,14 +46,13 @@ TestWidget::TestWidget(QWidget *parent) :
connect(ui->radioFlipAbove, &QAbstractButton::clicked, this, &TestWidget::onFlip3DPolicyChanged);
connect(ui->radioFlipBelow, &QAbstractButton::clicked, this, &TestWidget::onFlip3DPolicyChanged);
connect(ui->btnFrameReset, &QAbstractButton::clicked, this, &TestWidget::onResetGlassFrameClicked);
- typedef void(QSpinBox::*IntSignal)(int);
- connect(ui->frameTop, static_cast<IntSignal>(&QSpinBox::valueChanged),
+ connect(ui->frameTop, QOverload<int>::of(&QSpinBox::valueChanged),
this, &TestWidget::onGlassMarginsChanged);
- connect(ui->frameRight, static_cast<IntSignal>(&QSpinBox::valueChanged),
+ connect(ui->frameRight, QOverload<int>::of(&QSpinBox::valueChanged),
this, &TestWidget::onGlassMarginsChanged);
- connect(ui->frameBottom, static_cast<IntSignal>(&QSpinBox::valueChanged),
+ connect(ui->frameBottom, QOverload<int>::of(&QSpinBox::valueChanged),
this, &TestWidget::onGlassMarginsChanged);
- connect(ui->frameLeft, static_cast<IntSignal>(&QSpinBox::valueChanged),
+ connect(ui->frameLeft, QOverload<int>::of(&QSpinBox::valueChanged),
this, &TestWidget::onGlassMarginsChanged);
}
@@ -77,7 +76,7 @@ void TestWidget::changeEvent(QEvent *e)
bool TestWidget::event(QEvent *e)
{
if (e->type() == QWinEvent::CompositionChange) {
- QWinCompositionChangeEvent *event = static_cast<QWinCompositionChangeEvent *>(e);
+ auto *event = static_cast<QWinCompositionChangeEvent *>(e);
qDebug() << "Composition state change: " << event->isCompositionEnabled();
} else if (e->type() == QWinEvent::ThemeChange) {
qDebug() << "Theme change.";
diff --git a/tests/manual/dwmfeatures/testwidget.h b/tests/manual/dwmfeatures/testwidget.h
index 50dec4e..137e8ce 100644
--- a/tests/manual/dwmfeatures/testwidget.h
+++ b/tests/manual/dwmfeatures/testwidget.h
@@ -46,12 +46,12 @@ class TestWidget : public QWidget
Q_OBJECT
public:
- explicit TestWidget(QWidget *parent = 0);
+ explicit TestWidget(QWidget *parent = nullptr);
~TestWidget();
protected:
- void changeEvent(QEvent *e);
- bool event(QEvent *);
+ void changeEvent(QEvent *e) override;
+ bool event(QEvent *) override;
private:
Ui::TestWidget *ui;
diff --git a/tests/manual/imageconversion/imageconversion.pro b/tests/manual/imageconversion/imageconversion.pro
new file mode 100644
index 0000000..3442e28
--- /dev/null
+++ b/tests/manual/imageconversion/imageconversion.pro
@@ -0,0 +1,5 @@
+CONFIG += console c++11
+QT += widgets winextras
+TEMPLATE = app
+SOURCES += main.cpp
+LIBS += -luser32 -lgdi32
diff --git a/tests/manual/imageconversion/main.cpp b/tests/manual/imageconversion/main.cpp
new file mode 100644
index 0000000..def9cdb
--- /dev/null
+++ b/tests/manual/imageconversion/main.cpp
@@ -0,0 +1,395 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtWinExtras/QtWin>
+
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QDialogButtonBox>
+#include <QtWidgets/QFileDialog>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QMenu>
+#include <QtWidgets/QMenuBar>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QShortcut>
+#include <QtWidgets/QVBoxLayout>
+
+#include <QtGui/QImage>
+#include <QtGui/QPainter>
+#include <QtGui/QPaintEvent>
+
+#include <QtCore/QCommandLineOption>
+#include <QtCore/QCommandLineParser>
+#include <QtCore/QDebug>
+#include <QtCore/QTimer>
+#include <QtCore/qt_windows.h>
+
+static void formatData(QDebug d, const void *data, int size)
+{
+ QDebugStateSaver saver(d);
+ d.noquote();
+ d.nospace();
+ d << "\nData: " << QByteArray(reinterpret_cast<const char *>(data), qMin(20, size)).toHex();
+ if (size > 20)
+ d << "...";
+ d << "\n 0000000011111111222222223333333344444444";
+}
+
+QDebug operator<<(QDebug d, const BITMAP &b)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "BITMAP(type=" << b.bmType << ", " << b.bmWidth << 'x' << b.bmHeight
+ << ", widthBytes=" << b.bmWidthBytes << ", planes=" << b.bmPlanes
+ << ", bitsPixel=" << b.bmBitsPixel << ", bits=" << b.bmBits << ')';
+ return d;
+}
+
+QDebug operator<<(QDebug d, const BITMAPINFOHEADER &bih)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "BITMAPINFOHEADER(" << bih.biWidth << 'x' << qAbs(bih.biHeight)
+ << (bih.biHeight < 0 ? ", top-down" : ", bottom-up")
+ << ", planes=" << bih.biPlanes << ", bitCount=" << bih.biBitCount
+ << ", compression=" << bih.biCompression << ", size="
+ << bih.biSizeImage << ')';
+ return d;
+}
+
+static void formatImage(QDebug d, const QImage &image)
+{
+ QDebugStateSaver s(d);
+ d.noquote();
+ d.nospace();
+ d << image;
+ if (const int colorTableSize = image.colorCount()) {
+ QVector<QRgb> colorTable = image.colorTable();
+ d << " Color table: " << colorTableSize << " (" << showbase << hex; // 256 by standard
+ int c = 0;
+ for ( ; c < qMin(8, colorTableSize); ++c) {
+ if (c)
+ d << ", ";
+ d << colorTable[c];
+ }
+ if (c < colorTableSize)
+ d << "...";
+ d << ')' << noshowbase << dec;
+ }
+ formatData(d, image.constBits(), image.byteCount());
+}
+
+enum ParseOptionResult {
+ OptionError,
+ OptionUnset,
+ OptionSet
+};
+
+static ParseOptionResult parseIntOption(const QCommandLineParser &parser, const QCommandLineOption &option,
+ int minValue, int maxValue, int *target)
+{
+ if (!parser.isSet(option))
+ return OptionUnset;
+
+ const QString spec = parser.value(option);
+ bool ok;
+ const int value = spec.toInt(&ok);
+ if (!ok || value < minValue || value > maxValue) {
+ qWarning() << "Invalid value" << spec << "for" << option.names();
+ return OptionError;
+ }
+ *target = value;
+ return OptionSet;
+}
+
+template <typename Enum>
+static ParseOptionResult parseEnumOption(const QCommandLineParser &parser, const QCommandLineOption &option,
+ Enum minValue, Enum maxValue, Enum *target)
+{
+ int intValue;
+ const ParseOptionResult result = parseIntOption(parser, option, int(minValue), int(maxValue), &intValue);
+ if (result == OptionSet)
+ *target = static_cast<Enum>(intValue);
+ return result;
+}
+
+// Display a QImage in a dialog.
+class PreviewDialog : public QDialog
+{
+public:
+ explicit PreviewDialog(const QImage &image, QWidget *parent = nullptr);
+};
+
+PreviewDialog::PreviewDialog(const QImage &image, QWidget *parent) : QDialog(parent)
+{
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ QString description;
+ QDebug(&description) << image.size() << ", format=" << image.format();
+ QLabel *descriptionLabel = new QLabel(description, this);
+ descriptionLabel->setWordWrap(true);
+ auto *layout = new QVBoxLayout(this);
+ layout->addWidget(descriptionLabel);
+ auto *hLayout = new QHBoxLayout;
+ QLabel *label = new QLabel(this);
+ label->setFrameShape(QFrame::Box);
+ label->setPixmap(QPixmap::fromImage(image));
+ hLayout->addStretch();
+ hLayout->addWidget(label);
+ hLayout->addStretch();
+ layout->addLayout(hLayout);
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+ layout->addWidget(buttonBox);
+}
+
+// Widget that paints a HBITMAP using GDI API in WM_PAINT.
+class PaintWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit PaintWidget(HBITMAP hBitmap, QWidget *p = nullptr) : QWidget(p), m_hBitmap(hBitmap) { }
+
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
+
+public slots:
+ void saveBitmap();
+ void convertBack();
+
+protected:
+ void contextMenuEvent(QContextMenuEvent *) override;
+
+private:
+ const HBITMAP m_hBitmap;
+};
+
+bool PaintWidget::nativeEvent(const QByteArray &eventType, void *messageIn, long *result)
+{
+ MSG *message = reinterpret_cast<MSG *>(messageIn);
+ if (message->message != WM_PAINT)
+ return QWidget::nativeEvent(eventType, message, result);
+
+ PAINTSTRUCT paintStruct;
+ BITMAP bitmap;
+
+ const HDC hdc = BeginPaint(message->hwnd, &paintStruct);
+ SelectObject(hdc, GetStockObject(BLACK_PEN));
+ Rectangle(hdc, 1, 1, width() - 1, height() - 1);
+
+ const HDC hdcMem = CreateCompatibleDC(hdc);
+ const HGDIOBJ oldBitmap = SelectObject(hdcMem, m_hBitmap);
+
+ GetObject(m_hBitmap, sizeof(bitmap), &bitmap);
+ {
+ QDebug d = qDebug();
+ d << __FUNCTION__ << bitmap;
+ formatData(d, bitmap.bmBits, bitmap.bmHeight * bitmap.bmWidthBytes);
+ }
+ BitBlt(hdc, 5, 5, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY);
+ SelectObject(hdcMem, oldBitmap);
+ DeleteDC(hdcMem);
+
+ EndPaint(message->hwnd, &paintStruct);
+ return true;
+}
+
+void PaintWidget::convertBack()
+{
+ QImage image = QtWin::imageFromHBITMAP(m_hBitmap);
+ formatImage(qDebug(), image);
+ auto *dialog = new PreviewDialog(image, this);
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->setModal(false);
+ dialog->setWindowTitle(QLatin1String("QImage - Qt ") + QLatin1String(QT_VERSION_STR));
+ dialog->show();
+}
+
+void PaintWidget::saveBitmap()
+{
+ QImage image = QtWin::imageFromHBITMAP(m_hBitmap);
+ formatImage(qDebug(), image);
+ QFileDialog fileDialog(this);
+ fileDialog.setAcceptMode(QFileDialog::AcceptSave);
+ fileDialog.setMimeTypeFilters(QStringList(QStringLiteral("image/png")));
+ fileDialog.setDefaultSuffix(QStringLiteral("png"));
+ fileDialog.selectFile(QStringLiteral("test.png"));
+ while (fileDialog.exec() == QDialog::Accepted) {
+ const QString fileName = fileDialog.selectedFiles().first();
+ if (image.save(fileName)) {
+ qDebug().noquote() << "saved" << QDir::toNativeSeparators(fileName);
+ break;
+ }
+ qWarning().noquote() << "Could not save" << QDir::toNativeSeparators(fileName);
+ }
+}
+
+void PaintWidget::contextMenuEvent(QContextMenuEvent *e)
+{
+ QMenu contextMenu;
+ contextMenu.addAction(QStringLiteral("Convert into QImage"), this, &PaintWidget::convertBack);
+ QAction *saveAction = contextMenu.addAction(QStringLiteral("Save"), this, &PaintWidget::saveBitmap);
+ saveAction->setShortcut(Qt::CTRL + Qt::Key_S);
+ contextMenu.exec(e->globalPos());
+}
+
+static const char description[] =
+"\nCreates a HBITMAP from a QImage either passed as file name or by drawing in a\n"
+"format determined by a command line option and draws it onto a native window\n"
+"for comparison. Provides a context menu for converting the HBITMAP back to a\n"
+"QImage and saving that for checking the reverse conversion.";
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QCoreApplication::setApplicationName("imageconversion");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
+ parser.setApplicationDescription("Qt Windows Extras Image Conversion Tester");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.setApplicationDescription(description);
+
+ const QCommandLineOption formatOption(QStringList{"format", "f"},
+ "QImage format", "format");
+ parser.addOption(formatOption);
+ const QCommandLineOption colorOption(QStringList{"color", "c"},
+ "Fill color", "color-spec");
+ parser.addOption(colorOption);
+ const QCommandLineOption globalColorOption(QStringList{"globalColor", "g"},
+ "Fill color (global color enum value)", "global-color");
+ parser.addOption(globalColorOption);
+ const QCommandLineOption widthOption(QStringList{"width", "w"},
+ "Width", "width");
+ parser.addOption(widthOption);
+ const QCommandLineOption heightOption(QStringList{"height", "h"},
+ "Height", "height");
+ parser.addOption(heightOption);
+ const QCommandLineOption previewOption(QStringList{"preview", "p"},
+ "Show a preview");
+ parser.addOption(previewOption);
+
+ parser.addPositionalArgument("file", "The image file to open.");
+ parser.process(app);
+
+ QColor defaultColor(Qt::red);
+ if (parser.isSet(colorOption)) {
+ const QString spec = parser.value(colorOption);
+ defaultColor = QColor(spec);
+ if (!defaultColor.isValid()) {
+ qWarning() << "Invalid color specification" << spec;
+ return -1;
+ }
+ } else {
+ // Color 0: color0, 1: color1, 2: black, 3: white, 7:red, 9: blue, 8: green
+ Qt::GlobalColor globalColor = Qt::color0;
+ if (!parseEnumOption(parser, globalColorOption, Qt::black, Qt::transparent, &globalColor))
+ return -1;
+ if (globalColor != Qt::color0)
+ defaultColor = QColor(defaultColor);
+ }
+
+ // Format: 1: mono, 3: Indexed8, 7: RGB 16, 11: RGB555, 13: RGB888
+ QImage::Format targetFormat = QImage::Format_ARGB32_Premultiplied;
+ if (!parseEnumOption(parser, formatOption, QImage::Format_Mono, QImage::Format_Grayscale8, &targetFormat))
+ return -1;
+ // Can't paint on indexed nor mono, need transform?
+ const QImage::Format drawFormat = targetFormat == QImage::Format_Indexed8
+ || targetFormat == QImage::Format_Mono || targetFormat == QImage::Format_MonoLSB
+ ? QImage::Format_ARGB32_Premultiplied : targetFormat;
+
+ if (targetFormat == QImage::Format_Mono || targetFormat == QImage::Format_MonoLSB)
+ defaultColor = Qt::white;
+
+ int width = 73;
+ int height = 57;
+ if (!parseIntOption(parser, widthOption, 1, 2000, &width) || !parseIntOption(parser, heightOption, 1, 2000, &height))
+ return -1;
+
+ const bool preview = parser.isSet(previewOption);
+
+ QImage image;
+ if (!parser.positionalArguments().isEmpty()) {
+ QString fileName = parser.positionalArguments().constFirst();
+ image = QImage(fileName);
+ if (image.isNull() || image.size().isEmpty()) {
+ qWarning().noquote() << "Image load fail" << QDir::toNativeSeparators(fileName);
+ return -1;
+ }
+ }
+
+ if (image.isNull()) {
+ qDebug() << "Default image color=" << defaultColor
+ << showbase << hex << defaultColor.rgba() << noshowbase << dec
+ << ", format=" << drawFormat;
+ image = QImage(width, height, drawFormat);
+ image.fill(defaultColor);
+ QPainter painter(&image);
+ painter.drawLine(0, 0, image.width(), image.height());
+ }
+
+ if (image.format() != targetFormat) {
+ qDebug() << "Converting " << image.format() << targetFormat;
+ image = image.convertToFormat(targetFormat);
+ }
+
+ formatImage(qDebug(), image);
+
+ const HBITMAP bitmap = QtWin::imageToHBITMAP(image);
+ if (!bitmap) {
+ qWarning() << "Failed to create HBITMAP";
+ return -1;
+ }
+
+ int exitCode = 0;
+ {
+ PaintWidget paintWidget(bitmap);
+ auto *quitShortcut = new QShortcut(&paintWidget);
+ quitShortcut->setKey(Qt::CTRL + Qt::Key_Q);
+ quitShortcut->setContext(Qt::ApplicationShortcut);
+ QObject::connect(quitShortcut, &QShortcut::activated, qApp, &QCoreApplication::quit);
+ paintWidget.setWindowTitle(QLatin1String("HBITMAP - Qt ") + QLatin1String(QT_VERSION_STR));
+ paintWidget.show();
+ if (preview) {
+ auto *dialog = new PreviewDialog(image);
+ dialog->setModal(false);
+ dialog->setWindowTitle(QLatin1String("QImage - Qt ") + QLatin1String(QT_VERSION_STR));
+ dialog->move(paintWidget.frameGeometry().topRight() + QPoint(50, 0));
+ dialog->show();
+ }
+ exitCode = app.exec();
+ }
+
+ DeleteObject(bitmap);
+
+ return exitCode;
+}
+
+#include "main.moc"
diff --git a/tests/manual/jumplist/main.cpp b/tests/manual/jumplist/main.cpp
index 0597fe5..5447187 100644
--- a/tests/manual/jumplist/main.cpp
+++ b/tests/manual/jumplist/main.cpp
@@ -51,8 +51,10 @@ static bool associateFileType()
regApplications.beginGroup("SupportedTypes");
QMimeDatabase mimeDatabase;
- foreach (const QString &t, TestWidget::supportedMimeTypes()) {
- foreach (const QString &s, mimeDatabase.mimeTypeForName(t).suffixes())
+ const auto types = TestWidget::supportedMimeTypes();
+ for (const QString &t : types) {
+ const auto suffixes = mimeDatabase.mimeTypeForName(t).suffixes();
+ for (const QString &s : suffixes)
regApplications.setValue('.' + s, QString());
}
regApplications.endGroup();
diff --git a/tests/manual/jumplist/testwidget.cpp b/tests/manual/jumplist/testwidget.cpp
index cbe8a3d..0928c59 100644
--- a/tests/manual/jumplist/testwidget.cpp
+++ b/tests/manual/jumplist/testwidget.cpp
@@ -105,7 +105,7 @@ void TestWidget::updateJumpList()
jumplist.recent()->setVisible(ui->cbShowRecent->isChecked());
jumplist.frequent()->setVisible(ui->cbShowFrequent->isChecked());
if (ui->cbRunFullscreen->isChecked()) {
- QWinJumpListItem *item = new QWinJumpListItem(QWinJumpListItem::Link);
+ auto *item = new QWinJumpListItem(QWinJumpListItem::Link);
item->setTitle(ui->cbRunFullscreen->text());
item->setFilePath(applicationBinary);
item->setArguments(QStringList("-fullscreen"));
diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro
index 4ff3a0b..be1698c 100644
--- a/tests/manual/manual.pro
+++ b/tests/manual/manual.pro
@@ -3,5 +3,6 @@ qtHaveModule(widgets) {
SUBDIRS += \
dwmfeatures \
jumplist \
- thumbnail
+ thumbnail \
+ imageconversion
}
diff --git a/tests/manual/thumbnail/main.cpp b/tests/manual/thumbnail/main.cpp
index 99096ec..009662f 100644
--- a/tests/manual/thumbnail/main.cpp
+++ b/tests/manual/thumbnail/main.cpp
@@ -104,7 +104,7 @@ MainWindow::MainWindow()
void MainWindow::initThumbnailToolBar()
{
m_thumbnailToolBar->setWindow(windowHandle());
- QWinThumbnailToolButton *testButton = new QWinThumbnailToolButton(m_thumbnailToolBar);
+ auto *testButton = new QWinThumbnailToolButton(m_thumbnailToolBar);
testButton->setToolTip("Test");
testButton->setIcon(style()->standardIcon(QStyle::SP_ComputerIcon));
connect(testButton, &QWinThumbnailToolButton::clicked, this, &MainWindow::testButtonClicked);