feat(window): recover off-screen position after display layout change
Persisted ImGui window position can end up off-screen when the user disconnects a monitor or changes display resolution between sessions. The chat log window then renders outside the visible viewport with no drag handles available, and the only recovery path is editing the JSON config by hand. This commit adds two layers of safety: - Automatic one-shot bounds check on the first draw after plugin load. If less than 100x40 pixels of the saved window position overlap the primary viewport, the window snaps to a safe default offset (top-left + 50px). Logged at INF level so users can verify the recovery happened. - Manual "Reset Window Position" button in Settings -> Window -> Frame as a deliberate escape hatch when anything else slips past the automatic check (different DPI scaling, viewport edge cases). Pop-outs are intentionally not part of this recovery path: they are non-persistent (cleared on plugin reload) and therefore cannot survive a session boundary in an off-screen state. Tested on Linux/Wayland (KAZAMA, Plasma, 3-monitor setup): hard-cut test with both auxiliary monitors physically disconnected between sessions reproduces the off-screen window before the patch and recovers cleanly with this fix in place.
This commit is contained in:
@@ -591,6 +591,12 @@
|
||||
<data name="Settings_Window_PopOutInputEnabled_Description" xml:space="preserve">
|
||||
<value>Master-Switch: erlaubt direktes Tippen und Absenden in jedem Pop-Out-Fenster (inkl. Auto-Tell-Tabs). Channel-Wechsel im Pop-Out wirkt global wie im Hauptfenster; Text-Buffer und History-Cursor sind pro Pop-Out unabhängig.</value>
|
||||
</data>
|
||||
<data name="Settings_Window_ResetPosition_Name" xml:space="preserve">
|
||||
<value>Fenster-Position zurücksetzen</value>
|
||||
</data>
|
||||
<data name="Settings_Window_ResetPosition_Description" xml:space="preserve">
|
||||
<value>Holt das Chat-Fenster und alle aktiven Pop-Outs zurück in die linke obere Ecke des Hauptmonitors. Hilfreich wenn ein Fenster nach einem Display-Layout-Wechsel außerhalb des sichtbaren Bereichs gelandet ist (Monitor abgezogen, Auflösung geändert). Das Plugin macht außerdem einmal pro Session einen automatischen Bounds-Check, dieser Button ist der manuelle Notausgang falls trotzdem etwas unerreichbar bleibt.</value>
|
||||
</data>
|
||||
<data name="Popout_v060_HintText" xml:space="preserve">
|
||||
<value>Neu in v0.6.0: Du kannst jetzt direkt im Pop-Out tippen. Master-Switch in den Fenster-Settings aktivieren.</value>
|
||||
</data>
|
||||
|
||||
Reference in New Issue
Block a user