diff -Naur smart-0.51/contrib/ksmarttray/src/ksmarttray.cc smart-0.51.tpg/contrib/ksmarttray/src/ksmarttray.cc --- smart-0.51/contrib/ksmarttray/src/ksmarttray.cc 2005-03-04 19:21:46.000000000 +0000 +++ smart-0.51.tpg/contrib/ksmarttray/src/ksmarttray.cc 2007-08-28 09:10:55.000000000 +0000 @@ -48,6 +48,7 @@ { hasActions = false; checkAction.setText("Check"); + startSmartAction.setText("Start Smart..."); stopAction.setText("Stop"); stopAction.setIcon("stop"); stopAction.setEnabled(false); @@ -58,6 +59,7 @@ if (!hasActions) { hasActions = true; checkAction.plug(menu, 1); + startSmartAction.plug(menu, 2); //stopAction.plug(menu, 2); } } @@ -94,6 +96,8 @@ connect(&sysTray.checkAction, SIGNAL(activated()), this, SLOT(manualCheckUpgrades())); + connect(&sysTray.startSmartAction, SIGNAL(activated()), + this, SLOT(startSmart())); connect(&sysTray.stopAction, SIGNAL(activated()), this, SLOT(stopChecking())); connect(&sysTray, SIGNAL(quitSelected()), @@ -112,6 +116,7 @@ return; if (state == StateWaiting) { sysTray.checkAction.setEnabled(false); + sysTray.startSmartAction.setEnabled(false); sysTray.stopAction.setEnabled(true); process.resetAll(); if (manual) @@ -145,6 +150,7 @@ "There is a running process."); } else { sysTray.checkAction.setEnabled(false); + sysTray.startSmartAction.setEnabled(false); sysTray.stopAction.setEnabled(false); process.resetAll(); process << "kdesu" << "-d" << "-c" << "smart --gui upgrade"; @@ -159,6 +165,28 @@ } } +void KSmartTray::startSmart() +{ + if (state != StateWaiting) { + KNotifyClient::event(sysTray.winId(), "fatalerror", + "There is a running process."); + } else { + sysTray.checkAction.setEnabled(false); + sysTray.startSmartAction.setEnabled(false); + sysTray.stopAction.setEnabled(false); + process.resetAll(); + process << "kdesu" << "-d" << "-c" << "smart --gui"; + if (!process.start()) { + KNotifyClient::event(sysTray.winId(), "fatalerror", + "Couldn't run 'smart'."); + } else { + state = StateRunningSmart; + QToolTip::remove(&sysTray); + QToolTip::add(&sysTray, "Running Smart Package Manager..."); + } + } +} + void KSmartTray::stopChecking() { process.kill(); @@ -223,6 +251,11 @@ lastKnownStatus = ""; break; + case StateRunningSmart: + state = StateWaiting; + lastKnownStatus = ""; + break; + default: /* Error! */ break; @@ -231,6 +264,7 @@ if (state == StateWaiting) { updateFailed = false; sysTray.checkAction.setEnabled(true); + sysTray.startSmartAction.setEnabled(true); sysTray.stopAction.setEnabled(false); if (!lastKnownStatus.isEmpty()) { diff -Naur smart-0.51/contrib/ksmarttray/src/ksmarttray.h smart-0.51.tpg/contrib/ksmarttray/src/ksmarttray.h --- smart-0.51/contrib/ksmarttray/src/ksmarttray.h 2006-06-13 13:24:24.000000000 +0000 +++ smart-0.51.tpg/contrib/ksmarttray/src/ksmarttray.h 2007-08-28 09:10:55.000000000 +0000 @@ -43,6 +43,7 @@ KAction checkAction; KAction stopAction; + KAction startSmartAction; protected: @@ -69,6 +70,7 @@ StateUpdating, StateChecking, StateUpgrading, + StateRunningSmart, }; State state; @@ -105,6 +107,7 @@ void checkUpgrades(); void manualCheckUpgrades(); void runUpgrades(); + void startSmart(); public: