Changelog

Cada cambio notable en XDragMover, release por release.

3.4.1 2026-07-13

Corregido

  • Podía aparecer sin haberlo solicitado una ventana vacía titulada «XDragMover Settings» al iniciar — de forma más fiable al iniciarse como elemento de inicio de sesión, y ocasionalmente también al reiniciar manualmente. Causado por que SwiftUI muestra automáticamente la escena Settings de marcador de posición de la app, y/o porque la restauración del estado de ventanas de AppKit reabre una ventana que estaba abierta anteriormente. Corregido cerrando al iniciar cualquier ventana que AppKit/SwiftUI abra por sí mismo.

3.4.0 2026-07-13

Añadido

  • Localización al alemán, ruso y francés. La interfaz de XDragMover (Ajustes, barra de menú, alertas) ahora sigue el idioma del sistema mediante un String Catalog; recurre al inglés para cualquier otro idioma.

Corregido

  • Eliminar un patrón en la pestaña "Ventanas excluidas" de Ajustes podía hacer que la app se bloqueara cuando no era el último de la lista — un índice de array obsoleto capturado por el campo de texto de otra fila aún visible. Reproducido en vivo y corregido.

3.3.1 2026-07-13

Cambiado

  • El identificador del paquete cambió del marcador de posición com.example.XDragMover a de.xdragmover (de.xdragmover.tests para el destino de pruebas) — la forma DNS inversa del propio dominio de este proyecto, xdragmover.de. Cualquiera con una compilación anterior instalada tendrá que volver a conceder el acceso de Accesibilidad una vez, ya que macOS vincula ese permiso al identificador del paquete.

Corregido

  • make dmg fallaba al firmar el contenedor .dmg en el GitLab Runner ("The following argument was not expected: --timestamp") porque su PATH no interactivo resolvía un binario distinto y no relacionado llamado codesign antes que el real de Apple — ahora llama explícitamente a /usr/bin/codesign, evitando por completo la resolución por PATH.

3.3.0 2026-07-13

Añadido

  • Clic central en el icono de una app en el Dock para abrir una nueva ventana/instancia de ella (US-16). Desactivado por defecto; se activa en Ajustes → Gestos → "Clic central en icono del Dock para nueva instancia".

Cambiado

  • Se restauró el icono de la app (Dock/Finder/paquete .app), usando un nuevo diseño (assets/logo.png) en lugar del eliminado en la 3.1.0 por preocupaciones de marca registrada.
  • Las compilaciones de release ahora se firman con una identidad "Developer ID Application" de pago y se notarizan y grapan (staple), de modo que una máquina que nunca ha ejecutado esta app deja de ver la advertencia de Gatekeeper de "desarrollador no identificado" — consulta la sección "Notarización" de DEVELOPMENT.md.

Corregido

  • Hacer clic central en el icono de Finder en el Dock mientras Finder ya estaba en ejecución (es decir, prácticamente siempre) fallaba directamente con "The application "Finder.app" can't be opened." en lugar de abrir una nueva ventana (US-16). Ahora, al hacer clic central en el icono del Dock de una app ya en ejecución, se pulsa directamente el propio elemento de menú "New Window" de esa app mediante la API de Accesibilidad cuando lo tiene (cubre Finder y la mayoría de apps basadas en ventanas, p. ej. iTerm2), en lugar de intentar forzar una nueva instancia; las apps sin ese elemento de menú (p. ej. apps basadas en documentos como TextEdit) siguen abriendo una nueva instancia como antes.
  • Hacer clic central en el icono de iTerm2 en el Dock generaba todo un nuevo proceso pesado (su propio daemon de shell/sesión) por clic, en lugar de solo una nueva ventana en la app ya abierta (US-16); corregido mediante la misma pulsación del elemento de menú "New Window" descrita arriba.
  • Al hacer clic central en un icono del Dock, el propio menú contextual del icono en el Dock podía quedar abierto en pantalla junto con la nueva ventana/instancia (US-16); ahora el clic central se consume cuando esta función actúa sobre él.

3.2.0 2026-07-11

