From 9ee596a2c066f298d2dcecce0086fe08becb5281 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 9 Jan 2021 14:14:48 +0000 Subject: [PATCH] Import upstream qjackctl patch --- ...31e752b4694051b3d447cebb90116fd37186.patch | 760 ++++++++++++++++++ ...ch => 04_apple-win32-ui-adjustments.patch} | 0 2 files changed, 760 insertions(+) create mode 100644 patches/qjackctl/03_626731e752b4694051b3d447cebb90116fd37186.patch rename patches/qjackctl/{03_apple-win32-ui-adjustments.patch => 04_apple-win32-ui-adjustments.patch} (100%) diff --git a/patches/qjackctl/03_626731e752b4694051b3d447cebb90116fd37186.patch b/patches/qjackctl/03_626731e752b4694051b3d447cebb90116fd37186.patch new file mode 100644 index 0000000..3761c1d --- /dev/null +++ b/patches/qjackctl/03_626731e752b4694051b3d447cebb90116fd37186.patch @@ -0,0 +1,760 @@ +From 626731e752b4694051b3d447cebb90116fd37186 Mon Sep 17 00:00:00 2001 +From: rncbc +Date: Sat, 19 Dec 2020 16:25:19 +0000 +Subject: [PATCH] - Add Clear preset button to Setup dialog (refactored from + an original patch by kmatheussen #113) + +- Use default values for most preset parameters: sample + rate, frames/period (aka. buffer-size), periods/buffer, + realtime priority, port maximum, client timeout, word + length, wait time, channel maximum (refactored from an + original patch by kmatheussen #112) +--- + ChangeLog | 12 ++ + src/images/clear1.png | Bin 0 -> 579 bytes + src/qjackctl.qrc | 1 + + src/qjackctlMainForm.cpp | 21 ++- + src/qjackctlSetup.cpp | 271 ++++++++++++++++++++++++-------------- + src/qjackctlSetup.h | 7 + + src/qjackctlSetupForm.cpp | 55 +++++++- + src/qjackctlSetupForm.h | 1 + + src/qjackctlSetupForm.ui | 57 ++++---- + 9 files changed, 274 insertions(+), 151 deletions(-) + create mode 100644 src/images/clear1.png + +diff --git a/ChangeLog b/ChangeLog +index d79615ce..2cf233b2 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -4,6 +4,18 @@ QjackCtl - JACK Audio Connection Kit Qt GUI Interface + ChangeLog + + ++GIT HEAD ++ ++- Add Clear preset button to Setup dialog (refactored ++ from an original patch by kmatheussen #113) ++ ++- Use default values for most preset parameters: sample ++ rate, frames/period (aka. buffer-size), periods/buffer, ++ realtime priority, port maximum, client timeout, word ++ length, wait time, channel maximum (refactored from an ++ original patch by kmatheussen #112) ++ ++ + 0.9.0 2020-12-17 A Winter'20 Release. + + - List only available backend drivers when JACK D-BUS +diff --git a/src/qjackctl.qrc b/src/qjackctl.qrc +index 55d8d1c7..21303a4e 100644 +--- a/src/qjackctl.qrc ++++ b/src/qjackctl.qrc +@@ -38,6 +38,7 @@ + images/asocketi.png + images/asocketo.png + images/backward1.png ++ images/clear1.png + images/client1.png + images/connect1.png + images/connections1.png +diff --git a/src/qjackctlMainForm.cpp b/src/qjackctlMainForm.cpp +index ee9afa45..28d916b1 100644 +--- a/src/qjackctlMainForm.cpp ++++ b/src/qjackctlMainForm.cpp +@@ -1449,12 +1449,11 @@ void qjackctlMainForm::startJack (void) + const QString sPath = QString::fromUtf8(::getenv("PATH")); + QStringList paths = sPath.split(chPathSep); + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) +- paths = paths << QString("%1\\JACK2").arg(getenv("PROGRAMFILES")) +- << QString("%1\\JACK2").arg(getenv("PROGRAMFILES(x86)")); ++ paths.append(QString("%1\\JACK2").arg(::getenv("PROGRAMFILES"))); ++ paths.append(QString("%1\\JACK2").arg(::getenv("PROGRAMFILES(x86)"))); ++ #elif defined(__APPLE__) ++ paths.append("/usr/local/bin/"); + #endif +- #if defined(__APPLE__) +- paths = paths << "/usr/local/bin/"; +- #endif + QStringListIterator iter(paths); + while (iter.hasNext()) { + const QString& sDirectory = iter.next(); +@@ -1514,7 +1513,7 @@ void qjackctlMainForm::startJack (void) + if (m_preset.iFrames > 0 && !bNet) + args.append("-p" + QString::number(m_preset.iFrames)); + if (bAlsa || bSun || bOss || bFirewire) { +- if (m_preset.iPeriods > 0) ++ if (m_preset.iPeriods > 1) + args.append("-n" + QString::number(m_preset.iPeriods)); + } + if (bAlsa) { +@@ -1570,7 +1569,7 @@ void qjackctlMainForm::startJack (void) + else if (bOss || bSun) { + if (m_preset.bIgnoreHW) + args.append("-b"); +- if (m_preset.iWordLength > 0) ++ if (m_preset.iWordLength > 0 && m_preset.iWordLength != 16) + args.append("-w" + QString::number(m_preset.iWordLength)); + if (!m_preset.sInDevice.isEmpty() && m_preset.iAudio != QJACKCTL_PLAYBACK) + args.append("-C" + formatQuoted(m_preset.sInDevice)); +@@ -4365,7 +4364,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) + if (bAlsa || bSun || bOss || bFirewire) { + setDBusDriverParameter("nperiods", + (unsigned int) preset.iPeriods, +- preset.iPeriods > 0); ++ preset.iPeriods > 1); + } + if (bAlsa) { + setDBusDriverParameter("softmode", preset.bSoftMode); +@@ -4436,7 +4435,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) + !sOutDevice.isEmpty() && preset.iAudio != QJACKCTL_CAPTURE); + setDBusDriverParameter("inchannels", + (unsigned int) preset.iInChannels, +- preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); ++ preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); + setDBusDriverParameter("outchannels", + (unsigned int) preset.iOutChannels, + preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); +@@ -4444,7 +4443,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) + else if (bCoreaudio || bFirewire || bNet) { + setDBusDriverParameter("inchannels", + (unsigned int) preset.iInChannels, +- preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); ++ preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); + setDBusDriverParameter("outchannels", + (unsigned int) preset.iOutChannels, + preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); +@@ -4452,7 +4451,7 @@ void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) + if (bDummy) { + setDBusDriverParameter("wait", + (unsigned int) preset.iWait, +- preset.iWait > 0); ++ preset.iWait > 0 && preset.iWait != 21333); + } + else + if (!bNet) { +diff --git a/src/qjackctlSetup.cpp b/src/qjackctlSetup.cpp +index 8294606c..963cdfff 100644 +--- a/src/qjackctlSetup.cpp ++++ b/src/qjackctlSetup.cpp +@@ -40,14 +40,6 @@ + #include + #endif + +-#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) +-#define DEFAULT_DRIVER "portaudio" +-#elif defined(__APPLE__) +-#define DEFAULT_DRIVER "coreaudio" +-#else +-#define DEFAULT_DRIVER "alsa" +-#endif +- + + // Constructor. + qjackctlSetup::qjackctlSetup (void) +@@ -370,6 +362,170 @@ bool qjackctlSetup::saveAliases (void) + } + + ++//--------------------------------------------------------------------------- ++// Preset struct methods. ++ ++void qjackctlPreset::clear (void) ++{ ++ sServerPrefix.clear(); ++ sServerName .clear(); ++ bRealtime = true; ++ bSoftMode = false; ++ bMonitor = false; ++ bShorts = false; ++ bNoMemLock = false; ++ bUnlockMem = false; ++ bHWMeter = false; ++ bIgnoreHW = false; ++ iPriority = 0; ++ iFrames = 0; ++ iSampleRate = 0; ++ iPeriods = 0; ++ iWordLength = 0; ++ iWait = 0; ++ iChan = 0; ++ sDriver .clear(); ++ sInterface .clear(); ++ iAudio = 0; ++ iDither = 0; ++ iTimeout = 0; ++ sInDevice .clear(); ++ sOutDevice .clear(); ++ iInChannels = 0; ++ iOutChannels = 0; ++ iInLatency = 0; ++ iOutLatency = 0; ++ iStartDelay = 2; ++ bSync = false; ++ bVerbose = false; ++ iPortMax = 0; ++ sMidiDriver .clear(); ++ sServerSuffix.clear(); ++ uClockSource = 0; ++ ucSelfConnectMode = ' '; ++ ++ fixup(); ++} ++ ++ ++void qjackctlPreset::load ( QSettings& settings, const QString& sSuffix ) ++{ ++ settings.beginGroup("/Settings" + sSuffix); ++ ++ sServerPrefix = settings.value("/Server", sServerPrefix).toString(); ++ sServerName = settings.value("/ServerName", sServerName).toString(); ++ bRealtime = settings.value("/Realtime", bRealtime).toBool(); ++ bSoftMode = settings.value("/SoftMode", bSoftMode).toBool(); ++ bMonitor = settings.value("/Monitor", bMonitor).toBool(); ++ bShorts = settings.value("/Shorts", bShorts).toBool(); ++ bNoMemLock = settings.value("/NoMemLock", bNoMemLock).toBool(); ++ bUnlockMem = settings.value("/UnlockMem", bUnlockMem).toBool(); ++ bHWMeter = settings.value("/HWMeter", bHWMeter).toBool(); ++ bIgnoreHW = settings.value("/IgnoreHW", bIgnoreHW).toBool(); ++ iPriority = settings.value("/Priority", iPriority).toInt(); ++ iFrames = settings.value("/Frames", iFrames).toInt(); ++ iSampleRate = settings.value("/SampleRate", iSampleRate).toInt(); ++ iPeriods = settings.value("/Periods", iPeriods).toInt(); ++ iWordLength = settings.value("/WordLength", iWordLength).toInt(); ++ iWait = settings.value("/Wait", iWait).toInt(); ++ iChan = settings.value("/Chan", iChan).toInt(); ++ sDriver = settings.value("/Driver", sDriver).toString(); ++ sInterface = settings.value("/Interface", sInterface).toString(); ++ iAudio = settings.value("/Audio", iAudio).toInt(); ++ iDither = settings.value("/Dither", iDither).toInt(); ++ iTimeout = settings.value("/Timeout", iTimeout).toInt(); ++ sInDevice = settings.value("/InDevice", sInDevice).toString(); ++ sOutDevice = settings.value("/OutDevice", sOutDevice).toString(); ++ iInChannels = settings.value("/InChannels", iInChannels).toInt(); ++ iOutChannels = settings.value("/OutChannels", iOutChannels).toInt(); ++ iInLatency = settings.value("/InLatency", iInLatency).toInt(); ++ iOutLatency = settings.value("/OutLatency", iOutLatency).toInt(); ++ iStartDelay = settings.value("/StartDelay", iStartDelay).toInt(); ++ bSync = settings.value("/Sync", bSync).toBool(); ++ bVerbose = settings.value("/Verbose", bVerbose).toBool(); ++ iPortMax = settings.value("/PortMax", iPortMax).toInt(); ++ sMidiDriver = settings.value("/MidiDriver", sMidiDriver).toString(); ++ sServerSuffix = settings.value("/ServerSuffix", sServerSuffix).toString(); ++ uClockSource = settings.value("/ClockSource", uClockSource).toUInt(); ++ ucSelfConnectMode = settings.value("/SelfConnectMode", ucSelfConnectMode).value(); ++ ++ settings.endGroup(); ++ ++ fixup(); ++} ++ ++void qjackctlPreset::save ( QSettings& settings, const QString& sSuffix ) ++{ ++ settings.beginGroup("/Settings" + sSuffix); ++ ++ settings.setValue("/Server", sServerPrefix); ++ settings.setValue("/ServerName", sServerName); ++ settings.setValue("/Realtime", bRealtime); ++ settings.setValue("/SoftMode", bSoftMode); ++ settings.setValue("/Monitor", bMonitor); ++ settings.setValue("/Shorts", bShorts); ++ settings.setValue("/NoMemLock", bNoMemLock); ++ settings.setValue("/UnlockMem", bUnlockMem); ++ settings.setValue("/HWMeter", bHWMeter); ++ settings.setValue("/IgnoreHW", bIgnoreHW); ++ settings.setValue("/Priority", iPriority); ++ settings.setValue("/Frames", iFrames); ++ settings.setValue("/SampleRate", iSampleRate); ++ settings.setValue("/Periods", iPeriods); ++ settings.setValue("/WordLength", iWordLength); ++ settings.setValue("/Wait", iWait); ++ settings.setValue("/Chan", iChan); ++ settings.setValue("/Driver", sDriver); ++ settings.setValue("/Interface", sInterface); ++ settings.setValue("/Audio", iAudio); ++ settings.setValue("/Dither", iDither); ++ settings.setValue("/Timeout", iTimeout); ++ settings.setValue("/InDevice", sInDevice); ++ settings.setValue("/OutDevice", sOutDevice); ++ settings.setValue("/InChannels", iInChannels); ++ settings.setValue("/OutChannels", iOutChannels); ++ settings.setValue("/InLatency", iInLatency); ++ settings.setValue("/OutLatency", iOutLatency); ++ settings.setValue("/StartDelay", iStartDelay); ++ settings.setValue("/Sync", bSync); ++ settings.setValue("/Verbose", bVerbose); ++ settings.setValue("/PortMax", iPortMax); ++ settings.setValue("/MidiDriver", sMidiDriver); ++ settings.setValue("/ServerSuffix", sServerSuffix); ++ settings.setValue("/ClockSource", uClockSource); ++ settings.setValue("/SelfConnectMode", ucSelfConnectMode); ++ ++ settings.endGroup(); ++} ++ ++void qjackctlPreset::fixup (void) ++{ ++ if (sServerPrefix.isEmpty()) { ++ sServerPrefix = "jackd"; ++ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) ++ sServerPrefix += " -S -X winmme"; ++ #endif ++ } ++ ++ if (sDriver.isEmpty()) { ++ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) ++ sDriver = "portaudio"; ++ #elif defined(__APPLE__) ++ sDriver = "coreaudio"; ++ #else ++ sDriver = "alsa"; ++ #endif ++ } ++ ++#ifdef CONFIG_JACK_MIDI ++ if (!sMidiDriver.isEmpty() ++ && sMidiDriver != "raw" ++ && sMidiDriver != "seq") ++ sMidiDriver.clear(); ++#endif ++} ++ ++ + //--------------------------------------------------------------------------- + // Preset management methods. + +@@ -383,56 +539,7 @@ bool qjackctlSetup::loadPreset ( qjackctlPreset& preset, const QString& sPreset + return false; + } + +- m_settings.beginGroup("/Settings" + sSuffix); +-#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) +- preset.sServerPrefix = m_settings.value("/Server", "jackd -S -X winmme").toString(); +-#else +- preset.sServerPrefix = m_settings.value("/Server", "jackd").toString(); +-#endif +- preset.sServerName = m_settings.value("/ServerName").toString(); +- preset.bRealtime = m_settings.value("/Realtime", true).toBool(); +- preset.bSoftMode = m_settings.value("/SoftMode", false).toBool(); +- preset.bMonitor = m_settings.value("/Monitor", false).toBool(); +- preset.bShorts = m_settings.value("/Shorts", false).toBool(); +- preset.bNoMemLock = m_settings.value("/NoMemLock", false).toBool(); +- preset.bUnlockMem = m_settings.value("/UnlockMem", false).toBool(); +- preset.bHWMeter = m_settings.value("/HWMeter", false).toBool(); +- preset.bIgnoreHW = m_settings.value("/IgnoreHW", false).toBool(); +- preset.iPriority = m_settings.value("/Priority", 0).toInt(); +- preset.iFrames = m_settings.value("/Frames", 1024).toInt(); +- preset.iSampleRate = m_settings.value("/SampleRate", 48000).toInt(); +- preset.iPeriods = m_settings.value("/Periods", 2).toInt(); +- preset.iWordLength = m_settings.value("/WordLength", 16).toInt(); +- preset.iWait = m_settings.value("/Wait", 21333).toInt(); +- preset.iChan = m_settings.value("/Chan", 0).toInt(); +- preset.sDriver = m_settings.value("/Driver", DEFAULT_DRIVER).toString(); +- preset.sInterface = m_settings.value("/Interface").toString(); +- preset.iAudio = m_settings.value("/Audio", 0).toInt(); +- preset.iDither = m_settings.value("/Dither", 0).toInt(); +- preset.iTimeout = m_settings.value("/Timeout", 500).toInt(); +- preset.sInDevice = m_settings.value("/InDevice").toString(); +- preset.sOutDevice = m_settings.value("/OutDevice").toString(); +- preset.iInChannels = m_settings.value("/InChannels", 0).toInt(); +- preset.iOutChannels = m_settings.value("/OutChannels", 0).toInt(); +- preset.iInLatency = m_settings.value("/InLatency", 0).toInt(); +- preset.iOutLatency = m_settings.value("/OutLatency", 0).toInt(); +- preset.iStartDelay = m_settings.value("/StartDelay", 2).toInt(); +- preset.bSync = m_settings.value("/Sync", false).toBool(); +- preset.bVerbose = m_settings.value("/Verbose", false).toBool(); +- preset.iPortMax = m_settings.value("/PortMax", 256).toInt(); +- preset.sMidiDriver = m_settings.value("/MidiDriver").toString(); +- preset.sServerSuffix = m_settings.value("/ServerSuffix").toString(); +- preset.uClockSource = m_settings.value("/ClockSource", 0).toUInt(); +- preset.ucSelfConnectMode = m_settings.value("/SelfConnectMode", ' ').value(); +- m_settings.endGroup(); +- +-#ifdef CONFIG_JACK_MIDI +- if (!preset.sMidiDriver.isEmpty() && +- preset.sMidiDriver != "raw" && +- preset.sMidiDriver != "seq") +- preset.sMidiDriver.clear(); +-#endif +- ++ preset.load(m_settings, sSuffix); + return true; + } + +@@ -446,45 +553,7 @@ bool qjackctlSetup::savePreset ( qjackctlPreset& preset, const QString& sPreset + presets.prepend(sPreset); + } + +- m_settings.beginGroup("/Settings" + sSuffix); +- m_settings.setValue("/Server", preset.sServerPrefix); +- m_settings.setValue("/ServerName", preset.sServerName); +- m_settings.setValue("/Realtime", preset.bRealtime); +- m_settings.setValue("/SoftMode", preset.bSoftMode); +- m_settings.setValue("/Monitor", preset.bMonitor); +- m_settings.setValue("/Shorts", preset.bShorts); +- m_settings.setValue("/NoMemLock", preset.bNoMemLock); +- m_settings.setValue("/UnlockMem", preset.bUnlockMem); +- m_settings.setValue("/HWMeter", preset.bHWMeter); +- m_settings.setValue("/IgnoreHW", preset.bIgnoreHW); +- m_settings.setValue("/Priority", preset.iPriority); +- m_settings.setValue("/Frames", preset.iFrames); +- m_settings.setValue("/SampleRate", preset.iSampleRate); +- m_settings.setValue("/Periods", preset.iPeriods); +- m_settings.setValue("/WordLength", preset.iWordLength); +- m_settings.setValue("/Wait", preset.iWait); +- m_settings.setValue("/Chan", preset.iChan); +- m_settings.setValue("/Driver", preset.sDriver); +- m_settings.setValue("/Interface", preset.sInterface); +- m_settings.setValue("/Audio", preset.iAudio); +- m_settings.setValue("/Dither", preset.iDither); +- m_settings.setValue("/Timeout", preset.iTimeout); +- m_settings.setValue("/InDevice", preset.sInDevice); +- m_settings.setValue("/OutDevice", preset.sOutDevice); +- m_settings.setValue("/InChannels", preset.iInChannels); +- m_settings.setValue("/OutChannels", preset.iOutChannels); +- m_settings.setValue("/InLatency", preset.iInLatency); +- m_settings.setValue("/OutLatency", preset.iOutLatency); +- m_settings.setValue("/StartDelay", preset.iStartDelay); +- m_settings.setValue("/Sync", preset.bSync); +- m_settings.setValue("/Verbose", preset.bVerbose); +- m_settings.setValue("/PortMax", preset.iPortMax); +- m_settings.setValue("/MidiDriver", preset.sMidiDriver); +- m_settings.setValue("/ServerSuffix", preset.sServerSuffix); +- m_settings.setValue("/ClockSource", preset.uClockSource); +- m_settings.setValue("/SelfConnectMode", preset.ucSelfConnectMode); +- m_settings.endGroup(); +- ++ preset.save(m_settings, sSuffix); + return true; + } + +@@ -493,13 +562,15 @@ bool qjackctlSetup::deletePreset ( const QString& sPreset ) + QString sSuffix; + if (sPreset != sDefPresetName && !sPreset.isEmpty()) { + sSuffix = '/' + sPreset; +- int iPreset = presets.indexOf(sPreset); ++ const int iPreset = presets.indexOf(sPreset); + if (iPreset < 0) + return false; + presets.removeAt(iPreset); +- m_settings.remove("/Settings" + sSuffix); +- m_settings.remove("/Aliases" + sSuffix); + } ++ ++ m_settings.remove("/Settings" + sSuffix); ++ m_settings.remove("/Aliases" + sSuffix); ++ + return true; + } + +diff --git a/src/qjackctlSetup.h b/src/qjackctlSetup.h +index 18ca99e9..e03f60d9 100644 +--- a/src/qjackctlSetup.h ++++ b/src/qjackctlSetup.h +@@ -47,6 +47,13 @@ class QSplitter; + // Server settings preset struct. + struct qjackctlPreset + { ++ qjackctlPreset() { clear(); } ++ ++ void clear(); ++ void load(QSettings& settings, const QString& sSuffix); ++ void save(QSettings& settings, const QString& sSuffix); ++ void fixup(); ++ + QString sServerPrefix; + QString sServerName; + bool bRealtime; +diff --git a/src/qjackctlSetupForm.cpp b/src/qjackctlSetupForm.cpp +index ee64fa3b..4b934fab 100644 +--- a/src/qjackctlSetupForm.cpp ++++ b/src/qjackctlSetupForm.cpp +@@ -95,8 +95,9 @@ qjackctlSetupForm::qjackctlSetupForm ( QWidget *pParent ) + m_pTimeDisplayButtonGroup->setExclusive(true); + + // Setup clock-source combo-box. ++ const QString& sDefName = tr(g_pszDefName); + m_ui.ClockSourceComboBox->clear(); +- m_ui.ClockSourceComboBox->addItem(g_pszDefName, uint(0)); ++ m_ui.ClockSourceComboBox->addItem(sDefName, uint(0)); + m_ui.ClockSourceComboBox->addItem(tr("System"), uint('s')); + m_ui.ClockSourceComboBox->addItem(tr("Cycle"), uint('c')); + m_ui.ClockSourceComboBox->addItem(tr("HPET"), uint('h')); +@@ -157,11 +158,28 @@ qjackctlSetupForm::qjackctlSetupForm ( QWidget *pParent ) + m_ui.ServerPrefixComboBox->setCompleter(nullptr); + m_ui.ServerSuffixComboBox->setCompleter(nullptr); + ++ m_ui.PrioritySpinBox->setSpecialValueText(sDefName); ++ m_ui.SampleRateComboBox->insertItem(0, sDefName); ++ m_ui.FramesComboBox->insertItem(0, sDefName); ++ m_ui.PeriodsSpinBox->setSpecialValueText(sDefName); ++ m_ui.PortMaxComboBox->insertItem(0, sDefName); ++ m_ui.TimeoutComboBox->insertItem(0, sDefName); ++ m_ui.WaitComboBox->insertItem(0, sDefName); ++ m_ui.WordLengthComboBox->insertItem(0, sDefName); ++ m_ui.ChanSpinBox->setSpecialValueText(sDefName); ++ m_ui.InChannelsSpinBox->setSpecialValueText(sDefName); ++ m_ui.OutChannelsSpinBox->setSpecialValueText(sDefName); ++ m_ui.InLatencySpinBox->setSpecialValueText(sDefName); ++ m_ui.OutLatencySpinBox->setSpecialValueText(sDefName); ++ + // UI connections... + + QObject::connect(m_ui.PresetComboBox, + SIGNAL(editTextChanged(const QString&)), + SLOT(changeCurrentPreset(const QString&))); ++ QObject::connect(m_ui.PresetClearPushButton, ++ SIGNAL(clicked()), ++ SLOT(clearCurrentPreset())); + QObject::connect(m_ui.PresetSavePushButton, + SIGNAL(clicked()), + SLOT(saveCurrentPreset())); +@@ -766,15 +784,24 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) + m_ui.HWMeterCheckBox->setChecked(preset.bHWMeter); + m_ui.IgnoreHWCheckBox->setChecked(preset.bIgnoreHW); + m_ui.PrioritySpinBox->setValue(preset.iPriority); ++ const QString& sDefName = tr(g_pszDefName); + setComboBoxCurrentText(m_ui.FramesComboBox, +- QString::number(preset.iFrames)); ++ preset.iFrames > 0 ++ ? QString::number(preset.iFrames) ++ : sDefName); + setComboBoxCurrentText(m_ui.SampleRateComboBox, +- QString::number(preset.iSampleRate)); ++ preset.iSampleRate > 0 ++ ? QString::number(preset.iSampleRate) ++ : sDefName); + m_ui.PeriodsSpinBox->setValue(preset.iPeriods); + setComboBoxCurrentText(m_ui.WordLengthComboBox, +- QString::number(preset.iWordLength)); ++ preset.iWordLength > 0 && preset.iWordLength != 16 ++ ? QString::number(preset.iWordLength) ++ : sDefName); + setComboBoxCurrentText(m_ui.WaitComboBox, +- QString::number(preset.iWait)); ++ preset.iWait > 0 && preset.iWait != 21333 ++ ? QString::number(preset.iWait) ++ : sDefName); + m_ui.ChanSpinBox->setValue(preset.iChan); + setComboBoxCurrentText(m_ui.DriverComboBox, preset.sDriver); + setComboBoxCurrentText(m_ui.InterfaceComboBox, +@@ -784,7 +811,9 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) + m_ui.AudioComboBox->setCurrentIndex(preset.iAudio); + m_ui.DitherComboBox->setCurrentIndex(preset.iDither); + setComboBoxCurrentText(m_ui.TimeoutComboBox, +- QString::number(preset.iTimeout)); ++ preset.iTimeout > 0 && preset.iTimeout != 500 ++ ? QString::number(preset.iTimeout) ++ : sDefName); + setComboBoxCurrentData(m_ui.ClockSourceComboBox, + uint(preset.uClockSource)); + setComboBoxCurrentText(m_ui.InDeviceComboBox, +@@ -805,7 +834,9 @@ void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) + QVariant::fromValue (preset.ucSelfConnectMode)); + m_ui.VerboseCheckBox->setChecked(preset.bVerbose); + setComboBoxCurrentText(m_ui.PortMaxComboBox, +- QString::number(preset.iPortMax)); ++ preset.iPortMax > 0 && preset.iPortMax != 256 ++ ? QString::number(preset.iPortMax) ++ : sDefName); + #ifdef CONFIG_JACK_MIDI + setComboBoxCurrentText(m_ui.MidiDriverComboBox, + preset.sMidiDriver); +@@ -995,6 +1026,16 @@ void qjackctlSetupForm::changeCurrentPreset ( const QString& sPreset ) + optionsChanged(); + } + ++ ++void qjackctlSetupForm::clearCurrentPreset (void) ++{ ++ // Clear current settings... ++ qjackctlPreset preset; ++ setCurrentPreset(preset); ++ settingsChanged(); ++} ++ ++ + void qjackctlSetupForm::saveCurrentPreset (void) + { + const QString sPreset = m_ui.PresetComboBox->currentText(); +diff --git a/src/qjackctlSetupForm.h b/src/qjackctlSetupForm.h +index 97e1a32f..cbd70dff 100644 +--- a/src/qjackctlSetupForm.h ++++ b/src/qjackctlSetupForm.h +@@ -54,6 +54,7 @@ class qjackctlSetupForm : public QDialog + protected slots: + + void changeCurrentPreset(const QString&); ++ void clearCurrentPreset(); + void saveCurrentPreset(); + void deleteCurrentPreset(); + +diff --git a/src/qjackctlSetupForm.ui b/src/qjackctlSetupForm.ui +index e78624b7..bb064f7d 100644 +--- a/src/qjackctlSetupForm.ui ++++ b/src/qjackctlSetupForm.ui +@@ -95,6 +95,22 @@ + + + ++ ++ ++ ++ Clear settings of current preset name ++ ++ ++ Clea&r ++ ++ ++ :/images/clear1.png ++ ++ ++ false ++ ++ ++ + + + +@@ -597,11 +613,14 @@ + Number of periods in the hardware buffer + + +- 2 ++ 1 + + + 999 + ++ ++ 1 ++ + + + +@@ -1064,9 +1083,6 @@ + + Scheduler priority when running realtime + +- +- (default) +- + + 1 + +@@ -1074,7 +1090,7 @@ + 5 + + +- 99 ++ 95 + + + +@@ -1108,9 +1124,6 @@ + false + + +- +- false +- + + Word length + +@@ -1165,9 +1178,6 @@ + false + + +- +- false +- + + Number of microseconds to wait between engine processes (dummy) + +@@ -1217,9 +1227,6 @@ + + Maximum number of audio channels to allocate + +- +- (default) +- + + 999 + +@@ -1268,7 +1275,7 @@ + true + + +- 1 ++ 0 + + + +@@ -1330,7 +1337,7 @@ + true + + +- 1 ++ 0 + + + +@@ -1357,11 +1364,6 @@ + 5000 + + +- +- +- 10000 +- +- + + + +@@ -1710,9 +1712,6 @@ + + Maximum input audio hardware channels to allocate + +- +- (default) +- + + 999 + +@@ -1741,9 +1740,6 @@ + + Maximum output audio hardware channels to allocate + +- +- (default) +- + + 999 + +@@ -1794,9 +1790,6 @@ + + External input latency (frames) + +- +- (default) +- + + 9999999 + +@@ -1825,9 +1818,6 @@ + + External output latency (frames) + +- +- (default) +- + + 9999999 + +@@ -4209,6 +4199,7 @@ + + SetupTabWidget + PresetComboBox ++ PresetClearPushButton + PresetSavePushButton + PresetDeletePushButton + SettingsTabWidget diff --git a/patches/qjackctl/03_apple-win32-ui-adjustments.patch b/patches/qjackctl/04_apple-win32-ui-adjustments.patch similarity index 100% rename from patches/qjackctl/03_apple-win32-ui-adjustments.patch rename to patches/qjackctl/04_apple-win32-ui-adjustments.patch