From 99e8aafacf9feb70e2c3d480a0c98e31c6a6ae37 Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:05:27 +0200 Subject: [PATCH 1/8] Add isolated UI scaling test build --- ui_scaling_test.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 ui_scaling_test.py diff --git a/ui_scaling_test.py b/ui_scaling_test.py new file mode 100644 index 0000000..293636a --- /dev/null +++ b/ui_scaling_test.py @@ -0,0 +1,53 @@ +import tkinter as tk +from tkinter import ttk + +import setup_tool_dynamic + + +class ScalingTestTool(setup_tool_dynamic.ModernWowSetupTool): + """Temporary UI-only build for validating Windows DPI/display scaling.""" + + def __init__(self, root): + super().__init__(root) + + # UI-only test: preserve every installer behavior and only change how + # the existing Tk window allocates and exposes its controls. + root.title("WoW Vanilla 1.12 Modernization Tool [UI Scaling Test]") + root.resizable(True, True) + + # Reserve the bottom action button before the expandable notebook. + # This keeps Apply accessible when Windows text/DPI scaling makes the + # notebook request more vertical space than the original 680x660 size. + notebook = next( + (child for child in root.winfo_children() if isinstance(child, ttk.Notebook)), + None, + ) + apply_button = getattr(self, "apply_button", None) + if notebook is not None and apply_button is not None: + notebook.pack_forget() + apply_button.pack_forget() + apply_button.pack(side="bottom", pady=10, fill="x", padx=20) + notebook.pack(fill="both", expand=True, padx=10, pady=(5, 10)) + + root.update_idletasks() + + # Prefer the widgets' requested size when the monitor has room, while + # keeping a margin so the window remains reachable on smaller displays. + screen_width = max(1, root.winfo_screenwidth()) + screen_height = max(1, root.winfo_screenheight()) + max_width = max(640, screen_width - 80) + max_height = max(520, screen_height - 80) + + requested_width = max(680, root.winfo_reqwidth()) + requested_height = max(660, root.winfo_reqheight()) + width = min(requested_width, max_width) + height = min(requested_height, max_height) + + root.geometry(f"{width}x{height}") + root.minsize(min(640, max_width), min(520, max_height)) + + +if __name__ == "__main__": + root = tk.Tk() + app = ScalingTestTool(root) + root.mainloop() -- 2.52.0 From 7841c58a646d830acf308a10904b10df9e021a5d Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:05:49 +0200 Subject: [PATCH 2/8] Build isolated UI scaling test artifact --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 91dd900..8b55171 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,7 @@ on: - 'main' - 'feature/client-tweaks' - 'test/discord-presence' + - 'test/ui-scaling' tags: - 'v*' pull_request: @@ -51,7 +52,7 @@ jobs: run: python scripts/prepare_remote_fallbacks.py - name: Syntax check - run: python -m py_compile setup_tool.py setup_tool_dynamic.py remote_packages.py tests/test_safety.py scripts/prepare_remote_fallbacks.py + run: python -m py_compile setup_tool.py setup_tool_dynamic.py remote_packages.py tests/test_safety.py scripts/prepare_remote_fallbacks.py ui_scaling_test.py - name: Unit safety tests run: python -m unittest discover -s tests -v @@ -66,7 +67,7 @@ jobs: --add-data "Payload;Payload" --add-data "vanilla-tweaks.exe;." --name "WoW_Modernization_Tool" - setup_tool_dynamic.py + ui_scaling_test.py - name: Verify EXE exists shell: pwsh @@ -87,7 +88,7 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/tags/') && !(github.ref == 'refs/heads/main' && github.event.head_commit.message == 'release v2.3') }} uses: actions/upload-artifact@v4 with: - name: WoW_Modernization_Tool-test + name: WoW_Modernization_Tool-ui-scaling-test path: | dist/WoW_Modernization_Tool.exe dist/WoW_Modernization_Tool.zip -- 2.52.0 From 62b736c205ed75058e58ef0f7f8a312004dcce7f Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:28:00 +0200 Subject: [PATCH 3/8] Add responsive production UI entry point --- setup_tool_responsive.py | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 setup_tool_responsive.py diff --git a/setup_tool_responsive.py b/setup_tool_responsive.py new file mode 100644 index 0000000..68fcfa8 --- /dev/null +++ b/setup_tool_responsive.py @@ -0,0 +1,51 @@ +import tkinter as tk +from tkinter import ttk + +import setup_tool_dynamic + + +class ResponsiveModernWowSetupTool(setup_tool_dynamic.ModernWowSetupTool): + """Production entry point with DPI/display-scaling-safe window behavior.""" + + def __init__(self, root): + super().__init__(root) + + # Preserve all existing installer behavior and only change how the + # top-level Tk window allocates and exposes its controls. + root.resizable(True, True) + + # Reserve the bottom action button before the expandable notebook so + # Windows DPI/text scaling cannot push Apply outside the visible area. + notebook = next( + (child for child in root.winfo_children() if isinstance(child, ttk.Notebook)), + None, + ) + apply_button = getattr(self, "apply_button", None) + if notebook is not None and apply_button is not None: + notebook.pack_forget() + apply_button.pack_forget() + apply_button.pack(side="bottom", pady=10, fill="x", padx=20) + notebook.pack(fill="both", expand=True, padx=10, pady=(5, 10)) + + root.update_idletasks() + + # Prefer the widgets' requested size when the monitor has room, while + # keeping a margin so the window remains reachable on smaller screens. + screen_width = max(1, root.winfo_screenwidth()) + screen_height = max(1, root.winfo_screenheight()) + max_width = max(640, screen_width - 80) + max_height = max(520, screen_height - 80) + + requested_width = max(680, root.winfo_reqwidth()) + requested_height = max(660, root.winfo_reqheight()) + width = min(requested_width, max_width) + height = min(requested_height, max_height) + + root.geometry(f"{width}x{height}") + root.minsize(min(640, max_width), min(520, max_height)) + + +if __name__ == "__main__": + root = tk.Tk() + app = ResponsiveModernWowSetupTool(root) + root.mainloop() -- 2.52.0 From cd8a3e19f9fb1da1914c6e38ee414e4ec46e0b2c Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:28:23 +0200 Subject: [PATCH 4/8] Build responsive UI entry point --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8b55171..94b0b1d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -52,7 +52,7 @@ jobs: run: python scripts/prepare_remote_fallbacks.py - name: Syntax check - run: python -m py_compile setup_tool.py setup_tool_dynamic.py remote_packages.py tests/test_safety.py scripts/prepare_remote_fallbacks.py ui_scaling_test.py + run: python -m py_compile setup_tool.py setup_tool_dynamic.py setup_tool_responsive.py remote_packages.py tests/test_safety.py scripts/prepare_remote_fallbacks.py - name: Unit safety tests run: python -m unittest discover -s tests -v @@ -67,7 +67,7 @@ jobs: --add-data "Payload;Payload" --add-data "vanilla-tweaks.exe;." --name "WoW_Modernization_Tool" - ui_scaling_test.py + setup_tool_responsive.py - name: Verify EXE exists shell: pwsh @@ -88,7 +88,7 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/tags/') && !(github.ref == 'refs/heads/main' && github.event.head_commit.message == 'release v2.3') }} uses: actions/upload-artifact@v4 with: - name: WoW_Modernization_Tool-ui-scaling-test + name: WoW_Modernization_Tool-test path: | dist/WoW_Modernization_Tool.exe dist/WoW_Modernization_Tool.zip -- 2.52.0 From e385229f4a2ea02c49eb606a43f745a8ffdf5050 Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:28:29 +0200 Subject: [PATCH 5/8] Remove temporary UI scaling test entry point --- ui_scaling_test.py | 53 ---------------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 ui_scaling_test.py diff --git a/ui_scaling_test.py b/ui_scaling_test.py deleted file mode 100644 index 293636a..0000000 --- a/ui_scaling_test.py +++ /dev/null @@ -1,53 +0,0 @@ -import tkinter as tk -from tkinter import ttk - -import setup_tool_dynamic - - -class ScalingTestTool(setup_tool_dynamic.ModernWowSetupTool): - """Temporary UI-only build for validating Windows DPI/display scaling.""" - - def __init__(self, root): - super().__init__(root) - - # UI-only test: preserve every installer behavior and only change how - # the existing Tk window allocates and exposes its controls. - root.title("WoW Vanilla 1.12 Modernization Tool [UI Scaling Test]") - root.resizable(True, True) - - # Reserve the bottom action button before the expandable notebook. - # This keeps Apply accessible when Windows text/DPI scaling makes the - # notebook request more vertical space than the original 680x660 size. - notebook = next( - (child for child in root.winfo_children() if isinstance(child, ttk.Notebook)), - None, - ) - apply_button = getattr(self, "apply_button", None) - if notebook is not None and apply_button is not None: - notebook.pack_forget() - apply_button.pack_forget() - apply_button.pack(side="bottom", pady=10, fill="x", padx=20) - notebook.pack(fill="both", expand=True, padx=10, pady=(5, 10)) - - root.update_idletasks() - - # Prefer the widgets' requested size when the monitor has room, while - # keeping a margin so the window remains reachable on smaller displays. - screen_width = max(1, root.winfo_screenwidth()) - screen_height = max(1, root.winfo_screenheight()) - max_width = max(640, screen_width - 80) - max_height = max(520, screen_height - 80) - - requested_width = max(680, root.winfo_reqwidth()) - requested_height = max(660, root.winfo_reqheight()) - width = min(requested_width, max_width) - height = min(requested_height, max_height) - - root.geometry(f"{width}x{height}") - root.minsize(min(640, max_width), min(520, max_height)) - - -if __name__ == "__main__": - root = tk.Tk() - app = ScalingTestTool(root) - root.mainloop() -- 2.52.0 From 178f1460a9965080ef3c2d2786f79696aed9c29a Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:29:43 +0200 Subject: [PATCH 6/8] Finalize responsive UI build workflow --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 94b0b1d..149772b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,6 @@ on: - 'main' - 'feature/client-tweaks' - 'test/discord-presence' - - 'test/ui-scaling' tags: - 'v*' pull_request: -- 2.52.0 From 3e5fbe47dd428fb7f973a09f8cb944af679482bc Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:29:52 +0200 Subject: [PATCH 7/8] release v2.3 --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 4eaf5e0..5e42c85 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -21,6 +21,7 @@ This update focuses on **better compatibility, safer WoW.exe patching and improv ## 🛡️ Reliability - DXVK exclusive fullscreen is now disabled by default to avoid black screens during Alt+Tab on Windows. +- The Tool window now adapts better to Windows display scaling and smaller screens, keeping **Apply Setup & Tweaks** accessible. - Expanded automated tests for installation ordering, recovery and executable patching. - Improved rollback behavior to reduce the risk of partial installations. -- 2.52.0 From 29d7f3c174e83a494088809bb61ac373f55a486d Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Sun, 6 Sep 2026 09:30:06 +0200 Subject: [PATCH 8/8] release v2.3 --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 4eaf5e0..5e42c85 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -21,6 +21,7 @@ This update focuses on **better compatibility, safer WoW.exe patching and improv ## 🛡️ Reliability - DXVK exclusive fullscreen is now disabled by default to avoid black screens during Alt+Tab on Windows. +- The Tool window now adapts better to Windows display scaling and smaller screens, keeping **Apply Setup & Tweaks** accessible. - Expanded automated tests for installation ordering, recovery and executable patching. - Improved rollback behavior to reduce the risk of partial installations. -- 2.52.0