Añadido

  • Comprobación de actualizaciones opcional (Ajustes → General → "Comprobar actualizaciones", desactivada por defecto). Cuando está activada, comprueba el repositorio público de releases 5 minutos después del inicio y una vez al día a partir de entonces; si encuentra una versión más reciente, muestra un diálogo con un botón "Descargar" que enlaza directamente al nuevo .dmg.

3.1.0 2026-07-09

Cambiado

  • Se eliminó temporalmente el icono de app personalizado añadido en la 3.0.0 (su diseño incorporaba la silueta del logo de Apple, una posible preocupación de marca registrada); la app ahora recurre al icono por defecto generado por macOS hasta que haya un diseño de reemplazo listo.

3.0.0 2026-07-09

Añadido

  • Ventanas excluidas (Ajustes): una lista de patrones de expresión regular comparados con el nombre de una app — cualquier app en la lista nunca podrá moverse ni redimensionarse. Las entradas normalmente se añaden mediante "Añadir desde ventanas abiertas…", un selector que lista las apps actualmente abiertas y genera un patrón de coincidencia exacta (p. ej. ^Calculator$) para la elegida; cada patrón sigue siendo editable como texto plano después ("Añadir patrón" añade una fila en blanco), y las expresiones regulares inválidas se muestran en rojo sin bloquear nada.
  • Consola de depuración: un botón "Bloqueo de desplazamiento". Desactivado (por defecto, persistido) mantiene la consola desplazada hasta la línea más reciente a medida que llegan nuevas entradas, igual que antes. Activado permite desplazarse libremente por el historial sin ser arrastrado de vuelta al final en cada nueva línea de registro.
  • Foco sigue al ratón ahora muestra una advertencia única ("Foco sigue al ratón es experimental…", con una casilla "No volver a mostrar esto") la primera vez que se activa en Ajustes, explicando que depende de un mecanismo de macOS no documentado y puede comportarse de forma poco fiable en algunas apps. El README ahora también lo menciona explícitamente en lugar de solo insinuarlo. La pestaña de Foco sigue al ratón además muestra esta advertencia de forma permanente (no solo una vez), de modo que es visible cada vez que se abre esa pestaña, no solo la primera vez.

Cambiado

  • Proyecto renombrado: KDEMoverSizerMacOSXDragMover. Afecta al slug/remoto del proyecto de GitLab, al proyecto/destinos/esquema de Xcode, a ambos identificadores de paquete (ahora com.example.XDragMover/...Tests) y a toda referencia en código fuente/documentación/scripts. Igual que con el renombrado anterior (2.0.0), el cambio de identificador de paquete hace que las instalaciones existentes pierdan sus Ajustes persistidos (nuevo dominio de UserDefaults) y necesiten volver a conceder el permiso de Accesibilidad una vez tras actualizar. Cambio incompatible para las instalaciones existentes, de ahí el incremento de versión mayor en este release.
  • Icono de la app reemplazado por un nuevo diseño que combina la silueta arcoíris del logo de Apple, la "X" de X.Org (de assets/X.Org_Logo.png) y la cruz de flechas de movimiento, regenerado en todos los tamaños del idioma mac (16–1024px).
  • La ventana de Ajustes se reorganizó en pestañas (General, Gestos, Ventanas excluidas, Foco sigue al ratón, Acerca de) mediante un control segmentado, en lugar de una larga lista con desplazamiento con todas las secciones apiladas verticalmente.
  • "Acerca de XDragMover" (barra de menú) ahora abre la pestaña "Acerca de" de la ventana de Ajustes (última pestaña) en lugar de una alerta modal separada — el botón "Mostrar consola de depuración" se trasladó con ella. Hacer clic en "Acerca de" mientras Ajustes ya está abierto en otra pestaña la cambia a Acerca de, en lugar de dejarla en la pestaña que estuviera mostrando.
  • Licencias: se añadieron LICENSE (GPLv3) y LICENSING.md explicando el acuerdo de doble licencia que mantiene posible un futuro lanzamiento en la App Store de Apple; se acreditó a Ralf Hartmann como autor en el README y en la cadena de copyright de la app.

