workspace: add position-based monitor selection #12452
Open
+158
−1
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.
Description:
Describe your PR, what does it fix/add?
This PR adds support for position-based monitor selection in workspace rules using the
monitor:position:XxYsyntax.Relates to #12305
Monitor IDs are assigned based on connection order, making them unreliable for multi-monitor
setups. Position-based selection enables deterministic workspace assignment regardless of hotplug
order.
Example usage for a triple-monitor setup:
workspace = 1, monitor:position:0x0, persistent:true
workspace = 2, monitor:position:1920x0, persistent:true
workspace = 3, monitor:position:3840x0, persistent:true
This is more reliable than using monitor IDs because:
monitor=eDP-1,preferred,0x0,1 # left monitor
monitor=HDMI-A-1,preferred,1920x0,1 # middle monitor
monitor=DP-1,preferred,auto-right,1 # right monitor
Implementation:
CMonitor::matchesStaticSelector()CCompositor::getMonitorFromPosition()helper functionCConfigManager::getBoundMonitorForWS()to handle position-based selectionIs there anything you want to mention? (unchecked code, possible bugs, found problems,
breaking compatibility, etc.)
monitor:desc:andmonitor:namesyntax unchangedhyprtester/src/tests/main/persistent.cppIs it ready for merging, or does it need work?
Ready for merging. I tested this behavior on my Fedora 43 build manually and works as I expected