Skip to content

feat: Issue #11 — black placeholder window fills P4 quadrant in 3-player layout#5

Merged
aradanmn merged 4 commits intomainfrom
claude/add-black-box-quadrant-OuXKe
Apr 17, 2026
Merged

feat: Issue #11 — black placeholder window fills P4 quadrant in 3-player layout#5
aradanmn merged 4 commits intomainfrom
claude/add-black-box-quadrant-OuXKe

Conversation

@aradanmn
Copy link
Copy Markdown
Owner

When exactly 3 players are active the 2x2 grid has an empty bottom-right
quadrant. A borderless black python3/tkinter window now fills that gap
automatically:

  • showPlaceholderWindow() creates the window at the P4 coordinates
  • hidePlaceholderWindow() kills it cleanly
  • updatePlaceholderWindow() calls show or hide based on countActiveInstances()
  • Called after every layout change in handleControllerChange and
    checkForExitedInstances, and in perform_cleanup for safe teardown
  • Skipped entirely in gamescope (Steam Deck Game Mode) where external
    windows cannot be created

Bumps launcher_script_generator.sh to v3.2.7.

https://claude.ai/code/session_0156HqbWenksACpkAbh83nix

claude added 4 commits April 17, 2026 23:18
…yer layout

When exactly 3 players are active the 2x2 grid has an empty bottom-right
quadrant. A borderless black python3/tkinter window now fills that gap
automatically:
- showPlaceholderWindow() creates the window at the P4 coordinates
- hidePlaceholderWindow() kills it cleanly
- updatePlaceholderWindow() calls show or hide based on countActiveInstances()
- Called after every layout change in handleControllerChange and
  checkForExitedInstances, and in perform_cleanup for safe teardown
- Skipped entirely in gamescope (Steam Deck Game Mode) where external
  windows cannot be created

Bumps launcher_script_generator.sh to v3.2.7.

https://claude.ai/code/session_0156HqbWenksACpkAbh83nix
Removed the isSteamDeckGameMode guard from showPlaceholderWindow().
Gamescope hosts a nested X11 display — the same one Minecraft instances
use — so python3/tkinter can create the black P4 window there just as
it does in desktop mode. The DISPLAY/WAYLAND_DISPLAY empty-check is
sufficient as a fallback for headless environments.

https://claude.ai/code/session_0156HqbWenksACpkAbh83nix
- Use calculateWindowPosition(4,4) for P4 coords instead of manual
  screen_width/2 arithmetic — stays in sync if layout logic changes
- Add tkinter pre-check before backgrounding python3; without this,
  a missing python3-tk causes a silent dead PLACEHOLDER_PID
- Idempotency guard in updatePlaceholderWindow: skip re-spawn when
  the window is already live, avoiding flicker on rapid join/leave
- Remove dead Python: root.attributes('-topmost', False) (default),
  root.lift() (no-op without topmost), unused 'as e' binding
- Remove 'no title bar' what-comment on overrideredirect
- Drop redundant 2>/dev/null || true wrapper on hidePlaceholderWindow
  in perform_cleanup — the function already suppresses errors

https://claude.ai/code/session_0156HqbWenksACpkAbh83nix
Critical fixes:
- install-minecraft-splitscreen.sh:251 — $REPO_BASE_URL was undefined;
  replaced with $BOOTSTRAP_REPO_MODULES_URL
- mod_management.sh:1118 — CurseForge passphrase casing typo
  ('Steamdeck' vs 'SteamDeck') caused silent token decryption failure
- instance_creation.sh:895 — switched sed s/// delimiter from / to |
  so MC_VERSION values like '1.21/patch' can't break the command
- desktop_launcher.sh:183-184 — quoted Exec= and Icon= in .desktop
  heredoc so paths with spaces parse correctly

Security:
- mod_management.sh — extracted _get_curseforge_token() helper,
  replacing 5 copy-pasted download/decrypt blocks; passphrase now
  lives in exactly one place
- mod_management.sh:780 — rewrote double-quoted jq filter to use
  --arg flags, eliminating shell variable injection into jq programs

Quality:
- version_management.sh:347 — readarray now uses process substitution
  < <(...) instead of <<< "$(...)" to avoid unnecessary subshell
- add-to-steam.py:173 — exit(1) → sys.exit(1) for consistency
- cleanup-minecraft-splitscreen.sh — removed repeated 'local size'
  declarations in show_detected_components(); declare once at top
- instance_creation.sh:96 — array dedup via readarray to avoid
  word-splitting on element values

Dead code:
- mod_management.sh — removed resolve_mod_dependencies() which was
  defined but never called anywhere in the codebase

https://claude.ai/code/session_0156HqbWenksACpkAbh83nix
@aradanmn aradanmn merged commit d2ba5cc into main Apr 17, 2026
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