summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNils Petter Skålerud <[email protected]>2025-05-27 10:17:37 +0200
committerVolker Hilsheimer <[email protected]>2025-06-06 12:00:48 +0000
commit521388f72398d494196886d2d4e1a50a05a33f76 (patch)
tree7ad709348f729307bffea90463045d429b7c5160
parent4505123c2e231e4f5dac7afac78a21439ddb6da3 (diff)
QCapturableWindow: Add internal helper factory functionHEADdev
Currently there is some code duplication across backends when it comes to constructing QCapturableWindow instances. Additionally, they rely on us always catching potential memory leaks. This patch adds an internal factory function that constructs the QCapturableWindow. No functional changes. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-136135 Change-Id: I1d1ffdd082fb181a408e9de9b265990a75bfbe02 Reviewed-by: Volker Hilsheimer <[email protected]>
-rw-r--r--src/multimedia/recording/qcapturablewindow_p.h13
-rw-r--r--src/plugins/multimedia/ffmpeg/qcgcapturablewindows.mm9
-rw-r--r--src/plugins/multimedia/ffmpeg/qwincapturablewindows.cpp7
-rw-r--r--src/plugins/multimedia/ffmpeg/qx11capturablewindows.cpp7
4 files changed, 23 insertions, 13 deletions
diff --git a/src/multimedia/recording/qcapturablewindow_p.h b/src/multimedia/recording/qcapturablewindow_p.h
index 9cb186a77..c5687c781 100644
--- a/src/multimedia/recording/qcapturablewindow_p.h
+++ b/src/multimedia/recording/qcapturablewindow_p.h
@@ -8,6 +8,8 @@
#include <QtCore/QSharedData>
#include <QtMultimedia/qcapturablewindow.h>
+#include <memory>
+
//
// W A R N I N G
// -------------
@@ -28,12 +30,21 @@ public:
QString description;
Id id = 0;
+ QCapturableWindowPrivate(Id id, QString &&description)
+ : QSharedData()
+ , description{ std::move(description) }
+ , id{ id }
+ {}
+
static const QCapturableWindowPrivate *handle(const QCapturableWindow &window)
{
return window.d.get();
}
- QCapturableWindow create() { return QCapturableWindow(this); }
+ [[nodiscard]] static QCapturableWindow create(Id id, QString &&description)
+ {
+ return { new QCapturableWindowPrivate(id, std::move(description)) };
+ }
};
QT_END_NAMESPACE
diff --git a/src/plugins/multimedia/ffmpeg/qcgcapturablewindows.mm b/src/plugins/multimedia/ffmpeg/qcgcapturablewindows.mm
index 80a7b6dbf..9a31eabe1 100644
--- a/src/plugins/multimedia/ffmpeg/qcgcapturablewindows.mm
+++ b/src/plugins/multimedia/ffmpeg/qcgcapturablewindows.mm
@@ -27,12 +27,13 @@ QList<QCapturableWindow> QCGCapturableWindows::windows() const
"CGWindowID size is not compatible with kCFNumberSInt32Type");
CFNumberGetValue(windowNumber, kCFNumberSInt32Type, &windowId);
- auto windowData = std::make_unique<QCapturableWindowPrivate>();
- windowData->id = static_cast<QCapturableWindowPrivate::Id>(windowId);
+ QString windowDescription;
if (windowName)
- windowData->description = QString::fromCFString(windowName);
+ windowDescription = QString::fromCFString(windowName);
- result.push_back(windowData.release()->create());
+ result.push_back(QCapturableWindowPrivate::create(
+ static_cast<QCapturableWindowPrivate::Id>(windowId),
+ std::move(windowDescription)));
}
return result;
diff --git a/src/plugins/multimedia/ffmpeg/qwincapturablewindows.cpp b/src/plugins/multimedia/ffmpeg/qwincapturablewindows.cpp
index aac77aec4..7af964a07 100644
--- a/src/plugins/multimedia/ffmpeg/qwincapturablewindows.cpp
+++ b/src/plugins/multimedia/ffmpeg/qwincapturablewindows.cpp
@@ -52,10 +52,9 @@ QList<QCapturableWindow> QWinCapturableWindows::windows() const
auto& windows = *reinterpret_cast<QList<QCapturableWindow>*>(lParam);
- auto windowData = std::make_unique<QCapturableWindowPrivate>();
- windowData->id = reinterpret_cast<QCapturableWindowPrivate::Id>(hwnd);
- windowData->description = windowTitle(hwnd);
- windows.push_back(windowData.release()->create());
+ windows.push_back(QCapturableWindowPrivate::create(
+ reinterpret_cast<QCapturableWindowPrivate::Id>(hwnd),
+ windowTitle(hwnd)));
return TRUE;
};
diff --git a/src/plugins/multimedia/ffmpeg/qx11capturablewindows.cpp b/src/plugins/multimedia/ffmpeg/qx11capturablewindows.cpp
index a09f80d6a..85c30d632 100644
--- a/src/plugins/multimedia/ffmpeg/qx11capturablewindows.cpp
+++ b/src/plugins/multimedia/ffmpeg/qx11capturablewindows.cpp
@@ -73,10 +73,9 @@ QList<QCapturableWindow> QX11CapturableWindows::windows() const
if (!qIsX11WindowValid(display, windowId))
continue;
- auto windowData = std::make_unique<QCapturableWindowPrivate>();
- windowData->id = static_cast<QCapturableWindowPrivate::Id>(windowId);
- windowData->description = qGetX11WindowTitle(display, windowId).value_or(QString());
- result.push_back(windowData.release()->create());
+ result.push_back(QCapturableWindowPrivate::create(
+ static_cast<QCapturableWindowPrivate::Id>(windowId),
+ qGetX11WindowTitle(display, windowId).value_or(QString())));
}
return result;