diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index ba4361560..49ca783e6 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -344,6 +344,11 @@ AddProfile.Text="Please enter the name of the profile" # rename profile dialog RenameProfile.Title="Rename Profile" +# rename audio source in mixer +Basic.Main.MixerRename.Title="Rename Audio Source" +Basic.Main.MixerRename.Text="Please enter the name of the audio source" + + # preview window disabled Basic.Main.PreviewDisabled="Preview is currently disabled" diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 784bd299d..e74f15f3f 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2285,6 +2285,48 @@ void OBSBasic::ToggleHideMixer() } } +void OBSBasic::MixerRenameSource() +{ + QAction *action = reinterpret_cast(sender()); + VolControl *vol = action->property("volControl").value(); + OBSSource source = vol->GetSource(); + + const char *prevName = obs_source_get_name(source); + + for (;;) { + string name; + bool accepted = NameDialog::AskForName(this, + QTStr("Basic.Main.MixerRename.Title"), + QTStr("Basic.Main.MixerRename.Text"), + name, + QT_UTF8(prevName)); + if (!accepted) + return; + + if (name.empty()) { + OBSMessageBox::information(this, + QTStr("NoNameEntered.Title"), + QTStr("NoNameEntered.Text")); + continue; + } + + obs_source_t *sourceTest = + obs_get_source_by_name(name.c_str()); + + if (sourceTest) { + OBSMessageBox::information(this, + QTStr("NameExists.Title"), + QTStr("NameExists.Text")); + continue; + } + + obs_source_set_name(source, name.c_str()); + obs_source_release(sourceTest); + + break; + } +} + void OBSBasic::VolControlContextMenu() { VolControl *vol = reinterpret_cast(sender()); @@ -2293,6 +2335,7 @@ void OBSBasic::VolControlContextMenu() QAction hideAction(QTStr("Hide"), this); QAction unhideAllAction(QTStr("UnhideAll"), this); + QAction mixerRenameAction(QTStr("Rename"), this); QAction filtersAction(QTStr("Filters"), this); QAction propertiesAction(QTStr("Properties"), this); @@ -2306,6 +2349,9 @@ void OBSBasic::VolControlContextMenu() connect(&unhideAllAction, &QAction::triggered, this, &OBSBasic::UnhideAllAudioControls, Qt::DirectConnection); + connect(&mixerRenameAction, &QAction::triggered, + this, &OBSBasic::MixerRenameSource, + Qt::DirectConnection); connect(&filtersAction, &QAction::triggered, this, &OBSBasic::GetAudioSourceFilters, @@ -2321,6 +2367,8 @@ void OBSBasic::VolControlContextMenu() hideAction.setProperty("volControl", QVariant::fromValue(vol)); + mixerRenameAction.setProperty("volControl", + QVariant::fromValue(vol)); filtersAction.setProperty("volControl", QVariant::fromValue(vol)); @@ -2332,6 +2380,7 @@ void OBSBasic::VolControlContextMenu() QMenu popup(this); popup.addAction(&unhideAllAction); popup.addAction(&hideAction); + popup.addAction(&mixerRenameAction); popup.addSeparator(); popup.addAction(&filtersAction); popup.addAction(&propertiesAction); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index ffa3103a5..d16462328 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -434,6 +434,8 @@ private slots: void UnhideAllAudioControls(); void ToggleHideMixer(); + void MixerRenameSource(); + void on_mixerScrollArea_customContextMenuRequested(); void on_actionCopySource_triggered();