From 4c4a5f8c86624f180fca3e2f80758d60f3cbaa4c Mon Sep 17 00:00:00 2001 From: Andre de la Rocha Date: Tue, 28 Aug 2018 13:36:36 +0200 Subject: [PATCH 1/6] Windows: Check Pointer messages in MessageDebugEntry Some Pointer Input messages are defined only for Windows 10 and new versions of the Windows SDK and could break compilation with older SDKs. Currently, they are not used anywhere outside of the MessageDebugEntry debug function. Checking if they are defined before using. Change-Id: I5fc7bb8e52ab8aca66bb21084289ab8938938063 Reviewed-by: Christian Kandeler Reviewed-by: Oliver Wolff --- .../eventdispatchers/qwindowsguieventdispatcher.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher.cpp b/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher.cpp index 3583ead788a..a37547f5132 100644 --- a/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher.cpp +++ b/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher.cpp @@ -202,11 +202,15 @@ messageDebugEntries[] = { {WM_TOUCHHITTESTING, "WM_TOUCHHITTESTING", true}, {WM_POINTERWHEEL, "WM_POINTERWHEEL", true}, {WM_POINTERHWHEEL, "WM_POINTERHWHEEL", true}, +#endif // WM_POINTERUPDATE +#ifdef DM_POINTERHITTEST {DM_POINTERHITTEST, "DM_POINTERHITTEST", true}, +#endif // DM_POINTERHITTEST +#ifdef WM_POINTERROUTEDTO {WM_POINTERROUTEDTO, "WM_POINTERROUTEDTO", true}, {WM_POINTERROUTEDAWAY, "WM_POINTERROUTEDAWAY", true}, - {WM_POINTERROUTEDRELEASED, "WM_POINTERROUTEDRELEASED", true} -#endif // WM_POINTERUPDATE + {WM_POINTERROUTEDRELEASED, "WM_POINTERROUTEDRELEASED", true}, +#endif // WM_POINTERROUTEDTO }; static inline const MessageDebugEntry *messageDebugEntry(UINT msg) From 9a15ac356cbbc25eeb48ac3a8fcbe5fb96dad5f5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Aug 2018 09:40:06 +0200 Subject: [PATCH 2/6] Windows code: Fix clang-tidy warnings about (private) class definitions Add override, disable copies where appropriate and use = default for trivial functions. Change-Id: Ia5bc7419b1aa053c5503ea7dfaf11cb6dfafd2e2 Reviewed-by: Oliver Wolff Reviewed-by: Edward Welbourne Reviewed-by: Gabriel de Dietrich Reviewed-by: Thiago Macieira --- src/corelib/io/qsettings_win.cpp | 3 +- src/network/kernel/qnetworkproxy_win.cpp | 4 ++ .../windows/qwindowsfontdatabase.cpp | 1 + .../windows/qwindowsfontdatabase_p.h | 3 +- .../windows/qwindowsfontengine_p.h | 5 ++- .../windows/qwindowsfontenginedirectwrite.cpp | 5 +-- .../windows/qwindowsfontenginedirectwrite_p.h | 3 +- .../windows/qwindowsprintersupport.h | 3 +- .../windowsvista/qwindowsvistastyle.cpp | 4 +- .../windowsvista/qwindowsvistastyle_p.h | 43 ++++++++++--------- .../styles/windowsvista/qwindowsxpstyle_p.h | 42 +++++++++--------- src/widgets/dialogs/qwizard_win_p.h | 15 ++++--- 12 files changed, 72 insertions(+), 59 deletions(-) diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index e1922674ef6..a6237b04bea 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -377,11 +377,12 @@ typedef QVector RegistryKeyList; class QWinSettingsPrivate : public QSettingsPrivate { + Q_DISABLE_COPY(QWinSettingsPrivate) public: QWinSettingsPrivate(QSettings::Scope scope, const QString &organization, const QString &application, REGSAM access = 0); QWinSettingsPrivate(QString rKey, REGSAM access = 0); - ~QWinSettingsPrivate(); + ~QWinSettingsPrivate() override; void remove(const QString &uKey) override; void set(const QString &uKey, const QVariant &value) override; diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp index e67faaf856c..db51732bd39 100644 --- a/src/network/kernel/qnetworkproxy_win.cpp +++ b/src/network/kernel/qnetworkproxy_win.cpp @@ -370,7 +370,10 @@ static QList parseServerList(const QNetworkProxyQuery &query, con #if !defined(Q_OS_WINRT) namespace { class QRegistryWatcher { + Q_DISABLE_COPY(QRegistryWatcher) public: + QRegistryWatcher() = default; + void addLocation(HKEY hive, const QString& path) { HKEY openedKey; @@ -422,6 +425,7 @@ private: class QWindowsSystemProxy { + Q_DISABLE_COPY(QWindowsSystemProxy) public: QWindowsSystemProxy(); ~QWindowsSystemProxy(); diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 6b86f01616f..385a4eaac5a 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -368,6 +368,7 @@ namespace { class DirectWriteFontFileStream: public IDWriteFontFileStream { + Q_DISABLE_COPY(DirectWriteFontFileStream) public: DirectWriteFontFileStream(const QByteArray &fontData) : m_fontData(fontData) diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h index 9080d3ea9d4..ab6d6307c70 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h @@ -85,6 +85,7 @@ public: class QWindowsFontDatabase : public QPlatformFontDatabase { + Q_DISABLE_COPY(QWindowsFontDatabase) public: enum FontOptions { // Relevant bits from QWindowsIntegration::Options @@ -93,7 +94,7 @@ public: }; QWindowsFontDatabase(); - ~QWindowsFontDatabase(); + ~QWindowsFontDatabase() override; void populateFontDatabase() override; void populateFamily(const QString &familyName) override; diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h index 2ec391c4da8..a151cf73439 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h @@ -66,13 +66,14 @@ class QWindowsFontEngineData; class QWindowsFontEngine : public QFontEngine { + Q_DISABLE_COPY(QWindowsFontEngine) friend class QWindowsMultiFontEngine; public: QWindowsFontEngine(const QString &name, LOGFONT lf, const QSharedPointer &fontEngineData); - ~QWindowsFontEngine(); + ~QWindowsFontEngine() override; void initFontInfo(const QFontDef &request, int dpi); @@ -89,7 +90,7 @@ public: void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const override; void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) override; - virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, + void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, QPainterPath *path, QTextItem::RenderFlags flags) override; HGDIOBJ selectDesignFont() const; diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp index 0e017c3b772..57c41938bc6 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp @@ -69,15 +69,14 @@ namespace { class GeometrySink: public IDWriteGeometrySink { + Q_DISABLE_COPY(GeometrySink) public: GeometrySink(QPainterPath *path) : m_refCount(0), m_path(path) { Q_ASSERT(m_path != 0); } - virtual ~GeometrySink() - { - } + virtual ~GeometrySink() = default; IFACEMETHOD_(void, AddBeziers)(const D2D1_BEZIER_SEGMENT *beziers, UINT bezierCount); IFACEMETHOD_(void, AddLines)(const D2D1_POINT_2F *points, UINT pointCount); diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h index 83fdddfa26f..9326f5aecea 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h @@ -72,11 +72,12 @@ class QWindowsFontEngineData; class QWindowsFontEngineDirectWrite : public QFontEngine { + Q_DISABLE_COPY(QWindowsFontEngineDirectWrite) public: explicit QWindowsFontEngineDirectWrite(IDWriteFontFace *directWriteFontFace, qreal pixelSize, const QSharedPointer &d); - ~QWindowsFontEngineDirectWrite(); + ~QWindowsFontEngineDirectWrite() override; void initFontInfo(const QFontDef &request, int dpi); diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.h b/src/plugins/printsupport/windows/qwindowsprintersupport.h index c42e7aa5513..42677011454 100644 --- a/src/plugins/printsupport/windows/qwindowsprintersupport.h +++ b/src/plugins/printsupport/windows/qwindowsprintersupport.h @@ -46,9 +46,10 @@ QT_BEGIN_NAMESPACE class QWindowsPrinterSupport : public QPlatformPrinterSupport { + Q_DISABLE_COPY(QWindowsPrinterSupport) public: QWindowsPrinterSupport(); - ~QWindowsPrinterSupport(); + ~QWindowsPrinterSupport() override; QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) override; QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) override; diff --git a/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp b/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp index bb110660a33..7b35d1b58c4 100644 --- a/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp +++ b/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp @@ -179,9 +179,7 @@ QWindowsVistaStyle::QWindowsVistaStyle() /*! Destructor. */ -QWindowsVistaStyle::~QWindowsVistaStyle() -{ -} +QWindowsVistaStyle::~QWindowsVistaStyle() = default; //convert Qt state flags to uxtheme button states static int buttonStateId(int flags, int partId) diff --git a/src/plugins/styles/windowsvista/qwindowsvistastyle_p.h b/src/plugins/styles/windowsvista/qwindowsvistastyle_p.h index 5ffcbc6aa93..0ebb0eb41a2 100644 --- a/src/plugins/styles/windowsvista/qwindowsvistastyle_p.h +++ b/src/plugins/styles/windowsvista/qwindowsvistastyle_p.h @@ -62,38 +62,41 @@ class QWindowsVistaStyle : public QWindowsXPStyle Q_OBJECT public: QWindowsVistaStyle(); - ~QWindowsVistaStyle(); + ~QWindowsVistaStyle() override; void drawPrimitive(PrimitiveElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget = 0) const; + QPainter *painter, + const QWidget *widget = nullptr) const override; void drawControl(ControlElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget) const; + QPainter *painter, const QWidget *widget) const override; void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, - QPainter *painter, const QWidget *widget) const; + QPainter *painter, const QWidget *widget) const override; QSize sizeFromContents(ContentsType type, const QStyleOption *option, - const QSize &size, const QWidget *widget) const; + const QSize &size, const QWidget *widget) const override; - QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const; + QRect subElementRect(SubElement element, const QStyleOption *option, + const QWidget *widget) const override; QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, - SubControl sc, const QWidget *widget) const; + SubControl sc, const QWidget *widget) const override; SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, - const QPoint &pos, const QWidget *widget = 0) const; + const QPoint &pos, const QWidget *widget = nullptr) const override; - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0, - const QWidget *widget = 0) const; + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, - const QWidget *widget = 0) const; - int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const; - int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0, - QStyleHintReturn *returnData = 0) const; + const QWidget *widget = nullptr) const override; + int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + int styleHint(StyleHint hint, const QStyleOption *opt = nullptr, + const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override; - void polish(QWidget *widget); - void unpolish(QWidget *widget); - void polish(QPalette &pal); - void polish(QApplication *app); - void unpolish(QApplication *app); - QPalette standardPalette() const; + void polish(QWidget *widget) override; + void unpolish(QWidget *widget) override; + void polish(QPalette &pal) override; + void polish(QApplication *app) override; + void unpolish(QApplication *app) override; + QPalette standardPalette() const override; private: Q_DISABLE_COPY(QWindowsVistaStyle) diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle_p.h b/src/plugins/styles/windowsvista/qwindowsxpstyle_p.h index d00620eefab..7e9f4ddda6d 100644 --- a/src/plugins/styles/windowsvista/qwindowsxpstyle_p.h +++ b/src/plugins/styles/windowsvista/qwindowsxpstyle_p.h @@ -63,35 +63,37 @@ class QWindowsXPStyle : public QWindowsStyle public: QWindowsXPStyle(); QWindowsXPStyle(QWindowsXPStylePrivate &dd); - ~QWindowsXPStyle(); + ~QWindowsXPStyle() override; - void unpolish(QApplication*); - void polish(QApplication*); - void polish(QWidget*); - void polish(QPalette&); - void unpolish(QWidget*); + void unpolish(QApplication*) override; + void polish(QApplication*) override; + void polish(QWidget*) override; + void polish(QPalette&) override; + void unpolish(QWidget*) override; void drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *p, - const QWidget *widget = 0) const; + const QWidget *widget = nullptr) const override; void drawControl(ControlElement element, const QStyleOption *option, QPainter *p, - const QWidget *wwidget = 0) const; - QRect subElementRect(SubElement r, const QStyleOption *option, const QWidget *widget = 0) const; + const QWidget *wwidget = nullptr) const override; + QRect subElementRect(SubElement r, const QStyleOption *option, + const QWidget *widget = nullptr) const override; QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc, - const QWidget *widget = 0) const; + const QWidget *widget = nullptr) const override; void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option, QPainter *p, - const QWidget *widget = 0) const; + const QWidget *widget = nullptr) const override; QSize sizeFromContents(ContentsType ct, const QStyleOption *option, const QSize &contentsSize, - const QWidget *widget = 0) const; - int pixelMetric(PixelMetric pm, const QStyleOption *option = 0, - const QWidget *widget = 0) const; - int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, - QStyleHintReturn *returnData = 0) const; + const QWidget *widget = nullptr) const override; + int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + int styleHint(StyleHint hint, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr, + QStyleHintReturn *returnData = nullptr) const override; - QPalette standardPalette() const; + QPalette standardPalette() const override; QPixmap standardPixmap(StandardPixmap standardIcon, const QStyleOption *option, - const QWidget *widget = 0) const; - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0, - const QWidget *widget = 0) const; + const QWidget *widget = nullptr) const override; + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; private: Q_DISABLE_COPY(QWindowsXPStyle) diff --git a/src/widgets/dialogs/qwizard_win_p.h b/src/widgets/dialogs/qwizard_win_p.h index 7ca4899a1f8..d302dedaa39 100644 --- a/src/widgets/dialogs/qwizard_win_p.h +++ b/src/widgets/dialogs/qwizard_win_p.h @@ -71,22 +71,23 @@ class QVistaBackButton : public QAbstractButton public: QVistaBackButton(QWidget *widget); - QSize sizeHint() const; - inline QSize minimumSizeHint() const + QSize sizeHint() const override; + inline QSize minimumSizeHint() const override { return sizeHint(); } - void enterEvent(QEvent *event); - void leaveEvent(QEvent *event); - void paintEvent(QPaintEvent *event); + void enterEvent(QEvent *event) override; + void leaveEvent(QEvent *event) override; + void paintEvent(QPaintEvent *event) override; }; class QWizard; class QVistaHelper : public QObject { + Q_DISABLE_COPY(QVistaHelper) public: QVistaHelper(QWizard *wizard); - ~QVistaHelper(); + ~QVistaHelper() override; enum TitleBarChangeType { NormalTitleBar, ExtendedTitleBar }; void updateCustomMargins(bool vistaMargins); bool setDWMTitleBar(TitleBarChangeType type); @@ -133,7 +134,7 @@ private: void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); - bool eventFilter(QObject *obj, QEvent *event); + bool eventFilter(QObject *obj, QEvent *event) override; static int instanceCount; static VistaState cachedVistaState; From 30756f4626972d90e1b6e24f495260c1268c9181 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 30 Aug 2018 13:36:55 +0200 Subject: [PATCH 3/6] qelapsedtimer_win.cpp: Fix clang-tidy warning about else after return Remove else in nelper nanosecondsToTicks() Change-Id: I6c5291deaeb6651f702a9c118cabcb5a7edd179e Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/kernel/qelapsedtimer_win.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qelapsedtimer_win.cpp b/src/corelib/kernel/qelapsedtimer_win.cpp index 0c380b2f6ad..54a14e690cd 100644 --- a/src/corelib/kernel/qelapsedtimer_win.cpp +++ b/src/corelib/kernel/qelapsedtimer_win.cpp @@ -83,10 +83,9 @@ static inline qint64 nanosecondsToTicks(qint64 nsec) if (counterFrequency > 0) { // QueryPerformanceCounter uses an arbitrary frequency return double(nsec) * counterFrequency / 1000000000.; - } else { - // GetTickCount(64) uses milliseconds - return nsec / 1000000; } + // GetTickCount(64) uses milliseconds + return nsec / 1000000; } static quint64 getTickCount() From 7c0884f2a2b02ed91ee49f79ef2fff27c2567c39 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Aug 2018 09:07:43 +0200 Subject: [PATCH 4/6] Windows code: Fix clang-tidy warnings about else after jumps Replace by switch() where appropriate, remove else and unindent code or simplify the return value. Change-Id: Ie988b9068a9579ae5a899b3765e43aad480b564e Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/io/qfilesystemiterator_win.cpp | 3 +- src/corelib/io/qfilesystemwatcher_win.cpp | 3 +- src/corelib/io/qfsfileengine_win.cpp | 5 +- src/corelib/io/qprocess_win.cpp | 110 ++++++++++---------- src/corelib/io/qsettings_win.cpp | 26 +++-- src/corelib/io/qwindowspipereader.cpp | 10 +- src/corelib/kernel/qelapsedtimer_win.cpp | 10 +- src/corelib/kernel/qeventdispatcher_win.cpp | 62 ++++++----- src/corelib/kernel/qsharedmemory_win.cpp | 5 +- src/corelib/thread/qthread_win.cpp | 40 ++++--- src/corelib/tools/qlocale_win.cpp | 9 +- src/corelib/tools/qtimezoneprivate_win.cpp | 6 +- 12 files changed, 143 insertions(+), 146 deletions(-) diff --git a/src/corelib/io/qfilesystemiterator_win.cpp b/src/corelib/io/qfilesystemiterator_win.cpp index 2905a8e54ef..67412828816 100644 --- a/src/corelib/io/qfilesystemiterator_win.cpp +++ b/src/corelib/io/qfilesystemiterator_win.cpp @@ -106,8 +106,7 @@ bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaDa QLatin1String("\\\\") + parts.at(2), &uncShares)) { if (uncShares.isEmpty()) return false; // No shares found in the server - else - uncFallback = true; + uncFallback = true; } } } diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp index 3a49f4346bd..91d0f7a228f 100644 --- a/src/corelib/io/qfilesystemwatcher_win.cpp +++ b/src/corelib/io/qfilesystemwatcher_win.cpp @@ -667,7 +667,8 @@ void QWindowsFileSystemWatcherEngineThread::run() if (m != '@') DEBUG() << "QWindowsFileSystemWatcherEngine: unknown message sent to thread: " << char(m); break; - } else if (r > WAIT_OBJECT_0 && r < WAIT_OBJECT_0 + uint(handlesCopy.count())) { + } + if (r > WAIT_OBJECT_0 && r < WAIT_OBJECT_0 + uint(handlesCopy.count())) { int at = r - WAIT_OBJECT_0; Q_ASSERT(at < handlesCopy.count()); HANDLE handle = handlesCopy.at(at); diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 9d3bfbba31c..c1b8f00b4a4 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -766,10 +766,9 @@ QString QFSFileEngine::fileName(FileName file) const int slash = ret.lastIndexOf(QLatin1Char('/')); if (slash < 0) return ret; - else if (ret.at(0) != QLatin1Char('/') && slash == 2) + if (ret.at(0) != QLatin1Char('/') && slash == 2) return ret.left(3); // include the slash - else - return ret.left(slash > 0 ? slash : 1); + return ret.left(slash > 0 ? slash : 1); } return ret; } else if (file == CanonicalName || file == CanonicalPathName) { diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 1f7a49379dd..cb4b2f9f91f 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -202,7 +202,8 @@ bool QProcessPrivate::openChannel(Channel &channel) &stderrChannel.pipe[1], 0, TRUE, DUPLICATE_SAME_ACCESS); } - if (channel.type == Channel::Normal) { + switch (channel.type) { + case Channel::Normal: // we're piping this channel to our own process if (&channel == &stdinChannel) { if (inputChannelMode != QProcess::ForwardedInputChannel) { @@ -242,9 +243,8 @@ bool QProcessPrivate::openChannel(Channel &channel) channel.reader->startAsyncRead(); } } - return true; - } else if (channel.type == Channel::Redirect) { + case Channel::Redirect: { // we're redirecting the channel to/from a file SECURITY_ATTRIBUTES secAtt = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; @@ -289,65 +289,65 @@ bool QProcessPrivate::openChannel(Channel &channel) } cleanup(); return false; - } else { + } + case Channel::PipeSource: { Q_ASSERT_X(channel.process, "QProcess::start", "Internal error"); + // we are the source + Channel *source = &channel; + Channel *sink = &channel.process->stdinChannel; - Channel *source; - Channel *sink; - - if (channel.type == Channel::PipeSource) { - // we are the source - source = &channel; - sink = &channel.process->stdinChannel; - - if (source->pipe[1] != INVALID_Q_PIPE) { - // already constructed by the sink - // make it inheritable - HANDLE tmpHandle = source->pipe[1]; - if (!DuplicateHandle(GetCurrentProcess(), tmpHandle, - GetCurrentProcess(), &source->pipe[1], - 0, TRUE, DUPLICATE_SAME_ACCESS)) - return false; - - CloseHandle(tmpHandle); - return true; + if (source->pipe[1] != INVALID_Q_PIPE) { + // already constructed by the sink + // make it inheritable + HANDLE tmpHandle = source->pipe[1]; + if (!DuplicateHandle(GetCurrentProcess(), tmpHandle, + GetCurrentProcess(), &source->pipe[1], + 0, TRUE, DUPLICATE_SAME_ACCESS)) { + return false; } - Q_ASSERT(source == &stdoutChannel); - Q_ASSERT(sink->process == this && sink->type == Channel::PipeSink); - - qt_create_pipe(source->pipe, /* in = */ false); // source is stdout - sink->pipe[0] = source->pipe[0]; - source->pipe[0] = INVALID_Q_PIPE; - - return true; - } else { - // we are the sink; - source = &channel.process->stdoutChannel; - sink = &channel; - - if (sink->pipe[0] != INVALID_Q_PIPE) { - // already constructed by the source - // make it inheritable - HANDLE tmpHandle = sink->pipe[0]; - if (!DuplicateHandle(GetCurrentProcess(), tmpHandle, - GetCurrentProcess(), &sink->pipe[0], - 0, TRUE, DUPLICATE_SAME_ACCESS)) - return false; - - CloseHandle(tmpHandle); - return true; - } - Q_ASSERT(sink == &stdinChannel); - Q_ASSERT(source->process == this && source->type == Channel::PipeSource); - - qt_create_pipe(sink->pipe, /* in = */ true); // sink is stdin - source->pipe[1] = sink->pipe[1]; - sink->pipe[1] = INVALID_Q_PIPE; - + CloseHandle(tmpHandle); return true; } + + Q_ASSERT(source == &stdoutChannel); + Q_ASSERT(sink->process == this && sink->type == Channel::PipeSink); + + qt_create_pipe(source->pipe, /* in = */ false); // source is stdout + sink->pipe[0] = source->pipe[0]; + source->pipe[0] = INVALID_Q_PIPE; + + return true; } + case Channel::PipeSink: { // we are the sink; + Q_ASSERT_X(channel.process, "QProcess::start", "Internal error"); + Channel *source = &channel.process->stdoutChannel; + Channel *sink = &channel; + + if (sink->pipe[0] != INVALID_Q_PIPE) { + // already constructed by the source + // make it inheritable + HANDLE tmpHandle = sink->pipe[0]; + if (!DuplicateHandle(GetCurrentProcess(), tmpHandle, + GetCurrentProcess(), &sink->pipe[0], + 0, TRUE, DUPLICATE_SAME_ACCESS)) { + return false; + } + + CloseHandle(tmpHandle); + return true; + } + Q_ASSERT(sink == &stdinChannel); + Q_ASSERT(source->process == this && source->type == Channel::PipeSource); + + qt_create_pipe(sink->pipe, /* in = */ true); // sink is stdin + source->pipe[1] = sink->pipe[1]; + sink->pipe[1] = INVALID_Q_PIPE; + + return true; + } + } // switch (channel.type) + return false; } void QProcessPrivate::destroyPipe(Q_PIPE pipe[2]) diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index a6237b04bea..751db0e0152 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -837,26 +837,32 @@ bool QWinSettingsPrivate::isWritable() const QSettingsPrivate *QSettingsPrivate::create(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application) { - if (format == QSettings::NativeFormat) + switch (format) { + case QSettings::NativeFormat: return new QWinSettingsPrivate(scope, organization, application); - else if (format == QSettings::Registry32Format) + case QSettings::Registry32Format: return new QWinSettingsPrivate(scope, organization, application, KEY_WOW64_32KEY); - else if (format == QSettings::Registry64Format) + case QSettings::Registry64Format: return new QWinSettingsPrivate(scope, organization, application, KEY_WOW64_64KEY); - else - return new QConfFileSettingsPrivate(format, scope, organization, application); + default: + break; + } + return new QConfFileSettingsPrivate(format, scope, organization, application); } QSettingsPrivate *QSettingsPrivate::create(const QString &fileName, QSettings::Format format) { - if (format == QSettings::NativeFormat) + switch (format) { + case QSettings::NativeFormat: return new QWinSettingsPrivate(fileName); - else if (format == QSettings::Registry32Format) + case QSettings::Registry32Format: return new QWinSettingsPrivate(fileName, KEY_WOW64_32KEY); - else if (format == QSettings::Registry64Format) + case QSettings::Registry64Format: return new QWinSettingsPrivate(fileName, KEY_WOW64_64KEY); - else - return new QConfFileSettingsPrivate(fileName, format); + default: + break; + } + return new QConfFileSettingsPrivate(fileName, format); } QT_END_NAMESPACE diff --git a/src/corelib/io/qwindowspipereader.cpp b/src/corelib/io/qwindowspipereader.cpp index 2312d5ca63d..15c9f52cf30 100644 --- a/src/corelib/io/qwindowspipereader.cpp +++ b/src/corelib/io/qwindowspipereader.cpp @@ -270,13 +270,11 @@ void QWindowsPipeReader::readFileCompleted(DWORD errorCode, DWORD numberOfBytesT DWORD QWindowsPipeReader::checkPipeState() { DWORD bytes; - if (PeekNamedPipe(handle, NULL, 0, NULL, &bytes, NULL)) { + if (PeekNamedPipe(handle, nullptr, 0, nullptr, &bytes, nullptr)) return bytes; - } else { - if (!pipeBroken) { - pipeBroken = true; - emit pipeClosed(); - } + if (!pipeBroken) { + pipeBroken = true; + emit pipeClosed(); } return 0; } diff --git a/src/corelib/kernel/qelapsedtimer_win.cpp b/src/corelib/kernel/qelapsedtimer_win.cpp index 54a14e690cd..a63290d2f82 100644 --- a/src/corelib/kernel/qelapsedtimer_win.cpp +++ b/src/corelib/kernel/qelapsedtimer_win.cpp @@ -72,10 +72,9 @@ static inline qint64 ticksToNanoseconds(qint64 ticks) qint64 seconds = ticks / counterFrequency; qint64 nanoSeconds = (ticks - seconds * counterFrequency) * 1000000000 / counterFrequency; return seconds * 1000000000 + nanoSeconds; - } else { - // GetTickCount(64) return milliseconds - return ticks * 1000000; } + // GetTickCount(64) returns milliseconds + return ticks * 1000000; } static inline qint64 nanosecondsToTicks(qint64 nsec) @@ -115,10 +114,7 @@ QElapsedTimer::ClockType QElapsedTimer::clockType() Q_DECL_NOTHROW { resolveCounterFrequency(); - if (counterFrequency > 0) - return PerformanceCounter; - else - return TickCounter; + return counterFrequency > 0 ? PerformanceCounter : TickCounter; } bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 2862f42b2bf..20fac34de78 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -141,9 +141,9 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA if (message == WM_TIMER) KillTimer(hwnd, wp); return 0; - } else if (dispatcher->filterNativeEvent(QByteArrayLiteral("windows_dispatcher_MSG"), &msg, &result)) { - return result; } + if (dispatcher->filterNativeEvent(QByteArrayLiteral("windows_dispatcher_MSG"), &msg, &result)) + return result; #ifdef GWLP_USERDATA auto q = reinterpret_cast(GetWindowLongPtr(hwnd, GWLP_USERDATA)); @@ -154,7 +154,8 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA if (q != 0) d = q->d_func(); - if (message == WM_QT_SOCKETNOTIFIER) { + switch (message) { + case WM_QT_SOCKETNOTIFIER: { // socket notifier message int type = -1; switch (WSAGETSELECTEVENT(lp)) { @@ -202,7 +203,8 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA } } return 0; - } else if (message == WM_QT_ACTIVATENOTIFIERS) { + } + case WM_QT_ACTIVATENOTIFIERS: { Q_ASSERT(d != 0); // Postpone activation if we have unhandled socket notifier messages @@ -226,22 +228,25 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA } d->activateNotifiersPosted = false; return 0; - } else if (message == WM_QT_SENDPOSTEDEVENTS - // we also use a Windows timer to send posted events when the message queue is full - || (message == WM_TIMER - && d->sendPostedEventsWindowsTimerId != 0 - && wp == (uint)d->sendPostedEventsWindowsTimerId)) { + } + case WM_TIMER: + if (d->sendPostedEventsWindowsTimerId == 0 + || wp != uint(d->sendPostedEventsWindowsTimerId)) { + Q_ASSERT(d != 0); + d->sendTimerEvent(wp); + return 0; + } + // we also use a Windows timer to send posted events when the message queue is full + Q_FALLTHROUGH(); + case WM_QT_SENDPOSTEDEVENTS: { const int localSerialNumber = d->serialNumber.load(); if (localSerialNumber != d->lastSerialNumber) { d->lastSerialNumber = localSerialNumber; q->sendPostedEvents(); } return 0; - } else if (message == WM_TIMER) { - Q_ASSERT(d != 0); - d->sendTimerEvent(wp); - return 0; } + } // switch (message) return DefWindowProc(hwnd, message, wp, lp); } @@ -683,7 +688,8 @@ void QEventDispatcherWin32::registerSocketNotifier(QSocketNotifier *notifier) if (sockfd < 0) { qWarning("QSocketNotifier: Internal error"); return; - } else if (notifier->thread() != thread() || thread() != QThread::currentThread()) { + } + if (notifier->thread() != thread() || thread() != QThread::currentThread()) { qWarning("QSocketNotifier: socket notifiers cannot be enabled from another thread"); return; } @@ -743,7 +749,8 @@ void QEventDispatcherWin32::unregisterSocketNotifier(QSocketNotifier *notifier) if (sockfd < 0) { qWarning("QSocketNotifier: Internal error"); return; - } else if (notifier->thread() != thread() || thread() != QThread::currentThread()) { + } + if (notifier->thread() != thread() || thread() != QThread::currentThread()) { qWarning("QSocketNotifier: socket notifiers cannot be disabled from another thread"); return; } @@ -789,7 +796,8 @@ void QEventDispatcherWin32::registerTimer(int timerId, int interval, Qt::TimerTy if (timerId < 1 || interval < 0 || !object) { qWarning("QEventDispatcherWin32::registerTimer: invalid arguments"); return; - } else if (object->thread() != thread() || thread() != QThread::currentThread()) { + } + if (object->thread() != thread() || thread() != QThread::currentThread()) { qWarning("QEventDispatcherWin32::registerTimer: timers cannot be started from another thread"); return; } @@ -987,14 +995,8 @@ int QEventDispatcherWin32::remainingTime(int timerId) WinTimerInfo *t; for (int i=0; itimerVec.size(); i++) { t = d->timerVec.at(i); - if (t && t->timerId == timerId) { // timer found - if (currentTime < t->timeout) { - // time to wait - return t->timeout - currentTime; - } else { - return 0; - } - } + if (t && t->timerId == timerId) // timer found, return time to wait + return t->timeout > currentTime ? t->timeout - currentTime : 0; } #ifndef QT_NO_DEBUG @@ -1054,7 +1056,8 @@ void QEventDispatcherWin32::closingDown() bool QEventDispatcherWin32::event(QEvent *e) { Q_D(QEventDispatcherWin32); - if (e->type() == QEvent::ZeroTimerEvent) { + switch (e->type()) { + case QEvent::ZeroTimerEvent: { QZeroTimerEvent *zte = static_cast(e); WinTimerInfo *t = d->timerDict.value(zte->timerId()); if (t) { @@ -1076,9 +1079,12 @@ bool QEventDispatcherWin32::event(QEvent *e) } } return true; - } else if (e->type() == QEvent::Timer) { - QTimerEvent *te = static_cast(e); - d->sendTimerEvent(te->timerId()); + } + case QEvent::Timer: + d->sendTimerEvent(static_cast(e)->timerId()); + break; + default: + break; } return QAbstractEventDispatcher::event(e); } diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp index 467398e039c..c1dba30e2b5 100644 --- a/src/corelib/kernel/qsharedmemory_win.cpp +++ b/src/corelib/kernel/qsharedmemory_win.cpp @@ -143,10 +143,7 @@ bool QSharedMemoryPrivate::create(int size) setErrorString(function); // hand is valid when it already exists unlike unix so explicitly check - if (error == QSharedMemory::AlreadyExists || !hand) - return false; - - return true; + return error != QSharedMemory::AlreadyExists && hand; } bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode) diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp index 5714f5236c8..caf51722cd2 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -260,31 +260,27 @@ DWORD WINAPI qt_adopted_thread_watcher_function(LPVOID) } const int handleIndex = offset + ret - WAIT_OBJECT_0; - if (handleIndex == 0){ - // New handle to watch was added. + if (handleIndex == 0) // New handle to watch was added. continue; - } else { -// printf("(qt) - qt_adopted_thread_watcher_function... called\n"); - const int qthreadIndex = handleIndex - 1; + const int qthreadIndex = handleIndex - 1; - qt_adopted_thread_watcher_mutex.lock(); - QThreadData *data = QThreadData::get2(qt_adopted_qthreads.at(qthreadIndex)); - qt_adopted_thread_watcher_mutex.unlock(); - if (data->isAdopted) { - QThread *thread = data->thread; - Q_ASSERT(thread); - QThreadPrivate *thread_p = static_cast(QObjectPrivate::get(thread)); - Q_UNUSED(thread_p) - Q_ASSERT(!thread_p->finished); - thread_p->finish(thread); - } - data->deref(); - - QMutexLocker lock(&qt_adopted_thread_watcher_mutex); - CloseHandle(qt_adopted_thread_handles.at(handleIndex)); - qt_adopted_thread_handles.remove(handleIndex); - qt_adopted_qthreads.remove(qthreadIndex); + qt_adopted_thread_watcher_mutex.lock(); + QThreadData *data = QThreadData::get2(qt_adopted_qthreads.at(qthreadIndex)); + qt_adopted_thread_watcher_mutex.unlock(); + if (data->isAdopted) { + QThread *thread = data->thread; + Q_ASSERT(thread); + auto thread_p = static_cast(QObjectPrivate::get(thread)); + Q_UNUSED(thread_p) + Q_ASSERT(!thread_p->finished); + QThreadPrivate::finish(thread); } + data->deref(); + + QMutexLocker lock(&qt_adopted_thread_watcher_mutex); + CloseHandle(qt_adopted_thread_handles.at(handleIndex)); + qt_adopted_thread_handles.remove(handleIndex); + qt_adopted_qthreads.remove(qthreadIndex); } QThreadData *threadData = reinterpret_cast(TlsGetValue(qt_current_thread_data_tls_index)); diff --git a/src/corelib/tools/qlocale_win.cpp b/src/corelib/tools/qlocale_win.cpp index e1a61fa9d75..4f7b76a0d4a 100644 --- a/src/corelib/tools/qlocale_win.cpp +++ b/src/corelib/tools/qlocale_win.cpp @@ -365,7 +365,7 @@ QVariant QSystemLocalePrivate::dayName(int day, QLocale::FormatType type) if (type == QLocale::LongFormat) return getLocaleInfo(long_day_map[day]); - else if (type == QLocale::NarrowFormat) + if (type == QLocale::NarrowFormat) return getLocaleInfo(narrow_day_map[day]); return getLocaleInfo(short_day_map[day]); } @@ -386,7 +386,7 @@ QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type) month -= 1; if (month < 0 || month > 11) - return QString(); + return QString(); LCTYPE lctype = (type == QLocale::ShortFormat || type == QLocale::NarrowFormat) ? short_month_map[month] : long_month_map[month]; @@ -988,7 +988,7 @@ LCID qt_inIsoNametoLCID(const char *name) // handle norwegian manually, the list above will fail if (!strncmp(name, "nb", 2)) return 0x0414; - else if (!strncmp(name, "nn", 2)) + if (!strncmp(name, "nn", 2)) return 0x0814; char n[64]; @@ -1099,8 +1099,7 @@ static QByteArray getWinLocaleName(LPWSTR id) id = qstrtoll(result.data(), 0, 0, &ok); if ( !ok || id == 0 || id < INT_MIN || id > INT_MAX ) return result; - else - return winLangCodeToIsoName( (int)id ); + return winLangCodeToIsoName(int(id)); } } diff --git a/src/corelib/tools/qtimezoneprivate_win.cpp b/src/corelib/tools/qtimezoneprivate_win.cpp index ca7ea24fc56..1bf2366748d 100644 --- a/src/corelib/tools/qtimezoneprivate_win.cpp +++ b/src/corelib/tools/qtimezoneprivate_win.cpp @@ -688,10 +688,10 @@ QString QWinTimeZonePrivate::displayName(QTimeZone::TimeType timeType, if (nameType == QTimeZone::OffsetName) { const QWinTransitionRule &rule = m_tranRules.at(ruleIndexForYear(m_tranRules, QDate::currentDate().year())); + int offset = rule.standardTimeBias; if (timeType == QTimeZone::DaylightTime) - return isoOffsetFormat((rule.standardTimeBias + rule.daylightTimeBias) * -60); - else - return isoOffsetFormat((rule.standardTimeBias) * -60); + offset += rule.daylightTimeBias; + return isoOffsetFormat(offset * -60); } switch (timeType) { From 101cb8e5d97f2f26ff0b3efd7b6e8b0e336e62be Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Thu, 30 Aug 2018 10:45:49 +0200 Subject: [PATCH 5/6] Make flatpak portal support to be used also by Snap applications Snap now uses xdg-desktop-portal for portal support. Add check for apps running in Snap and make them use portals by default. We also should be using different name for the platform theme used by sandboxed apps. Change-Id: Ibaa35b7549b3d94775d7edb937f729a300d071b6 Reviewed-by: Thiago Macieira --- src/gui/kernel/qguiapplication.cpp | 10 +-- .../genericunix/qgenericunixservices.cpp | 24 +++--- .../platformthemes/flatpak/flatpak.json | 3 - .../platformthemes/flatpak/flatpak.pro | 17 ---- src/plugins/platformthemes/platformthemes.pro | 2 +- .../{flatpak => xdgdesktopportal}/main.cpp | 16 ++-- .../qxdgdesktopportalfiledialog.cpp} | 80 +++++++++---------- .../qxdgdesktopportalfiledialog_p.h} | 28 +++---- .../qxdgdesktopportaltheme.cpp} | 80 +++++++++---------- .../qxdgdesktopportaltheme.h} | 18 ++--- .../xdgdesktopportal/xdgdesktopportal.json | 3 + .../xdgdesktopportal/xdgdesktopportal.pro | 17 ++++ 12 files changed, 150 insertions(+), 148 deletions(-) delete mode 100644 src/plugins/platformthemes/flatpak/flatpak.json delete mode 100644 src/plugins/platformthemes/flatpak/flatpak.pro rename src/plugins/platformthemes/{flatpak => xdgdesktopportal}/main.cpp (80%) rename src/plugins/platformthemes/{flatpak/qflatpakfiledialog.cpp => xdgdesktopportal/qxdgdesktopportalfiledialog.cpp} (82%) rename src/plugins/platformthemes/{flatpak/qflatpakfiledialog_p.h => xdgdesktopportal/qxdgdesktopportalfiledialog_p.h} (81%) rename src/plugins/platformthemes/{flatpak/qflatpaktheme.cpp => xdgdesktopportal/qxdgdesktopportaltheme.cpp} (65%) rename src/plugins/platformthemes/{flatpak/qflatpaktheme.h => xdgdesktopportal/qxdgdesktopportaltheme.h} (89%) create mode 100644 src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.json create mode 100644 src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.pro diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index bc1f83a9c8b..9bf2a33e2af 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -256,10 +256,10 @@ static inline void clearFontUnlocked() QGuiApplicationPrivate::app_font = 0; } -static bool checkRunningUnderFlatpak() +static bool checkNeedPortalSupport() { #if QT_CONFIG(dbus) - return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty(); + return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty() || qEnvironmentVariableIsSet("SNAP"); #else return false; #endif // QT_CONFIG(dbus) @@ -1225,9 +1225,9 @@ static void init_platform(const QString &pluginNamesWithArguments, const QString if (!platformThemeName.isEmpty()) themeNames.append(platformThemeName); - // 2) Special case - check whether we are in sandbox to use flatpak platform theme for portals support - if (checkRunningUnderFlatpak()) { - themeNames.append(QStringLiteral("flatpak")); + // 2) Special case - check whether it's a flatpak or snap app to use xdg-desktop-portal platform theme for portals support + if (checkNeedPortalSupport()) { + themeNames.append(QStringLiteral("xdgdesktopportal")); } // 3) Ask the platform integration for a list of theme names diff --git a/src/platformsupport/services/genericunix/qgenericunixservices.cpp b/src/platformsupport/services/genericunix/qgenericunixservices.cpp index 5b15cccaf17..67884cef923 100644 --- a/src/platformsupport/services/genericunix/qgenericunixservices.cpp +++ b/src/platformsupport/services/genericunix/qgenericunixservices.cpp @@ -50,7 +50,7 @@ #include #if QT_CONFIG(dbus) -// These QtCore includes are needed for flatpak support +// These QtCore includes are needed for xdg-desktop-portal support #include #include @@ -172,12 +172,12 @@ static inline bool launch(const QString &launcher, const QUrl &url) } #if QT_CONFIG(dbus) -static inline bool checkRunningUnderFlatpak() +static inline bool checkNeedPortalSupport() { - return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty(); + return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty() || qEnvironmentVariableIsSet("SNAP"); } -static inline bool flatpakOpenFile(const QUrl &url) +static inline bool xdgDesktopPortalOpenFile(const QUrl &url) { // DBus signature: // OpenFile (IN s parent_window, @@ -212,7 +212,7 @@ static inline bool flatpakOpenFile(const QUrl &url) return false; } -static inline bool flatpakOpenUrl(const QUrl &url) +static inline bool xdgDesktopPortalOpenUrl(const QUrl &url) { // DBus signature: // OpenURI (IN s parent_window, @@ -236,7 +236,7 @@ static inline bool flatpakOpenUrl(const QUrl &url) return !reply.isError(); } -static inline bool flatpakSendEmail(const QUrl &url) +static inline bool xdgDesktopPortalSendEmail(const QUrl &url) { // DBus signature: // ComposeEmail (IN s parent_window, @@ -294,15 +294,15 @@ bool QGenericUnixServices::openUrl(const QUrl &url) { if (url.scheme() == QLatin1String("mailto")) { #if QT_CONFIG(dbus) - if (checkRunningUnderFlatpak()) - return flatpakSendEmail(url); + if (checkNeedPortalSupport()) + return xdgDesktopPortalSendEmail(url); #endif return openDocument(url); } #if QT_CONFIG(dbus) - if (checkRunningUnderFlatpak()) - return flatpakOpenUrl(url); + if (checkNeedPortalSupport()) + return xdgDesktopPortalOpenUrl(url); #endif if (m_webBrowser.isEmpty() && !detectWebBrowser(desktopEnvironment(), true, &m_webBrowser)) { @@ -315,8 +315,8 @@ bool QGenericUnixServices::openUrl(const QUrl &url) bool QGenericUnixServices::openDocument(const QUrl &url) { #if QT_CONFIG(dbus) - if (checkRunningUnderFlatpak()) - return flatpakOpenFile(url); + if (checkNeedPortalSupport()) + return xdgDesktopPortalOpenFile(url); #endif if (m_documentLauncher.isEmpty() && !detectWebBrowser(desktopEnvironment(), false, &m_documentLauncher)) { diff --git a/src/plugins/platformthemes/flatpak/flatpak.json b/src/plugins/platformthemes/flatpak/flatpak.json deleted file mode 100644 index 71f834fd08d..00000000000 --- a/src/plugins/platformthemes/flatpak/flatpak.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys": [ "flatpak" ] -} diff --git a/src/plugins/platformthemes/flatpak/flatpak.pro b/src/plugins/platformthemes/flatpak/flatpak.pro deleted file mode 100644 index 1e5dbb7a6c4..00000000000 --- a/src/plugins/platformthemes/flatpak/flatpak.pro +++ /dev/null @@ -1,17 +0,0 @@ -TARGET = qflatpak - -PLUGIN_TYPE = platformthemes -PLUGIN_EXTENDS = - -PLUGIN_CLASS_NAME = QFlatpakThemePlugin -load(qt_plugin) - -QT += core-private dbus gui-private theme_support-private - -HEADERS += \ - qflatpaktheme.h \ - qflatpakfiledialog_p.h - -SOURCES += \ - main.cpp \ - qflatpaktheme.cpp \ - qflatpakfiledialog.cpp diff --git a/src/plugins/platformthemes/platformthemes.pro b/src/plugins/platformthemes/platformthemes.pro index 17b1d91c6a0..06ffc4cc9fa 100644 --- a/src/plugins/platformthemes/platformthemes.pro +++ b/src/plugins/platformthemes/platformthemes.pro @@ -1,6 +1,6 @@ TEMPLATE = subdirs QT_FOR_CONFIG += widgets-private -qtConfig(dbus):qtConfig(regularexpression): SUBDIRS += flatpak +qtConfig(dbus):qtConfig(regularexpression): SUBDIRS += xdgdesktopportal qtHaveModule(widgets):qtConfig(gtk3): SUBDIRS += gtk3 diff --git a/src/plugins/platformthemes/flatpak/main.cpp b/src/plugins/platformthemes/xdgdesktopportal/main.cpp similarity index 80% rename from src/plugins/platformthemes/flatpak/main.cpp rename to src/plugins/platformthemes/xdgdesktopportal/main.cpp index 7888eed8b21..64a03d479fd 100644 --- a/src/plugins/platformthemes/flatpak/main.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 Red Hat, Inc +** Copyright (C) 2017-2018 Red Hat, Inc ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -38,24 +38,26 @@ ****************************************************************************/ #include -#include "qflatpaktheme.h" +#include "qxdgdesktopportaltheme.h" QT_BEGIN_NAMESPACE -class QFlatpakThemePlugin : public QPlatformThemePlugin +class QXdgDesktopPortalThemePlugin : public QPlatformThemePlugin { Q_OBJECT - Q_PLUGIN_METADATA(IID QPlatformThemeFactoryInterface_iid FILE "flatpak.json") + Q_PLUGIN_METADATA(IID QPlatformThemeFactoryInterface_iid FILE "xdgdesktopportal.json") public: QPlatformTheme *create(const QString &key, const QStringList ¶ms) override; }; -QPlatformTheme *QFlatpakThemePlugin::create(const QString &key, const QStringList ¶ms) +QPlatformTheme *QXdgDesktopPortalThemePlugin::create(const QString &key, const QStringList ¶ms) { Q_UNUSED(params); - if (!key.compare(QLatin1String("flatpak"), Qt::CaseInsensitive)) - return new QFlatpakTheme; + if (!key.compare(QLatin1String("xdgdesktopportal"), Qt::CaseInsensitive) || + !key.compare(QLatin1String("flatpak"), Qt::CaseInsensitive) || + !key.compare(QLatin1String("snap"), Qt::CaseInsensitive)) + return new QXdgDesktopPortalTheme; return nullptr; } diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp similarity index 82% rename from src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp rename to src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp index 39b93bc4b82..cda267d24bc 100644 --- a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 Red Hat, Inc +** Copyright (C) 2017-2018 Red Hat, Inc ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -37,7 +37,7 @@ ** ****************************************************************************/ -#include "qflatpakfiledialog_p.h" +#include "qxdgdesktopportalfiledialog_p.h" #include @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE -QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::FilterCondition &filterCondition) +QDBusArgument &operator <<(QDBusArgument &arg, const QXdgDesktopPortalFileDialog::FilterCondition &filterCondition) { arg.beginStructure(); arg << filterCondition.type << filterCondition.pattern; @@ -64,20 +64,20 @@ QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::FilterC return arg; } -const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::FilterCondition &filterCondition) +const QDBusArgument &operator >>(const QDBusArgument &arg, QXdgDesktopPortalFileDialog::FilterCondition &filterCondition) { uint type; QString filterPattern; arg.beginStructure(); arg >> type >> filterPattern; - filterCondition.type = (QFlatpakFileDialog::ConditionType)type; + filterCondition.type = (QXdgDesktopPortalFileDialog::ConditionType)type; filterCondition.pattern = filterPattern; arg.endStructure(); return arg; } -QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::Filter filter) +QDBusArgument &operator <<(QDBusArgument &arg, const QXdgDesktopPortalFileDialog::Filter filter) { arg.beginStructure(); arg << filter.name << filter.filterConditions; @@ -85,10 +85,10 @@ QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::Filter return arg; } -const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::Filter &filter) +const QDBusArgument &operator >>(const QDBusArgument &arg, QXdgDesktopPortalFileDialog::Filter &filter) { QString name; - QFlatpakFileDialog::FilterConditionList filterConditions; + QXdgDesktopPortalFileDialog::FilterConditionList filterConditions; arg.beginStructure(); arg >> name >> filterConditions; filter.name = name; @@ -98,10 +98,10 @@ const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::F return arg; } -class QFlatpakFileDialogPrivate +class QXdgDesktopPortalFileDialogPrivate { public: - QFlatpakFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog) + QXdgDesktopPortalFileDialogPrivate(QPlatformFileDialogHelper *nativeFileDialog) : nativeFileDialog(nativeFileDialog) { } @@ -118,11 +118,11 @@ public: QPlatformFileDialogHelper *nativeFileDialog = nullptr; }; -QFlatpakFileDialog::QFlatpakFileDialog(QPlatformFileDialogHelper *nativeFileDialog) +QXdgDesktopPortalFileDialog::QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog) : QPlatformFileDialogHelper() - , d_ptr(new QFlatpakFileDialogPrivate(nativeFileDialog)) + , d_ptr(new QXdgDesktopPortalFileDialogPrivate(nativeFileDialog)) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) { connect(d->nativeFileDialog, SIGNAL(accept()), this, SIGNAL(accept())); @@ -130,13 +130,13 @@ QFlatpakFileDialog::QFlatpakFileDialog(QPlatformFileDialogHelper *nativeFileDial } } -QFlatpakFileDialog::~QFlatpakFileDialog() +QXdgDesktopPortalFileDialog::~QXdgDesktopPortalFileDialog() { } -void QFlatpakFileDialog::initializeDialog() +void QXdgDesktopPortalFileDialog::initializeDialog() { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) d->nativeFileDialog->setOptions(options()); @@ -162,9 +162,9 @@ void QFlatpakFileDialog::initializeDialog() setDirectory(options()->initialDirectory()); } -void QFlatpakFileDialog::openPortal() +void QXdgDesktopPortalFileDialog::openPortal() { - Q_D(const QFlatpakFileDialog); + Q_D(const QXdgDesktopPortalFileDialog); QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"), QLatin1String("/org/freedesktop/portal/desktop"), @@ -270,14 +270,14 @@ void QFlatpakFileDialog::openPortal() }); } -bool QFlatpakFileDialog::defaultNameFilterDisables() const +bool QXdgDesktopPortalFileDialog::defaultNameFilterDisables() const { return false; } -void QFlatpakFileDialog::setDirectory(const QUrl &directory) +void QXdgDesktopPortalFileDialog::setDirectory(const QUrl &directory) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) { d->nativeFileDialog->setOptions(options()); @@ -287,9 +287,9 @@ void QFlatpakFileDialog::setDirectory(const QUrl &directory) d->directory = directory.path(); } -QUrl QFlatpakFileDialog::directory() const +QUrl QXdgDesktopPortalFileDialog::directory() const { - Q_D(const QFlatpakFileDialog); + Q_D(const QXdgDesktopPortalFileDialog); if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) return d->nativeFileDialog->directory(); @@ -297,9 +297,9 @@ QUrl QFlatpakFileDialog::directory() const return d->directory; } -void QFlatpakFileDialog::selectFile(const QUrl &filename) +void QXdgDesktopPortalFileDialog::selectFile(const QUrl &filename) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) { d->nativeFileDialog->setOptions(options()); @@ -309,9 +309,9 @@ void QFlatpakFileDialog::selectFile(const QUrl &filename) d->selectedFiles << filename.path(); } -QList QFlatpakFileDialog::selectedFiles() const +QList QXdgDesktopPortalFileDialog::selectedFiles() const { - Q_D(const QFlatpakFileDialog); + Q_D(const QXdgDesktopPortalFileDialog); if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) return d->nativeFileDialog->selectedFiles(); @@ -323,9 +323,9 @@ QList QFlatpakFileDialog::selectedFiles() const return files; } -void QFlatpakFileDialog::setFilter() +void QXdgDesktopPortalFileDialog::setFilter() { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) { d->nativeFileDialog->setOptions(options()); @@ -333,9 +333,9 @@ void QFlatpakFileDialog::setFilter() } } -void QFlatpakFileDialog::selectNameFilter(const QString &filter) +void QXdgDesktopPortalFileDialog::selectNameFilter(const QString &filter) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) { d->nativeFileDialog->setOptions(options()); @@ -343,15 +343,15 @@ void QFlatpakFileDialog::selectNameFilter(const QString &filter) } } -QString QFlatpakFileDialog::selectedNameFilter() const +QString QXdgDesktopPortalFileDialog::selectedNameFilter() const { // TODO return QString(); } -void QFlatpakFileDialog::exec() +void QXdgDesktopPortalFileDialog::exec() { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog && (options()->fileMode() == QFileDialogOptions::Directory || options()->fileMode() == QFileDialogOptions::DirectoryOnly)) { d->nativeFileDialog->exec(); @@ -365,17 +365,17 @@ void QFlatpakFileDialog::exec() loop.exec(); } -void QFlatpakFileDialog::hide() +void QXdgDesktopPortalFileDialog::hide() { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (d->nativeFileDialog) d->nativeFileDialog->hide(); } -bool QFlatpakFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) +bool QXdgDesktopPortalFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); initializeDialog(); @@ -390,9 +390,9 @@ bool QFlatpakFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality wi return true; } -void QFlatpakFileDialog::gotResponse(uint response, const QVariantMap &results) +void QXdgDesktopPortalFileDialog::gotResponse(uint response, const QVariantMap &results) { - Q_D(QFlatpakFileDialog); + Q_D(QXdgDesktopPortalFileDialog); if (!response) { if (results.contains(QLatin1String("uris"))) diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h similarity index 81% rename from src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h rename to src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h index bd1dae209d2..c1f1a2c005a 100644 --- a/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportalfiledialog_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 Red Hat, Inc +** Copyright (C) 2017-2018 Red Hat, Inc ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. @@ -36,20 +36,20 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifndef QFLATPAKFILEDIALOG_P_H -#define QFLATPAKFILEDIALOG_P_H +#ifndef QXDGDESKTOPPORTALFILEDIALOG_P_H +#define QXDGDESKTOPPORTALFILEDIALOG_P_H #include #include QT_BEGIN_NAMESPACE -class QFlatpakFileDialogPrivate; +class QXdgDesktopPortalFileDialogPrivate; -class QFlatpakFileDialog : public QPlatformFileDialogHelper +class QXdgDesktopPortalFileDialog : public QPlatformFileDialogHelper { Q_OBJECT - Q_DECLARE_PRIVATE(QFlatpakFileDialog) + Q_DECLARE_PRIVATE(QXdgDesktopPortalFileDialog) public: enum ConditionType : uint { GlobalPattern = 0, @@ -69,8 +69,8 @@ public: }; typedef QVector FilterList; - QFlatpakFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr); - ~QFlatpakFileDialog(); + QXdgDesktopPortalFileDialog(QPlatformFileDialogHelper *nativeFileDialog = nullptr); + ~QXdgDesktopPortalFileDialog(); bool defaultNameFilterDisables() const override; QUrl directory() const override; @@ -92,15 +92,15 @@ private: void initializeDialog(); void openPortal(); - QScopedPointer d_ptr; + QScopedPointer d_ptr; }; QT_END_NAMESPACE -Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterCondition); -Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterConditionList); -Q_DECLARE_METATYPE(QFlatpakFileDialog::Filter); -Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterList); +Q_DECLARE_METATYPE(QXdgDesktopPortalFileDialog::FilterCondition); +Q_DECLARE_METATYPE(QXdgDesktopPortalFileDialog::FilterConditionList); +Q_DECLARE_METATYPE(QXdgDesktopPortalFileDialog::Filter); +Q_DECLARE_METATYPE(QXdgDesktopPortalFileDialog::FilterList); -#endif // QFLATPAKFILEDIALOG_P_H +#endif // QXDGDESKTOPPORTALFILEDIALOG_P_H diff --git a/src/plugins/platformthemes/flatpak/qflatpaktheme.cpp b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp similarity index 65% rename from src/plugins/platformthemes/flatpak/qflatpaktheme.cpp rename to src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp index 142d91a00b3..f07ca3f0986 100644 --- a/src/plugins/platformthemes/flatpak/qflatpaktheme.cpp +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.cpp @@ -37,8 +37,8 @@ ** ****************************************************************************/ -#include "qflatpaktheme.h" -#include "qflatpakfiledialog_p.h" +#include "qxdgdesktopportaltheme.h" +#include "qxdgdesktopportalfiledialog_p.h" #include #include @@ -47,14 +47,14 @@ QT_BEGIN_NAMESPACE -class QFlatpakThemePrivate : public QPlatformThemePrivate +class QXdgDesktopPortalThemePrivate : public QPlatformThemePrivate { public: - QFlatpakThemePrivate() + QXdgDesktopPortalThemePrivate() : QPlatformThemePrivate() { } - ~QFlatpakThemePrivate() + ~QXdgDesktopPortalThemePrivate() { delete baseTheme; } @@ -62,10 +62,10 @@ public: QPlatformTheme *baseTheme; }; -QFlatpakTheme::QFlatpakTheme() - : d_ptr(new QFlatpakThemePrivate) +QXdgDesktopPortalTheme::QXdgDesktopPortalTheme() + : d_ptr(new QXdgDesktopPortalThemePrivate) { - Q_D(QFlatpakTheme); + Q_D(QXdgDesktopPortalTheme); QStringList themeNames; themeNames += QGuiApplicationPrivate::platform_integration->themeNames(); @@ -92,33 +92,33 @@ QFlatpakTheme::QFlatpakTheme() d->baseTheme = new QPlatformTheme; } -QPlatformMenuItem* QFlatpakTheme::createPlatformMenuItem() const +QPlatformMenuItem* QXdgDesktopPortalTheme::createPlatformMenuItem() const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->createPlatformMenuItem(); } -QPlatformMenu* QFlatpakTheme::createPlatformMenu() const +QPlatformMenu* QXdgDesktopPortalTheme::createPlatformMenu() const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->createPlatformMenu(); } -QPlatformMenuBar* QFlatpakTheme::createPlatformMenuBar() const +QPlatformMenuBar* QXdgDesktopPortalTheme::createPlatformMenuBar() const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->createPlatformMenuBar(); } -void QFlatpakTheme::showPlatformMenuBar() +void QXdgDesktopPortalTheme::showPlatformMenuBar() { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->showPlatformMenuBar(); } -bool QFlatpakTheme::usePlatformNativeDialog(DialogType type) const +bool QXdgDesktopPortalTheme::usePlatformNativeDialog(DialogType type) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); if (type == FileDialog) return true; @@ -126,74 +126,74 @@ bool QFlatpakTheme::usePlatformNativeDialog(DialogType type) const return d->baseTheme->usePlatformNativeDialog(type); } -QPlatformDialogHelper* QFlatpakTheme::createPlatformDialogHelper(DialogType type) const +QPlatformDialogHelper* QXdgDesktopPortalTheme::createPlatformDialogHelper(DialogType type) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); if (type == FileDialog) { if (d->baseTheme->usePlatformNativeDialog(type)) - return new QFlatpakFileDialog(static_cast(d->baseTheme->createPlatformDialogHelper(type))); + return new QXdgDesktopPortalFileDialog(static_cast(d->baseTheme->createPlatformDialogHelper(type))); - return new QFlatpakFileDialog; + return new QXdgDesktopPortalFileDialog; } return d->baseTheme->createPlatformDialogHelper(type); } #ifndef QT_NO_SYSTEMTRAYICON -QPlatformSystemTrayIcon* QFlatpakTheme::createPlatformSystemTrayIcon() const +QPlatformSystemTrayIcon* QXdgDesktopPortalTheme::createPlatformSystemTrayIcon() const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->createPlatformSystemTrayIcon(); } #endif -const QPalette *QFlatpakTheme::palette(Palette type) const +const QPalette *QXdgDesktopPortalTheme::palette(Palette type) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->palette(type); } -const QFont* QFlatpakTheme::font(Font type) const +const QFont* QXdgDesktopPortalTheme::font(Font type) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->font(type); } -QVariant QFlatpakTheme::themeHint(ThemeHint hint) const +QVariant QXdgDesktopPortalTheme::themeHint(ThemeHint hint) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->themeHint(hint); } -QPixmap QFlatpakTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const +QPixmap QXdgDesktopPortalTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->standardPixmap(sp, size); } -QIcon QFlatpakTheme::fileIcon(const QFileInfo &fileInfo, +QIcon QXdgDesktopPortalTheme::fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions iconOptions) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->fileIcon(fileInfo, iconOptions); } -QIconEngine * QFlatpakTheme::createIconEngine(const QString &iconName) const +QIconEngine * QXdgDesktopPortalTheme::createIconEngine(const QString &iconName) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->createIconEngine(iconName); } -QList QFlatpakTheme::keyBindings(QKeySequence::StandardKey key) const +QList QXdgDesktopPortalTheme::keyBindings(QKeySequence::StandardKey key) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->keyBindings(key); } -QString QFlatpakTheme::standardButtonText(int button) const +QString QXdgDesktopPortalTheme::standardButtonText(int button) const { - Q_D(const QFlatpakTheme); + Q_D(const QXdgDesktopPortalTheme); return d->baseTheme->standardButtonText(button); } diff --git a/src/plugins/platformthemes/flatpak/qflatpaktheme.h b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.h similarity index 89% rename from src/plugins/platformthemes/flatpak/qflatpaktheme.h rename to src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.h index 87f79a23954..b72e6764192 100644 --- a/src/plugins/platformthemes/flatpak/qflatpaktheme.h +++ b/src/plugins/platformthemes/xdgdesktopportal/qxdgdesktopportaltheme.h @@ -37,20 +37,20 @@ ** ****************************************************************************/ -#ifndef QFLATPAKTHEME_H -#define QFLATPAKTHEME_H +#ifndef QXDGDESKTOPPORTALTHEME_H +#define QXDGDESKTOPPORTALTHEME_H #include QT_BEGIN_NAMESPACE -class QFlatpakThemePrivate; +class QXdgDesktopPortalThemePrivate; -class QFlatpakTheme : public QPlatformTheme +class QXdgDesktopPortalTheme : public QPlatformTheme { - Q_DECLARE_PRIVATE(QFlatpakTheme) + Q_DECLARE_PRIVATE(QXdgDesktopPortalTheme) public: - QFlatpakTheme(); + QXdgDesktopPortalTheme(); QPlatformMenuItem *createPlatformMenuItem() const override; QPlatformMenu *createPlatformMenu() const override; @@ -81,10 +81,10 @@ public: QString standardButtonText(int button) const override; private: - QScopedPointer d_ptr; - Q_DISABLE_COPY(QFlatpakTheme) + QScopedPointer d_ptr; + Q_DISABLE_COPY(QXdgDesktopPortalTheme) }; QT_END_NAMESPACE -#endif // QFLATPAKTHEME_H +#endif // QXDGDESKTOPPORTALTHEME_H diff --git a/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.json b/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.json new file mode 100644 index 00000000000..c69062d9a16 --- /dev/null +++ b/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "xdgdesktopportal", "flatpak", "snap" ] +} diff --git a/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.pro b/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.pro new file mode 100644 index 00000000000..0a71484cf93 --- /dev/null +++ b/src/plugins/platformthemes/xdgdesktopportal/xdgdesktopportal.pro @@ -0,0 +1,17 @@ +TARGET = qxdgdesktopportal + +PLUGIN_TYPE = platformthemes +PLUGIN_EXTENDS = - +PLUGIN_CLASS_NAME = QXdgDesktopPortalThemePlugin +load(qt_plugin) + +QT += core-private dbus gui-private theme_support-private + +HEADERS += \ + qxdgdesktopportaltheme.h \ + qxdgdesktopportalfiledialog_p.h + +SOURCES += \ + main.cpp \ + qxdgdesktopportaltheme.cpp \ + qxdgdesktopportalfiledialog.cpp From e646ab2ab5491659f7aa028485b7502a06d4788d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Aug 2018 09:26:02 +0200 Subject: [PATCH 6/6] Windows code: Fix to prefer ranged-for, as clang-tidy advises Change-Id: Id9bb21855ae832cdbbc456326226ec72b634672e Reviewed-by: Edward Welbourne Reviewed-by: Luca Beldi Reviewed-by: Thiago Macieira --- src/corelib/io/qsettings_win.cpp | 14 ++++++-------- src/corelib/kernel/qeventdispatcher_win.cpp | 7 ++----- src/corelib/thread/qwaitcondition_win.cpp | 6 ++---- src/corelib/tools/qlocale_win.cpp | 6 +++--- .../fontdatabases/windows/qwindowsfontdatabase.cpp | 2 +- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index 751db0e0152..1881d0dc7eb 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -630,11 +630,9 @@ void QWinSettingsPrivate::remove(const QString &uKey) deleteChildGroups(handle, access); if (rKey.isEmpty()) { - QStringList childKeys = childKeysOrGroups(handle, QSettingsPrivate::ChildKeys); - - for (int i = 0; i < childKeys.size(); ++i) { - QString group = childKeys.at(i); + const QStringList childKeys = childKeysOrGroups(handle, QSettingsPrivate::ChildKeys); + for (const QString &group : childKeys) { LONG res = RegDeleteValue(handle, reinterpret_cast(group.utf16())); if (res != ERROR_SUCCESS) { qWarning("QSettings: RegDeleteValue failed on subkey \"%s\": %s", @@ -755,8 +753,8 @@ bool QWinSettingsPrivate::get(const QString &uKey, QVariant *value) const { QString rKey = escapedKey(uKey); - for (int i = 0; i < regList.size(); ++i) { - HKEY handle = regList.at(i).handle(); + for (const RegistryKey &r : regList) { + HKEY handle = r.handle(); if (handle != 0 && readKey(handle, rKey, value)) return true; @@ -772,8 +770,8 @@ QStringList QWinSettingsPrivate::children(const QString &uKey, ChildSpec spec) c NameSet result; QString rKey = escapedKey(uKey); - for (int i = 0; i < regList.size(); ++i) { - HKEY parent_handle = regList.at(i).handle(); + for (const RegistryKey &r : regList) { + HKEY parent_handle = r.handle(); if (parent_handle == 0) continue; HKEY handle = openKey(parent_handle, KEY_READ, rKey, access); diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 20fac34de78..0bddf89b158 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -894,8 +894,7 @@ QEventDispatcherWin32::registeredTimers(QObject *object) const Q_D(const QEventDispatcherWin32); QList list; - for (int i = 0; i < d->timerVec.size(); ++i) { - const WinTimerInfo *t = d->timerVec.at(i); + for (const WinTimerInfo *t : qAsConst(d->timerVec)) { if (t && t->obj == object) list << TimerInfo(t->timerId, t->interval, t->timerType); } @@ -992,9 +991,7 @@ int QEventDispatcherWin32::remainingTime(int timerId) quint64 currentTime = qt_msectime(); - WinTimerInfo *t; - for (int i=0; itimerVec.size(); i++) { - t = d->timerVec.at(i); + for (const WinTimerInfo *t : qAsConst(d->timerVec)) { if (t && t->timerId == timerId) // timer found, return time to wait return t->timeout > currentTime ? t->timeout - currentTime : 0; } diff --git a/src/corelib/thread/qwaitcondition_win.cpp b/src/corelib/thread/qwaitcondition_win.cpp index 534456a935c..a6ad95b3973 100644 --- a/src/corelib/thread/qwaitcondition_win.cpp +++ b/src/corelib/thread/qwaitcondition_win.cpp @@ -223,8 +223,7 @@ void QWaitCondition::wakeOne() { // wake up the first waiting thread in the queue QMutexLocker locker(&d->mtx); - for (int i = 0; i < d->queue.size(); ++i) { - QWaitConditionEvent *current = d->queue.at(i); + for (QWaitConditionEvent *current : qAsConst(d->queue)) { if (current->wokenUp) continue; SetEvent(current->event); @@ -237,8 +236,7 @@ void QWaitCondition::wakeAll() { // wake up the all threads in the queue QMutexLocker locker(&d->mtx); - for (int i = 0; i < d->queue.size(); ++i) { - QWaitConditionEvent *current = d->queue.at(i); + for (QWaitConditionEvent *current : qAsConst(d->queue)) { SetEvent(current->event); current->wokenUp = true; } diff --git a/src/corelib/tools/qlocale_win.cpp b/src/corelib/tools/qlocale_win.cpp index 4f7b76a0d4a..ebc44300462 100644 --- a/src/corelib/tools/qlocale_win.cpp +++ b/src/corelib/tools/qlocale_win.cpp @@ -1001,9 +1001,9 @@ LCID qt_inIsoNametoLCID(const char *name) ++c; } - for (int i = 0; i < windows_to_iso_count; ++i) { - if (!strcmp(n, windows_to_iso_list[i].iso_name)) - return windows_to_iso_list[i].windows_code; + for (const WindowsToISOListElt &i : windows_to_iso_list) { + if (!strcmp(n, i.iso_name)) + return i.windows_code; } return LOCALE_USER_DEFAULT; } diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 385a4eaac5a..c70d507b995 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -1605,7 +1605,7 @@ QStringList QWindowsFontDatabase::addApplicationFont(const QByteArray &fontData, void QWindowsFontDatabase::removeApplicationFonts() { - foreach (const WinApplicationFont &font, m_applicationFonts) { + for (const WinApplicationFont &font : qAsConst(m_applicationFonts)) { if (font.handle) { RemoveFontMemResourceEx(font.handle); } else {