diff --git a/app/Helpers/ClamshellModeControl.cs b/app/Helpers/ClamshellModeControl.cs index d4fb59fc..b5c39831 100644 --- a/app/Helpers/ClamshellModeControl.cs +++ b/app/Helpers/ClamshellModeControl.cs @@ -6,6 +6,13 @@ namespace GHelper.Helpers { internal class ClamshellModeControl { + + public ClamshellModeControl() + { + //Save current setting if hibernate or shutdown to prevent reverting the user set option. + CheckAndSaveLidAction(); + } + public bool IsExternalDisplayConnected() { var devices = ScreenInterrogatory.GetAllDevices().ToArray(); @@ -31,7 +38,7 @@ namespace GHelper.Helpers public bool IsClamshellEnabled() { - return AppConfig.Get("toggle_clamshell_mode") != 0; + return AppConfig.Is("toggle_clamshell_mode"); } public bool IsChargerConnected() @@ -62,7 +69,7 @@ namespace GHelper.Helpers } public static void DisableClamshellMode() { - PowerNative.SetLidAction(1, true); + PowerNative.SetLidAction(GetDefaultLidAction(), true); Logger.WriteLine("Disengaging Clamshell Mode"); } @@ -89,5 +96,43 @@ namespace GHelper.Helpers if (IsClamshellEnabled()) ToggleLidAction(); } + + private static int CheckAndSaveLidAction() + { + if (AppConfig.Get("clamshell_default_lid_action", -1) != -1) + { + //Seting was alredy set. Do not touch it + return AppConfig.Get("clamshell_default_lid_action", -1); + } + + int val = PowerNative.GetLidAction(true); + //If it is 0 then it is likely already set by clamshell mdoe + //If 0 was set by the user, then why do they even use clamshell mode? + //We only care about hibernate or shutdown setting here + if (val == 2 || val == 3) + { + AppConfig.Set("clamshell_default_lid_action", val); + return val; + } + + return 1; + } + + //Power users can change that setting. + //0 = Do nothing + //1 = Sleep (default) + //2 = Hibernate + //3 = Shutdown + private static int GetDefaultLidAction() + { + int val = AppConfig.Get("clamshell_default_lid_action", 1); + + if (val < 0 || val > 3) + { + val = 1; + } + + return val; + } } } diff --git a/app/Mode/PowerNative.cs b/app/Mode/PowerNative.cs index 06a65bb2..ae70ee60 100644 --- a/app/Mode/PowerNative.cs +++ b/app/Mode/PowerNative.cs @@ -167,6 +167,28 @@ namespace GHelper.Mode } } + public static int GetLidAction(bool ac) + { + Guid activeSchemeGuid = GetActiveScheme(); + + IntPtr activeIndex; + if (ac) + PowerReadACValueIndex(IntPtr.Zero, + activeSchemeGuid, + GUID_SYSTEM_BUTTON_SUBGROUP, + GUID_LIDACTION, out activeIndex); + + else + PowerReadDCValueIndex(IntPtr.Zero, + activeSchemeGuid, + GUID_SYSTEM_BUTTON_SUBGROUP, + GUID_LIDACTION, out activeIndex); + + + return activeIndex.ToInt32(); + } + + public static void SetLidAction(int action, bool acOnly = false) { /** diff --git a/app/Properties/Strings.lt.resx b/app/Properties/Strings.lt.resx index bb30cbe3..a2d9553c 100644 --- a/app/Properties/Strings.lt.resx +++ b/app/Properties/Strings.lt.resx @@ -163,13 +163,13 @@ Veikiančios Asus tarnybos - Battery State + Būsena Kvėpavimas - Clockwise + Pagal laikrodžio rodyklę Spalvų ciklas @@ -178,7 +178,7 @@ Comet - Counterclockwise + Prieš laikrodžio rodyklę Greitas @@ -190,7 +190,7 @@ Vaivorykštė - Random + Atsitiktinė React @@ -211,7 +211,7 @@ Automatinis - Nustato 60Hz, kad stokotų akumuliatorių, ir atgal, kai prijungtas prie lizdo + Nustato 60Hz, kad taupytų energiją, ir atgal, kai įjungtas į lizdą Pabudęs @@ -271,7 +271,7 @@ Tvarkyklės ir programinė įranga - Išjungia dGPU, kad stokotų akumuliatorių + Išjungia dGPU, kad taupytų energiją Ekonomiškas @@ -381,7 +381,7 @@ Vis tiek norite tęsti? Šviesos juosta - Lighting + Apšvietimas Logotipas @@ -420,25 +420,25 @@ Vis tiek norite tęsti? Maksimalus kadrų dažnis už mažesnę delsą - 60Hz kadrų dažnis, kad stokotumėte akumuliatorių + 60Hz kadrų dažnis, kad taupytumėte energiją - Minute + min. - Minutes + min. Angle Snapping - Auto Power Off After + Automatiškai išjungti po Pakilimo atstumas - Low Battery Warning at + Senkančio akumuliatoriaus įspėjimas Našumas @@ -453,16 +453,16 @@ Vis tiek norite tęsti? Mikrofono nutildymas - Never + Niekada - Prieinami naujinimai + Nauji naujinimai - Nėra prieinamų naujinimų + Nėra naujų naujinimų - Not Connected + Neprijungta Atidaryti G-Helper langą @@ -471,7 +471,7 @@ Vis tiek norite tęsti? Optimizuotas - Perjungti į ekonomišką, kai naudojamas akumuliatorius, ir į standartinį, kai prijungtas prie lizdo + Perjungti į ekonomišką, kai naudojamas akumuliatorius, ir į standartinį, kai įjungtas į lizdą Neįjungti GPU, kai naudojamas USB-C įkroviklis optimizuotame režime @@ -486,7 +486,7 @@ Vis tiek norite tęsti? Režimas - Peripherals + Išoriniai įrenginiai Paveikslėlis / GIF @@ -495,7 +495,7 @@ Vis tiek norite tęsti? Paleisti / Pristabdyti - Polling Rate + Iškvietų dažnis Galios ribos