Changelog

Jede nennenswerte Änderung an XDragMover, Release für Release.

3.4.0 2026-07-13

Hinzugefügt

  • Lokalisierung auf Deutsch, Russisch und Französisch. Die Oberfläche von XDragMover (Einstellungen, Menüleiste, Warnhinweise) folgt jetzt der Systemsprache über einen String Catalog; für jede andere Sprache wird auf Englisch zurückgefallen.

Behoben

  • Das Entfernen eines Musters im Einstellungen-Tab „Ausgeschlossene Fenster" konnte die App zum Absturz bringen, wenn es nicht das letzte in der Liste war — ein veralteter Array-Index, der im Textfeld einer anderen, noch sichtbaren Zeile hängen blieb. Live nachgestellt und behoben.

3.3.1 2026-07-13

Geändert

  • Bundle-Identifier von der Platzhalter-ID com.example.XDragMover auf de.xdragmover geändert (de.xdragmover.tests für das Test-Target) — die Reverse-DNS-Form der projekteigenen Domain xdragmover.de. Wer eine frühere Version installiert hat, muss die Bedienungshilfen-Berechtigung einmalig neu erteilen, da macOS diese Berechtigung an den Bundle-Identifier koppelt.

Behoben

  • make dmg konnte den .dmg-Container auf dem GitLab-Runner nicht signieren („The following argument was not expected: --timestamp"), weil dessen nicht-interaktiver PATH ein anderes, unabhängiges Programm namens codesign vor Apples echtem auflöste — ruft jetzt explizit /usr/bin/codesign auf und umgeht die PATH-Auflösung komplett.

3.3.0 2026-07-13

Hinzugefügt

  • Mittelklick auf das Dock-Symbol einer App öffnet ein neues Fenster/eine neue Instanz davon (US-16). Standardmäßig aus; umschaltbar unter Einstellungen → Gesten → „Mittelklick auf Dock-Symbol für neue Instanz".

Geändert

  • App-Symbol (Dock/Finder/.app-Bundle) wiederhergestellt, mit neuem Design (assets/logo.png) anstelle des in 3.1.0 aus markenrechtlichen Bedenken entfernten.
  • Release-Builds werden jetzt mit einer kostenpflichtigen „Developer ID Application"-Identität signiert sowie notariell bestätigt (notarized) und mit einem Ticket versehen (stapled) — ein Rechner, auf dem die App noch nie lief, sieht daher nicht mehr Gatekeepers Warnung „nicht verifizierter Entwickler". Siehe Abschnitt „Notarization" in DEVELOPMENT.md.

Behoben

  • Mittelklick auf Finders Dock-Symbol schlug bei bereits laufendem Finder (also praktisch immer) komplett fehl mit „Die App „Finder.app" kann nicht geöffnet werden." statt ein neues Fenster zu öffnen (US-16). Ein Mittelklick auf das Dock-Symbol einer bereits laufenden App drückt jetzt, sofern vorhanden, direkt deren eigenen Menüpunkt „Neues Fenster" über die Accessibility-API (deckt Finder und die meisten fensterbasierten Apps ab, z. B. iTerm2), statt eine neue Instanz zu erzwingen; Apps ohne einen solchen Menüpunkt (z. B. dokumentbasierte Apps wie TextEdit) öffnen weiterhin wie zuvor eine neue Instanz.
  • Mittelklick auf iTerm2s Dock-Symbol erzeugte pro Klick einen kompletten neuen, schwergewichtigen Prozess (eigener Shell-/Sitzungs-Daemon) statt nur ein neues Fenster in der bereits laufenden App (US-16); durch dasselbe oben beschriebene Drücken des Menüpunkts „Neues Fenster" behoben.
  • Ein Mittelklick auf ein Dock-Symbol konnte das eigene Kontextmenü des Dock-Symbols neben dem neuen Fenster/der neuen Instanz offen auf dem Bildschirm zurücklassen (US-16); der Mittelklick wird jetzt abgefangen, wenn diese Funktion darauf reagiert.

3.2.0 2026-07-11

Hinzugefügt

  • Optionaler Update-Check (Einstellungen → Allgemein → „Nach Updates suchen", standardmäßig aus). Bei Aktivierung wird 5 Minuten nach dem Start und danach einmal täglich das öffentliche Release-Repository auf eine neuere Version geprüft; wird eine gefunden, erscheint ein Dialog mit einer „Herunterladen"-Schaltfläche, die direkt zur neuen .dmg führt.

3.1.0 2026-07-09

Geändert

  • Das in 3.0.0 hinzugefügte eigene App-Symbol vorübergehend entfernt (sein Design enthielt die Silhouette des Apple-Logos, ein möglicher markenrechtlicher Konflikt); die App verwendet bis zu einem Ersatzdesign wieder das von macOS automatisch generierte Standardsymbol.

3.0.0 2026-07-09

Hinzugefügt

  • Ausgeschlossene Fenster (Einstellungen): eine Liste von Regex-Mustern, die gegen den Namen einer App geprüft werden — jede App in der Liste kann nie verschoben oder in der Größe verändert werden. Einträge werden normalerweise über „Aus offenen Fenstern hinzufügen…" hinzugefügt, einen Picker mit den aktuell offenen Apps, der für die Auswahl ein exaktes Muster (z. B. ^Calculator$) erzeugt; jedes Muster bleibt danach als reiner Text editierbar („Muster hinzufügen" fügt eine leere Zeile hinzu), ungültige Regexes werden rot angezeigt, ohne etwas zu blockieren.
  • Debug-Konsole: eine Schaltfläche „Scroll Lock". Aus (Standard, gespeichert) hält die Konsole wie bisher stets auf die neueste Zeile gescrollt, sobald neue Einträge eintreffen. An erlaubt freies Scrollen durch die Historie, ohne bei jeder neuen Log-Zeile wieder nach unten gezogen zu werden.
  • Fokus folgt Maus zeigt jetzt beim ersten Aktivieren in den Einstellungen einen einmaligen Warnhinweis („Fokus folgt Maus ist experimentell…", mit einer „Nicht mehr anzeigen"-Checkbox), der erklärt, dass die Funktion auf einem undokumentierten macOS-Mechanismus beruht und sich in manchen Apps unzuverlässig verhalten kann. Auch die README weist jetzt explizit darauf hin, statt es nur anzudeuten. Der Tab „Fokus folgt Maus" zeigt diesen Hinweis zusätzlich dauerhaft (nicht nur einmal), sodass er bei jedem Öffnen des Tabs sichtbar ist, nicht nur beim ersten Mal.

Geändert

  • Projekt umbenannt: KDEMoverSizerMacOSXDragMover. Betrifft den GitLab-Projekt-Slug/Remote, das Xcode-Projekt/die Targets/das Scheme, beide Bundle-Identifier (jetzt com.example.XDragMover/...Tests) sowie jede Quellcode-/Dokumentations-/Skript-Referenz. Wie bei der vorherigen Umbenennung (2.0.0) bedeutet die Änderung des Bundle-Identifiers, dass bestehende Installationen ihre gespeicherten Einstellungen verlieren (neue UserDefaults-Domain) und nach dem Update einmalig die Bedienungshilfen-Berechtigung neu erteilen müssen. Breaking Change für bestehende Installationen, daher bei Release ein Major-Versionssprung.
  • App-Symbol durch ein neues Design ersetzt, das die regenbogenfarbene Silhouette des Apple-Logos, das „X" von X.Org (aus assets/X.Org_Logo.png) und das Verschiebe-Pfeilkreuz kombiniert, neu erzeugt in allen mac-Idiom-Größen (16–1024px).
  • Einstellungsfenster über eine Segment-Steuerung in Tabs neu organisiert (Allgemein, Gesten, Ausgeschlossene Fenster, Fokus folgt Maus, Über), statt einer langen, scrollenden Liste aller Abschnitte übereinander.
  • „Über XDragMover" (Menüleiste) öffnet jetzt den Tab „Über" des Einstellungsfensters (letzter Tab) statt eines separaten modalen Dialogs — die Schaltfläche „Debug-Konsole anzeigen" ist mit umgezogen. Ein Klick auf „Über" bei bereits geöffneten, aber auf einem anderen Tab stehenden Einstellungen wechselt zum Tab „Über", statt auf dem gerade angezeigten Tab zu bleiben.
  • Lizenzierung: LICENSE (GPLv3) und LICENSING.md hinzugefügt, die das Dual-Licensing-Modell erklären, das eine zukünftige Veröffentlichung im Apple App Store weiterhin ermöglicht; Ralf Hartmann als Autor in der README und im Copyright-String der App genannt.

Behoben

  • Die Schaltfläche „Scroll Lock" der Debug-Konsole sah unabhängig vom Zustand gleich aus (schlichter neutralgrauer Hintergrund), nur das winzige Vorhängeschloss-Symbol änderte sich — leicht zu übersehen, sodass sie auch aktiviert inaktiv wirkte. Sie füllt sich jetzt bei aktiviertem Zustand mit der Akzentfarbe, wie es andere umschaltbare macOS-Symbolleisten-Schaltflächen für den aktiven/gedrückten Zustand tun.
  • Einstellungsfenster: Das erste Element („Bei Anmeldung starten") und die Abbrechen/OK-Schaltflächen rückten mit der Zeit, als mehr Abschnitte hinzukamen, immer dichter an die obere/untere Fensterkante, da alles einen gemeinsamen, nicht scrollenden Stack fester Höhe teilte. Die Einstellungsabschnitte scrollen jetzt unabhängig innerhalb des Fensters, Abbrechen/OK sind in einer stets vollständig gepolsterten Fußzeile unterhalb eines Trennstrichs fixiert — beide Enden behalten ihren vorgesehenen Abstand, unabhängig davon, wie viel Inhalt darüber steht.
  • Der Verzögerungs-Schieberegler für Fokus folgt Maus war schwer auf einen präzisen Wert zu treffen — sein 10-ms-Schritt packte 95 diskrete Positionen in ein schmales Zieh-Steuerelement, leicht zu übersteuern. Ein Stepper daneben hinzugefügt für exakte Anpassung per Klick oder Halten in ±10-ms-Schritten; der Schieberegler bleibt für schnelle grobe Positionierung erhalten.
  • Verschieben/Größenänderung (und Fokus folgt Maus) blieben für den gesamten Programmlauf stillschweigend funktionslos, wenn die Bedienungshilfen-Berechtigung genau im Moment des Starts noch nicht erteilt war — ein häufiges Wettrennen mit der Systemabfrage, garantiert nach jeder Änderung des Bundle-Identifiers (z. B. der Umbenennung oben), da diese die Berechtigung immer wieder von Grund auf neu erfordert. Die Event-Taps versuchten nur einmal beim Start zu starten; eine wenig später erteilte Berechtigung wurde nie bemerkt, obwohl die eigene Statusanzeige des Debug-Fensters korrekt „erteilt" anzeigte. AccessibilityPermissionManager meldet jetzt Vertrauensänderungen (onTrustedChange), und die App versucht dann erneut, jeden aktivierten Tap zu starten — eine zu beliebigem Zeitpunkt erteilte Berechtigung lässt Verschieben/Größenänderung/Fokus folgt Maus jetzt sofort funktionieren, kein Neustart nötig.

2.2.0 2026-07-06

Hinzugefügt

  • „Beenden" fragt jetzt zur Bestätigung nach („KDEMoverSizerMacOS beenden?" / „Fensterverschiebung, -größenänderung und Fokus folgt Maus funktionieren erst nach einem Neustart wieder." mit Beenden/Abbrechen-Schaltflächen), statt sofort zu terminieren — ein versehentliches Klicken auf Beenden oder das Tastenkürzel ⌘Q beendet Verschieben/Größenänderung nicht mehr stillschweigend und ohne Rückgängig-Möglichkeit.

2.1.0 2026-07-06

Hinzugefügt

  • Echtes App-Symbol (Dock/Finder/.app-Bundle): ein KDEMoverSizerMacOS/Assets.xcassets/AppIcon.appiconset, über ASSETCATALOG_COMPILER_APPICON_NAME ins Xcode-Projekt eingebunden, erzeugt in allen erforderlichen mac-Idiom-Größen (16–1024px) aus assets/KDE_Window-Sizer-for-macOS_256px.png. Zuvor hatte die App überhaupt kein eigenes Symbol. Das Symbol des Menüleisten-Status-Items (ein SF Symbol) bleibt unverändert.

2.0.0 2026-07-06

Geändert

  • Projekt umbenannt: KDESizeMoverMacKDEMoverSizerMacOS. Betrifft den GitLab-Projekt-Slug/Remote, das Xcode-Projekt/die Targets/das Scheme, beide Bundle-Identifier sowie jede Quellcode-/Dokumentations-/Skript-Referenz. Die Änderung des Bundle-Identifiers bedeutet, dass bestehende Installationen ihre gespeicherten Einstellungen verlieren (neue UserDefaults-Domain) und nach dem Update einmalig die Bedienungshilfen-Berechtigung neu erteilen müssen — ein einmaliger Preis der Umbenennung, keine Regression. Breaking Change für bestehende Installationen, daher der Major-Versionssprung.

1.1.1 2026-07-06

Behoben

  • Die Fenster „Einstellungen" und „Debug-Protokoll" traten nicht zuverlässig tatsächlich in den Vordergrund — als reine Menüleisten-App (.accessory) ist KDEMoverSizerMacOS nie die aktive App, sodass makeKeyAndOrderFront allein eines der Fenster hinter der tatsächlich aktiven anderen App zurücklassen konnte. Beide rufen jetzt zuerst NSApp.activate(ignoringOtherApps: true) auf, entsprechend der Korrektur, die der Über-Dialog aus demselben Grund bereits benötigte.
  • Das Dock-Symbol erscheint jetzt genau dann, wenn das Einstellungen- oder Debug-Protokoll-Fenster geöffnet ist (zusätzlich zur ständigen Anzeige beim Start mit --debug), statt außerhalb des --debug-Modus nie zu erscheinen. Das bedeutet auch: Ein Klick auf das Dock-Symbol, während es angezeigt wird, holt Einstellungen wieder nach vorn, genau wie es ein Neustart der App bereits tut.

1.1.0 2026-07-06

Hinzugefügt

  • Echtes Einstellungsfenster (US-8): „Bei Anmeldung starten", das Ein-/Ausschalten von Fokus folgt Maus (US-4) und dessen Verweildauer (teilweise US-5) sind jetzt alle über einen richtigen Einstellungsdialog änderbar statt nur über fest im Code hinterlegte Standardwerte. Gespeichert mit UserDefaults (übersteht das Deinstallieren der App) und versioniert für zukünftige Migrationen.
  • Schaltfläche „Debug-Konsole anzeigen" im Über-Dialog, sodass das Debug-Protokoll-Fenster geöffnet werden kann, ohne mit --debug zu starten.
  • Abmilderung für Apps (bestätigt: Firefox), die sich selbst in den Vordergrund holen, nachdem Fokus folgt Maus ihnen Eingaben zugewiesen hat — siehe USER_STORIES.md und den Abschnitt „Optional: yabai-unterstützte Fensterreihenfolge-Korrektur" in DEVELOPMENT.md.
  • BACKLOG.md sowie US-9 (Fensterwechsler) zu USER_STORIES.md hinzugefügt.
  • Unabhängige Einstellungs-Schalter für Fensterverschiebung (US-1) und Fenstergrößenänderung (US-2), sodass jede Geste für sich deaktiviert werden kann.
  • Konfigurierbare Modifikatortaste für Verschieben/Größenänderung (GestureModifier): beliebige Kombination aus Command/Option/Control/Shift, Shift allein ausgeschlossen, ersetzt das zuvor fest codierte . Standard bleibt Command.
  • OK/Abbrechen-Schaltflächen im Einstellungsfenster: OK schließt es mit den Änderungen; Abbrechen setzt jede Einstellung (einschließlich „Bei Anmeldung starten") auf den Stand beim Öffnen des Dialogs zurück.
  • Neue Standardwerte: Fokus folgt Maus ist jetzt standardmäßig aus (war an); Verschieben und Größenänderung bleiben standardmäßig an.
  • DEVELOPMENT.md: eine Richtlinie „Changing existing tests" sowie eine neue TEST_CHANGELOG.md, die speziell Änderungen an bestehenden Tests nachverfolgt (getrennt von dieser Datei, die nur nutzerseitig sichtbares Verhalten abdeckt).
  • Ein erneuter Start der App, während sie bereits läuft (z. B. erneuter Doppelklick in Finder/Launchpad), zeigt jetzt das Einstellungsfenster, statt nichts zu tun (US-10).
  • „Aus der Menüleiste ausblenden" (US-11): ein Menüpunkt samt passender Checkbox in den Einstellungen, der das Status-Item vollständig ausblendet; ein erneuter Start der App (US-10) bringt Einstellungen zurück, um es wieder auszuschalten.
  • USER_STORIES.md: neue, noch nicht implementierte US-12 dokumentiert — eine app-spezifische Ausschlussliste für Fokus folgt Maus.

Behoben

  • Das Umschalten von „Bei Anmeldung starten" über das Menüleisten-Item hinterließ nicht mehr eine veraltete Checkbox im Einstellungsdialog — das Einstellungsfenster wird jetzt bei jedem Öffnen neu erzeugt, statt für die gesamte App-Sitzung zwischengespeichert zu werden.
  • Der Inhalt des Einstellungsfensters war über seine feste Größe hinausgewachsen und schnitt die obere („Bei Anmeldung starten") und untere (OK/Abbrechen) Zeile bündig an den Fensterkanten ab. Sein Rahmen wird jetzt großzügig anhand der tatsächlich gemessenen Mindesthöhe des Inhalts dimensioniert.

1.0.1 2026-07-05

Hinzugefügt

  • US-3: Fokus folgt Maus, Stufe 1 — das Fenster unter dem Mauszeiger erhält nach 150 ms Verweildauer echte Tastatur-/Mauseingaben, ohne über andere Fenster angehoben zu werden. Umgesetzt über einen privaten/undokumentierten WindowServer-Mechanismus, portiert aus dem Fenstermanager yabai, da das öffentliche AXFocused-Attribut allein Eingaben nicht app-übergreifend umleitet; fällt auf AXFocused zurück, falls dieser Mechanismus einmal nicht verfügbar sein sollte.

Behoben

  • Fokus folgt Maus zielte nicht zuverlässig auf das richtige Fenster, wenn dessen App bereits mehrere Fenster geöffnet hatte — die Behandlung des Fensterwechsels innerhalb derselben App aus yabai, die beim ersten Portieren verloren gegangen war, wurde wiederhergestellt.
  • Aktivierungslatenz von Fokus folgt Maus von bis zu 350 ms auf unter 200 ms reduziert (150 ms Verweildauer + 20 ms Abfrageintervall, beide gesenkt von 300 ms/50 ms).
  • Veraltete Hinweise in USER_STORIES.md korrigiert (in der Liste der Menüleisten-Items fehlte „Über"; die Lücke „wird bei geöffnetem Menü nicht ausgesetzt" erwähnte US-3 nicht).

1.0.0 2026-07-05

Hinzugefügt

  • Menüpunkt „Über": ein modaler Dialog mit App-Name, Version, Build und Copyright — nicht AppKits gemeinsam genutztes Standard-Info-Panel, das laut Tests bei einer reinen Menüleisten-App (.accessory) nicht zuverlässig in den Vordergrund tritt.

Behoben

  • Info.plist liest CFBundleShortVersionString/CFBundleVersion jetzt aus den Build-Einstellungen statt aus fest codierten, veralteten Werten.

0.1.8 2026-07-05

Keine funktionalen Änderungen (nur Versionssprung).

0.1.7 2026-07-05

Hinzugefügt

  • US-1: jedes Fenster mit +Linksziehen verschieben.
  • US-2: jedes Fenster mit +Rechtsziehen in der Größe ändern, verankert an der nächstgelegenen Ecke.
  • Menüleisten-Status-Item (Bei Anmeldung starten, Beenden) und verstecktes Dock-Symbol außerhalb des --debug-Modus.
  • Debug-Protokollierung von Start-/End-Ereignissen bei Verschieben/Größenänderung (und, bei Größenänderung, welche Ecke gegriffen wurde).
  • Die Make-Ziele make install, make uninstall und make dmg.

Behoben

  • Xcode-Signierung: ein echtes Apple-Development-Team für die automatische Signierung ausgewählt.
  • App beendete sich unerwartet beim Umschalten von „Bei Anmeldung starten".
  • App beendete sich unerwartet bei Interaktion mit dem eigenen Dropdown-Menü des Menüleisten-Items (nicht im Debug-Modus).
  • Reaktionsfähigkeit bei Größenänderung: redundante Accessibility-API-Aufrufe übersprungen und Zieh-Updates auf die Haupt-Run-Loop zusammengefasst.
  • make dmg: das eingebundene Volume war im Finder unsichtbar (zunächst wegen -nobrowse, dann wegen eines eigenen -mountpoint außerhalb von /Volumes/).

0.1.6 2026-07-05

Behoben

  • Paket-Codesignierung: ein selbstsigniertes Zertifikat erfüllt nicht die Bedienungshilfen-Prüfungen von TCC; auf teambasierte Signierung umgestellt.

0.1.5 2026-07-05

Keine funktionalen Änderungen (nur Versionssprung).

0.1.4 2026-07-05

Hinzugefügt

  • CI: baut bei jedem Push nach dev ein Paket, versioniert mit dem Commit-SHA.

Dokumentation

  • App-Translocation als Ursache wiederholter Berechtigungsabfragen dokumentiert.

0.1.3 2026-07-05

Behoben

  • Veröffentlichte Pakete fragten bei jeder Installation erneut nach der Bedienungshilfen-Berechtigung.

0.1.2 2026-07-05

Behoben

  • make package/make release scheiterte beim Bauen wegen eines Problems beim Aufräumen des Temp-Verzeichnisses.

0.1.1 2026-07-05

Hinzugefügt

  • Initiales Projektgerüst: Anfrage der Bedienungshilfen-Berechtigung, Debug-Fenster, Erkennung des Fensters unter dem Mauszeiger, Unit-Tests.
  • Makefile (build/test/clean/all).
  • Git-Branching-Workflow main/dev/feature/bugfix mit skriptgesteuertem Release-Prozess (make release).
  • GitLab-CI-Pipeline (Test bei Push nach dev, Release bei Push nach main).
  • make run sowie das --debug-Flag.

Behoben

  • Erneute Abfrage der Bedienungshilfen-Berechtigung bei jedem Neu-Build/Lauf.
  • Nebeneffekte beim Start (Berechtigungsabfrage, Event-Taps), die auftraten, wenn die App von XCTest gehostet wurde.

← Zurück zur Startseite