Corregido

  • El botón "Bloqueo de desplazamiento" de la consola de depuración se veía igual (un fondo gris neutro plano) estuviera activado o no, solo cambiaba el pequeño glifo del candado — fácil de pasar por alto, así que parecía inactivo incluso estando activado. Ahora se rellena con el color de acento mientras está bloqueado, igual que otros botones de alternancia de barra de herramientas de macOS indican un estado activo/pulsado.
  • Ventana de Ajustes: el primer elemento ("Iniciar al iniciar sesión") y los botones Cancelar/OK se habían encogido hasta quedar pegados a los bordes superior/inferior de la ventana a medida que se añadían más secciones con el tiempo, ya que todo compartía una única pila de altura fija sin desplazamiento. Las secciones de ajustes ahora se desplazan de forma independiente dentro de la ventana, con Cancelar/OK fijados en un pie de página siempre con relleno completo bajo un separador — ambos extremos mantienen el espaciado previsto sin importar cuánto contenido haya arriba.
  • El control deslizante del retardo de foco-sigue-al-ratón era difícil de ajustar a un valor preciso — su paso de 10ms comprimía 95 posiciones discretas en un control de arrastre estrecho, fácil de sobrepasar. Se añadió un Stepper junto a él para ajustes exactos de ±10ms mediante clic o mantener pulsado; el control deslizante se mantiene para el posicionamiento rápido y grueso.
  • Mover/redimensionar (y foco-sigue-al-ratón) permanecían rotos silenciosamente durante toda una sesión si el permiso de Accesibilidad no se había concedido aún en el momento exacto del inicio — una condición de carrera habitual con el aviso del sistema, y garantizada tras cualquier cambio de identificador de paquete (p. ej. el renombrado anterior), ya que eso siempre requiere volver a conceder el acceso desde cero. Los event taps solo intentaban iniciarse una vez, al arrancar; conceder el acceso momentos después nunca se detectaba, aunque el propio indicador de estado de la ventana de depuración mostraba correctamente "concedido". AccessibilityPermissionManager ahora informa cuando cambia la confianza (onTrustedChange), y la app reintenta iniciar cada tap activado cuando eso ocurre — conceder el acceso en cualquier momento ahora hace que mover/redimensionar/foco-sigue-al-ratón funcionen de inmediato, sin necesidad de reiniciar.

2.2.0 2026-07-06

Añadido

  • "Salir" ahora pide confirmación ("¿Salir de KDEMoverSizerMacOS?" / "Mover, redimensionar ventanas y foco-sigue-al-ratón dejarán de funcionar hasta que la reinicies." con botones Salir/Cancelar) en lugar de terminar inmediatamente — pulsar accidentalmente Salir o su equivalente de tecla ⌘Q ya no mata silenciosamente el mover/redimensionar de ventanas sin posibilidad de deshacer.

2.1.0 2026-07-06

Añadido

  • Icono de app real (Dock/Finder/paquete .app): un KDEMoverSizerMacOS/Assets.xcassets/AppIcon.appiconset conectado al proyecto de Xcode mediante ASSETCATALOG_COMPILER_APPICON_NAME, generado en todos los tamaños requeridos del idioma mac (16–1024px) a partir de assets/KDE_Window-Sizer-for-macOS_256px.png. Antes la app no tenía ningún icono personalizado. El icono del elemento de estado de la barra de menú (un SF Symbol) no cambia.

2.0.0 2026-07-06

Cambiado

  • Proyecto renombrado: KDESizeMoverMacKDEMoverSizerMacOS. Afecta al slug/remoto del proyecto de GitLab, al proyecto/destinos/esquema de Xcode, a ambos identificadores de paquete y a toda referencia en código fuente/documentación/scripts. El cambio de identificador de paquete hace que las instalaciones existentes pierdan sus Ajustes persistidos (nuevo dominio de UserDefaults) y necesiten volver a conceder el permiso de Accesibilidad una vez tras actualizar — un coste puntual del renombrado, no una regresión. Cambio incompatible para las instalaciones existentes, de ahí el incremento de versión mayor.

1.1.1 2026-07-06

