UI: Cleanup frontend event handling

This adds a function to OBSBasic to call on_event, so every
time a event is called, the api variable doesn't have to be
checked everytime.
This commit is contained in:
cg2121 2024-06-18 14:18:22 -05:00
parent fb3e571ce8
commit 02f5db4ab2
6 changed files with 72 additions and 130 deletions

View file

@ -305,8 +305,8 @@ bool OBSBasic::CreateProfile(const std::string &newName, bool create_new,
return false;
}
if (api && !rename)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
if (!rename)
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
config_set_string(App()->GlobalConfig(), "Basic", "Profile",
newName.c_str());
@ -355,9 +355,9 @@ bool OBSBasic::CreateProfile(const std::string &newName, bool create_new,
wizard.exec();
}
if (api && !rename) {
api->on_event(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
if (!rename) {
OnEvent(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
}
return true;
}
@ -451,8 +451,7 @@ void OBSBasic::DeleteProfile(const QString &profileName)
DeleteProfile(name.c_str(), profileDir);
RefreshProfiles();
config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
if (api)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
}
void OBSBasic::RefreshProfiles()
@ -539,8 +538,7 @@ void OBSBasic::on_actionRenameProfile_triggered()
RefreshProfiles();
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_RENAMED);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_RENAMED);
}
void OBSBasic::on_actionRemoveProfile_triggered(bool skipConfirmation)
@ -589,8 +587,7 @@ void OBSBasic::on_actionRemoveProfile_triggered(bool skipConfirmation)
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
newPath.resize(newPath_len);
@ -626,10 +623,8 @@ void OBSBasic::on_actionRemoveProfile_triggered(bool skipConfirmation)
Auth::Load();
if (api) {
api->on_event(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
if (needsRestart) {
QMessageBox::StandardButton button = OBSMessageBox::question(
@ -768,8 +763,7 @@ void OBSBasic::ChangeProfile()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGING);
path.resize(path_len);
@ -811,8 +805,7 @@ void OBSBasic::ChangeProfile()
blog(LOG_INFO, "Switched to profile '%s' (%s)", newName, newDir);
blog(LOG_INFO, "------------------------------------------------");
if (api)
api->on_event(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PROFILE_CHANGED);
if (needsRestart) {
QMessageBox::StandardButton button = OBSMessageBox::question(

View file

@ -168,8 +168,7 @@ bool OBSBasic::AddSceneCollection(bool create_new, const QString &qname)
RefreshSceneCollections();
};
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
new_collection(file, name);
@ -179,10 +178,8 @@ bool OBSBasic::AddSceneCollection(bool create_new, const QString &qname)
UpdateTitleBar();
if (api) {
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED);
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
return true;
}
@ -294,8 +291,7 @@ void OBSBasic::on_actionRenameSceneCollection_triggered()
UpdateTitleBar();
RefreshSceneCollections();
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_RENAMED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_RENAMED);
}
void OBSBasic::on_actionRemoveSceneCollection_triggered()
@ -339,8 +335,7 @@ void OBSBasic::on_actionRemoveSceneCollection_triggered()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
oldFile.insert(0, path);
/* os_rename() overwrites if necessary, only the .bak file will remain. */
@ -360,10 +355,8 @@ void OBSBasic::on_actionRemoveSceneCollection_triggered()
UpdateTitleBar();
if (api) {
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED);
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
}
void OBSBasic::on_actionImportSceneCollection_triggered()
@ -461,8 +454,7 @@ void OBSBasic::ChangeSceneCollection()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGING);
SaveProjectNow();
@ -480,6 +472,5 @@ void OBSBasic::ChangeSceneCollection()
UpdateTitleBar();
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED);
}

View file

@ -56,9 +56,7 @@ ScreenshotObj::~ScreenshotObj()
main->lastScreenshot = path;
if (main->api)
main->api->on_event(
OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN);
main->OnEvent(OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN);
}
}
}

View file

