mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-03-06 07:36:12 -05:00
obs-frontend-api,UI,docs: Add API to add custom docks with no toggle
Some plugin does that by deleting the QAction returned by obs_frontend_add_dock(). Now that obs_frontend_add_dock() is deprecated, obs_frontend_add_custom_qdock() replace this usage.
This commit is contained in:
@@ -9311,10 +9311,12 @@ void OBSBasic::on_resetDocks_triggered(bool force)
|
||||
|
||||
#ifdef BROWSER_AVAILABLE
|
||||
if ((oldExtraDocks.size() || extraDocks.size() ||
|
||||
extraBrowserDocks.size()) &&
|
||||
extraCustomDocks.size() || extraBrowserDocks.size()) &&
|
||||
!force) {
|
||||
#else
|
||||
if ((oldExtraDocks.size() || extraDocks.size()) && !force) {
|
||||
if ((oldExtraDocks.size() || extraDocks.size() ||
|
||||
extraCustomDocks.size()) &&
|
||||
!force) {
|
||||
#endif
|
||||
QMessageBox::StandardButton button = QMessageBox::question(
|
||||
this, QTStr("ResetUIWarning.Title"),
|
||||
@@ -9347,6 +9349,7 @@ void OBSBasic::on_resetDocks_triggered(bool force)
|
||||
}
|
||||
|
||||
RESET_DOCKLIST(extraDocks)
|
||||
RESET_DOCKLIST(extraCustomDocks)
|
||||
#ifdef BROWSER_AVAILABLE
|
||||
RESET_DOCKLIST(extraBrowserDocks)
|
||||
#endif
|
||||
@@ -9406,6 +9409,9 @@ void OBSBasic::on_lockDocks_toggled(bool lock)
|
||||
for (int i = extraDocks.size() - 1; i >= 0; i--)
|
||||
extraDocks[i]->setFeatures(features);
|
||||
|
||||
for (int i = extraCustomDocks.size() - 1; i >= 0; i--)
|
||||
extraCustomDocks[i]->setFeatures(features);
|
||||
|
||||
#ifdef BROWSER_AVAILABLE
|
||||
for (int i = extraBrowserDocks.size() - 1; i >= 0; i--)
|
||||
extraBrowserDocks[i]->setFeatures(features);
|
||||
@@ -10321,13 +10327,17 @@ void OBSBasic::AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area,
|
||||
|
||||
void OBSBasic::RemoveDockWidget(const QString &name)
|
||||
{
|
||||
if (!extraDockNames.contains(name))
|
||||
return;
|
||||
|
||||
int idx = extraDockNames.indexOf(name);
|
||||
extraDockNames.removeAt(idx);
|
||||
extraDocks[idx].clear();
|
||||
extraDocks.removeAt(idx);
|
||||
if (extraDockNames.contains(name)) {
|
||||
int idx = extraDockNames.indexOf(name);
|
||||
extraDockNames.removeAt(idx);
|
||||
extraDocks[idx].clear();
|
||||
extraDocks.removeAt(idx);
|
||||
} else if (extraCustomDockNames.contains(name)) {
|
||||
int idx = extraCustomDockNames.indexOf(name);
|
||||
extraCustomDockNames.removeAt(idx);
|
||||
removeDockWidget(extraCustomDocks[idx]);
|
||||
extraCustomDocks.removeAt(idx);
|
||||
}
|
||||
}
|
||||
|
||||
bool OBSBasic::IsDockObjectNameUsed(const QString &name)
|
||||
@@ -10341,10 +10351,48 @@ bool OBSBasic::IsDockObjectNameUsed(const QString &name)
|
||||
<< "statsDock";
|
||||
list << oldExtraDockNames;
|
||||
list << extraDockNames;
|
||||
list << extraCustomDockNames;
|
||||
|
||||
return list.contains(name);
|
||||
}
|
||||
|
||||
void OBSBasic::AddCustomDockWidget(QDockWidget *dock)
|
||||
{
|
||||
// Prevent the object name from being changed
|
||||
connect(dock, &QObject::objectNameChanged, this,
|
||||
&OBSBasic::RepairCustomExtraDockName);
|
||||
|
||||
bool lock = ui->lockDocks->isChecked();
|
||||
QDockWidget::DockWidgetFeatures features =
|
||||
lock ? QDockWidget::NoDockWidgetFeatures
|
||||
: (QDockWidget::DockWidgetClosable |
|
||||
QDockWidget::DockWidgetMovable |
|
||||
QDockWidget::DockWidgetFloatable);
|
||||
|
||||
dock->setFeatures(features);
|
||||
addDockWidget(Qt::RightDockWidgetArea, dock);
|
||||
|
||||
extraCustomDockNames.push_back(dock->objectName());
|
||||
extraCustomDocks.push_back(dock);
|
||||
}
|
||||
|
||||
void OBSBasic::RepairCustomExtraDockName()
|
||||
{
|
||||
QDockWidget *dock = reinterpret_cast<QDockWidget *>(sender());
|
||||
int idx = extraCustomDocks.indexOf(dock);
|
||||
QSignalBlocker block(dock);
|
||||
|
||||
if (idx == -1) {
|
||||
blog(LOG_WARNING, "A custom dock got its object name changed");
|
||||
return;
|
||||
}
|
||||
|
||||
blog(LOG_WARNING, "The custom dock '%s' got its object name restored",
|
||||
QT_TO_UTF8(extraCustomDockNames[idx]));
|
||||
|
||||
dock->setObjectName(extraCustomDockNames[idx]);
|
||||
}
|
||||
|
||||
OBSBasic *OBSBasic::Get()
|
||||
{
|
||||
return reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
|
||||
|
||||
Reference in New Issue
Block a user