UI: Fix replay buffer frontend event not triggering

The frontend API event OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED was not
being triggered when hotkeys were used because it was only set to
trigger when the replay buffer button was clicked, not when a hotkey was
used. This fixes it so that the frontend event sends a signal to the
frontend so that hotkeys will actually work.
This commit is contained in:
jp9000 2020-10-12 16:55:01 -07:00
parent a38cd03e06
commit 3d51602690
5 changed files with 24 additions and 0 deletions

View File

@ -140,6 +140,13 @@ static void OBSReplayBufferStopping(void *data, calldata_t *params)
UNUSED_PARAMETER(params);
}
static void OBSReplayBufferSaved(void *data, calldata_t *)
{
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
QMetaObject::invokeMethod(output->main, "ReplayBufferSaved",
Qt::QueuedConnection);
}
static void OBSStartVirtualCam(void *data, calldata_t *params)
{
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
@ -437,6 +444,8 @@ SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_)
replayBufferStopping.Connect(signal, "stopping",
OBSReplayBufferStopping,
this);
replayBufferSaved.Connect(signal, "saved",
OBSReplayBufferSaved, this);
}
fileOutput = obs_output_create(

View File

@ -33,6 +33,7 @@ struct BasicOutputHandler {
OBSSignal streamStopping;
OBSSignal recordStopping;
OBSSignal replayBufferStopping;
OBSSignal replayBufferSaved;
inline BasicOutputHandler(OBSBasic *main_);

View File

@ -6141,6 +6141,10 @@ void OBSBasic::ReplayBufferSave()
obs_output_get_proc_handler(outputHandler->replayBuffer);
proc_handler_call(ph, "save", &cd);
calldata_free(&cd);
}
void OBSBasic::ReplayBufferSaved()
{
if (api)
api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED);
}

View File

@ -573,6 +573,7 @@ public slots:
void ReplayBufferStart();
void ReplayBufferSave();
void ReplayBufferSaved();
void ReplayBufferStopping();
void ReplayBufferStop(int code);

View File

@ -646,6 +646,12 @@ static void replay_buffer_hotkey(void *data, obs_hotkey_id id,
return;
}
calldata_t cd = {0};
signal_handler_t *sh =
obs_output_get_signal_handler(stream->output);
signal_handler_signal(sh, "saved", &cd);
stream->save_ts = os_gettime_ns() / 1000LL;
}
}
@ -679,6 +685,9 @@ static void *replay_buffer_create(obs_data_t *settings, obs_output_t *output)
proc_handler_add(ph, "void get_last_replay(out string path)",
get_last_replay, stream);
signal_handler_t *sh = obs_output_get_signal_handler(output);
signal_handler_add(sh, "void saved()");
return stream;
}