Repository navigation
fix(window): stop disturbing exclusive fullscreen apps during mode switches - #245
Merged
Merged
Conversation
CI now runs clippy 1.99, which flags manual_is_multiple_of in timer_view.rs and chunks_exact_to_as_chunks in recorder.rs, failing the PR Check job on master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…itches DARK SOULS III minimized itself when switching to exclusive fullscreen while WinIsland ran, even with fullscreen auto-hide off. Every second the overlay re-asserted HWND_TOPMOST and reapplied skip-taskbar, and a display mode change moved the window immediately and again 750 ms later, plus snapped it back on every Moved event. Reordering or moving a topmost window during the switch made the game lose its display. Topmost enforcement now pauses while an app holds Direct3D exclusive fullscreen (SHQueryUserNotificationState) and for 2.5 s after the target display changes. The window moves once after the display settles and does not snap back during the transition. Skip-taskbar is only reapplied when it changes. Fullscreen detection compared the foreground monitor against the island's cached monitor rect, so it flipped between active and normal within the same second while the resolution changed. It now compares monitor identity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Pre-submission checklist
CONTRIBUTING.mdand completed the required checksChange type (select one)
featNew featurefixBug fixdocsDocumentation or templatesstyleFormatting with no behavior changerefactorCode change that neither fixes a bug nor adds a featureperfPerformance improvementtestTest-related changechoreBuild, CI, dependency, or tooling changerevertRevertsecuritySecurity fixScope (select all that apply)
Related issues
Description
Summary
Stops WinIsland from reordering or moving its topmost window while another app switches into exclusive fullscreen, and fixes the fullscreen detection flapping during resolution changes.
Motivation and context
User report (WinIsland 1.5.1, Windows 11 26200, RTX 5060 Laptop, 2560x1440): switching DARK SOULS III v1.12 from windowed to fullscreen made the desktop resolution flip 2560x1440 ↔ 1920x1080 several times, then the game window was minimized (process still running). It reproduced every time with WinIsland running, also with
fullscreen_auto_hide = false, and never after quitting WinIsland.During that switch WinIsland:
HWND_TOPMOSTand reapplied skip-taskbar every second (topmost_check), regardless of the auto-hide setting;monitor_check), and snapped it back on everyMovedevent.Reordering or moving a topmost window over a game that is acquiring exclusive fullscreen makes it lose the display; DS3 then minimizes itself as on Alt+Tab.
The user's log also showed
Fullscreen state: active→normalwithin the same second.foreground_fullscreenrequired the foreground monitor's rect to equal the island's cached monitor rect, which is stale while the resolution changes.Changes
DisplayProvider::exclusive_fullscreen_activereadsSHQueryUserNotificationState() == QUNS_RUNNING_D3D_FULL_SCREEN.update_display_transition(layout.rs) reports a transition while an app holds Direct3D exclusive fullscreen, or for 2.5 s after the target monitor's size or position changes. It is evaluated on the 1 s topmost tick and onMovedevents.Movedsnap-back is suppressed during a transition.apply_overlay_stylesonly callsset_skip_taskbarwhen the value changes.foreground_fullscreencompares monitor identity (MonitorFromRecton the target) instead of exact rect equality.Verified locally:
cargo fmt --check, MSVC clippy-D warnings(with #244), release build. Not verified: the DS3 repro itself (game not available here); a test build was handed to the reporter.UI changes
None.
🤖 Generated with Claude Code