Corregido

  • Las ventanas de Ajustes y del registro de depuración no pasaban de forma fiable a un primer plano real — como app exclusivamente de barra de menú (.accessory), KDEMoverSizerMacOS nunca es la app activa, así que makeKeyAndOrderFront por sí solo podía dejar cualquiera de las dos ventanas detrás de la app que estuviera realmente activa. Ambas ahora llaman primero a NSApp.activate(ignoringOtherApps: true), igual que la corrección que ya necesitaba el diálogo Acerca de por la misma razón.
  • El icono del Dock ahora aparece exactamente mientras la ventana de Ajustes o del registro de depuración está abierta (además de aparecer siempre cuando se inicia con --debug), en lugar de no aparecer nunca fuera del modo --debug. Esto también significa que hacer clic en el icono del Dock mientras se muestra trae Ajustes de vuelta al frente, igual que ya hace reiniciar la app.

1.1.0 2026-07-06

Añadido

  • Ventana de Ajustes real (US-8): "Iniciar al iniciar sesión", activar/desactivar foco-sigue-al-ratón (US-4) y su retardo (US-5 parcial) ahora se pueden cambiar desde un diálogo de ajustes propiamente dicho en lugar de solo mediante valores por defecto en el código. Persistido con UserDefaults (sobrevive a desinstalar la app) y versionado para futuras migraciones.
  • Botón "Mostrar consola de depuración" en el diálogo Acerca de, de modo que la ventana del registro de depuración se pueda abrir sin iniciar con --debug.
  • Mitigación para apps (confirmado: Firefox) que se elevan a sí mismas tras recibir la entrada mediante foco-sigue-al-ratón — consulta USER_STORIES.md y la sección "Optional: yabai-assisted window-order correction" de DEVELOPMENT.md.
  • BACKLOG.md y la US-9 (selector de ventanas) añadidos a USER_STORIES.md.
  • Interruptores de Ajustes independientes para mover ventanas (US-1) y redimensionar ventanas (US-2), de modo que cada gesto pueda desactivarse por separado.
  • Tecla modificadora de mover/redimensionar configurable (GestureModifier): cualquier combinación de Comando/Opción/Control/Mayúsculas, excluyendo Mayúsculas solo, reemplazando el previamente fijo en el código. Por defecto sigue siendo Comando.
  • Botones OK/Cancelar en la ventana de Ajustes: OK la cierra conservando los cambios; Cancelar revierte cada ajuste (incluido "Iniciar al iniciar sesión") al valor que tenía cuando se abrió el diálogo.
  • Nuevos valores por defecto: foco-sigue-al-ratón ahora desactivado por defecto (antes activado); mover y redimensionar siguen activados por defecto.
  • DEVELOPMENT.md: una política de "Modificar pruebas existentes", y un nuevo TEST_CHANGELOG.md que rastrea específicamente las modificaciones a pruebas existentes (separado de este archivo, que solo cubre el comportamiento de cara al usuario).
  • Reiniciar la app mientras ya está en ejecución (p. ej. haciendo doble clic en ella de nuevo en Finder/Launchpad) ahora muestra la ventana de Ajustes en lugar de no hacer nada (US-10).
  • "Ocultar de la barra de menú" (US-11): un elemento de menú y una casilla de Ajustes correspondiente que ocultan por completo el elemento de estado; reiniciar la app (US-10) es la forma de volver a mostrar Ajustes y desactivarlo de nuevo.
  • USER_STORIES.md: se documentó una nueva US-12, aún no implementada — una lista de exclusión por app para foco-sigue-al-ratón.

Corregido

  • Alternar "Iniciar al iniciar sesión" desde el elemento de la barra de menú ya no dejaba desactualizada la casilla del diálogo de Ajustes — la ventana de Ajustes ahora se recrea desde cero cada vez que se abre en lugar de mantenerse en caché durante toda la sesión de la app.
  • El contenido de la ventana de Ajustes había superado su tamaño fijo, recortando las filas superior ("Iniciar al iniciar sesión") e inferior (OK/Cancelar) contra los bordes de la ventana. Su marco ahora tiene un tamaño generoso basado en la altura mínima realmente medida del contenido.

1.0.1 2026-07-05

Añadido

  • US-3: foco-sigue-al-ratón, etapa 1 — la ventana bajo el ratón recibe entrada real de teclado/ratón tras un tiempo de espera de 150ms, sin ser elevada por encima de otras ventanas. Implementado mediante un mecanismo privado/no documentado de WindowServer portado desde el gestor de ventanas yabai, ya que el atributo público AXFocused por sí solo no redirige la entrada entre apps; recurre a AXFocused si ese mecanismo llegara a no estar disponible.

