File kmix-autostart.diff of Package kdemultimedia4

Index: kmix/KMixApp.h
===================================================================
--- kmix/KMixApp.h	(revision 832805)
+++ kmix/KMixApp.h	(working copy)
@@ -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
Index: kmix/kmixprefdlg.h
===================================================================
--- kmix/kmixprefdlg.h	(revision 832805)
+++ kmix/kmixprefdlg.h	(working copy)
@@ -57,6 +57,7 @@
    QCheckBox *m_showTicks;
    QCheckBox *m_showLabels;
    QCheckBox *m_onLogin;
+   QCheckBox *m_disableAutoStart;
    QRadioButton *_rbVertical;
    QRadioButton *_rbHorizontal;
 };
Index: kmix/kmix.cpp
===================================================================
--- kmix/kmix.cpp	(revision 832805)
+++ kmix/kmix.cpp	(working copy)
@@ -27,8 +27,10 @@
 #include <QLabel>
 #include <qradiobutton.h>
 #include <KTabWidget>
+#include <QTimer>
 
 // include files for KDE
+#include <kcmdlineargs.h>
 #include <kcombobox.h>
 #include <kiconloader.h>
 #include <kmessagebox.h>
@@ -87,6 +89,10 @@
    theKMixDeviceManager->initHotplug();
    connect(theKMixDeviceManager, SIGNAL( plugged( const char*, const QString&, QString&)), SLOT (plugged( const char*, const QString&, QString&) ) );
    connect(theKMixDeviceManager, SIGNAL( unplugged( const QString&)), SLOT (unplugged( const QString&) ) );
+
+   if (KCmdLineArgs::parsedArgs()->isSet("autostart") && ! Mixer::mixers().first())
+      QTimer::singleShot(0, kapp, SLOT(quit()));
+
    if ( m_startVisible )
       show(); // Started visible: We don't do "m_isVisible = true;", as the showEvent() already does it
 
@@ -223,6 +229,7 @@
    config.writeEntry( "Tickmarks", m_showTicks );
    config.writeEntry( "Labels", m_showLabels );
    config.writeEntry( "startkdeRestore", m_onLogin );
+   config.writeEntry( "AutoStart", m_autoStart );
    config.writeEntry( "DefaultCardOnStart", m_defaultCardOnStart );
    config.writeEntry( "ConfigVersion", KMIX_CONFIG_VERSION );
    Mixer* mixerMasterCard = Mixer::getGlobalMasterMixer();
@@ -295,6 +302,7 @@
    m_showLabels = config.readEntry("Labels", true);
    m_onLogin = config.readEntry("startkdeRestore", true );
    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", "" );
@@ -586,6 +594,7 @@
       m_prefDlg->m_volumeChk->setChecked(m_volumeWidget);
       m_prefDlg->m_volumeChk->setEnabled( m_showDockWidget );
       m_prefDlg->m_onLogin->setChecked( m_onLogin );
+      m_prefDlg->m_disableAutoStart->setChecked( !m_autoStart );
 
       m_prefDlg->m_showTicks->setChecked( m_showTicks );
       m_prefDlg->m_showLabels->setChecked( m_showLabels );
@@ -627,6 +636,7 @@
    m_showDockWidget = prefDlg->m_dockingChk->isChecked();
    m_volumeWidget = prefDlg->m_volumeChk->isChecked();
    m_onLogin = prefDlg->m_onLogin->isChecked();
+   m_autoStart = !prefDlg->m_disableAutoStart->isChecked();
    if ( prefDlg->_rbVertical->isChecked() ) {
       m_toplevelOrientation = Qt::Vertical;
    }
Index: kmix/KMixApp.cpp
===================================================================
--- kmix/KMixApp.cpp	(revision 832805)
+++ kmix/KMixApp.cpp	(working copy)
@@ -22,9 +22,11 @@
 #include "KMixApp.h"
 #include "kmix.h"
 #include <kdebug.h>
+#include <kcmdlineargs.h>
 
 
 bool KMixApp::_keepVisibility = false;
+bool KMixApp::_autoStart = false;
 
 KMixApp::KMixApp()
     : KUniqueApplication(), m_kmix( 0 )
@@ -49,6 +51,16 @@
 KMixApp::newInstance()
 {
 	//kDebug(67100) <<  "KMixApp::newInstance() isRestored()=" << isRestored() << "_keepVisibility=" << _keepVisibility;
+	KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+	if (args->isSet("autostart"))
+	{
+		kapp->disableSessionManagement();
+
+		if ( m_kmix )
+			return 0;
+	}
+
 	if ( m_kmix )
 	{	// There already exists an instance/window
 		kDebug(67100) <<  "KMixApp::newInstance() Instance exists";
@@ -92,6 +104,11 @@
    _keepVisibility = val_keepVisibility;
 }
 
+void KMixApp::autoStart(bool val_autoStart) {
+   //kDebug(67100) <<  "KMixApp::autoStart()";
+   _autoStart = val_autoStart;
+}
+
 /*
 void
 KMixApp::quitExtended()
Index: kmix/kmix.h
===================================================================
--- kmix/kmix.h	(revision 832805)
+++ kmix/kmix.h	(working copy)
@@ -95,6 +95,7 @@
 
    bool m_showDockWidget;
    bool m_volumeWidget;
+   bool m_autoStart;
    bool m_showTicks;
    bool m_showLabels;
    bool m_onLogin;
Index: kmix/main.cpp
===================================================================
--- kmix/main.cpp	(revision 832805)
+++ kmix/main.cpp	(working copy)
@@ -55,12 +55,15 @@
 
    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();
 
    KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
    bool hasArgKeepvisibility = args->isSet("keepvisibility");
    KMixApp::keepVisibility(hasArgKeepvisibility);
+   bool hasAutoStart = args->isSet("autostart");
+   KMixApp::autoStart(hasAutoStart);
 
    if (!KMixApp::start())
        return 0;
Index: kmix/kmixprefdlg.cpp
===================================================================
--- kmix/kmixprefdlg.cpp	(revision 832805)
+++ kmix/kmixprefdlg.cpp	(working copy)
@@ -78,6 +78,12 @@
       m_onLogin = new QCheckBox( i18n("Restore volumes on login"), m_generalTab );
       l->addWidget( m_onLogin );
 
+   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 );
+
 // -----------------------------------------------------------
 
    label = new QLabel( i18n("Visual"), m_generalTab );