From 7f8984b500d6a40c55eb95a685cf3bc13730f8a5 Mon Sep 17 00:00:00 2001
From: Studiodyne <diabolomix@hotmail.fr>
Date: Wed, 14 Mar 2018 07:34:15 +0100
Subject: [PATCH] [1.1] FWRetract Reset (Best way) (#10084)

---
 Marlin/Configuration_adv.h | 2 +-
 Marlin/Marlin_main.cpp     | 2 +-
 Marlin/fwretract.cpp       | 4 +++-
 Marlin/fwretract.h         | 3 ++-
 4 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 4f2d9e0a85..2ddb0c806d 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -863,7 +863,7 @@
  * will be converted to firmware-based retract/recover moves.
  *
  * Note: Be sure to turn off auto-retract during filament change.
- * Note: Current status (Retract / Swap / Zlift) isn't reset by G28.
+ * Note: Current Zlift reset by G28 or G28 Z.
  *
  * Note that M207 / M208 / M209 settings are saved to EEPROM.
  *
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 218bf43f5c..8365ed812c 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -3093,7 +3093,7 @@ static void homeaxis(const AxisEnum axis) {
   // Clear retracted status if homing the Z axis
   #if ENABLED(FWRETRACT)
     if (axis == Z_AXIS)
-      for (uint8_t i = 0; i < EXTRUDERS; i++) fwretract.retracted[i] = false;
+      fwretract.hop_amount = 0.0;
   #endif
 
   #if ENABLED(DEBUG_LEVELING_FEATURE)
diff --git a/Marlin/fwretract.cpp b/Marlin/fwretract.cpp
index 4f0c65111b..8a26a4e16d 100644
--- a/Marlin/fwretract.cpp
+++ b/Marlin/fwretract.cpp
@@ -52,7 +52,8 @@ float FWRetract::retract_length,                     // M207 S - G10 Retract len
       FWRetract::retract_recover_feedrate_mm_s,      // M208 F - G11 Recover feedrate
       FWRetract::swap_retract_length,                // M207 W - G10 Swap Retract length
       FWRetract::swap_retract_recover_length,        // M208 W - G11 Swap Recover length
-      FWRetract::swap_retract_recover_feedrate_mm_s; // M208 R - G11 Swap Recover feedrate
+      FWRetract::swap_retract_recover_feedrate_mm_s, // M208 R - G11 Swap Recover feedrate
+      FWRetract::hop_amount;
 
 void FWRetract::reset() {
   autoretract_enabled = false;
@@ -64,6 +65,7 @@ void FWRetract::reset() {
   swap_retract_length = RETRACT_LENGTH_SWAP;
   swap_retract_recover_length = RETRACT_RECOVER_LENGTH_SWAP;
   swap_retract_recover_feedrate_mm_s = RETRACT_RECOVER_FEEDRATE_SWAP;
+  hop_amount = 0.0;
 
   for (uint8_t i = 0; i < EXTRUDERS; ++i) {
     retracted[i] = false;
diff --git a/Marlin/fwretract.h b/Marlin/fwretract.h
index a368857897..d72f193eb4 100644
--- a/Marlin/fwretract.h
+++ b/Marlin/fwretract.h
@@ -43,7 +43,8 @@ public:
                retract_recover_feedrate_mm_s,      // M208 F - G11 Recover feedrate
                swap_retract_length,                // M207 W - G10 Swap Retract length
                swap_retract_recover_length,        // M208 W - G11 Swap Recover length
-               swap_retract_recover_feedrate_mm_s; // M208 R - G11 Swap Recover feedrate
+               swap_retract_recover_feedrate_mm_s, // M208 R - G11 Swap Recover feedrate
+               hop_amount;
 
   FWRetract() { reset(); }