Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 62 additions & 11 deletions frontend/OBSApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@
#include <QFile>
#endif

#ifdef _WIN32
#include <QSessionManager>
#else
#ifndef _WIN32
#include <QSocketNotifier>
#endif

Expand Down Expand Up @@ -78,6 +77,7 @@ extern string opt_starting_profile;

#ifndef _WIN32
int OBSApp::sigintFd[2];
int OBSApp::sigtermFd[2];
#endif

// GPU hint exports for AMD/NVIDIA laptops
Expand Down Expand Up @@ -868,6 +868,8 @@ OBSApp::OBSApp(int &argc, char **argv, profiler_name_store_t *store)
profilerNameStore(store),
appLaunchUUID_(QUuid::createUuid())
{
installNativeEventFilter(new OBS::NativeEventFilter);

/* fix float handling */
#if defined(Q_OS_UNIX)
if (!setlocale(LC_NUMERIC, "C"))
Expand All @@ -879,9 +881,14 @@ OBSApp::OBSApp(int &argc, char **argv, profiler_name_store_t *store)
socketpair(AF_UNIX, SOCK_STREAM, 0, sigintFd);
snInt = new QSocketNotifier(sigintFd[1], QSocketNotifier::Read, this);
connect(snInt, &QSocketNotifier::activated, this, &OBSApp::ProcessSigInt);
#else
connect(qApp, &QGuiApplication::commitDataRequest, this, &OBSApp::commitData);

/* Handle SIGTERM */
socketpair(AF_UNIX, SOCK_STREAM, 0, sigtermFd);
snTerm = new QSocketNotifier(sigtermFd[1], QSocketNotifier::Read, this);
connect(snTerm, &QSocketNotifier::activated, this, &OBSApp::ProcessSigTerm);
#endif
connect(qApp, &QGuiApplication::commitDataRequest, this, &OBSApp::commitData, Qt::DirectConnection);

if (multi) {
crashHandler_ = std::make_unique<OBS::CrashHandler>();
} else {
Expand Down Expand Up @@ -1229,7 +1236,20 @@ bool OBSApp::OBSInit()
mainWindow = new OBSBasic();

mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);
connect(mainWindow, &OBSBasic::destroyed, this, &OBSApp::quit);

connect(QApplication::instance(), &QApplication::aboutToQuit, this, [this]() {
crashHandler_->applicationShutdownHandler();

/* Ensure OBSMainWindow gets closed */
if (mainWindow) {
mainWindow->close();
delete mainWindow;
}

if (libobs_initialized) {
applicationShutdown();
}
});

mainWindow->OBSInit();

Expand Down Expand Up @@ -1748,6 +1768,14 @@ void OBSApp::SigIntSignalHandler(int s)
char a = 1;
send(sigintFd[0], &a, sizeof(a), 0);
}

void OBSApp::SigTermSignalHandler(int s)
{
UNUSED_PARAMETER(s);

char a = 1;
send(sigtermFd[0], &a, sizeof(a), 0);
}
#endif

void OBSApp::ProcessSigInt(void)
Expand All @@ -1759,20 +1787,39 @@ void OBSApp::ProcessSigInt(void)
recv(sigintFd[1], &tmp, sizeof(tmp), 0);

OBSBasic *main = OBSBasic::Get();
if (main)
if (main) {
main->saveAll();
main->close();
}
#endif
}

void OBSApp::ProcessSigTerm(void)
{
#ifndef _WIN32
char tmp;
recv(sigtermFd[1], &tmp, sizeof(tmp), 0);

OBSBasic *main = OBSBasic::Get();
if (main) {
main->saveAll();
}

quit();
#endif
}

