diff -urNB kmix/apps/KMixApp.cpp new/apps/KMixApp.cpp --- kmix/apps/KMixApp.cpp 2012-05-06 15:05:05.318647177 +0200 +++ new/apps/KMixApp.cpp 2012-06-29 07:41:11.625298597 +0200 @@ -22,9 +22,11 @@ #include "KMixApp.h" #include "apps/kmix.h" #include +#include bool KMixApp::_keepVisibility = false; +bool KMixApp::_autoStart = false; KMixApp::KMixApp() : KUniqueApplication(), m_kmix( 0 ) @@ -51,6 +53,17 @@ // There are 3 cases for a new instance //kDebug(67100) << "KMixApp::newInstance() isRestored()=" << isRestored() << "_keepVisibility=" << _keepVisibility; + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + + if (args->isSet("autostart")) + { + kapp->disableSessionManagement(); + + if ( m_kmix ) + return 0; + } + static bool first = true; if ( !first ) { // There already exists an instance/window @@ -118,6 +131,11 @@ _keepVisibility = val_keepVisibility; } +void KMixApp::autoStart(bool val_autoStart) { + //kDebug(67100) << "KMixApp::autoStart()"; + _autoStart = val_autoStart; +} + /* void KMixApp::quitExtended() diff -urNB kmix/apps/KMixApp.h new/apps/KMixApp.h --- kmix/apps/KMixApp.h 2012-05-06 15:05:05.319647178 +0200 +++ new/apps/KMixApp.h 2012-06-29 07:41:11.648298584 +0200 @@ -36,6 +36,7 @@ public slots: //void quitExtended(); // For a hack on visibility() static void keepVisibility(bool); + static void autoStart(bool); /* signals: void stopUpdatesOnVisibility(); @@ -43,6 +44,7 @@ private: KMixWindow *m_kmix; static bool _keepVisibility; + static bool _autoStart; }; #endif diff -urNB kmix/apps/kmix.cpp new/apps/kmix.cpp --- kmix/apps/kmix.cpp 2012-06-28 10:51:13.281867033 +0200 +++ new/apps/kmix.cpp 2012-06-29 07:42:05.518300726 +0200 @@ -30,9 +30,11 @@ #include #include #include +#include // include files for KDE +#include #include #include #include @@ -106,6 +108,9 @@ fixConfigAfterRead(); theKMixDeviceManager->initHotplug(); connect(theKMixDeviceManager, SIGNAL(plugged(const char*,QString,QString&)), SLOT (plugged(const char*,QString,QString&)) ); + if (KCmdLineArgs::parsedArgs()->isSet("autostart") && ! Mixer::mixers().first()) + QTimer::singleShot(0, kapp, SLOT(quit())); + connect(theKMixDeviceManager, SIGNAL(unplugged(QString)), SLOT (unplugged(QString)) ); if ( m_startVisible && ! invisible) show(); // Started visible @@ -364,6 +369,7 @@ config.writeEntry( "Labels", m_showLabels ); config.writeEntry( "startkdeRestore", m_onLogin ); config.writeEntry( "VolumeFeedback", m_beepOnVolumeChange ); + config.writeEntry( "AutoStart", m_autoStart ); config.writeEntry( "DefaultCardOnStart", m_defaultCardOnStart ); config.writeEntry( "ConfigVersion", KMIX_CONFIG_VERSION ); config.writeEntry( "AutoUseMultimediaKeys", m_autouseMultimediaKeys ); @@ -486,6 +492,7 @@ m_onLogin = config.readEntry("startkdeRestore", true ); setBeepOnVolumeChange(config.readEntry("VolumeFeedback", false )); m_startVisible = config.readEntry("Visible", false); + m_autoStart = config.readEntry("AutoStart", true); m_multiDriverMode = config.readEntry("MultiDriver", false); const QString& orientationString = config.readEntry("Orientation", "Vertical"); m_defaultCardOnStart = config.readEntry( "DefaultCardOnStart", "" ); @@ -1116,6 +1123,7 @@ m_prefDlg->m_volumeChk->setEnabled( m_showDockWidget ); m_prefDlg->m_onLogin->setChecked( m_onLogin ); m_prefDlg->m_beepOnVolumeChange->setChecked( m_beepOnVolumeChange ); + m_prefDlg->m_disableAutoStart->setChecked( !m_autoStart ); m_prefDlg->m_showTicks->setChecked( m_showTicks ); m_prefDlg->m_showLabels->setChecked( m_showLabels ); @@ -1158,6 +1166,7 @@ m_volumeWidget = prefDlg->m_volumeChk->isChecked(); m_onLogin = prefDlg->m_onLogin->isChecked(); setBeepOnVolumeChange(prefDlg->m_beepOnVolumeChange->isChecked()); + m_autoStart = !prefDlg->m_disableAutoStart->isChecked(); if ( prefDlg->_rbVertical->isChecked() ) { m_toplevelOrientation = Qt::Vertical; diff -urNB kmix/apps/kmix.h new/apps/kmix.h --- kmix/apps/kmix.h 2012-06-28 10:51:13.281867033 +0200 +++ new/apps/kmix.h 2012-06-29 07:41:11.648298584 +0200 @@ -111,6 +111,7 @@ bool m_showDockWidget; bool m_volumeWidget; + bool m_autoStart; bool m_showTicks; bool m_showLabels; bool m_onLogin; diff -urNB kmix/apps/main.cpp new/apps/main.cpp --- kmix/apps/main.cpp 2012-05-13 18:15:50.358563713 +0200 +++ new/apps/main.cpp 2012-06-29 07:41:11.649298588 +0200 @@ -61,6 +61,7 @@ KCmdLineOptions options; options.add("keepvisibility", ki18n("Inhibits the unhiding of the KMix main window, if KMix is already running.")); + options.add("autostart", ki18n("Used by kmix_autostart.desktop")); KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. KUniqueApplication::addCmdLineOptions(); @@ -68,6 +69,8 @@ bool hasArgKeepvisibility = args->isSet("keepvisibility"); //kDebug(67100) << "hasArgKeepvisibility=" << hasArgKeepvisibility; KMixApp::keepVisibility(hasArgKeepvisibility); + bool hasAutoStart = args->isSet("autostart"); + KMixApp::autoStart(hasAutoStart); if (!KMixApp::start()) return 0; diff -urNB kmix/gui/kmixprefdlg.cpp new/gui/kmixprefdlg.cpp --- kmix/gui/kmixprefdlg.cpp 2012-06-28 10:51:13.282867033 +0200 +++ new/gui/kmixprefdlg.cpp 2012-06-29 07:41:11.649298588 +0200 @@ -83,6 +83,12 @@ m_beepOnVolumeChange = new QCheckBox( i18n("Volume Feedback"), m_generalTab ); l->addWidget( m_beepOnVolumeChange ); + l = new QHBoxLayout(); + layout->addItem( l ); + l->addSpacing(10); + m_disableAutoStart = new QCheckBox( i18n("Disable automatic startup on login"), m_generalTab ); + l->addWidget( m_disableAutoStart ); + // ----------------------------------------------------------- diff -urNB kmix/gui/kmixprefdlg.h new/gui/kmixprefdlg.h --- kmix/gui/kmixprefdlg.h 2012-06-28 10:51:13.282867033 +0200 +++ new/gui/kmixprefdlg.h 2012-06-29 07:41:11.649298588 +0200 @@ -57,6 +57,7 @@ QCheckBox *m_showLabels; QCheckBox *m_onLogin; QCheckBox *m_beepOnVolumeChange; + QCheckBox *m_disableAutoStart; QRadioButton *_rbVertical; QRadioButton *_rbHorizontal; };