提交 9447a06b 编写于 作者: C Colin Edwards

Revert "UI: Remove unnecessary global variables"

This reverts commit f91d3baf.

From @pkv: the reason some of these vars were global is because Qt was not deleting them at all; as a result memory leaks have been reintroduced for: previewProjector, trayMenu, studioProgramProjector, multiviewProjectorMenu ;
上级 27a0d9e5
...@@ -271,7 +271,8 @@ OBSBasic::OBSBasic(QWidget *parent) ...@@ -271,7 +271,8 @@ OBSBasic::OBSBasic(QWidget *parent)
connect(windowHandle(), &QWindow::screenChanged, displayResize); connect(windowHandle(), &QWindow::screenChanged, displayResize);
connect(ui->preview, &OBSQTDisplay::DisplayResized, displayResize); connect(ui->preview, &OBSQTDisplay::DisplayResized, displayResize);
QObject *shortcutFilter = CreateShortcutFilter(); delete shortcutFilter;
shortcutFilter = CreateShortcutFilter();
installEventFilter(shortcutFilter); installEventFilter(shortcutFilter);
stringstream name; stringstream name;
...@@ -1821,10 +1822,12 @@ void OBSBasic::OBSInit() ...@@ -1821,10 +1822,12 @@ void OBSBasic::OBSInit()
ui->viewMenu->addSeparator(); ui->viewMenu->addSeparator();
QMenu *multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector")); multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector"));
ui->viewMenu->addMenu(multiviewProjectorMenu); ui->viewMenu->addMenu(multiviewProjectorMenu);
AddProjectorMenuMonitors(multiviewProjectorMenu, this, AddProjectorMenuMonitors(multiviewProjectorMenu, this,
SLOT(OpenMultiviewProjector())); SLOT(OpenMultiviewProjector()));
connect(ui->viewMenu->menuAction(), &QAction::hovered, this,
&OBSBasic::UpdateMultiviewProjectorMenu);
ui->viewMenu->addAction(QTStr("MultiviewWindowed"), this, ui->viewMenu->addAction(QTStr("MultiviewWindowed"), this,
SLOT(OpenMultiviewWindow())); SLOT(OpenMultiviewWindow()));
...@@ -2043,6 +2046,13 @@ void OBSBasic::ShowWhatsNew(const QString &url) ...@@ -2043,6 +2046,13 @@ void OBSBasic::ShowWhatsNew(const QString &url)
#endif #endif
} }
void OBSBasic::UpdateMultiviewProjectorMenu()
{
multiviewProjectorMenu->clear();
AddProjectorMenuMonitors(multiviewProjectorMenu, this,
SLOT(OpenMultiviewProjector()));
}
void OBSBasic::InitHotkeys() void OBSBasic::InitHotkeys()
{ {
ProfileScope("OBSBasic::InitHotkeys"); ProfileScope("OBSBasic::InitHotkeys");
...@@ -2299,6 +2309,21 @@ OBSBasic::~OBSBasic() ...@@ -2299,6 +2309,21 @@ OBSBasic::~OBSBasic()
if (updateCheckThread && updateCheckThread->isRunning()) if (updateCheckThread && updateCheckThread->isRunning())
updateCheckThread->wait(); updateCheckThread->wait();
delete multiviewProjectorMenu;
delete previewProjector;
delete studioProgramProjector;
delete previewProjectorSource;
delete previewProjectorMain;
delete sourceProjector;
delete sceneProjectorMenu;
delete scaleFilteringMenu;
delete colorMenu;
delete colorWidgetAction;
delete colorSelect;
delete deinterlaceMenu;
delete perSceneTransitionMenu;
delete shortcutFilter;
delete trayMenu;
delete programOptions; delete programOptions;
delete program; delete program;
...@@ -4231,7 +4256,8 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos) ...@@ -4231,7 +4256,8 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
popup.addSeparator(); popup.addSeparator();
QMenu *sceneProjectorMenu = new QMenu(QTStr("SceneProjector")); delete sceneProjectorMenu;
sceneProjectorMenu = new QMenu(QTStr("SceneProjector"));
AddProjectorMenuMonitors(sceneProjectorMenu, this, AddProjectorMenuMonitors(sceneProjectorMenu, this,
SLOT(OpenSceneProjector())); SLOT(OpenSceneProjector()));
popup.addMenu(sceneProjectorMenu); popup.addMenu(sceneProjectorMenu);
...@@ -4246,7 +4272,8 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos) ...@@ -4246,7 +4272,8 @@ void OBSBasic::on_scenes_customContextMenuRequested(const QPoint &pos)
popup.addSeparator(); popup.addSeparator();
QMenu *perSceneTransitionMenu = CreatePerSceneTransitionMenu(); delete perSceneTransitionMenu;
perSceneTransitionMenu = CreatePerSceneTransitionMenu();
popup.addMenu(perSceneTransitionMenu); popup.addMenu(perSceneTransitionMenu);
/* ---------------------- */ /* ---------------------- */
...@@ -4557,6 +4584,13 @@ ColorSelect::ColorSelect(QWidget *parent) ...@@ -4557,6 +4584,13 @@ ColorSelect::ColorSelect(QWidget *parent)
void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
{ {
QMenu popup(this); QMenu popup(this);
delete previewProjectorSource;
delete sourceProjector;
delete scaleFilteringMenu;
delete colorMenu;
delete colorWidgetAction;
delete colorSelect;
delete deinterlaceMenu;
if (preview) { if (preview) {
QAction *action = popup.addAction( QAction *action = popup.addAction(
...@@ -4571,8 +4605,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) ...@@ -4571,8 +4605,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
popup.addAction(ui->actionLockPreview); popup.addAction(ui->actionLockPreview);
popup.addMenu(ui->scalingMenu); popup.addMenu(ui->scalingMenu);
QMenu *previewProjectorSource = previewProjectorSource = new QMenu(QTStr("PreviewProjector"));
new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjectorSource, this, AddProjectorMenuMonitors(previewProjectorSource, this,
SLOT(OpenPreviewProjector())); SLOT(OpenPreviewProjector()));
...@@ -4629,9 +4662,9 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) ...@@ -4629,9 +4662,9 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
bool hasAudio = (flags & OBS_SOURCE_AUDIO) == OBS_SOURCE_AUDIO; bool hasAudio = (flags & OBS_SOURCE_AUDIO) == OBS_SOURCE_AUDIO;
QAction *action; QAction *action;
QMenu *colorMenu = new QMenu(QTStr("ChangeBG")); colorMenu = new QMenu(QTStr("ChangeBG"));
QWidgetAction *colorWidgetAction = new QWidgetAction(colorMenu); colorWidgetAction = new QWidgetAction(colorMenu);
ColorSelect *colorSelect = new ColorSelect(colorMenu); colorSelect = new ColorSelect(colorMenu);
popup.addMenu(AddBackgroundColorMenu( popup.addMenu(AddBackgroundColorMenu(
colorMenu, colorWidgetAction, colorSelect, sceneItem)); colorMenu, colorWidgetAction, colorSelect, sceneItem));
popup.addAction(QTStr("Rename"), this, popup.addAction(QTStr("Rename"), this,
...@@ -4654,7 +4687,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) ...@@ -4654,7 +4687,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
ui->actionVerticalCenter->setEnabled(!lock); ui->actionVerticalCenter->setEnabled(!lock);
ui->actionHorizontalCenter->setEnabled(!lock); ui->actionHorizontalCenter->setEnabled(!lock);
QMenu *sourceProjector = new QMenu(QTStr("SourceProjector")); sourceProjector = new QMenu(QTStr("SourceProjector"));
AddProjectorMenuMonitors(sourceProjector, this, AddProjectorMenuMonitors(sourceProjector, this,
SLOT(OpenSourceProjector())); SLOT(OpenSourceProjector()));
...@@ -4674,8 +4707,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) ...@@ -4674,8 +4707,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
} }
if (isAsyncVideo) { if (isAsyncVideo) {
QMenu *deinterlaceMenu = deinterlaceMenu = new QMenu(QTStr("Deinterlacing"));
new QMenu(QTStr("Deinterlacing"));
popup.addMenu( popup.addMenu(
AddDeinterlacingMenu(deinterlaceMenu, source)); AddDeinterlacingMenu(deinterlaceMenu, source));
popup.addSeparator(); popup.addSeparator();
...@@ -4693,7 +4725,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) ...@@ -4693,7 +4725,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview)
if (width == 0 || height == 0) if (width == 0 || height == 0)
resizeOutput->setEnabled(false); resizeOutput->setEnabled(false);
QMenu *scaleFilteringMenu = new QMenu(QTStr("ScaleFiltering")); scaleFilteringMenu = new QMenu(QTStr("ScaleFiltering"));
popup.addMenu( popup.addMenu(
AddScaleFilteringMenu(scaleFilteringMenu, sceneItem)); AddScaleFilteringMenu(scaleFilteringMenu, sceneItem));
popup.addSeparator(); popup.addSeparator();
...@@ -5353,7 +5385,10 @@ void OBSBasic::StreamDelayStarting(int sec) ...@@ -5353,7 +5385,10 @@ void OBSBasic::StreamDelayStarting(int sec)
sysTrayStream->setEnabled(true); sysTrayStream->setEnabled(true);
} }
QMenu *startStreamMenu = new QMenu(); if (!startStreamMenu.isNull())
startStreamMenu->deleteLater();
startStreamMenu = new QMenu();
startStreamMenu->addAction(QTStr("Basic.Main.StopStreaming"), this, startStreamMenu->addAction(QTStr("Basic.Main.StopStreaming"), this,
SLOT(StopStreaming())); SLOT(StopStreaming()));
startStreamMenu->addAction(QTStr("Basic.Main.ForceStopStreaming"), this, startStreamMenu->addAction(QTStr("Basic.Main.ForceStopStreaming"), this,
...@@ -5376,7 +5411,10 @@ void OBSBasic::StreamDelayStopping(int sec) ...@@ -5376,7 +5411,10 @@ void OBSBasic::StreamDelayStopping(int sec)
sysTrayStream->setEnabled(true); sysTrayStream->setEnabled(true);
} }
QMenu *startStreamMenu = new QMenu(); if (!startStreamMenu.isNull())
startStreamMenu->deleteLater();
startStreamMenu = new QMenu();
startStreamMenu->addAction(QTStr("Basic.Main.StartStreaming"), this, startStreamMenu->addAction(QTStr("Basic.Main.StartStreaming"), this,
SLOT(StartStreaming())); SLOT(StartStreaming()));
startStreamMenu->addAction(QTStr("Basic.Main.ForceStopStreaming"), this, startStreamMenu->addAction(QTStr("Basic.Main.ForceStopStreaming"), this,
...@@ -5499,7 +5537,11 @@ void OBSBasic::StreamingStop(int code, QString last_error) ...@@ -5499,7 +5537,11 @@ void OBSBasic::StreamingStop(int code, QString last_error)
QSystemTrayIcon::Warning); QSystemTrayIcon::Warning);
} }
ui->streamButton->setMenu(nullptr); if (!startStreamMenu.isNull()) {
ui->streamButton->setMenu(nullptr);
startStreamMenu->deleteLater();
startStreamMenu = nullptr;
}
} }
void OBSBasic::AutoRemux() void OBSBasic::AutoRemux()
...@@ -6066,6 +6108,7 @@ void OBSBasic::on_program_customContextMenuRequested(const QPoint &) ...@@ -6066,6 +6108,7 @@ void OBSBasic::on_program_customContextMenuRequested(const QPoint &)
void OBSBasic::PreviewDisabledMenu(const QPoint &pos) void OBSBasic::PreviewDisabledMenu(const QPoint &pos)
{ {
QMenu popup(this); QMenu popup(this);
delete previewProjectorMain;
QAction *action = QAction *action =
popup.addAction(QTStr("Basic.Main.PreviewConextMenu.Enable"), popup.addAction(QTStr("Basic.Main.PreviewConextMenu.Enable"),
...@@ -6073,7 +6116,7 @@ void OBSBasic::PreviewDisabledMenu(const QPoint &pos) ...@@ -6073,7 +6116,7 @@ void OBSBasic::PreviewDisabledMenu(const QPoint &pos)
action->setCheckable(true); action->setCheckable(true);
action->setChecked(obs_display_enabled(ui->preview->GetDisplay())); action->setChecked(obs_display_enabled(ui->preview->GetDisplay()));
QMenu *previewProjectorMain = new QMenu(QTStr("PreviewProjector")); previewProjectorMain = new QMenu(QTStr("PreviewProjector"));
AddProjectorMenuMonitors(previewProjectorMain, this, AddProjectorMenuMonitors(previewProjectorMain, this,
SLOT(OpenPreviewProjector())); SLOT(OpenPreviewProjector()));
...@@ -7105,10 +7148,9 @@ void OBSBasic::SystemTrayInit() ...@@ -7105,10 +7148,9 @@ void OBSBasic::SystemTrayInit()
trayIcon.data()); trayIcon.data());
exit = new QAction(QTStr("Exit"), trayIcon.data()); exit = new QAction(QTStr("Exit"), trayIcon.data());
QMenu *trayMenu = new QMenu; trayMenu = new QMenu;
QMenu *previewProjector = new QMenu(QTStr("PreviewProjector")); previewProjector = new QMenu(QTStr("PreviewProjector"));
QMenu *studioProgramProjector = studioProgramProjector = new QMenu(QTStr("StudioProgramProjector"));
new QMenu(QTStr("StudioProgramProjector"));
AddProjectorMenuMonitors(previewProjector, this, AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector())); SLOT(OpenPreviewProjector()));
AddProjectorMenuMonitors(studioProgramProjector, this, AddProjectorMenuMonitors(studioProgramProjector, this,
...@@ -7141,6 +7183,14 @@ void OBSBasic::SystemTrayInit() ...@@ -7141,6 +7183,14 @@ void OBSBasic::SystemTrayInit()
void OBSBasic::IconActivated(QSystemTrayIcon::ActivationReason reason) void OBSBasic::IconActivated(QSystemTrayIcon::ActivationReason reason)
{ {
// Refresh projector list
previewProjector->clear();
studioProgramProjector->clear();
AddProjectorMenuMonitors(previewProjector, this,
SLOT(OpenPreviewProjector()));
AddProjectorMenuMonitors(studioProgramProjector, this,
SLOT(OpenStudioProgramProjector()));
if (reason == QSystemTrayIcon::Trigger) { if (reason == QSystemTrayIcon::Trigger) {
EnablePreviewDisplay(previewEnabled && !isVisible()); EnablePreviewDisplay(previewEnabled && !isVisible());
ToggleShowHide(); ToggleShowHide();
......
...@@ -242,6 +242,8 @@ private: ...@@ -242,6 +242,8 @@ private:
QPointer<QWidget> extraBrowsers; QPointer<QWidget> extraBrowsers;
QPointer<QWidget> importer; QPointer<QWidget> importer;
QPointer<QMenu> startStreamMenu;
QPointer<QPushButton> transitionButton; QPointer<QPushButton> transitionButton;
QPointer<QPushButton> replayBufferButton; QPointer<QPushButton> replayBufferButton;
QPointer<QHBoxLayout> replayLayout; QPointer<QHBoxLayout> replayLayout;
...@@ -254,6 +256,21 @@ private: ...@@ -254,6 +256,21 @@ private:
QPointer<QAction> sysTrayReplayBuffer; QPointer<QAction> sysTrayReplayBuffer;
QPointer<QAction> showHide; QPointer<QAction> showHide;
QPointer<QAction> exit; QPointer<QAction> exit;
QPointer<QMenu> trayMenu;
QPointer<QMenu> previewProjector;
QPointer<QMenu> studioProgramProjector;
QPointer<QMenu> multiviewProjectorMenu;
QPointer<QMenu> previewProjectorSource;
QPointer<QMenu> previewProjectorMain;
QPointer<QMenu> sceneProjectorMenu;
QPointer<QMenu> sourceProjector;
QPointer<QMenu> scaleFilteringMenu;
QPointer<QMenu> colorMenu;
QPointer<QWidgetAction> colorWidgetAction;
QPointer<ColorSelect> colorSelect;
QPointer<QMenu> deinterlaceMenu;
QPointer<QMenu> perSceneTransitionMenu;
QPointer<QObject> shortcutFilter;
QPointer<QWidget> programWidget; QPointer<QWidget> programWidget;
QPointer<QVBoxLayout> programLayout; QPointer<QVBoxLayout> programLayout;
...@@ -262,6 +279,8 @@ private: ...@@ -262,6 +279,8 @@ private:
QScopedPointer<QThread> patronJsonThread; QScopedPointer<QThread> patronJsonThread;
std::string patronJson; std::string patronJson;
void UpdateMultiviewProjectorMenu();
void DrawBackdrop(float cx, float cy); void DrawBackdrop(float cx, float cy);
void SetupEncoders(); void SetupEncoders();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册