Skip to content

fix(linux): hacer que el widget sea visible en todos los escritorios virtuales (#227) - #232

Merged
egdev6 merged 4 commits into
egdev6:mainfrom
Rafaeldelinares:feat/227-linux-sticky-workspaces
Nov 1, 2026
Merged

egdev6 merged 4 commits into
egdev6:mainfrom
Rafaeldelinares:feat/227-linux-sticky-workspaces

Conversation

@Rafaeldelinares

Copy link
Copy Markdown
Contributor

Problem to solve

Resuelve #227.

En #112 se incorporó set_visible_on_all_workspaces(true) en src-tauri/src/lib.rs:1083 con un gate #[cfg(target_os = "macos")] bajo la premisa de que en Linux bastaba con always_on_top («Windows/Linux have no Spaces and always-on-top already covers it»).

Sin embargo, en Linux (X11 / XWayland) always_on_top (_NET_WM_STATE_ABOVE) solo mantiene la ventana flotando por encima dentro del mismo escritorio virtual, pero no acompaña al usuario al cambiar de workspace. Para acompañar entre escritorios se requiere declarar la ventana como sticky (_NET_WM_STATE_STICKY / _NET_WM_DESKTOP = 0xFFFFFFFF).

En tao 0.37.1, set_visible_on_all_workspaces(true) ya está implementado para Linux (tao/src/platform_impl/linux/window.rs:762 y event_loop.rs:424), despachando window.stick() (gtk_window_stick()). Tal como observó @egdev6, en GTK la llamada es segura antes de que la ventana tenga GdkWindow, por lo que se aplica limpiamente durante la fase de setup de Tauri sin provocar panics.

Proposed changes

  1. Ampliación del gate de plataforma en src-tauri/src/lib.rs:
    • Cambiado #[cfg(target_os = "macos")] por #[cfg(any(target_os = "macos", target_os = "linux"))] para las tres ventanas del ciclo inicial (WIDGET, DETAIL, OVERLAY).
  2. Actualización de comentarios y mensajes de error:
    • Actualizado el bloque explicativo previo (lib.rs:1036-1041) para reflejar que tanto macOS (NSWindow.canJoinAllSpaces) como Linux (_NET_WM_STATE_STICKY vía gtk_window_stick) requieren este marcado para acompañar entre escritorios/Spaces.
    • Actualizado el mensaje de error de consola para referirse a «escritorios» en lugar de solo «Spaces».
  3. Comportamiento predeterminado:

Validation evidence

1. Comprobación de átomos EWMH en Linux X11 (xprop)

Al aplicar stick() antes de show(), el gestor de ventanas (KWin / XWayland) recibe la petición y fija el estado de inmediato:

_NET_WM_DESKTOP(CARDINAL) = 0
_NET_WM_STATE(ATOM) = _NET_WM_STATE_DEMANDS_ATTENTION, _NET_WM_STATE_ABOVE, _NET_WM_STATE_STAYS_ON_TOP, _NET_WM_STATE_STICKY, _NET_WM_STATE_SKIP_TASKBAR, _NET_WM_STATE_SKIP_PAGER
  • _NET_WM_STATE_STICKY queda activo en _NET_WM_STATE.
  • Al alternar entre escritorios virtuales (KDE Plasma 6 / X11), la tira permanece fija y visible en la pantalla.

2. Suites de pruebas

  • cargo test --tests: 402 passed; 0 failed (0 warnings de compilación).
  • npm test: 847 tests en 67 ficheros en verde (Vitest) + 298 tests en verde (Node test runner) = 0 fallos.
  • node scripts/i18n-inventory.mjs --check: limpio, sin desajustes.

@egdev6

egdev6 commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Gracias por el trabajo, @Rafaeldelinares. El cambio es correcto y mínimo: amplía el gate a Linux para la tira, el detalle y el overlay, y actualiza el comentario y el mensaje de error como se acordó en #227. La comprobación con xprop en KDE/X11 (_NET_WM_STATE_STICKY) y la tira siguiendo al usuario entre escritorios cubren el caso principal.

La CI de Windows fallaba porque el inventario i18n se regeneró antes de mergear main, y el merge cambió el árbol de src/. Lo he regenerado sobre tu rama en b6ee61a (solo docs/i18n-inventory.md), así que no hace falta que hagas nada con eso.

Vamos a integrarla sin esperar el resto de la validación manual. Como seguimiento, cuando puedas, comparte en #227:

  • Cambio de escritorio con el panel de detalle abierto, tanto transitorio (hover) como anclado por clic (feat(ux): abrir y cerrar el detalle con clic directo sobre el orbe #170): que acompañe a la tira y no se quede en el escritorio anterior.
  • Cambio de escritorio mientras se reproduce un efecto del overlay.
  • GNOME queda como pendiente explícito si no tienes un entorno disponible.

¡Gracias!

@egdev6
egdev6 merged commit 89287f3 into egdev6:main Nov 1, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants