fix(klembord): Linux krijgt een echt schrijfpad — eigen GTK-kanaal in de runner (#758) #763

Merged
brenno merged 5 commits from fix/linux-klembord-schrijfpad-758 into main 2026-07-23 16:30:47 +00:00
Owner

Het pasteboard-pakket (0.5.0) heeft geen Linux-schrijftak: Pasteboard.writeImage was daar een stille no-op en de kopieerknop meldde succes boven een leeg klembord. Dit is de echte oplossing langs de tweede route uit het issue: een eigen MethodChannel in de GTK-runner (ocideck/clipboard), geen nieuwe afhankelijkheid en geen fork van pasteboard.

  • Native (linux/runner/my_application.cc): gdk_pixbuf decodeert de bytes, gtk_clipboard_set_image plaatst ze, gtk_clipboard_store vraagt de clipboard-manager ze te bewaren. Mislukt het decoderen, dan gaat er false terug — geen stil succes meer.
  • Dart (ImageService.copyImageBytesToClipboard): op Linux via het kanaal, elders ongewijzigd via pasteboard. Nieuwe seam isLinuxDesktop in platform_features, injecteerbaar in de service omdat Platform.isLinux onder flutter test altijd de testmachine volgt.
  • Regressietest (test/linux_clipboard_write_test.dart, eerst rood gezien): kanaalaanroep met de bytes, native oordeel doorgegeven, false bij ontbrekend kanaal zonder te gooien, geen kanaalverkeer bij lege bytes of buiten Linux.

Kanttekening (verificatieschuld): de native kant is hier alleen door de Linux-CI-build gecompileerd (proefbouw op de tak: groen, tijdelijke trigger daarna verwijderd); het echte klembordgedrag op een draaiende Linux-desktop is nog niet met de hand getoetst. Dat blijft open tot er een live Linux-testomgeving is — zelfde schuldenlijst als GIT_STORAGE §14.

Raakvlak met #751: zodra dit merget is de eerlijke-false-tussenstap op Linux daar overbodig; wie het laatst merget rebased dat stukje weg (staat ook als notitie op het issue).

Gedraaid: make check groen (na rebase opnieuw), check-secrets (gitleaks + trufflehog) 0 bevindingen, sast (semgrep) 0 bevindingen. DAST n.v.t. (geen webnetwerk-oppervlak in deze wijziging).

Sluit #758.

🤖 Generated with Claude Code

Het pasteboard-pakket (0.5.0) heeft geen Linux-schrijftak: `Pasteboard.writeImage` was daar een stille no-op en de kopieerknop meldde succes boven een leeg klembord. Dit is de echte oplossing langs de tweede route uit het issue: **een eigen MethodChannel in de GTK-runner** (`ocideck/clipboard`), geen nieuwe afhankelijkheid en geen fork van pasteboard. - **Native** (`linux/runner/my_application.cc`): `gdk_pixbuf` decodeert de bytes, `gtk_clipboard_set_image` plaatst ze, `gtk_clipboard_store` vraagt de clipboard-manager ze te bewaren. Mislukt het decoderen, dan gaat er `false` terug — geen stil succes meer. - **Dart** (`ImageService.copyImageBytesToClipboard`): op Linux via het kanaal, elders ongewijzigd via pasteboard. Nieuwe seam `isLinuxDesktop` in `platform_features`, injecteerbaar in de service omdat `Platform.isLinux` onder `flutter test` altijd de testmachine volgt. - **Regressietest** (`test/linux_clipboard_write_test.dart`, eerst rood gezien): kanaalaanroep met de bytes, native oordeel doorgegeven, `false` bij ontbrekend kanaal zonder te gooien, geen kanaalverkeer bij lege bytes of buiten Linux. **Kanttekening (verificatieschuld):** de native kant is hier alleen door de Linux-CI-build **gecompileerd** (proefbouw op de tak: groen, tijdelijke trigger daarna verwijderd); het echte klembordgedrag op een draaiende Linux-desktop is nog niet met de hand getoetst. Dat blijft open tot er een live Linux-testomgeving is — zelfde schuldenlijst als GIT_STORAGE §14. Raakvlak met #751: zodra dit merget is de eerlijke-false-tussenstap op Linux daar overbodig; wie het laatst merget rebased dat stukje weg (staat ook als notitie op het issue). **Gedraaid:** make check groen (na rebase opnieuw), check-secrets (gitleaks + trufflehog) 0 bevindingen, sast (semgrep) 0 bevindingen. DAST n.v.t. (geen webnetwerk-oppervlak in deze wijziging). Sluit #758. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Pasteboard.writeImage heeft geen Linux-tak en was daar een stille no-op.
Op Linux loopt het schrijven nu via het runner-kanaal ocideck/clipboard;
de native kant meldt of de bytes echt als afbeelding op het klembord
staan, en dát oordeel krijgt de knop. De isLinux-seam is injecteerbaar
omdat Platform.isLinux onder flutter test altijd de testmachine volgt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
gdk_pixbuf decodeert de bytes, gtk_clipboard_set_image zet ze op het
klembord en gtk_clipboard_store vraagt de clipboard-manager ze te
bewaren. Mislukt het decoderen, dan gaat er false terug in plaats van
een stil succes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gaat er vóór de merge weer uit; main-only is de regel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brenno merged commit 5509a9f589 into main 2026-07-23 16:30:47 +00:00
Sign in to join this conversation.
No description provided.