From 9489d6cc58d6ee01f3c2ece18bd1844be86bbe5d Mon Sep 17 00:00:00 2001 From: Munka Date: Wed, 29 Jul 2026 12:35:10 -0500 Subject: [PATCH] =?UTF-8?q?Las=20pesta=C3=B1as=20ocupan=20la=20fila=20del?= =?UTF-8?q?=20t=C3=ADtulo=20tambi=C3=A9n=20en=20Windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit En Windows la ventana conservaba la barra de título del sistema y la barra de pestañas iba DEBAJO: una fila entera gastada en repetir el nombre de la app. En macOS ya no pasaba (TitleBarStyle::Overlay desde la v1.4.2). Ahora las dos se comportan igual, y como Chrome: la barra de pestañas ES la fila del título. - Ventana sin decoración en Windows (decorations(false)). resizable(true) conserva WS_THICKFRAME, así que los bordes siguen redimensionando y Aero Snap (arrastrar a un borde, Win+flechas) sigue vivo. - La barra dibuja sus propios botones minimizar/maximizar/cerrar con las medidas y colores del sistema (46 px de ancho, alto completo de la barra, esquinas rectas, rojo #c42b1c al posarse en el aspa) y los glifos de Segoe Fluent Icons. Actúan por el evento nuevo ls-window; cerrar sigue pasando por CloseRequested, o sea que oculta a la bandeja igual que antes. - El icono del medio alterna maximizar/restaurar según el estado. El repintado se dispara solo cuando ese estado CAMBIA, no en cada píxel del redimensionado. - La geometría maximizada ya no se guarda entre sesiones: sin decoración, al reabrir volvería como ventana normal del tamaño de la pantalla y taparía la barra de tareas. Se conserva la última geometría restaurada. - Doble clic en el hueco libre de la barra ahora maximiza/restaura (lo gobierna data-tauri-drag-region), como la barra de título del sistema y como Chrome. Antes abría una pestaña nueva; para eso quedan el botón + y Cmd/Ctrl+T. NO incluye los Snap Layouts de Windows 11 (el menú que asoma al posar el cursor sobre maximizar). Requieren que la ventana conteste WM_NCHITTEST con HTMAXBUTTON, y aquí ese botón lo tapa el webview hijo de la barra, que se queda con los mensajes del ratón: la ventana principal nunca los ve. Es la misma razón por la que Electron necesita botones NATIVOS (titleBarOverlay) para poder ofrecerlo. El resto de Aero Snap no se ve afectado. Se añade .github/workflows/check.yml: cargo check en Windows y macOS al empujar una rama, sin publicar nada. Hasta ahora solo existía el workflow de publicar (etiquetas v*), así que no había forma de comprobar que algo compilaba sin sacar un release. Verificado: sintaxis del script de la barra con node --check; medidas, clases y estados de los botones comprobados en el navegador (46 px, pegados al borde, ocultos en macOS, icono y rótulo correctos al maximizar, y el arrastre solo en el hueco libre, nunca en los botones). La compilación la verifica el workflow nuevo. Co-Authored-By: Claude Opus 5 --- .github/workflows/check.yml | 59 +++++++++++++++++++++++++ dist/index.html | 52 ++++++++++++++++++++-- src-tauri/src/lib.rs | 87 ++++++++++++++++++++++++++++++++----- 3 files changed, 182 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/check.yml diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..9bcaff6 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,59 @@ +name: Verificar compilación (sin publicar) + +# Comprueba que el shell COMPILA en Windows y macOS sin construir instaladores ni tocar +# Releases. Sirve para revisar un cambio en una rama antes de etiquetar la versión: el +# workflow de publicar solo se dispara con etiquetas `v*`, así que hasta ahora no había +# forma de saber si algo compilaba sin publicarlo. +on: + push: + branches-ignore: + - main + pull_request: + workflow_dispatch: + +permissions: + contents: read # solo lee el repo: no crea releases ni sube nada + +jobs: + check: + strategy: + fail-fast: false + matrix: + platform: [windows-latest, macos-latest] + + runs-on: ${{ matrix.platform }} + steps: + - name: Clonar repo + uses: actions/checkout@v4 + + - name: Instalar Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Instalar Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + + - name: Cache de Rust + uses: swatinem/rust-cache@v2 + with: + workspaces: src-tauri + + - name: Instalar dependencias + run: npm install + + # build.rs de Tauri valida que existan los iconos que declara tauri.conf.json. + - name: Generar iconos (desde app-icon.png) + run: npm run icons + + - name: cargo check + working-directory: src-tauri + run: cargo check --all-targets + + # Avisa de errores reales de Clippy sin tumbar la verificación por avisos de estilo. + - name: cargo clippy (informativo) + working-directory: src-tauri + continue-on-error: true + run: cargo clippy --all-targets diff --git a/dist/index.html b/dist/index.html index 9d57e7c..7346ae1 100644 --- a/dist/index.html +++ b/dist/index.html @@ -233,6 +233,31 @@ border-radius: 13px; } #version:hover { color: var(--accent); } + /* ── Botones de ventana ────────────────────────────────────────────────────────── + Solo en Windows: allí la ventana va SIN decoración, así que esta barra es la fila + del título (como Chrome) y el aspa del sistema no existe. Medidas y colores del + propio Windows 11: 46 px de ancho, alto completo de la barra, esquinas rectas + hasta el borde, y rojo #c42b1c en el aspa al pasar por encima. + Los glifos salen de la fuente de iconos del sistema (Fluent en Win 11, MDL2 en 10). */ + #wincontrols { display: none; } + body.win #wincontrols { + display: flex; + flex: 0 0 auto; + align-self: stretch; + margin-left: 6px; + } + /* Los botones tienen que morder el borde derecho: la barra cede su margen. */ + body.win #bar { padding-right: 0; } + #wincontrols button { + width: 46px; + border-radius: 0; + color: var(--fg); + font-family: "Segoe Fluent Icons", "Segoe MDL2 Assets", system-ui; + font-size: 10px; + line-height: 1; + } + #wincontrols button:hover { background: var(--btn-hover); } + #w-cerrar:hover { background: #c42b1c; color: #fff; } @@ -251,6 +276,12 @@ + +
+ + + +