fix(linux): hacer que el widget sea visible en todos los escritorios virtuales (paridad con macOS)

Aperta
#227 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
rust, tauri
Ambito
desktop

Direzione di ricerca

The relevant gate is the #[cfg(target_os = "macos")] block around set_visible_on_all_workspaces(true) in src-tauri/src/lib.rs near line 1083. Read how the widget, detail and overlay windows are created, and check the tao Linux stick() path the issue cites, since it is a dependency and not in this repo. Before editing, get the maintainer's answer on whether this should be on by default or behind a setting, because the thread is still open. Done means the widget stays visible after switching workspaces on X11 or XWayland, with the failure logged and no change on macOS.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Contexto y motivación

Quorb está concebido como una tira de estado y control continua. En Linux, al cambiar de escritorio virtual (workspaces en KDE Plasma, GNOME, etc.), la tira desaparece porque el gestor de ventanas la confina al escritorio donde se inició el proceso.

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 asunción 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 / KDE / GNOME) 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).

Diagnóstico técnico

En el motor de ventanas de Quorb (tao 0.37.1), set_visible_on_all_workspaces(true) ya está plenamente implementado para Linux (tao/src/platform_impl/linux/window.rs:762 y event_loop.rs:424):

WindowRequest::SetVisibleOnAllWorkspaces(visible) => {
    if visible {
        window.stick();
    } else {
        window.unstick();
    }
}

La llamada a window.stick() de GTK envía al gestor de ventanas los mensajes EWMH oficiales para que la ventana se proyecte en todos los escritorios.

Alcance propuesto (Centrado en Linux)

Nos centramos exclusivamente en implementar y verificar esta paridad en Linux:

  1. Linux (X11 / XWayland):
    • Ampliar el gate en src-tauri/src/lib.rs:
      #[cfg(any(target_os = "macos", target_os = "linux"))]
      for label in [WIDGET, DETAIL, OVERLAY] {
          if let Some(w) = app.get_webview_window(label) {
              if let Err(e) = w.set_visible_on_all_workspaces(true) {
                  eprintln!("No pude marcar «{label}» visible en todos los escritorios: {e}");
              }
          }
      }
      
    • Otorga paridad inmediata con macOS sin dependencias nuevas ni cambios en la capa de frontend.
  2. Linux (Wayland nativo):
    • xdg-shell por diseño no ofrece a clientes regulares una petición para declararse sticky sin protocolos privilegiados de compositor (wlr-layer-shell). Con el camino X11/XWayland (GDK_BACKEND=x11), queda cubierto en el entorno operativo de Linux.
Pregunta para el mantenedor / Decisión de producto

¿Preferís que este comportamiento sea predeterminado e inherente al widget (igual que en macOS desde #112), o considerás necesario que esté sujeto a un interruptor en Ajustes (ej. Ajustes > Comportamiento > Mostrar en todos los escritorios virtuales)?

Abrimos el hilo para acordar la dirección antes de preparar la PR.

Lingua principale
TypeScript
Stelle
10
Fork
2
Merge medio
5h 55m
PR unite (30g)
123

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di egdev6/quorb

Tutte le issue di egdev6/quorb

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.