Skip to content

fix(amule-gui): drop wxFlexGridSizer on the Advanced prefs tab to silence GTK warnings - #833

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/preferences-advanced-flex-sizer
Jun 3, 2026
Merged

fix(amule-gui): drop wxFlexGridSizer on the Advanced prefs tab to silence GTK warnings#833
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:fix/preferences-advanced-flex-sizer

Conversation

@got3nks

@got3nks got3nks commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Drops the wxFlexGridSizer on the Preferences → Advanced tab in favour of a plain wxBoxSizer(wxVERTICAL), matching every other prefs tab. Eliminates the hover-time GTK warnings @Stoatwblr reported on #832.

Why

PreferencesaMuleTweaksTab is the only prefs tab whose root sizer is a 1-column wxFlexGridSizer with AddGrowableRow(1). Inside a wxNotebook, GTK's hover re-layout pass on the tab strip sometimes queries child sizes against a parent that hasn't been realised yet. A flex grid then redistributes those sub-minimum vertical allocations across the growable row's static box, and the inner widgets refuse the under-sized allocation with a g_warning:

  • GtkScale (one per slider in the tab) — Negative content height -15 (allocation 9, extents 12x12) + matching trough complaint, because the scale trough needs ≥12 px.
  • GtkCheckButton (IDC_PREVENT_SLEEP) — for_size smaller than min-size (0 < 14) and Negative content height -3, because the check node needs ≥14 px.

Tabs with a plain wxBoxSizer (Statistics, GUI Tweaks, etc.) don't fire because the box never compresses children below their intrinsic size. Switching this tab to the same shape stops the warnings.

Refs

Closes #832

…ence GTK warnings

Stoatwblr reported in amule-project#832 that hovering on the Preferences -> Advanced
tab in amulegui floods stderr with repeating GTK warnings — three
GtkScale "Negative content height -15 (allocation 9, extents 12x12)"
groups (one per slider) and one GtkCheckButton "for_size smaller than
min-size (0 < 14)" / "Negative content height" pair. Cosmetic but
constant, and after amule-project#826 this was the only remaining warning site he
could reproduce in amulegui.

Cause sits at the tab's root sizer. PreferencesaMuleTweaksTab is the
only prefs tab built on a wxFlexGridSizer with AddGrowableRow(1) (every
other tab — Statistics, GUI Tweaks, etc. — uses a plain wxBoxSizer).
Inside a wxNotebook, GTK's hover re-layout pass on the tab strip
sometimes queries child sizes against a parent that hasn't been
realised yet; a flex grid then redistributes those sub-minimum vertical
allocations across the growable row's static box, and the GtkScale
trough (needs 12 px) plus the GtkCheckButton check node (needs 14 px)
refuse the under-sized allocation with a g_warning. The matching scale
constructors and the IDC_PREVENT_SLEEP checkbox don't fire on tabs
whose root is a wxBoxSizer because the box never compresses below
intrinsic.

Switch to a plain wxBoxSizer(wxVERTICAL). The two children (the red
WARNING block and the static-box of controls) stack at their natural
heights — same visual result, no flex-grid compression on hover, no
warnings.

Closes amule-project#832
@got3nks got3nks mentioned this pull request Jun 3, 2026
@mrjimenez
mrjimenez merged commit cece74b into amule-project:master Jun 3, 2026
7 checks passed
@got3nks
got3nks deleted the fix/preferences-advanced-flex-sizer branch June 3, 2026 14:16
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
…ndex

Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(amule-project#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for amule-project#785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), amule-project#794 (.dmg
  amuleweb path), amule-project#789 (<OS>-<arch> artifact naming), amule-project#780 / amule-project#796
  (Windows DPI + comctl32 manifest), amule-project#784 (FHS share/amule paths).

