This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2goclient. from 6dbf012 Check "norecord" option on the first start of PulseAudio. new 1f2e09f Disable/Enable PulseAudio in config dialog. New command line options: --disable-pulse to disable start of PulseAudio --disable-pulse-record to disable audio input. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 4 +++ src/configdialog.cpp | 40 +++++++++++++++++++++++++++-- src/configdialog.h | 7 ++++++ src/help.cpp | 4 +++ src/onmainwindow.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++---------- src/onmainwindow.h | 13 ++++++++++ src/pulsemanager.cpp | 9 ++++--- src/pulsemanager.h | 8 +++--- 8 files changed, 133 insertions(+), 23 deletions(-) -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit 1f2e09f67938ab1830d9e13c8c750d1090bc85c3 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Mon May 15 20:27:31 2017 +0200 Disable/Enable PulseAudio in config dialog. New command line options: --disable-pulse to disable start of PulseAudio --disable-pulse-record to disable audio input. --- debian/changelog | 4 +++ src/configdialog.cpp | 40 +++++++++++++++++++++++++++-- src/configdialog.h | 7 ++++++ src/help.cpp | 4 +++ src/onmainwindow.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++---------- src/onmainwindow.h | 13 ++++++++++ src/pulsemanager.cpp | 9 ++++--- src/pulsemanager.h | 8 +++--- 8 files changed, 133 insertions(+), 23 deletions(-) diff --git a/debian/changelog b/debian/changelog index 99cbffd..b1a0ec9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -165,6 +165,10 @@ x2goclient (4.1.0.1-0x2go1) UNRELEASED; urgency=medium - Move PulseManager MsgBox functions to main window: GUI functions should be used only from main thread. - Check "norecord" option on the first start of PulseAudio. + - Disable/Enable PulseAudio in config dialog. + New command line options: + --disable-pulse to disable start of PulseAudio + --disable-pulse-record to disable audio input. [ Robert Parts ] * New upstream version (4.1.0.1): diff --git a/src/configdialog.cpp b/src/configdialog.cpp index 991e030..481948d 100644 --- a/src/configdialog.cpp +++ b/src/configdialog.cpp @@ -341,10 +341,27 @@ ConfigDialog::ConfigDialog ( QWidget * parent, Qt::WindowFlags f ) QFrame* frp = new QFrame (this); tabWidg->addTab (frp, tr ("PulseAudio settings")); QVBoxLayout* l = new QVBoxLayout (frp); + cbDisablePA = new QCheckBox (tr ("Disable PulseAudio"), frp); cbNoRecord = new QCheckBox (tr ("Disable sound input"), frp); + connect(cbDisablePA, SIGNAL(stateChanged(int)), this, SLOT(slot_cbDisablePAStateChanged(int))); + l->addWidget (cbDisablePA); l->addWidget (cbNoRecord); l->addStretch (1); cbNoRecord->setChecked (st.setting ()->value ("pulse/norecord", false).toBool ()); + cbDisablePA->setChecked (st.setting ()->value ("pulse/disable", false).toBool ()); + ONMainWindow* par= ( ONMainWindow* ) parent; + systemDisablePA=par->getSystemDisablePA(); + systemDisablePARecord=par->getSystemDisablePARecord(); + if(systemDisablePA) + { + cbDisablePA->setChecked(true); + cbDisablePA->setEnabled(false); + } + if(systemDisablePARecord) + { + cbNoRecord->setChecked(true); + cbNoRecord->setEnabled(false); + } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ } @@ -364,7 +381,10 @@ void ConfigDialog::slot_accepted() st.setting()->setValue ( "trayicon/maxdiscon", cbMaxmizeTray->isChecked() ); #endif #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) - st.setting()->setValue ( "pulse/norecord", cbNoRecord->isChecked() ); + if(!systemDisablePARecord) + st.setting()->setValue ( "pulse/norecord", cbNoRecord->isChecked() ); + if(!systemDisablePA) + st.setting()->setValue ( "pulse/disable", cbDisablePA->isChecked() ); #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ #ifdef USELDAP if ( !embedMode ) @@ -602,6 +622,18 @@ QString ConfigDialog::getXDarwinDirectory() } #endif +#if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) +void ConfigDialog::slot_cbDisablePAStateChanged(int state) +{ + cbNoRecord->setEnabled(state==Qt::Unchecked); + if(systemDisablePARecord) + { + cbNoRecord->setChecked(true); + cbNoRecord->setEnabled(false); + } +} +#endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ + void ConfigDialog::slotAdvClicked() { @@ -636,7 +668,10 @@ void ConfigDialog::slotDefaults() #ifdef Q_OS_WIN case 3: { - cbNoRecord->setChecked(false); + if(!systemDisablePARecord) + cbNoRecord->setChecked(false); + if(!systemDisablePA) + cbDisablePA->setChecked(false); } break; #endif /* defined (Q_OS_WIN) */ @@ -647,6 +682,7 @@ void ConfigDialog::slotDefaults() clientSshPort->setValue ( 22 ); #ifdef Q_OS_DARWIN cbNoRecord->setChecked (false); + cbDisablePA->setChecked (false); #endif /* defined (Q_OS_DARWIN) */ #ifndef CFGPLUGIN gbTrayIcon->setChecked (false); diff --git a/src/configdialog.h b/src/configdialog.h index 14b5cbc..d82d0d0 100644 --- a/src/configdialog.h +++ b/src/configdialog.h @@ -95,6 +95,9 @@ private: #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) QCheckBox *cbNoRecord; + QCheckBox *cbDisablePA; + bool systemDisablePA; + bool systemDisablePARecord; #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ QGroupBox *gbTrayIcon; @@ -112,6 +115,10 @@ private slots: void slot_selectXDarwin(); void slot_findXDarwin(); #endif +#if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) + void slot_cbDisablePAStateChanged(int state); +#endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ + private slots: void slotAdvClicked(); void slotDefaults(); diff --git a/src/help.cpp b/src/help.cpp index e3cb1de..d83f856 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -117,6 +117,10 @@ help::params_t help::build_params () { ADD_OPT ("--hide", QT_TRANSLATE_NOOP ("Help", "Starts hidden (minimized to system tray where available.)")); ADD_OPT ("--portable", QT_TRANSLATE_NOOP ("Help", "Starts in \"portable\" mode.")); ADD_OPT ("--pgp-card", QT_TRANSLATE_NOOP ("Help", "Forces OpenPGP smart card authentication.")); +#if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) + ADD_OPT ("--disable-pulse", QT_TRANSLATE_NOOP ("Help", "Disable PulseAudio.")); + ADD_OPT ("--disable-pulse-record", QT_TRANSLATE_NOOP ("Help", "Disable sound input.")); +#endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ ADD_OPT ("--xinerama", QT_TRANSLATE_NOOP ("Help", "Enables Xinerama by default.")); ADD_OPT ("--ldap-printing", QT_TRANSLATE_NOOP ("Help", "Allows client side printing in LDAP mode.")); ADD_OPT ("--thinclient", QT_TRANSLATE_NOOP ("Help", "Enables thinclient mode. Starts without a window manager.")); diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index 4141570..13d0986 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -133,6 +133,10 @@ ONMainWindow::ONMainWindow ( QWidget *parent ) :QMainWindow ( parent ) config.brokerAutologoff=false; config.published=false; cmdAutologin=false; +#if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) + systemDisablePARecord=false; + systemDisablePA=false; +#endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ // Try to determine the native DPI and use it for the default @@ -2193,19 +2197,40 @@ void ONMainWindow::slotConfig() int i; #if defined (Q_OS_WIN) || defined (Q_OS_DARWIN) - X2goSettings st ("settings"); - bool newDisableInput = st.setting ()->value ("pulse/norecord", + if(!systemDisablePA) + { + X2goSettings st ("settings"); + bool disablePA = st.setting ()->value ("pulse/disable", (QVariant) false).toBool (); - - if (oldDisableInput != newDisableInput) { - bool ret = pulseManager->set_record (!newDisableInput); - - if (!ret) { - x2goDebug << "Failed to change recording status of PulseManager. PulseAudio not started?" << endl; - } - - pulseManager->restart (); - } + if(!pulseManager && !disablePA) + { + x2goDebug<<"PA manager not inited yet, starting PA thread"; + QTimer::singleShot (10, this, SLOT (pulseManagerWrapper ())); + } + else if(pulseManager && disablePA) + { + if(pulseManager->is_server_running()) + { + x2goDebug<<"Stopping PulseAudio"; + pulseManager->shutdown(); + } + } + else if(pulseManager && !disablePA)//pulse is already inited and not disabled by config dialog + { + bool newDisableInput = st.setting ()->value ("pulse/norecord", + (QVariant) false).toBool (); + if(systemDisablePARecord) + newDisableInput=true; + if (oldDisableInput != newDisableInput) { + bool ret = pulseManager->set_record (!newDisableInput); + + if (!ret) { + x2goDebug << "Failed to change recording status of PulseManager. PulseAudio not started?" << endl; + } + pulseManager->restart (); + } + } + } #endif /* defined (Q_OS_WIN) || defined (Q_OS_DARWIN) */ if ( passForm->isVisible() && !embedMode ) @@ -6748,12 +6773,19 @@ void ONMainWindow::pulseManagerWrapper () { (config.confSnd && config.useSnd)) #endif /* defined (Q_OS_WIN) */ { + X2goSettings st ("settings"); + bool disablePulse = st.setting ()->value ("pulse/disable", + (QVariant) false).toBool (); + if(disablePulse||systemDisablePA) + { + x2goDebug<<"Not starting PulseAudio"; + return; + } pulseManagerThread = new QThread (0); pulseManager = new PulseManager (); connect(pulseManager, SIGNAL(sig_pulse_user_warning(bool, const QString&, const QString&, bool)), this, SLOT(slotShowPAMSGDialog(bool, const QString&, const QString&, bool))); - X2goSettings st ("settings"); bool disableInput = st.setting ()->value ("pulse/norecord", (QVariant) false).toBool (); pulseManager->set_record (!disableInput); @@ -7252,6 +7284,19 @@ bool ONMainWindow::parseParameter ( QString param ) return true; } +#if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) + if (param == "--disable-pulse") + { + systemDisablePA=true; + return true; + } + if (param == "--disable-pulse-record") + { + systemDisablePARecord=true; + return true; + } +#endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ + if (param == "--no-autoresume") { autoresume=false; diff --git a/src/onmainwindow.h b/src/onmainwindow.h index 9e749d3..b8e7362 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -540,6 +540,17 @@ public: return &config; } +#if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) + bool getSystemDisablePARecord() + { + return systemDisablePARecord; + } + bool getSystemDisablePA() + { + return systemDisablePA; + } +#endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ + void runApplication(QString exec); @@ -853,6 +864,8 @@ private: #if defined (Q_OS_DARWIN) || defined (Q_OS_WIN) QThread *pulseManagerThread; PulseManager *pulseManager; + bool systemDisablePARecord; + bool systemDisablePA; #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */ diff --git a/src/pulsemanager.cpp b/src/pulsemanager.cpp index 4b144e2..a7d93c0 100644 --- a/src/pulsemanager.cpp +++ b/src/pulsemanager.cpp @@ -47,6 +47,7 @@ PulseManager::PulseManager () : app_dir_ (QApplication::applicationDirPath ()), record_ (true), playback_ (true), debug_ (false), + shutdownState(false), system_pulse_ (false) { pulse_dir_ = QDir (QDir::homePath ()); pulse_dir_.mkpath (pulse_dir_.absolutePath () + pulse_X2Go_ + "/tmp"); @@ -773,12 +774,12 @@ void PulseManager::slot_play_startup_sound () { } void PulseManager::slot_on_pulse_finished (int exit_code) { - if (exit_code) + if (exit_code && !shutdownState) { x2goDebug << "Warning! Pulseaudio's exit code is non-zero."; show_startup_warning(true); } - + shutdownState=false; x2goDebug << "Pulseaudio finished with code:"<<exit_code; QByteArray ba (pulse_server_->readAllStandardOutput ()); char *data = ba.data (); @@ -825,6 +826,7 @@ bool PulseManager::is_server_running () const { void PulseManager::shutdown () { QEventLoop loop; + shutdownState=true; connect (this, SIGNAL (sig_pulse_server_terminated ()), &loop, SLOT (quit ())); @@ -886,10 +888,9 @@ bool PulseManager::set_record (bool record) { bool ret = false; if (!(is_server_running ())) { - record_ = record; ret = true; } - + record_ = record; return (ret); } diff --git a/src/pulsemanager.h b/src/pulsemanager.h index 1472596..237ebe0 100644 --- a/src/pulsemanager.h +++ b/src/pulsemanager.h @@ -60,11 +60,14 @@ class PulseManager: public QObject { bool set_record (bool record); bool set_playback (bool playback); void set_debug (bool debug); + bool is_server_running () const; + public slots: void start (); void restart (); + void shutdown (); private: @@ -86,10 +89,6 @@ class PulseManager: public QObject { void create_client_dir (); void cleanup_client_dir (); - void shutdown (); - - bool is_server_running () const; - void show_startup_warning (bool play_startup_sound = false); @@ -130,6 +129,7 @@ class PulseManager: public QObject { bool debug_; bool system_pulse_; + bool shutdownState; }; #endif // PULSEMANAGER_H -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git