Atajos globales
Una combinación de teclas que funciona sin que tu ventana tenga el foco: qué permiso pide cada sistema, por qué colisionan, y cómo se maneja que otro se la haya quedado.
Lo básico, y lo que falta
use tauri_plugin_global_shortcut::GlobalShortcutExt;// registrar devuelve un resultado, y hay que mirarlomatch app.global_shortcut().register("CmdOrCtrl+Shift+Space") { Ok(()) => estado.atajo_activo = true, Err(e) => { // probablemente esté ocupado. Nivel siguiente apartado log::warn!("no se pudo registrar el atajo: {e}"); estado.atajo_activo = false; }}Casi todo el código que se ve por ahí ignora ese resultado, y produce el fallo característico: el usuario configura un atajo, la aplicación no dice nada, y el atajo no funciona nunca.
Cuando ya está ocupado
Y la conclusión práctica: un atajo global tiene que ser configurable. Si tu aplicación fija una combinación y esa está ocupada en la máquina de alguien, esa persona no tiene salida. Una preferencia donde pueda cambiarlo convierte un fallo insalvable en un ajuste de diez segundos.
El permiso de macOS
El caso que produce más incidencias:
- macOS exige un permiso de accesibilidad para que una aplicación capture teclas fuera de su ventana.
- Se concede en las preferencias del sistema, no con un diálogo que tú puedas mostrar.
- Y tu aplicación puede detectar si lo tiene, lo que permite explicar qué hacer en vez de fallar en silencio.
La secuencia correcta: comprobar si hay permiso; si no, mostrar una explicación con un botón que abra directamente el panel correspondiente de las preferencias del sistema —se puede— y volver a comprobar cuando la aplicación recupere el foco.
Y hay un detalle desagradable: en algunos casos el permiso hay que volver a concederlo tras actualizar la aplicación, porque el sistema lo asocia a la firma del binario. Es el mismo fenómeno del nivel 35.3, y merece detectarlo en vez de suponer que sigue concedido.
Elegir combinaciones
Liberar
Lo que se olvida: un atajo registrado hay que liberarlo.
- Al cambiarlo en preferencias: liberar el anterior antes de registrar el nuevo.
- Al cerrar la aplicación, aunque el sistema suele limpiarlo solo.
- Y al desactivar la función, si el usuario la apaga.
No liberar al cambiar es el fallo más frecuente: el usuario cambia el atajo tres veces y la aplicación acaba con tres registrados, respondiendo a todos.