From 8a33fca824bbb3c07d591d4cf06ead8c0dbf89a3 Mon Sep 17 00:00:00 2001
From: Davide Depau <davide@depau.eu>
Date: Fri, 2 Jul 2021 23:24:33 +0200
Subject: [PATCH] Kelon: Handle toggles in toCommon()

---
 src/ir_Kelon.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/ir_Kelon.cpp b/src/ir_Kelon.cpp
index 00041126a..7f02e2513 100644
--- a/src/ir_Kelon.cpp
+++ b/src/ir_Kelon.cpp
@@ -451,10 +451,13 @@ stdAc::state_t IRKelonAc::toCommon(const stdAc::state_t *prev) const {
   result.sleep = getSleep() ? 0 : -1;
   // Not supported.
   // N/A, AC only supports toggling it
-  result.power = prev == nullptr || prev->power;
+  result.power = (prev == nullptr || prev->power) ^ _.PowerToggle;
   // N/A, AC only supports toggling it
-  result.swingv = prev != nullptr ? prev->swingv : stdAc::swingv_t::kAuto;
-  // N/A, horizontal air direction can only be set by manually adjusting it
+  result.swingv = stdAc::swingv_t::kAuto;
+  if (prev != nullptr &&
+      (prev->swingv == stdAc::swingv_t::kAuto) ^ _.SwingVToggle) {
+    result.swingv = stdAc::swingv_t::kOff;
+  }
   result.swingh = stdAc::swingh_t::kOff;
   result.light = true;
   result.beep = true;