Notify caller when desktop stream controls close

This commit is contained in:
evgeny committed 2026-10-20 20:33:23 +02:00
1 parent 6dab5db56a
commit 44db42180e
2 files changed
+17

No files matched your search

@@ -17,6 +17,8 @@
#include <QSignalBlocker>
#include <QJsonDocument>
#include <QScopedValueRollback>
#include <QCloseEvent>
#include <QShortcut>
#ifdef HAVE_STREAM_CAPTURE
#include <QVideoWidget>
#include <QVideoSink>
@@ -37,6 +39,8 @@ StreamPublishWindow::StreamPublishWindow(StreamPublishEngine* engine, uint64_t g
else m_settings = document.object();
}
setWindowTitle(text("Broadcast stream")); resize(720, 720); setMinimumSize(460, 480);
auto* escape = new QShortcut(QKeySequence(Qt::Key_Escape), this); escape->setContext(Qt::WidgetWithChildrenShortcut);
connect(escape, &QShortcut::activated, this, &QWidget::close);
auto* layout = new QVBoxLayout(this);
#ifdef HAVE_STREAM_CAPTURE
auto* preview = new QVideoWidget(this); m_preview = preview;
@@ -166,6 +170,15 @@ StreamPublishWindow::StreamPublishWindow(StreamPublishEngine* engine, uint64_t g
refreshSources(); refreshCodecs(); restoreSettings(); synchronize();
}
void StreamPublishWindow::closeEvent(QCloseEvent* event) {
QWidget::closeEvent(event);
if (event->isAccepted()) {
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "desktop publisher controls closed group=%llx active=%d",
(unsigned long long)m_group, m_engine->active());
emit closed();
}
}
/* В БД храним пользовательский выбор, а не runtime handles источника и рассчитанный auto-битрейт. */
void StreamPublishWindow::restoreSettings() {
if (m_settings.isEmpty() || m_engine->active()) return;
@@ -9,12 +9,16 @@ class QPushButton;
class QCheckBox;
class QButtonGroup;
class QSpinBox;
class QCloseEvent;
class StreamPublishWindow : public QWidget {
Q_OBJECT
public:
StreamPublishWindow(StreamPublishEngine* engine, uint64_t group, QWidget* parent = nullptr, const QString& settings = {});
signals:
void settingsChanged(const QString& settings);
void closed(); // Возвращает фокус окну, из которого открыто управление; публикация продолжает работать.
protected:
void closeEvent(QCloseEvent* event) override;
private:
StreamPublishEngine* m_engine;
uint64_t m_group;