Subject: [PATCH] Debounce ToggleDialog window geometry saving
---
Index: src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
--- a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 19144)
+++ b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(date 1721136982241)
@@ -29,6 +29,8 @@
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
@@ -102,6 +104,8 @@
      */
     public static final BooleanProperty PROP_DYNAMIC_BUTTONS = new BooleanProperty("dialog.dynamic.buttons", false);
     private static final String SELECTED = "selected";
+    private static final Timer TIMER_THREAD = new Timer("ToggleDialogTimer", true);
+    private RememberGeometryTask rememberGeometryTask;
 
     private final transient ParametrizedEnumProperty<ButtonHidingType> propButtonHiding =
             new ParametrizedEnumProperty<>(ButtonHidingType.class, ButtonHidingType.DYNAMIC) {
@@ -705,6 +709,15 @@
         }
     }
 
+    private class RememberGeometryTask extends TimerTask {
+        @Override
+        public void run() {
+            if (detachedDialog != null && detachedDialog.isShowing()) {
+                new WindowGeometry(detachedDialog).remember(preferencePrefix+".geometry");
+            }
+        }
+    }
+
     /**
      * The dialog class used to display toggle dialogs in a detached window.
      *
@@ -757,9 +770,11 @@
         }
 
         protected void rememberGeometry() {
-            if (detachedDialog != null && detachedDialog.isShowing()) {
-                new WindowGeometry(detachedDialog).remember(preferencePrefix+".geometry");
+            if (rememberGeometryTask != null) {
+                rememberGeometryTask.cancel();
             }
+            rememberGeometryTask = new RememberGeometryTask();
+            ToggleDialog.TIMER_THREAD.schedule(rememberGeometryTask, 200);
         }
     }
 
