fix(projection): Linux — projeção abre no segundo monitor - #141
Merged
Conversation
No Linux, setFullScreen(true) é EWMH: o window manager decide o monitor e vários WMs (Cinnamon/GNOME/XFCE) jogam o fullscreen no primário, ignorando o monitor alvo passado via window.open (monitor=<id>). Usuário relatou que a projeção nunca abria no monitor 2 em nenhuma versão Linux (1.8.9, 1.22.1, 1.28) — só arrastando a janela. - Linux agora usa a estratégia do win32: borderless + setBounds(bounds do monitor alvo) + alwaysOnTop (fullscreen fake, imune ao WM) - Modo janela com monitor explícito passa a posicionar 800x600 centrado no workArea do monitor alvo (antes ignorava o monitor completamente) - Lógica de display extraída p/ electron/projection-display.mjs (pura, testável): resolveProjectionDisplay + buildProjectionWindowBounds - 8 testes novos (43/43 verdes); npm run build ok
pianolouvorja
approved these changes
Sep 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema relatado pelo usuário
No Linux, a projeção nunca abre no segundo monitor, não importa a configuração. Só aparece no monitor 2 arrastando a janela de projeção (ou a principal) para lá. Presente em 1.8.9, 1.22.1 e 1.28 — ou seja, desde sempre, não é regressão. Windows não é afetado.
Causa raiz
applyProjectionDisplayMode(electron/main.mjs) usava caminhos diferentes por plataforma:setFullScreen(false)+setBounds(display.bounds)+ alwaysOnTop → funcionasetFullScreen(true)A janela era criada nos bounds do monitor alvo (o renderer manda
monitor=<id>corretamente), mas no Linux o fullscreen é EWMH (_NET_WM_STATE_FULLSCREEN): o window manager decide o monitor, e vários WMs (Cinnamon/GNOME/XFCE) ignoram o posicionamento pré-show e jogam no primário. Arrastar a janela funciona porque o WM faz fullscreen onde ela está — exatamente o workaround que o usuário descreveu.Bug secundário: modo janela (fullscreen=false) nunca posicionava no monitor escolhido —
buildPopupWindowOptionsretornava 800x600 sem x/y.Correção
setBounds(bounds do monitor alvo)+ alwaysOnTop (fullscreen fake, imune ao comportamento do WM)workAreado monitor alvoelectron/projection-display.mjs(funções puras, testáveis):resolveProjectionDisplay+buildProjectionWindowBoundsEvidência
electron/__tests__/projection-display.test.mjs(fallback monitor desconectado, bounds fullscreen/janela, etc.)npm run buildokNotas
setFullScreennativo (não há relatos do bug lá;setSimpleFullScreenrespeita o monitor da janela)