Fix internal display toggle not re-applied after resume#5736
Open
mat-ran wants to merge 3 commits into
Open
Conversation
Contributor
There was a problem hiding this comment.
Copilot wasn't able to review any files in this pull request.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
d8b7135 to
c5e60de
Compare
Member
|
I tried a few different ways with this and was able to end up with the internal display turned off when I unplugged the external. I think we need some more testing to make sure this is fully solid. |
Author
|
I'll check it out. In what situations has the built-in monitor failed to turn on? |
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.
Problem
When you disable the internal laptop display while an external monitor is connected, then trigger display sleep (screen off) and wake the laptop, the internal display incorrectly turns back on - even though nothing changed with the external monitor connection.
The expected behavior: the internal display should stay disabled after wake, as long as the external monitor remains connected. This works correctly with
systemctl suspend, but fails with display sleep.Root Cause
When the screen turns off (display sleep), the external monitor loses signal due to no input and Hyprland sends a
monitorremovedevent. Shortly after, when the laptop wakes, the external monitor takes a moment to be detected again. The monitor watcher would immediately try to "recover" the internal display without waiting for the external monitor to reappear on wake, causing a race condition where the internal display gets turned back on before the external monitor is detected.Solution
recover()now waits up to 3 seconds - before re-enabling the internal display, it polls for external monitors to give the system time to detect them on wakereapply()function - to properly refresh the toggle state when monitors are reconnectedmonitoraddedevent handling - ensures toggle state is maintained when monitors are addedProbably fixes #5481