[Bug] The Settings sidebar truncates at the 200% text scale the app itself offers #646

Closed
opened 2026-07-22 16:23:41 +00:00 by brenno · 5 comments
Owner

Found in the pre-publication first-run review, alongside several smaller interface observations gathered here so none is lost.

Main item — reproduce: Settings → Display → set interface text scaling to 200% (offered explicitly as a WCAG 1.4.4 accessibility setting), then reopen Settings.

What you see: the sidebar labels truncate to "Einste…", "App-De…", "Präsent…", "Lizenz u…", "KI-Unter…" — unusable for navigation. The main editor holds up remarkably well at 200%; only the status bar runs into the window edge. So the setting works where it is hardest and fails where it is easiest.

Smaller observations from the same session, each cheap and none worth its own issue:

  • The consent wall greys out "Agree" without saying why; the checkbox is five screens down. Roughly 40 seconds before a new user has seen the app at all.
  • Saving and opening pass through an extra intermediate dialog offering one real choice ("Other folder…" beside "Choose file name…", which do the same thing) — three dialogs deep to save a file.
  • In German, "Abschnittsüberschrift" breaks mid-word in the slide-type picker ("Abschnittsüberschri / ft"), and "Quote" stayed untranslated.
  • The macOS application menu is half English ("About ocideck", "Hide Others", "Quit ocideck") while the rest of the menu bar is translated.
  • A malformed .md is refused cleanly, with no crash and no data loss — but the message is only "This file could not be opened", with no reason, no line number and no suggestion. Thin for a Markdown-first product.
  • The exported filename carries a raw UTC timestamp (20260722160129 Release_Notes_Demo.pdf) and the success dialog shows a path that cannot be clicked or copied.
  • The Cockpit dashboard slide type appears in the default list with penetration-test metrics ("Exploitability heat", "Evidence confidence", "Findings trend") while the information-safety module is switched off and promises to stay hidden.

Proposal: fix the sidebar truncation (wrap or ellipsis with a tooltip, or a narrower fixed label column). Take the rest as a single polish pass; the malformed-file message and the Cockpit-in-default-list item are the two with real user impact.

Found in the pre-publication first-run review, alongside several smaller interface observations gathered here so none is lost. **Main item — reproduce:** Settings → Display → set interface text scaling to 200% (offered explicitly as a WCAG 1.4.4 accessibility setting), then reopen Settings. **What you see:** the sidebar labels truncate to "Einste…", "App-De…", "Präsent…", "Lizenz u…", "KI-Unter…" — unusable for navigation. The main editor holds up remarkably well at 200%; only the status bar runs into the window edge. So the setting works where it is hardest and fails where it is easiest. **Smaller observations from the same session**, each cheap and none worth its own issue: - The consent wall greys out "Agree" without saying why; the checkbox is five screens down. Roughly 40 seconds before a new user has seen the app at all. - Saving and opening pass through an extra intermediate dialog offering one real choice ("Other folder…" beside "Choose file name…", which do the same thing) — three dialogs deep to save a file. - In German, "Abschnittsüberschrift" breaks mid-word in the slide-type picker ("Abschnittsüberschri / ft"), and "Quote" stayed untranslated. - The macOS application menu is half English ("About ocideck", "Hide Others", "Quit ocideck") while the rest of the menu bar is translated. - A malformed `.md` is refused cleanly, with no crash and no data loss — but the message is only "This file could not be opened", with no reason, no line number and no suggestion. Thin for a Markdown-first product. - The exported filename carries a raw UTC timestamp (`20260722160129 Release_Notes_Demo.pdf`) and the success dialog shows a path that cannot be clicked or copied. - The Cockpit dashboard slide type appears in the default list with penetration-test metrics ("Exploitability heat", "Evidence confidence", "Findings trend") while the information-safety module is switched off and promises to stay hidden. **Proposal:** fix the sidebar truncation (wrap or ellipsis with a tooltip, or a narrower fixed label column). Take the rest as a single polish pass; the malformed-file message and the Cockpit-in-default-list item are the two with real user impact.
Author
Owner

