From ba6b20795df0c7a3344ca2a77042e8eee7ac744c Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 29 Aug 2013 20:50:54 -0500 Subject: [PATCH] Completely disable autosuspend functions if system does not support suspend This relates to Bug 1615 --- src/configuredialog.cpp | 48 ++++++++++++------- src/tdepowersave.cpp | 103 +++++++++++++++++++++++++++++----------- 2 files changed, 104 insertions(+), 47 deletions(-) diff --git a/src/configuredialog.cpp b/src/configuredialog.cpp index 83bd6bb..3bc968e 100644 --- a/src/configuredialog.cpp +++ b/src/configuredialog.cpp @@ -88,12 +88,15 @@ ConfigureDialog::ConfigureDialog( TDEConfig *_config, HardwareInfo *_hwinfo, Set // get the correct available suspend types SuspendStates suspend = hwinfo->getSuspendSupport(); - if( suspend.suspend2ram && (suspend.suspend2ram_allowed || suspend.suspend2ram_allowed == -1)) + if( suspend.suspend2ram && (suspend.suspend2ram_allowed || suspend.suspend2ram_allowed == -1)) { actions.append("Suspend to RAM"); - if ( suspend.suspend2disk && (suspend.suspend2disk_allowed || suspend.suspend2disk_allowed == -1)) + } + if ( suspend.suspend2disk && (suspend.suspend2disk_allowed || suspend.suspend2disk_allowed == -1)) { actions.append("Suspend to Disk"); - if ( suspend.standby && (suspend.standby_allowed || suspend.standby_allowed == -1)) + } + if ( suspend.standby && (suspend.standby_allowed || suspend.standby_allowed == -1)) { actions.append("Standby"); + } setIcons(); setTooltips(); @@ -147,26 +150,26 @@ void ConfigureDialog::setSchemeList(){ for ( TQStringList::Iterator it = schemes.begin(); it != schemes.end(); ++it ) { const char *_tmp = (*it).ascii(); - if(_tmp == "Performance" || _tmp == i18n("Performance")) { + if((*it) == "Performance" || (*it) == i18n("Performance")) { listBox_schemes->insertItem(SmallIcon("scheme_power", TQIconSet::Automatic), i18n(_tmp)); cB_acScheme->insertItem(i18n(_tmp)); cB_batteryScheme->insertItem(i18n(_tmp)); - } else if(_tmp == "Powersave" || _tmp == i18n("Powersave")) { + } else if((*it) == "Powersave" || (*it) == i18n("Powersave")) { listBox_schemes->insertItem(SmallIcon("scheme_powersave", TQIconSet::Automatic), i18n(_tmp)); cB_acScheme->insertItem(i18n(_tmp)); cB_batteryScheme->insertItem(i18n(_tmp)); - } else if(_tmp == "Presentation" || _tmp == i18n("Presentation")){ + } else if((*it) == "Presentation" || (*it) == i18n("Presentation")){ listBox_schemes->insertItem(SmallIcon("scheme_presentation", TQIconSet::Automatic), i18n(_tmp)); cB_acScheme->insertItem(i18n(_tmp)); cB_batteryScheme->insertItem(i18n(_tmp)); - } else if(_tmp == "Acoustic" || _tmp == i18n("Acoustic")) { + } else if((*it) == "Acoustic" || (*it) == i18n("Acoustic")) { listBox_schemes->insertItem(SmallIcon("scheme_acoustic", TQIconSet::Automatic), i18n(_tmp)); cB_acScheme->insertItem(i18n(_tmp)); cB_batteryScheme->insertItem(i18n(_tmp)); - } else if(_tmp == "AdvancedPowersave" || _tmp == i18n("Advanced Powersave")) { + } else if((*it) == "AdvancedPowersave" || (*it) == i18n("Advanced Powersave")) { listBox_schemes->insertItem(SmallIcon("scheme_advanced_powersave", TQIconSet::Automatic), i18n("Advanced Powersave")); cB_acScheme->insertItem(i18n("Advanced Powersave")); @@ -240,12 +243,15 @@ void ConfigureDialog::setIcons(){ tB_scheme->setItemIconSet( 0 ,SmallIcon("tdescreensaver", TQIconSet::Automatic)); tB_scheme->setItemIconSet( 1 ,SmallIcon("display", TQIconSet::Automatic)); - if(actions[0] == "Suspend to Disk") + if(actions[0] == "Suspend to Disk") { tB_scheme->setItemIconSet( 2 ,SmallIcon("suspend_to_disk", TQIconSet::Automatic)); - else if(actions[0] == "Suspend to RAM") + } + else if(actions[0] == "Suspend to RAM") { tB_scheme->setItemIconSet( 2 ,SmallIcon("suspend_to_ram", TQIconSet::Automatic)); - else if(actions[0] == "Standby") + } + else if(actions[0] == "Standby") { tB_scheme->setItemIconSet( 2 ,SmallIcon("stand_by", TQIconSet::Automatic)); + } tB_scheme->setItemIconSet( 3 ,SmallIcon("autodimm", TQIconSet::Automatic)); tB_scheme->setItemIconSet( 4 ,SmallIcon("processor", TQIconSet::Automatic)); @@ -630,13 +636,18 @@ void ConfigureDialog::setConfigToDialog( int schemeID ){ } } + if (actions.count() < 1) { + cB_autoSuspend->setEnabled(false); + cB_autoSuspend->setChecked(false); + } + cB_disableNotifications->setChecked(tdeconfig->readBoolEntry("disableNotifications",false)); - + cB_Blacklist_toggled(tdeconfig->readBoolEntry("autoInactiveSchemeBlacklistEnabled",false)); cB_autoSuspend_toggled(tdeconfig->readBoolEntry("autoSuspend",false)); cB_BlacklistDimm_toggled(tdeconfig->readBoolEntry("autoDimmSchemeBlacklistEnabled",false)); cB_autoDimm_toggled(tdeconfig->readBoolEntry("autoDimm",false)); - + initalised = true; scheme_changed = false; if(!general_changed) buttonApply->setEnabled(false); @@ -1277,14 +1288,15 @@ void ConfigureDialog::setInactivityBox(){ kdDebugFuncOut(trace); } -/*! +/*! * This used to set the autosuspend related widgets. */ void ConfigureDialog::cB_autoSuspend_toggled( bool toggled ) { kdDebugFuncIn(trace); - if(cB_autoSuspend->isOn() != toggled) - cB_autoSuspend->setChecked(toggled); + if(cB_autoSuspend->isOn() != toggled) { + cB_autoSuspend->setChecked(toggled); + } tL_autoInactivity_explain->setEnabled(toggled); cB_autoInactivity->setEnabled(toggled); @@ -1295,7 +1307,7 @@ void ConfigureDialog::cB_autoSuspend_toggled( bool toggled ) { cB_Blacklist->setEnabled(true); cB_Blacklist_toggled(cB_Blacklist->isOn()); } - + if(!toggled) { cB_autoSuspend->setChecked(false); tL_autoInactivity_After->setEnabled(false); @@ -1304,7 +1316,7 @@ void ConfigureDialog::cB_autoSuspend_toggled( bool toggled ) { cB_Blacklist->setEnabled(false); pB_editBlacklist->setEnabled(false); } - + scheme_changed = true; buttonApply->setEnabled(true); diff --git a/src/tdepowersave.cpp b/src/tdepowersave.cpp index 2958d72..b54b990 100644 --- a/src/tdepowersave.cpp +++ b/src/tdepowersave.cpp @@ -859,38 +859,61 @@ bool tdepowersave::do_standby(){ void tdepowersave::do_autosuspendWarn() { kdDebugFuncIn(trace); - if (settings->autoSuspendCountdown && (settings->autoSuspendCountdownTimeout > 0)) { - // we have to display the warn dialog - if(!contextMenu()->isItemChecked(AUTOSUSPEND_MENU_ID)) { - TQString message; - - countdown = new countDownDialog(settings->autoSuspendCountdownTimeout); + // Verify that the desired suspend action is allowed before displaying the dialog + SuspendStates suspend = hwinfo->getSuspendSupport(); + bool allowed = false; + if(settings->autoInactiveAction == "Suspend to Disk") { + if ( suspend.suspend2disk && (suspend.suspend2disk_allowed || suspend.suspend2disk_allowed == -1)) { + allowed = true; + } + } + else if (settings->autoInactiveAction == "Suspend to RAM") { + if( suspend.suspend2ram && (suspend.suspend2ram_allowed || suspend.suspend2ram_allowed == -1)) { + allowed = true; + } + } + else if (settings->autoInactiveAction == "Standby") { + if ( suspend.standby && (suspend.standby_allowed || suspend.standby_allowed == -1)) { + allowed = true; + } + } - if(settings->autoInactiveAction == "Suspend to Disk") { - countdown->setPixmap("suspend2disk"); - } else if (settings->autoInactiveAction == "Suspend to RAM") { - countdown->setPixmap("suspend2ram"); - } else if (settings->autoInactiveAction == "Standby") { - countdown->setPixmap("standby"); - } else { - countdown->setPixmap("tdepowersave"); - } + if (allowed) { + if (settings->autoSuspendCountdown && (settings->autoSuspendCountdownTimeout > 0)) { + // we have to display the warn dialog + if(!contextMenu()->isItemChecked(AUTOSUSPEND_MENU_ID)) { + TQString message; + + countdown = new countDownDialog(settings->autoSuspendCountdownTimeout); + + if(settings->autoInactiveAction == "Suspend to Disk") { + countdown->setPixmap("suspend2disk"); + } else if (settings->autoInactiveAction == "Suspend to RAM") { + countdown->setPixmap("suspend2ram"); + } else if (settings->autoInactiveAction == "Standby") { + countdown->setPixmap("standby"); + } else { + countdown->setPixmap("tdepowersave"); + } - // TODO: rework this after translation round for openSUSE 10.3 ! - message = i18n("Inactivity detected.") + " " + - i18n("To stop the %1 press the 'Cancel' button before the countdown " - "expires.").arg(i18n("Autosuspend")) + "\n\n" + - i18n("The computer autosuspend in: "); + // TODO: rework this after translation round for openSUSE 10.3 ! + message = i18n("Inactivity detected.") + " " + + i18n("To stop the %1 press the 'Cancel' button before the countdown " + "expires.").arg(i18n("Autosuspend")) + "\n\n" + + i18n("The computer autosuspend in: "); - countdown->setMessageText(message); + countdown->setMessageText(message); - connect(countdown, TQT_SIGNAL(dialogClosed(bool)), this, TQT_SLOT(do_autosuspend(bool))); - countdown->showDialog(); + connect(countdown, TQT_SIGNAL(dialogClosed(bool)), this, TQT_SLOT(do_autosuspend(bool))); + countdown->showDialog(); + } + } + else { + // call directly autosuspend + do_autosuspend(false); } - } else { - // call directly autosuspend - do_autosuspend(false); } + kdDebugFuncOut(trace); } @@ -1701,7 +1724,8 @@ void tdepowersave::setSchemeSettings(){ // --> set autosuspend settings if(settings->autoSuspend) { setAutoSuspend(false); - } else { + } + else { this->contextMenu()->setItemVisible(AUTOSUSPEND_MENU_ID, false); this->contextMenu()->setItemChecked(AUTOSUSPEND_MENU_ID, false); this->contextMenu()->setItemVisible(AUTOSUSPEND_SEPARATOR_MENU_ID, false); @@ -1803,6 +1827,28 @@ void tdepowersave::setSchemeSettings(){ void tdepowersave::setAutoSuspend( bool resumed ){ if (trace) kdDebug() << funcinfo << "IN: " << "resumed? " << resumed << endl; + // Verify that the desired suspend action is allowed before enabling autosuspend + SuspendStates suspend = hwinfo->getSuspendSupport(); + bool allowed = false; + if(settings->autoInactiveAction == "Suspend to Disk") { + if ( suspend.suspend2disk && (suspend.suspend2disk_allowed || suspend.suspend2disk_allowed == -1)) { + allowed = true; + } + } + else if (settings->autoInactiveAction == "Suspend to RAM") { + if( suspend.suspend2ram && (suspend.suspend2ram_allowed || suspend.suspend2ram_allowed == -1)) { + allowed = true; + } + } + else if (settings->autoInactiveAction == "Standby") { + if ( suspend.standby && (suspend.standby_allowed || suspend.standby_allowed == -1)) { + allowed = true; + } + } + if (!allowed) { + settings->autoSuspend = false; + } + if(settings->autoInactiveActionAfter > 0 && settings->autoSuspend) { int autoInactiveActionAfter = 0; @@ -1814,8 +1860,7 @@ void tdepowersave::setAutoSuspend( bool resumed ){ autoSuspend->stop(); delete autoSuspend; autoSuspend = new autosuspend(); - connect(autoSuspend, TQT_SIGNAL(inactivityTimeExpired()), this, - TQT_SLOT(do_autosuspendWarn())); + connect(autoSuspend, TQT_SIGNAL(inactivityTimeExpired()), this, TQT_SLOT(do_autosuspendWarn())); } if (settings->autoSuspendCountdown && (settings->autoSuspendCountdownTimeout > 0)) {