#ifdef _WIN32
void OBSApp::commitData(QSessionManager &manager)
{
if (auto main = App()->GetMainWindow()) {
QMetaObject::invokeMethod(main, "close", Qt::QueuedConnection);
manager.cancel();
OBSBasic *main = OBSBasic::Get();
if (main) {
main->saveAll();

if (manager.allowsInteraction() && main->shouldPromptForClose()) {
manager.cancel();
}
}
}
#endif

void OBSApp::applicationShutdown() noexcept
{
Expand All @@ -1784,6 +1831,10 @@ void OBSApp::applicationShutdown() noexcept
delete snInt;
close(sigintFd[0]);
close(sigintFd[1]);

delete snTerm;
close(sigtermFd[0]);
close(sigtermFd[1]);
#endif

#ifdef __APPLE__
Expand Down
13 changes: 10 additions & 3 deletions frontend/OBSApp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@
#pragma once

#include <utility/OBSTheme.hpp>
#include <utility/NativeEventFilter.hpp>
#include <widgets/OBSMainWindow.hpp>

#include <obs-frontend-api.h>
#include <util/platform.h>
#include <util/profiler.hpp>
#include <util/util.hpp>

#include <QAbstractNativeEventFilter>
#include <QApplication>
#include <QPalette>
#include <QPointer>
Expand Down Expand Up @@ -61,6 +63,8 @@ struct UpdateBranch {
class OBSApp : public QApplication {
Q_OBJECT

friend class OBS::NativeEventFilter;

private:
QUuid appLaunchUUID_;
std::unique_ptr<OBS::CrashHandler> crashHandler_;
Expand Down Expand Up @@ -117,12 +121,13 @@ class OBSApp : public QApplication {
#ifndef _WIN32
static int sigintFd[2];
QSocketNotifier *snInt = nullptr;
#else
private slots:
void commitData(QSessionManager &manager);

static int sigtermFd[2];
QSocketNotifier *snTerm = nullptr;
#endif

private slots:
void commitData(QSessionManager &manager);
void addLogLine(int logLevel, const QString &message);
void themeFileChanged(const QString &);
void applicationShutdown() noexcept;
Expand Down Expand Up @@ -212,6 +217,7 @@ private slots:
inline void PopUITranslation() { translatorHooks.pop_front(); }
#ifndef _WIN32
static void SigIntSignalHandler(int);
static void SigTermSignalHandler(int);
#endif

void loadAppModules(struct obs_module_failure_info &mfi);
Expand All @@ -222,6 +228,7 @@ private slots:
public slots:
void Exec(VoidFunc func);
void ProcessSigInt();
void ProcessSigTerm();

signals:
void logLineAdded(int logLevel, const QString &message);
Expand Down
2 changes: 1 addition & 1 deletion frontend/cmake/feature-idian-playground.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ option(ENABLE_IDIAN_PLAYGROUND "Enable building custom idian widget demo window"
if(ENABLE_IDIAN_PLAYGROUND)
target_sources(
obs-studio
PRIVATE forms/OBSIdianPlayground.ui dialogs/OBSIdianPlayground.hpp dialogs/OBSIdianPlayground.cpp
PRIVATE dialogs/OBSIdianPlayground.hpp dialogs/OBSIdianPlayground.cpp forms/OBSIdianPlayground.ui
)
target_enable_feature(obs-studio "Idian Playground" ENABLE_IDIAN_PLAYGROUND)
else()
Expand Down
8 changes: 4 additions & 4 deletions frontend/cmake/feature-macos-update.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ endif()
target_sources(
obs-studio
PRIVATE
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
utility/crypto-helpers-mac.mm
utility/crypto-helpers.hpp
utility/models/branches.hpp
utility/models/whatsnew.hpp
utility/update-helpers.cpp
utility/update-helpers.hpp
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
)

target_link_libraries(
Expand Down
8 changes: 4 additions & 4 deletions frontend/cmake/feature-whatsnew.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ if(ENABLE_WHATSNEW AND TARGET OBS::browser-panels)
target_sources(
obs-studio
PRIVATE
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
utility/crypto-helpers-mbedtls.cpp
utility/crypto-helpers.hpp
utility/models/whatsnew.hpp
utility/update-helpers.cpp
utility/update-helpers.hpp
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
)
endif()

Expand Down
6 changes: 5 additions & 1 deletion frontend/cmake/os-freebsd.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
target_sources(
obs-studio
PRIVATE utility/platform-x11.cpp utility/system-info-posix.cpp utility/CrashHandler_FreeBSD.cpp
PRIVATE
utility/CrashHandler_FreeBSD.cpp
utility/NativeEventFilter.cpp
utility/platform-x11.cpp
utility/system-info-posix.cpp
)
target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}")
target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus procstat)
Expand Down
9 changes: 8 additions & 1 deletion frontend/cmake/os-linux.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
target_sources(obs-studio PRIVATE utility/platform-x11.cpp utility/system-info-posix.cpp utility/CrashHandler_Linux.cpp)
target_sources(
obs-studio
PRIVATE
utility/CrashHandler_Linux.cpp
utility/NativeEventFilter.cpp
utility/platform-x11.cpp
utility/system-info-posix.cpp
)
target_compile_definitions(
obs-studio
PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}" $<$<BOOL:${ENABLE_PORTABLE_CONFIG}>:ENABLE_PORTABLE_CONFIG>
Expand Down
1 change: 1 addition & 0 deletions frontend/cmake/os-macos.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ target_sources(
dialogs/OBSPermissions.hpp
forms/OBSPermissions.ui
utility/CrashHandler_MacOS.mm
utility/NativeEventFilter.cpp
utility/platform-osx.mm
utility/system-info-macos.mm
)
Expand Down
9 changes: 5 additions & 4 deletions frontend/cmake/os-windows.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ target_sources(
utility/AutoUpdateThread.cpp
utility/AutoUpdateThread.hpp
utility/CrashHandler_Windows.cpp
utility/NativeEventFilter_Windows.cpp
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
utility/crypto-helpers-mbedtls.cpp
utility/crypto-helpers.hpp
utility/models/branches.hpp
Expand All @@ -33,10 +38,6 @@ target_sources(
utility/system-info-windows.cpp
utility/update-helpers.cpp
utility/update-helpers.hpp
utility/WhatsNewBrowserInitThread.cpp
utility/WhatsNewBrowserInitThread.hpp
utility/WhatsNewInfoThread.cpp
utility/WhatsNewInfoThread.hpp
utility/win-dll-blocklist.c
)

Expand Down
2 changes: 1 addition & 1 deletion frontend/cmake/ui-models.cmake
Original file line number Diff line number Diff line change
@@ -1 +1 @@
target_sources(obs-studio PRIVATE models/SceneCollection.cpp models/SceneCollection.hpp models/Rect.cpp models/Rect.hpp)
target_sources(obs-studio PRIVATE models/Rect.cpp models/Rect.hpp models/SceneCollection.cpp models/SceneCollection.hpp)
2 changes: 1 addition & 1 deletion frontend/cmake/ui-qt.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ target_sources(
forms/OBSMissingFiles.ui
forms/OBSRemux.ui
forms/StatusBarWidget.ui
forms/obs.qrc
forms/PluginManagerWindow.ui
forms/obs.qrc
forms/source-toolbar/browser-source-toolbar.ui
forms/source-toolbar/color-source-toolbar.ui
forms/source-toolbar/device-select-toolbar.ui
Expand Down
25 changes: 13 additions & 12 deletions frontend/cmake/ui-utility.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@ target_sources(
PRIVATE
utility/AdvancedOutput.cpp
utility/AdvancedOutput.hpp
utility/audio-encoders.cpp
utility/audio-encoders.hpp
utility/BaseLexer.hpp
utility/BasicOutputHandler.cpp
utility/BasicOutputHandler.hpp
utility/CrashHandler.cpp
utility/CrashHandler.hpp
utility/display-helpers.hpp
utility/FFmpegCodec.cpp
utility/FFmpegCodec.hpp
utility/FFmpegFormat.cpp
Expand All @@ -22,19 +19,15 @@ target_sources(
utility/GoLiveAPI_Network.hpp
utility/GoLiveAPI_PostData.cpp
utility/GoLiveAPI_PostData.hpp
utility/item-widget-helpers.cpp
utility/item-widget-helpers.hpp
utility/MissingFilesModel.cpp
utility/MissingFilesModel.hpp
utility/MissingFilesPathItemDelegate.cpp
utility/MissingFilesPathItemDelegate.hpp
utility/models/multitrack-video.hpp
utility/MultitrackVideoError.cpp
utility/MultitrackVideoError.hpp
utility/MultitrackVideoOutput.cpp
utility/MultitrackVideoOutput.hpp
utility/obf.c
utility/obf.h
utility/NativeEventFilter.hpp
utility/OBSCanvas.cpp
utility/OBSCanvas.hpp
utility/OBSEventFilter.hpp
Expand All @@ -44,7 +37,6 @@ target_sources(
utility/OBSThemeVariable.hpp
utility/OBSTranslator.cpp
utility/OBSTranslator.hpp
utility/platform.hpp
utility/QuickTransition.cpp
utility/QuickTransition.hpp
utility/RemoteTextThread.cpp
Expand All @@ -64,10 +56,19 @@ target_sources(
utility/SimpleOutput.hpp
utility/StartMultiTrackVideoStreamingGuard.hpp
utility/SurfaceEventFilter.hpp
utility/system-info.hpp
utility/undo_stack.cpp
utility/undo_stack.hpp
utility/VCamConfig.hpp
utility/VolumeMeterTimer.cpp
utility/VolumeMeterTimer.hpp
utility/audio-encoders.cpp
utility/audio-encoders.hpp
utility/display-helpers.hpp
utility/item-widget-helpers.cpp
utility/item-widget-helpers.hpp
utility/models/multitrack-video.hpp
utility/obf.c
utility/obf.h
utility/platform.hpp
utility/system-info.hpp
utility/undo_stack.cpp
utility/undo_stack.hpp
)
2 changes: 1 addition & 1 deletion frontend/docks/OBSDock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void OBSDock::closeEvent(QCloseEvent *event)
};

bool warned = config_get_bool(App()->GetUserConfig(), "General", "WarnedAboutClosingDocks");
if (!OBSBasic::Get()->Closing() && !warned) {
if (!OBSBasic::Get()->isClosing() && !warned) {
QMetaObject::invokeMethod(App(), "Exec", Qt::QueuedConnection, Q_ARG(VoidFunc, msgBox));
}

Expand Down
Loading
Loading