Compare commits

...

3 Commits

Author SHA1 Message Date
WarmUpTill
438c54599e Reduce time it takes to close preview dialog 2023-01-20 12:30:47 -08:00
WarmUpTill
da42183177 Fix VariableResolvingString returning empty string if no variables exist 2023-01-20 12:30:47 -08:00
WarmUpTill
295fa3f122 Fix crash on import 2023-01-20 12:30:47 -08:00
4 changed files with 15 additions and 6 deletions

View File

@@ -501,10 +501,13 @@ Qt::ItemFlags MacroTreeModel::flags(const QModelIndex &index) const
return QAbstractListModel::flags(index) | Qt::ItemIsDropEnabled; return QAbstractListModel::flags(index) | Qt::ItemIsDropEnabled;
} }
std::shared_ptr<Macro> item = std::shared_ptr<Macro> item;
_macros[ModelIndexToMacroIndex(index.row(), _macros)]; try {
item = _macros.at(ModelIndexToMacroIndex(index.row(), _macros));
} catch (const std::out_of_range &) {
return QAbstractListModel::flags(index) | Qt::ItemIsDropEnabled;
}
bool isGroup = item->IsGroup(); bool isGroup = item->IsGroup();
return QAbstractListModel::flags(index) | Qt::ItemIsEditable | return QAbstractListModel::flags(index) | Qt::ItemIsEditable |
Qt::ItemIsDragEnabled | Qt::ItemIsDragEnabled |
(isGroup ? Qt::ItemIsDropEnabled : Qt::NoItemFlags); (isGroup ? Qt::ItemIsDropEnabled : Qt::NoItemFlags);

View File

@@ -4,7 +4,6 @@
#include "utility.hpp" #include "utility.hpp"
#include <screenshot-helper.hpp> #include <screenshot-helper.hpp>
#include <condition_variable>
PreviewDialog::PreviewDialog(QWidget *parent, int delay) PreviewDialog::PreviewDialog(QWidget *parent, int delay)
: QDialog(parent), : QDialog(parent),
@@ -119,6 +118,7 @@ void PreviewDialog::SelectArea()
void PreviewDialog::Stop() void PreviewDialog::Stop()
{ {
_stop = true; _stop = true;
_cv.notify_all();
if (_thread.joinable()) { if (_thread.joinable()) {
_thread.join(); _thread.join();
} }
@@ -189,13 +189,12 @@ void PreviewDialog::Start()
void PreviewDialog::CheckForMatchLoop() void PreviewDialog::CheckForMatchLoop()
{ {
std::condition_variable cv;
while (!_stop) { while (!_stop) {
std::unique_lock<std::mutex> lock(_mtx); std::unique_lock<std::mutex> lock(_mtx);
auto source = obs_weak_source_get_source(_video.GetVideo()); auto source = obs_weak_source_get_source(_video.GetVideo());
ScreenshotHelper screenshot(source); ScreenshotHelper screenshot(source);
obs_source_release(source); obs_source_release(source);
cv.wait_for(lock, std::chrono::milliseconds(_delay)); _cv.wait_for(lock, std::chrono::milliseconds(_delay));
if (_stop || isHidden()) { if (_stop || isHidden()) {
return; return;
} }

View File

@@ -12,6 +12,7 @@
#include <thread> #include <thread>
#include <mutex> #include <mutex>
#include <condition_variable>
class PreviewDialog : public QDialog { class PreviewDialog : public QDialog {
Q_OBJECT Q_OBJECT
@@ -62,6 +63,7 @@ private:
std::atomic_bool _selectingArea = {false}; std::atomic_bool _selectingArea = {false};
std::mutex _mtx; std::mutex _mtx;
std::condition_variable _cv;
std::thread _thread; std::thread _thread;
std::atomic_bool _stop = {true}; std::atomic_bool _stop = {true};

View File

@@ -103,6 +103,10 @@ QStringList GetVariablesNameList()
void VariableResolvingString::Resolve() void VariableResolvingString::Resolve()
{ {
if (switcher->variables.empty()) {
_resolvedValue = _value;
return;
}
if (_lastResolve == lastVariableChange) { if (_lastResolve == lastVariableChange) {
return; return;
} }
@@ -131,6 +135,7 @@ void VariableResolvingString::operator=(const char *value)
void VariableResolvingString::Load(obs_data_t *obj, const char *name) void VariableResolvingString::Load(obs_data_t *obj, const char *name)
{ {
_value = obs_data_get_string(obj, name); _value = obs_data_get_string(obj, name);
Resolve();
} }
void VariableResolvingString::Save(obs_data_t *obj, const char *name) const void VariableResolvingString::Save(obs_data_t *obj, const char *name) const