@ -267,10 +267,8 @@ void OBSBasic::TransitionStopped()
EnableTransitionWidgets(true);
UpdatePreviewProgramIndicators();
if (api) {
api->on_event(OBS_FRONTEND_EVENT_TRANSITION_STOPPED);
api->on_event(OBS_FRONTEND_EVENT_SCENE_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_STOPPED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
swapScene = nullptr;
}
@ -371,8 +369,7 @@ void OBSBasic::TransitionToScene(OBSSource source, bool force,
if (force) {
obs_transition_set(transition, source);
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
} else {
int duration = ui->transitionDuration->value();
@ -450,8 +447,7 @@ void OBSBasic::SetTransition(OBSSource transition)
ui->transitionRemove->setEnabled(configurable);
ui->transitionProps->setEnabled(configurable);
if (api)
api->on_event(OBS_FRONTEND_EVENT_TRANSITION_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_CHANGED);
}
OBSSource OBSBasic::GetCurrentTransition()
@ -509,9 +505,7 @@ void OBSBasic::AddTransition(const char *id)
CreatePropertiesWindow(source);
obs_source_release(source);
if (api)
api->on_event(
OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
ClearQuickTransitionWidgets();
RefreshQuickTransitions();
@ -566,8 +560,7 @@ void OBSBasic::on_transitionRemove_clicked()
ui->transitions->removeItem(idx);
if (api)
api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
ClearQuickTransitionWidgets();
RefreshQuickTransitions();
@ -607,9 +600,7 @@ void OBSBasic::RenameTransition(OBSSource transition)
if (idx != -1) {
ui->transitions->setItemText(idx, QT_UTF8(name.c_str()));
if (api)
api->on_event(
OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
ClearQuickTransitionWidgets();
RefreshQuickTransitions();
@ -643,9 +634,7 @@ void OBSBasic::on_transitionProps_clicked()
void OBSBasic::on_transitionDuration_valueChanged()
{
if (api) {
api->on_event(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
}
QuickTransition *OBSBasic::GetQuickTransition(int id)
@ -714,9 +703,7 @@ void OBSBasic::SetCurrentScene(OBSSource scene, bool force)
outputHandler
->UpdateVirtualCamOutputSource();
if (api)
api->on_event(
OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
break;
}
}
@ -968,8 +955,7 @@ void OBSBasic::TBarChanged(int value)
obs_transition_set_manual_time(transition,
(float)value / T_BAR_PRECISION_F);
if (api)
api->on_event(OBS_FRONTEND_EVENT_TBAR_VALUE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_TBAR_VALUE_CHANGED);
}
int OBSBasic::GetTbarPosition()
@ -1668,8 +1654,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled)
ui->previewLayout->setAlignment(programOptions,
Qt::AlignCenter);
if (api)
api->on_event(OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED);
OnEvent(OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED);
blog(LOG_INFO, "Switched to Preview/Program mode");
blog(LOG_INFO, "-----------------------------"
@ -1707,8 +1692,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled)
ui->transitions->setEnabled(true);
tBarActive = false;
if (api)
api->on_event(OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED);
OnEvent(OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED);
blog(LOG_INFO, "Switched to regular Preview mode");
blog(LOG_INFO, "-----------------------------"

View file

@ -617,10 +617,8 @@ OBSBasic::OBSBasic(QWidget *parent)
connect(ui->scenes, &SceneTree::scenesReordered,
[]() { OBSProjector::UpdateMultiviewProjectors(); });
connect(App(), &OBSApp::StyleChanged, this, [this]() {
if (api)
api->on_event(OBS_FRONTEND_EVENT_THEME_CHANGED);
});
connect(App(), &OBSApp::StyleChanged, this,
[this]() { OnEvent(OBS_FRONTEND_EVENT_THEME_CHANGED); });
QActionGroup *actionGroup = new QActionGroup(this);
actionGroup->addAction(ui->actionSceneListMode);
@ -1443,10 +1441,8 @@ retryScene:
if (vcamEnabled)
outputHandler->UpdateVirtualCamOutputSource();
if (api) {
api->on_event(OBS_FRONTEND_EVENT_SCENE_CHANGED);
api->on_event(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
}
OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
}
#define SERVICE_PATH "service.json"
@ -2525,8 +2521,7 @@ void OBSBasic::OBSInit()
void OBSBasic::OnFirstLoad()
{
if (api)
api->on_event(OBS_FRONTEND_EVENT_FINISHED_LOADING);
OnEvent(OBS_FRONTEND_EVENT_FINISHED_LOADING);
#ifdef WHATSNEW_ENABLED
/* Attempt to load init screen if available */
@ -3352,8 +3347,7 @@ void OBSBasic::AddScene(OBSSource source)
OBSProjector::UpdateMultiviewProjectors();
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
}
void OBSBasic::RemoveScene(OBSSource source)
@ -3388,8 +3382,7 @@ void OBSBasic::RemoveScene(OBSSource source)
OBSProjector::UpdateMultiviewProjectors();
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
}
static bool select_one(obs_scene_t * /* scene */, obs_sceneitem_t *item,
@ -4481,8 +4474,7 @@ void OBSBasic::RemoveSelectedScene()
RemoveSceneAndReleaseNested(source);
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
}
void OBSBasic::ReorderSources(OBSScene scene)
@ -5107,8 +5099,7 @@ void OBSBasic::ClearSceneData()
obs_enum_scenes(cb, nullptr);
obs_enum_sources(cb, nullptr);
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP);
OnEvent(OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP);
undo_s.clear();
@ -5287,8 +5278,7 @@ void OBSBasic::closeEvent(QCloseEvent *event)
ClearExtraBrowserDocks();
#endif
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN);
OnEvent(OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN);
disableSaving++;
@ -5296,8 +5286,7 @@ void OBSBasic::closeEvent(QCloseEvent *event)
* sources, etc) so that all references are released before shutdown */
ClearSceneData();
if (api)
api->on_event(OBS_FRONTEND_EVENT_EXIT);
OnEvent(OBS_FRONTEND_EVENT_EXIT);
// Destroys the frontend API so plugins can't continue calling it
obs_frontend_set_callbacks_internal(nullptr);
@ -5537,8 +5526,7 @@ void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current,
if (vcamEnabled && vcamConfig.type == VCamOutputType::PreviewOutput)
outputHandler->UpdateVirtualCamOutputSource();
if (api)
api->on_event(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED);
UpdateContextBar();
}
@ -6881,8 +6869,7 @@ void OBSBasic::SceneNameEdited(QWidget *editor)
ui->scenesDock->addAction(renameScene);
if (api)
api->on_event(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
OnEvent(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
}
void OBSBasic::OpenFilters(OBSSource source)
@ -7116,8 +7103,7 @@ void OBSBasic::StartStreaming()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTING);
OnEvent(OBS_FRONTEND_EVENT_STREAMING_STARTING);
SaveProject();
@ -7472,8 +7458,7 @@ void OBSBasic::StreamDelayStopping(int sec)
ui->statusbar->StreamDelayStopping(sec);
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STOPPING);
OnEvent(OBS_FRONTEND_EVENT_STREAMING_STOPPING);
}
void OBSBasic::StreamingStart()
@ -7504,8 +7489,7 @@ void OBSBasic::StreamingStart()
}
#endif
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTED);
OnEvent(OBS_FRONTEND_EVENT_STREAMING_STARTED);
OnActivate();
@ -7525,8 +7509,7 @@ void OBSBasic::StreamStopping()
sysTrayStream->setText(QTStr("Basic.Main.StoppingStreaming"));
streamingStopping = true;
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STOPPING);
OnEvent(OBS_FRONTEND_EVENT_STREAMING_STOPPING);
}
void OBSBasic::StreamingStop(int code, QString last_error)
@ -7587,8 +7570,7 @@ void OBSBasic::StreamingStop(int code, QString last_error)
}
streamingStopping = false;
if (api)
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STOPPED);
OnEvent(OBS_FRONTEND_EVENT_STREAMING_STOPPED);
OnDeactivate();
@ -7720,8 +7702,7 @@ void OBSBasic::StartRecording()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTING);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_STARTING);
SaveProject();
@ -7736,8 +7717,7 @@ void OBSBasic::RecordStopping()
sysTrayRecord->setText(QTStr("Basic.Main.StoppingRecording"));
recordingStopping = true;
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STOPPING);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_STOPPING);
}
void OBSBasic::StopRecording()
@ -7759,8 +7739,7 @@ void OBSBasic::RecordingStart()
sysTrayRecord->setText(QTStr("Basic.Main.StopRecording"));
recordingStopping = false;
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTED);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_STARTED);
if (!diskFullTimer->isActive())
diskFullTimer->start(1000);
@ -7834,8 +7813,7 @@ void OBSBasic::RecordingStop(int code, QString last_error)
}
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STOPPED);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_STOPPED);
if (diskFullTimer->isActive())
diskFullTimer->stop();
@ -7906,8 +7884,7 @@ void OBSBasic::StartReplayBuffer()
return;
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING);
OnEvent(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING);
SaveProject();
@ -7929,8 +7906,7 @@ void OBSBasic::ReplayBufferStopping()
QTStr("Basic.Main.StoppingReplayBuffer"));
replayBufferStopping = true;
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING);
OnEvent(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING);
}
void OBSBasic::StopReplayBuffer()
@ -7958,8 +7934,7 @@ void OBSBasic::ReplayBufferStart()
QTStr("Basic.Main.StopReplayBuffer"));
replayBufferStopping = false;
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED);
OnEvent(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED);
OnActivate();
@ -7998,8 +7973,7 @@ void OBSBasic::ReplayBufferSaved()
lastReplay = path;
calldata_free(&cd);
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED);
OnEvent(OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED);
AutoRemux(QT_UTF8(path.c_str()));
}
@ -8043,8 +8017,7 @@ void OBSBasic::ReplayBufferStop(int code)
QSystemTrayIcon::Warning);
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED);
OnEvent(OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED);
OnDeactivate();
}
@ -8086,8 +8059,7 @@ void OBSBasic::OnVirtualCamStart()
if (sysTrayVirtualCam)
sysTrayVirtualCam->setText(QTStr("Basic.Main.StopVirtualCam"));
if (api)
api->on_event(OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED);
OnEvent(OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED);
OnActivate();
@ -8104,8 +8076,7 @@ void OBSBasic::OnVirtualCamStop(int)
if (sysTrayVirtualCam)
sysTrayVirtualCam->setText(QTStr("Basic.Main.StartVirtualCam"));
if (api)
api->on_event(OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED);
OnEvent(OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED);
blog(LOG_INFO, VIRTUAL_CAM_STOP);
@ -10733,8 +10704,7 @@ void OBSBasic::PauseRecording()
trayIconFile));
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_PAUSED);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_PAUSED);
if (os_atomic_load_bool(&replaybuf_active))
ShowReplayBufferPauseWarning();
@ -10771,8 +10741,7 @@ void OBSBasic::UnpauseRecording()
trayIconFile));
}
if (api)
api->on_event(OBS_FRONTEND_EVENT_RECORDING_UNPAUSED);
OnEvent(OBS_FRONTEND_EVENT_RECORDING_UNPAUSED);
}
}
@ -11096,3 +11065,9 @@ float OBSBasic::GetDevicePixelRatio()
{
return dpi;
}
void OBSBasic::OnEvent(enum obs_frontend_event event)
{
if (api)
api->on_event(event);
}

View file

@ -225,6 +225,7 @@ class OBSBasic : public OBSMainWindow {
private:
obs_frontend_callbacks *api = nullptr;
void OnEvent(enum obs_frontend_event event);
std::shared_ptr<Auth> auth;