status/powerProfiles: Remember last selected non-default profile

When we move to quick settings, this will allow us to toggle
between two profiles even where more profiles are available.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
This commit is contained in:
Florian Müllner 2022-07-29 20:00:18 +02:00 committed by Marge Bot
parent dc4ed1d7d2
commit 4f155d3757
2 changed files with 18 additions and 2 deletions

View File

@ -94,6 +94,15 @@
adapter is ever seen not to have devices associated to it. adapter is ever seen not to have devices associated to it.
</description> </description>
</key> </key>
<key name="last-selected-power-profile" type="s">
<default>"power-saver"</default>
<summary>The last selected non-default power profile</summary>
<description>
Some systems support more than two power profiles. In order to still support
toggling between two profiles, this key records the last selected non-default
profile.
</description>
</key>
<key name="welcome-dialog-last-shown-version" type="s"> <key name="welcome-dialog-last-shown-version" type="s">
<default>''</default> <default>''</default>
<summary>The last version the “Welcome to GNOME” dialog was shown for</summary> <summary>The last version the “Welcome to GNOME” dialog was shown for</summary>

View File

@ -32,6 +32,8 @@ const PROFILE_PARAMS = {
}, },
}; };
const LAST_PROFILE_KEY = 'last-selected-power-profile';
var Indicator = GObject.registerClass( var Indicator = GObject.registerClass(
class Indicator extends PanelMenu.SystemIndicator { class Indicator extends PanelMenu.SystemIndicator {
_init() { _init() {
@ -101,14 +103,19 @@ class Indicator extends PanelMenu.SystemIndicator {
if (!this._item.visible) if (!this._item.visible)
return; return;
const {ActiveProfile: activeProfile} = this._proxy;
for (const [profile, item] of this._profileItems) { for (const [profile, item] of this._profileItems) {
item.setOrnament(profile === this._proxy.ActiveProfile item.setOrnament(profile === activeProfile
? PopupMenu.Ornament.CHECK ? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE); : PopupMenu.Ornament.NONE);
} }
const {label, iconName} = PROFILE_PARAMS[this._proxy.ActiveProfile]; const {label, iconName} = PROFILE_PARAMS[activeProfile];
this._item.label.text = label; this._item.label.text = label;
this._item.icon.icon_name = iconName; this._item.icon.icon_name = iconName;
if (activeProfile !== 'balanced')
global.settings.set_string(LAST_PROFILE_KEY, activeProfile);
} }
}); });