- Bug Fixes & Stability: post-amule-project#744 fixes including EC notification
  leak (amule-project#797), big-library scaling (amule-project#736, amule-project#840 superseding amule-project#728),
  amulegui ghost entries (amule-project#810, amule-project#819, amule-project#841, amule-project#824, amule-project#830, amule-project#760),
  PartFile early hash (amule-project#762), server protocol fixes (amule-project#835, amule-project#788,
  amule-project#721, amule-project#787), crypto stream UB (amule-project#779), UAF prevention (amule-project#756),
  Kad rotation (amule-project#795, amule-project#799/amule-project#805), GTK warning silencing (amule-project#833,
  amule-project#826/amule-project#836), and the clang-tidy worklist (amule-project#770, amule-project#772-amule-project#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (amule-project#753/amule-project#754/amule-project#776), Galician (amule-project#763), Slovenian (amule-project#771), pt-BR
  (amule-project#768/amule-project#775/amule-project#812), French (amule-project#811), plus man-page tooling for
  date+version drift (amule-project#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (amule-project#817/amule-project#818/amule-project#821/amule-project#828/amule-project#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with amule-project#746-amule-project#845 + amule-project#841.
mrjimenez pushed a commit that referenced this pull request Jun 4, 2026
Adds 55+ merged PRs to the 3.0.0 changelog since the last update
(#747, 2026-05-27). Narrative additions cover:

- Packaging: expanded the top list to include the macOS per-arch .app
  bundles and the Windows NSIS installer alongside the existing
  AppImage / Flatpak / .dmg / .zip entries. New bullets for #785
  (alc/alcc/cas/wxcas everywhere + Windows amuleweb), #794 (.dmg
  amuleweb path), #789 (<OS>-<arch> artifact naming), #780 / #796
  (Windows DPI + comctl32 manifest), #784 (FHS share/amule paths).

- Bug Fixes & Stability: post-#744 fixes including EC notification
  leak (#797), big-library scaling (#736, #840 superseding #728),
  amulegui ghost entries (#810, #819, #841, #824, #830, #760),
  PartFile early hash (#762), server protocol fixes (#835, #788,
  #721, #787), crypto stream UB (#779), UAF prevention (#756),
  Kad rotation (#795, #799/#805), GTK warning silencing (#833,
  #826/#836), and the clang-tidy worklist (#770, #772-#774).

- Translations: late-cycle wave covering French/Turkish manpages
  (#753/#754/#776), Galician (#763), Slovenian (#771), pt-BR
  (#768/#775/#812), French (#811), plus man-page tooling for
  date+version drift (#802).

- Contributors: added ngosang for UX feedback on the late-3.0
  cycle (#817/#818/#821/#828/#844) and ongoing work on the
  user-facing manual at amule-org.github.io.

- Merged PRs flat index: extended with #746-#845 + #841.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…#833)

amulegui never came back from the Dock: MacReopenApp() is a wxApp
virtual and only CamuleGuiApp overrode it, so a frame hidden with
Show(false) -- what both the close-button HideOnClose path and the
minimize-to-tray path leave behind -- stayed hidden. wxApp's default
handler only de-iconizes, which is why the monolithic build needed the
override in the first place. CamuleRemoteGuiApp had picked up
MacOpenFiles and MacOpenURL from the same batch and missed this one.

Rather than add a second copy of the restore, the restore itself moves
onto the window as CamuleDlg::RestoreMainWindow() / HideToTray(), and
every path goes through them: the tray icon (click, menu, DoShow,
DoHide), minimize-to-tray, the duplicate-launch RAISE_DIALOG signal,
and now both Dock-reopen handlers. There were four near-copies of
"restore the window" and three of "hide it", disagreeing on the order
of Iconize(false)/Show(true) and on whether the macOS accessory-mode
flag was part of the operation -- CamuleGuiApp::MacReopenApp() was the
one that omitted it, so re-launching from Finder while hidden to the
tray brought the window back with no Dock icon. Unifying them also
gives OnMinimize's restore branch the full sequence it never had: it
was a bare Show(true), and now clears the iconized bit, restores the
Dock icon and raises the window.

Two more monolithic-only pieces of the same feature move to shared
code. The tray-preference guards (no SNI backend on Linux, Wayland
session, tray icon off) lived in CamuleApp::OnInit, so amulegui could
run with MinToTray enabled under Wayland or against an invisible
GtkStatusIcon -- both of which hide the window with nothing to bring it
back. They are now CamuleAppCommon::SanitiseTrayPreferences(), called
by CamuleApp::OnInit as before and by CamuleRemoteGuiApp::Startup(),
which has to precede InitGui(): the CamuleDlg constructor reads
UseTrayIcon() to decide whether to build the tray icon at all. And the
libayatana-appindicator probe was gated on BUILD_MONOLITHIC, leaving a
remote-GUI-only build on the legacy backend with no warning, while
src/CMakeLists.txt already linked SNI into amulegui when the flag
happened to be set.

CamuleDlg::OnClose keeps its plain Show(false): on macOS the Dock icon
is meant to survive the close button, and MacReopenApp is what brings
the window back from it. Its comment claimed the opposite; corrected.

Builds clean on macOS, Ubuntu ARM64 and Windows ARM64; clang-format
and both clang-tidy tiers clean over the diff.
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.

amulegui: gtk warnings

2 participants