Het hoofditem staat op main: b5e4b0b (PR #688). Het issue blijft open voor de zes kleinere observaties.

De zijbalk. Vaste breedte van 234 px plus één regel per label was de oorzaak. De zijbalk groeit nu mee tot anderhalf keer (één-op-één zou 468 px zijn en het venster opeten), labels mogen twee regels, en elk item draagt een tooltip met de volle naam als vangnet. Op 100% verandert er niets.

Drie fouten die er niet in stonden, alle drie dezelfde klasse — een rij met tekst zonder ruimte om te wijken:

  • de knoppenbalk onderaan liep 261 px buiten beeld, mét de opslaanknop aan de kant die wegviel;
  • de kop van een inklapbare sectie 398 px;
  • de kolom van het venster zelf 65 px naar onderen, waardoor de voetbalk onder de rand verdween.

Die vielen niet op bij het handmatig kijken omdat ze pas ontstaan bij 200% en de overloopstrepen in een dialoog achter de rand vallen. De test ving ze meteen.

Eén ding over die test dat ik erin heb opgeschreven. Onder flutter test is elk teken even breed als hoog. "Er kapt niets af" is daar niet te meten: die toets zou rood staan op een interface die in het echt prima leest, en groen te maken zijn door de kolom absurd breed te maken. De test meet daarom wat het testfont overleeft, plus de eigenschap waar het om gaat — grotere tekst mag niet méér informatie kosten dan kleine tekst. Met een echt lettertype heb ik niet gekeken; dat is beeldkeuring en vraagt de app draaiend.

Wat openblijft, jouw eigen lijst: de consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte .md, de tijdstempel in de exportnaam, en het Cockpit-diatype in de standaardlijst.

Die laatste is wat mij betreft geen polijstwerk maar een gebroken belofte: de informatieveiligheidsmodule staat uit en zegt verborgen te blijven, en toch staan er pentest-metrieken in de standaardlijst. Dat is een andere soort fout dan een afgekapt label, en ik zou hem los willen oppakken.

Het hoofditem staat op main: `b5e4b0b` (PR #688). Het issue blijft open voor de zes kleinere observaties. **De zijbalk.** Vaste breedte van 234 px plus één regel per label was de oorzaak. De zijbalk groeit nu mee tot anderhalf keer (één-op-één zou 468 px zijn en het venster opeten), labels mogen twee regels, en elk item draagt een tooltip met de volle naam als vangnet. Op 100% verandert er niets. **Drie fouten die er niet in stonden**, alle drie dezelfde klasse — een rij met tekst zonder ruimte om te wijken: - de knoppenbalk onderaan liep **261 px** buiten beeld, mét de opslaanknop aan de kant die wegviel; - de kop van een inklapbare sectie **398 px**; - de kolom van het venster zelf **65 px** naar onderen, waardoor de voetbalk onder de rand verdween. Die vielen niet op bij het handmatig kijken omdat ze pas ontstaan bij 200% en de overloopstrepen in een dialoog achter de rand vallen. De test ving ze meteen. **Eén ding over die test dat ik erin heb opgeschreven.** Onder `flutter test` is elk teken even breed als hoog. "Er kapt niets af" is daar niet te meten: die toets zou rood staan op een interface die in het echt prima leest, en groen te maken zijn door de kolom absurd breed te maken. De test meet daarom wat het testfont overleeft, plus de eigenschap waar het om gaat — grotere tekst mag niet méér informatie kosten dan kleine tekst. **Met een echt lettertype heb ik niet gekeken**; dat is beeldkeuring en vraagt de app draaiend. **Wat openblijft**, jouw eigen lijst: de consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte `.md`, de tijdstempel in de exportnaam, en het Cockpit-diatype in de standaardlijst. Die laatste is wat mij betreft geen polijstwerk maar een **gebroken belofte**: de informatieveiligheidsmodule staat uit en zegt verborgen te blijven, en toch staan er pentest-metrieken in de standaardlijst. Dat is een andere soort fout dan een afgekapt label, en ik zou hem los willen oppakken.
Author
Owner

Tweede item op main: 43bfe4ea (PR #689) — het Cockpit-diatype dat pentestmetrieken toonde met de module uit.

De diagnose was niet "verberg de cockpit": dat type is een algemeen dashboard en hoort er te zijn. Het zat in de voorbeelddata, die pentestPreset heette en dat ook was.

Die preset was de terugval op vijf plekken — een nieuwe dia, een lege spec, een onleesbare spec, de editor en de preview. En op een zesde die niet in je melding stond: de HTML-export. Daar bleef het niet in een venster maar belandde het in een rapport dat de deur uitging, bij iemand die de module nooit had aangezet. Het geval van de onleesbare spec is de stilste: juist bij een fóút kwam die data tevoorschijn.

Nu domeinneutraal ("Capacity used", "Load", "Signal quality", "Trend"), met dezelfde vier metertypes, dus er gaat niets verloren aan wat het demonstreert. Een test bewaakt woordelijk dat er geen pentestbegrip meer opduikt, langs alle drie de ingangen.

Van je lijst blijft over: de consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte .md, en de tijdstempel in de exportnaam. Daarvan noem je de foutmelding zelf als de enige met echte gebruikersimpact — die zou ik als volgende doen. De rest is polijstwerk dat prima in één ronde kan.

Tweede item op main: `43bfe4ea` (PR #689) — het Cockpit-diatype dat pentestmetrieken toonde met de module uit. De diagnose was niet "verberg de cockpit": dat type is een algemeen dashboard en hoort er te zijn. Het zat in de voorbeelddata, die `pentestPreset` heette en dat ook was. **Die preset was de terugval op vijf plekken** — een nieuwe dia, een lege spec, een onleesbare spec, de editor en de preview. En op een zesde die niet in je melding stond: **de HTML-export**. Daar bleef het niet in een venster maar belandde het in een rapport dat de deur uitging, bij iemand die de module nooit had aangezet. Het geval van de onleesbare spec is de stilste: juist bij een fóút kwam die data tevoorschijn. Nu domeinneutraal ("Capacity used", "Load", "Signal quality", "Trend"), met dezelfde vier metertypes, dus er gaat niets verloren aan wat het demonstreert. Een test bewaakt woordelijk dat er geen pentestbegrip meer opduikt, langs alle drie de ingangen. **Van je lijst blijft over:** de consentmuur, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, de foutmelding bij een kapotte `.md`, en de tijdstempel in de exportnaam. Daarvan noem je de foutmelding zelf als de enige met echte gebruikersimpact — die zou ik als volgende doen. De rest is polijstwerk dat prima in één ronde kan.
Author
Owner

Derde item op main: 9fb53cda (PR #694) — de foutmelding bij een bestand dat niet opengaat.

Het zat niet in de melding maar tussen de lagen: FileService.openDeckDetailed gaf de reden allang terug (zes onderscheiden gevallen), en openFileByPath gooide alles behalve "geen presentatie" weg. Het antwoord lag twee lagen lager voor het oprapen. Dat corrigeert ook mijn eigen inschatting van vanochtend, toen ik dit als een refactor over 26 plekken inschatte.

Je ziet nu wat er is: bestaat niet meer / te groot / geen leesbare tekst (mét de zin dat OciDeck Markdown opent) / beschadigd of half opgeslagen. Waar de oorzaak écht onbekend is blijft de algemene zin staan — een reden verzinnen bij een onbekende oorzaak wijst de gebruiker de verkeerde kant op, en dat kost meer tijd dan vaag zijn.

Het regelnummer dat je vroeg zit er niet in. De parser draagt geen positie mee, dus "beschadigd of half opgeslagen" is zo precies als het nu kan. Dat staat als openstaand in de CHANGELOG en de probleemoplossingsgids in plaats van weggelaten.

Daarmee zijn alle drie de items die je als "echte gebruikersimpact" aanmerkte weg. Wat overblijft is polijstwerk, en dat pak ik nu in één ronde: de consentmuur die "Akkoord" grijs laat zonder te zeggen waarom, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, en de tijdstempel in de exportnaam.

Derde item op main: `9fb53cda` (PR #694) — de foutmelding bij een bestand dat niet opengaat. Het zat niet in de melding maar tussen de lagen: `FileService.openDeckDetailed` gaf de reden allang terug (zes onderscheiden gevallen), en `openFileByPath` gooide alles behalve "geen presentatie" weg. Het antwoord lag twee lagen lager voor het oprapen. Dat corrigeert ook mijn eigen inschatting van vanochtend, toen ik dit als een refactor over 26 plekken inschatte. Je ziet nu wat er is: bestaat niet meer / te groot / geen leesbare tekst (mét de zin dat OciDeck Markdown opent) / beschadigd of half opgeslagen. Waar de oorzaak écht onbekend is blijft de algemene zin staan — een reden verzinnen bij een onbekende oorzaak wijst de gebruiker de verkeerde kant op, en dat kost meer tijd dan vaag zijn. **Het regelnummer dat je vroeg zit er niet in.** De parser draagt geen positie mee, dus "beschadigd of half opgeslagen" is zo precies als het nu kan. Dat staat als openstaand in de CHANGELOG en de probleemoplossingsgids in plaats van weggelaten. Daarmee zijn alle drie de items die je als "echte gebruikersimpact" aanmerkte weg. **Wat overblijft is polijstwerk**, en dat pak ik nu in één ronde: de consentmuur die "Akkoord" grijs laat zonder te zeggen waarom, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, en de tijdstempel in de exportnaam.
Author
Owner

Polijstronde op main: ee63f7a7 (PR #700).

  • Het vinkje staat nu naast de knop in plaats van vijf schermen lager. De bestaande test deed ensureVisible(find.byType(Checkbox)) — precies de handeling die de gebruiker ook moest doen, en dus de reden dat de suite dit gebrek niet liet zien.
  • Het exportpad is selecteerbaar, met een knop die alleen het pad kopieert.
  • De macOS-menubalk las "About ocideck" omdat de productnaam met kleine letter in de buildconfiguratie stond. Onderweg bleek er meer: het copyright schreef de app toe aan een bedrijf in plaats van aan de stichting, en op Windows stond com.dewinter in de bestandseigenschappen. Alle drie recht.

Drie dingen bewust laten staan, met reden:

  • De bundle-identifiers. Dat is de identiteit van de app voor het besturingssysteem; wijzigen laat macOS dit als een andere applicatie zien — eigen voorkeuren, eigen keychain — en dan lijkt elk opgeslagen wachtwoord verdwenen. Migratie, geen opruiming.
  • De tijdstempel in de exportnaam. Chronologisch sorteerbaar en uniek per export: een ontwerpkeuze, geen gebrek. Het formaat wijzigen raakt hoe bestaande rapporten in een map op volgorde staan, en dat is jouw besluit.
  • De dubbele opslagdialoog. Die zit in de opslagroute zelf; daar hoort eerst een keuze over wat die tussenstap moet zijn.

Wat er nu nog in dit issue zit: "Hide Others" en "Services" in het macOS-menu. Die komen uit MainMenu.xib met alleen een Base-lokalisatie; vertalen vraagt 32 .strings-bestanden buiten het Dart-l10n-systeem om. Plus de twee besluiten hierboven die van jou zijn.

Ik laat het issue open staan voor die drie.

Polijstronde op main: `ee63f7a7` (PR #700). - **Het vinkje** staat nu naast de knop in plaats van vijf schermen lager. De bestaande test deed `ensureVisible(find.byType(Checkbox))` — precies de handeling die de gebruiker ook moest doen, en dus de reden dat de suite dit gebrek niet liet zien. - **Het exportpad** is selecteerbaar, met een knop die alleen het pad kopieert. - **De macOS-menubalk** las "About ocideck" omdat de productnaam met kleine letter in de buildconfiguratie stond. Onderweg bleek er meer: het copyright schreef de app toe aan een bedrijf in plaats van aan de stichting, en op Windows stond `com.dewinter` in de bestandseigenschappen. Alle drie recht. **Drie dingen bewust laten staan, met reden:** - De **bundle-identifiers**. Dat is de identiteit van de app voor het besturingssysteem; wijzigen laat macOS dit als een andere applicatie zien — eigen voorkeuren, eigen keychain — en dan lijkt elk opgeslagen wachtwoord verdwenen. Migratie, geen opruiming. - De **tijdstempel in de exportnaam**. Chronologisch sorteerbaar en uniek per export: een ontwerpkeuze, geen gebrek. Het formaat wijzigen raakt hoe bestaande rapporten in een map op volgorde staan, en dat is jouw besluit. - De **dubbele opslagdialoog**. Die zit in de opslagroute zelf; daar hoort eerst een keuze over wat die tussenstap moet zijn. **Wat er nu nog in dit issue zit:** "Hide Others" en "Services" in het macOS-menu. Die komen uit `MainMenu.xib` met alleen een Base-lokalisatie; vertalen vraagt 32 `.strings`-bestanden buiten het Dart-l10n-systeem om. Plus de twee besluiten hierboven die van jou zijn. Ik laat het issue open staan voor die drie.
Author
Owner

De laatste drie punten van je lijst staan op main. Daarmee is dit issue rond.

De dubbele opslagdialoog0ec2a196 (PR #726). Je klacht klopte op precies één pad, en dat is het pad waar iedereen begint: het bestemmingsvenster laat je een bibliotheek kiezen, en bij een eerste start ís er geen bibliotheek. Je zag dus een lege lijst met twee knoppen die allebei naar hetzelfde systeemvenster leidden. Het venster blijft — mét bibliotheken kies je er een en zie je vooraf waar presentatie, afbeeldingen en media landen — maar het wordt overgeslagen waar het niets te bieden heeft. Het beslismoment staat nu als pure functie los van de schil, want die ingang had geen enkele test.

"Quote" bleef onvertaalde2df7b1a (PR #727). Eén van de vierentwintig diatype-labels droeg een Engelse bronsleutel. Vijfentwintig talen hadden daar toevallig een vertaling voor, het Duits niet, en dan valt de tekst terug op de bron. De sleutel is nu het Nederlandse "Citaat", dat zijn 31 vertalingen al droeg. Er staat nu een poort op de klasse: elk diatype-label moet in elke taal een eigen vertaling hebben. Dat gat bestond omdat de vertaaldekking per sleutel bewaakt en niet per gebruik — een Engelse bronstring ziet er voor die controle uit als een geldige bron.

De woordafbreking in het Duits1f2e4e68 (PR #729), en hier is de uitkomst anders dan verwacht. "Abschnittsüberschri / ft" was al gerepareerd op 20-07 (4e5fd096), ná je review maar vóór je dit issue schreef; het label past op 8,5pt.

Maar de toets die dat bewaakte bewees niets. Hij eiste dat de berekende lettergrootte niet onder de ondergrens zakte, terwijl die berekening zélf bij die grens stopt — altijd waar. En een widgettest tekent in Ahem, waar elk teken een vierkant em is; daar zit de helft van de labels al op die ondergrens, dus ook een scherpere eis had niets kunnen onderscheiden. Hij keek bovendien alleen naar de Nederlandse bronlabels, terwijl jouw melding juist over een vertaling ging.

De toets laadt nu het gebundelde interfacefont en meet daarin, over alle 24 diatypen × 31 talen. Geen enkel label breekt midden in een woord.

Daarbij kwam één ding boven dat niemand had gezien: het Zweedse "Cockpit-instrumentpanel" telde als één onbreekbaar woord en duwde de kaart naar de kleinste maat. Flutter breekt echter op een koppelteken — nagemeten, niet aangenomen — dus dat label rendert weer op de volle grootte.

Wat er niet in zit: het regelnummer bij een kapotte .md, want de parser draagt geen positie mee. Dat stond al als openstaand in de CHANGELOG en de probleemoplossingsgids.

Sluiten.

De laatste drie punten van je lijst staan op main. Daarmee is dit issue rond. **De dubbele opslagdialoog** — `0ec2a196` (PR #726). Je klacht klopte op precies één pad, en dat is het pad waar iedereen begint: het bestemmingsvenster laat je een bibliotheek kiezen, en bij een eerste start ís er geen bibliotheek. Je zag dus een lege lijst met twee knoppen die allebei naar hetzelfde systeemvenster leidden. Het venster blijft — mét bibliotheken kies je er een en zie je vooraf waar presentatie, afbeeldingen en media landen — maar het wordt overgeslagen waar het niets te bieden heeft. Het beslismoment staat nu als pure functie los van de schil, want die ingang had geen enkele test. **"Quote" bleef onvertaald** — `e2df7b1a` (PR #727). Eén van de vierentwintig diatype-labels droeg een Engelse bronsleutel. Vijfentwintig talen hadden daar toevallig een vertaling voor, het Duits niet, en dan valt de tekst terug op de bron. De sleutel is nu het Nederlandse "Citaat", dat zijn 31 vertalingen al droeg. Er staat nu een poort op de klasse: elk diatype-label moet in elke taal een eigen vertaling hebben. Dat gat bestond omdat de vertaaldekking per *sleutel* bewaakt en niet per *gebruik* — een Engelse bronstring ziet er voor die controle uit als een geldige bron. **De woordafbreking in het Duits** — `1f2e4e68` (PR #729), en hier is de uitkomst anders dan verwacht. "Abschnittsüberschri / ft" was al gerepareerd op 20-07 (`4e5fd096`), ná je review maar vóór je dit issue schreef; het label past op 8,5pt. Maar de toets die dat bewaakte **bewees niets**. Hij eiste dat de berekende lettergrootte niet onder de ondergrens zakte, terwijl die berekening zélf bij die grens stopt — altijd waar. En een widgettest tekent in Ahem, waar elk teken een vierkant em is; daar zit de helft van de labels al op die ondergrens, dus ook een scherpere eis had niets kunnen onderscheiden. Hij keek bovendien alleen naar de Nederlandse bronlabels, terwijl jouw melding juist over een vertaling ging. De toets laadt nu het gebundelde interfacefont en meet daarin, over alle 24 diatypen × 31 talen. **Geen enkel label breekt midden in een woord.** Daarbij kwam één ding boven dat niemand had gezien: het Zweedse "Cockpit-instrumentpanel" telde als één onbreekbaar woord en duwde de kaart naar de kleinste maat. Flutter breekt echter op een koppelteken — nagemeten, niet aangenomen — dus dat label rendert weer op de volle grootte. **Wat er niet in zit:** het regelnummer bij een kapotte `.md`, want de parser draagt geen positie mee. Dat stond al als openstaand in de CHANGELOG en de probleemoplossingsgids. Sluiten.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#646
No description provided.