Corregido

  • Foco-sigue-al-ratón no apuntaba de forma fiable a la ventana correcta cuando su app ya tenía varias ventanas abiertas — se restauró el mismo manejo de cambio de ventana dentro de la misma app de yabai que el porte inicial había omitido.
  • La latencia de activación de foco-sigue-al-ratón se redujo de hasta 350ms a menos de 200ms (150ms de retardo de espera + 20ms de intervalo de sondeo, ambos reducidos desde 300ms/50ms).
  • Se corrigieron notas obsoletas en USER_STORIES.md (a la lista de elementos de la barra de menú le faltaba "Acerca de"; el hueco "no se suspende mientras hay un menú abierto" no mencionaba la US-3).

1.0.0 2026-07-05

Añadido

  • Elemento de menú "Acerca de": una alerta modal con nombre de la app, versión, compilación y copyright — no el panel estándar compartido "About" de AppKit, que las pruebas mostraron que no pasa de forma fiable al frente en una app exclusivamente de barra de menú (.accessory).

Corregido

  • Info.plist ahora lee CFBundleShortVersionString/CFBundleVersion desde los ajustes de compilación en lugar de valores fijos y obsoletos en el código.

0.1.8 2026-07-05

Sin cambios funcionales (solo incremento de versión).

0.1.7 2026-07-05

Añadido

  • US-1: mover cualquier ventana con +arrastre con el botón izquierdo.
  • US-2: redimensionar cualquier ventana con +arrastre con el botón derecho, anclado a la esquina más cercana.
  • Elemento de estado en la barra de menú (Iniciar al iniciar sesión, Salir) e icono de Dock oculto fuera del modo --debug.
  • Registro de depuración de eventos de inicio/fin de mover/redimensionar (y, para redimensionar, qué esquina se agarró).
  • Destinos make install, make uninstall y make dmg.

Corregido

  • Firma en Xcode: seleccionar un Apple Development Team real para la firma automática.
  • La app se cerraba inesperadamente al alternar "Iniciar al iniciar sesión".
  • La app se cerraba inesperadamente al interactuar con el propio menú desplegable del elemento de la barra de menú (modo sin depuración).
  • Capacidad de respuesta al redimensionar: se omiten llamadas redundantes a la API de Accesibilidad y se combinan las actualizaciones de arrastre en el run loop principal.
  • make dmg: el volumen montado era invisible para Finder (primero por -nobrowse, luego por un -mountpoint personalizado fuera de /Volumes/).

0.1.6 2026-07-05

Corregido

  • Firma de código del paquete: un certificado autofirmado no satisface las comprobaciones del permiso de Accesibilidad de TCC; se cambió a firma basada en Team.

0.1.5 2026-07-05

Sin cambios funcionales (solo incremento de versión).

0.1.4 2026-07-05

Añadido

  • CI: compilar un paquete en cada push a dev, versionado con el SHA del commit.

Documentación

  • Se documentó la Traslocación de Apps (App Translocation) como causa de avisos de permiso repetidos.

0.1.3 2026-07-05

Corregido

  • Los paquetes publicados volvían a pedir el acceso de Accesibilidad en cada instalación.

0.1.2 2026-07-05

Corregido

  • make package/make release no lograban compilar debido a un problema de limpieza de directorio temporal.

0.1.1 2026-07-05

Añadido

  • Esqueleto inicial del proyecto: solicitud del permiso de Accesibilidad, ventana de depuración, detección de la ventana bajo el ratón, pruebas unitarias.
  • Makefile (build/test/clean/all).
  • Flujo de trabajo de ramas Git main/dev/feature/bugfix con un proceso de release guionizado (make release).
  • Pipeline de GitLab CI (pruebas en cada push a dev, release en cada push a main).
  • make run y el flag --debug.

Corregido

  • El permiso de Accesibilidad volvía a pedirse en cada recompilación/ejecución.
  • Efectos secundarios de inicio (aviso de permiso, event taps) ejecutándose cuando la app es alojada por XCTest.

← Volver al inicio