diff --git a/beweise/ui-513-einstellungen.png b/beweise/ui-513-einstellungen.png
new file mode 100644
index 0000000..aa42db6
Binary files /dev/null and b/beweise/ui-513-einstellungen.png differ
diff --git a/beweise/ui-513-uebersicht.png b/beweise/ui-513-uebersicht.png
new file mode 100644
index 0000000..667797f
Binary files /dev/null and b/beweise/ui-513-uebersicht.png differ
diff --git a/rippy-windows/bau/release-notes.md b/rippy-windows/bau/release-notes.md
index f49e6ed..85d6cfd 100644
--- a/rippy-windows/bau/release-notes.md
+++ b/rippy-windows/bau/release-notes.md
@@ -1,17 +1,25 @@
-Version 5.1.2
+Version 5.1.3
-Neu: Rippy sagt Bescheid, wenn ein Update da ist.
-Bisher hat es sich still im Hintergrund aktualisiert — jetzt steht eine
-Karte oben in der Übersicht, mit Versionsnummer und dieser Liste hier.
-In den Einstellungen gibt es dazu den Knopf "Jetzt auf Updates prüfen".
-Wer nicht warten will, startet über die Karte sofort neu.
+Das Fenster gehört jetzt Rippy.
+Der graue Windows-Rahmen ist weg. Minimieren, Maximieren und Schließen
+sitzen oben rechts im Programm selbst, gezogen wird an der Kopfzeile —
+Doppelklick darauf maximiert. Die Kanten lassen sich weiter ziehen wie
+gewohnt. Schließen versteckt Rippy weiterhin nur im Infobereich, ein
+laufender Rip merkt davon nichts.
+
+Nichts klebt mehr links.
+Die Seite ist jetzt mittig und wächst mit dem Fenster mit, statt auf
+halber Breite abzubrechen. Im schmalen Fenster rutschen die Kacheln
+untereinander, statt sich zu quetschen; die Einstellungen legen ihre
+Abschnittswahl dann als Zeile über die Karten.
+
+Aus 5.1.2: Rippy sagt Bescheid, wenn ein Update da ist.
+Diese Karte hier ist der Beweis — mit Versionsnummer und dieser Liste.
+In den Einstellungen gibt es den Knopf "Jetzt auf Updates prüfen".
Aus 5.1.1: Serien-Discs werden richtig erkannt.
-Disc 2 von "Spartacus: Gods of the Arena" wurde als der Film "Spartacus"
-von 1960 erkannt. Rippy fragt jetzt die Disc selbst: Ihr
-Inhaltsverzeichnis nennt die Folgen, und daran erkennt Rippy eine Serie,
-statt sie zu raten. Disc-Nummer und Folgenzahl stehen neben dem Titel.
-Und wenn Rippy sich unsicher ist, sagt es das jetzt, statt sich sicher
-zu irren.
+Disc 2 von "Spartacus: Gods of the Arena" galt als der Film "Spartacus"
+von 1960. Rippy fragt jetzt die Disc selbst: Ihr Inhaltsverzeichnis
+nennt die Folgen. Disc-Nummer und Folgenzahl stehen neben dem Titel.
Unverändert: Updates warten immer, bis kein Rip mehr läuft.
diff --git a/rippy-windows/package-lock.json b/rippy-windows/package-lock.json
index 1f483bf..7922d91 100644
--- a/rippy-windows/package-lock.json
+++ b/rippy-windows/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "rippy",
- "version": "5.1.2",
+ "version": "5.1.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "rippy",
- "version": "5.1.2",
+ "version": "5.1.3",
"license": "UNLICENSED",
"dependencies": {
"electron-updater": "^6.8.9",
diff --git a/rippy-windows/package.json b/rippy-windows/package.json
index 57f5b38..df8faa1 100644
--- a/rippy-windows/package.json
+++ b/rippy-windows/package.json
@@ -1,7 +1,7 @@
{
"name": "rippy",
"productName": "Rippy",
- "version": "5.1.2",
+ "version": "5.1.3",
"description": "Rippy v5 — Disc-Ripping als eigenständiges Windows-Programm (KONZEPT-WINDOWS.md)",
"main": "out/haupt/index.js",
"author": "KrBrZ",
diff --git a/rippy-windows/src/bruecke/index.ts b/rippy-windows/src/bruecke/index.ts
index 144947f..f228894 100644
--- a/rippy-windows/src/bruecke/index.ts
+++ b/rippy-windows/src/bruecke/index.ts
@@ -56,6 +56,11 @@ contextBridge.exposeInMainWorld('rippy', {
autostartSetzen(an: boolean): Promise {
return ipcRenderer.invoke('autostart-setzen', an === true) as Promise
},
+ /** Eigene Titelleiste (§ 4.2): minimieren | maximieren | schliessen.
+ * „schliessen" versteckt nur — Rippy lebt im Tray weiter. */
+ fensterSteuern(was: 'minimieren' | 'maximieren' | 'schliessen'): Promise {
+ return ipcRenderer.invoke('fenster-steuern', String(was)) as Promise
+ },
/** „Jetzt prüfen" (§ 6.8) — das Ergebnis kommt über den Haupt-Status. */
updatePruefen(): Promise {
return ipcRenderer.invoke('update-pruefen') as Promise
diff --git a/rippy-windows/src/fenster/App.tsx b/rippy-windows/src/fenster/App.tsx
index 0837fee..80aaeda 100644
--- a/rippy-windows/src/fenster/App.tsx
+++ b/rippy-windows/src/fenster/App.tsx
@@ -83,6 +83,60 @@ const PHASEN_MONO: Record = {
const LAUFENDE_PHASEN = ['liest-info', 'rippt', 'komprimiert', 'legt-ab']
+// ── Eigene Fensterknöpfe (§ 4.2, seit 5.1.3) ────────────────────────────
+// Bewusst schlicht und in Windows-Maßen (46 × 32) — wer sie sucht, findet
+// sie dort, wo er sie erwartet. Sie sitzen in der Ziehfläche und müssen
+// deshalb `nicht-ziehbar` sein, sonst verschluckt der Fenstergriff den Klick.
+const IconMinimieren = (): React.JSX.Element => (
+
+)
+
+const IconMaximieren = (): React.JSX.Element => (
+
+)
+
+const IconWiederherstellen = (): React.JSX.Element => (
+
+)
+
+const IconSchliessen = (): React.JSX.Element => (
+
+)
+
+function FensterKnopf({
+ titel,
+ aufKlick,
+ rot = false,
+ children,
+}: {
+ titel: string
+ aufKlick: () => void
+ rot?: boolean
+ children: React.ReactNode
+}) {
+ return (
+
+ )
+}
+
function sicherheitsWort(confidence: number): string {
if (confidence >= 0.9) return 'sehr wahrscheinlich'
if (confidence >= 0.8) return 'wahrscheinlich'
@@ -427,7 +481,9 @@ function LaufwerkKachel({
)}
-
+ {/* Zwei Kacheln nebeneinander im schmalen Fenster, vier im
+ breiten — vorher immer vier, also im schmalen gequetscht. */}
+