Skip to content

Fix 4K/HiDPI UI issues: raw HTML tags, blank zoom buttons, thread warnings - #200

Open
360900 wants to merge 5 commits into
ryzendew:mainfrom
360900:fix-hidpi-ui-issues
Open

Fix 4K/HiDPI UI issues: raw HTML tags, blank zoom buttons, thread warnings#200
360900 wants to merge 5 commits into
ryzendew:mainfrom
360900:fix-hidpi-ui-issues

Conversation

@360900

@360900 360900 commented Jul 31, 2026

Copy link
Copy Markdown

Reported on Arch Linux, KDE Wayland, 4K display at 225% scale.

Issues

  1. The NVIDIA graphics backend dialog shows raw <b> HTML tags in its description text.
  2. The same dialog is too small, so the DXVK option is hidden and requires scrolling.
  3. The three zoom buttons above the log area are completely blank.
  4. Most of the right panel is cut off and its scrollbar is barely visible, so it is easy to miss that more content exists.
  5. QObject::setParent: Cannot set parent, new parent is in a different thread warning printed on startup.

Root causes and fixes

Raw HTML tags: the description label relies on Qt's AutoText detection, which only checks for markup before the first line break. The <b> tags appear later in the string, so the label falls back to plain text. Fixed by setting the label to RichText explicitly.

Dialog too small: the default size was 550x380 while the content needs about 440px of vertical space. Bumped the size tiers (default 560x520 on large screens) so everything fits without scrolling.

Blank zoom buttons: the buttons are icon only, with no text fallback, and the icon downloads were silently failing. The download base URL pointed to seapear/AffinityOnLinux, which has no AffinityScripts/icons directory, so every file returned 404 and the failures were swallowed. Fixed the URL to ryzendew/AffinityOnLinux (the same repo the README install command uses; every icon file verified to exist there) and added simple text fallbacks (minus / reset / plus symbols) so the buttons are never blank even if icons are unavailable. Icons are now also reapplied through a signal once the background download finishes, instead of a broken cross-thread timer.

Thread warnings: several QTimer.singleShot, QMessageBox, setWindowIcon, and check_installation_status calls were made directly from worker threads. Replaced them with queued signals (icons_updated_signal, refresh_status_signal, show_main_menu_signal, window_icon_signal, plus the existing show_message_signal), following the pattern already used elsewhere in the file. This removes the warning and also fixes status/button updates that previously never arrived.

Startup freeze uncovered by the thread fix: with check_installation_status now correctly running on the GUI thread, it became visible that it blocks for about 18 seconds, because it shells out to wine reg query four times (~4.5s each due to wineserver startup). Replaced those four queries with instant parsing of the prefix's system.reg/user.reg files (new _wine_reg_key_exists / _read_wine_reg_value helpers, verified to return identical results against a real prefix). The status check now takes about 0.1s.

Also included: main window default height raised from 0.8x to 0.9x of the screen height so more of the right panel is visible on large displays, and the dark theme scrollbar handle brightened so the panel is easier to discover.

Testing

Verified on the affected setup (Arch Linux, KDE Wayland, 3840x2400 at 225% scale): the NVIDIA dialog fits without scrolling and renders the bold text correctly, the zoom buttons show icons (or the fallback glyphs when icons are missing), no thread warnings appear, and there is no startup freeze.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant