1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 00:12:50 -05:00

feat: Enable multi-monitor notepad support

- Notepad will now open on the currently focused monitor/workspace display by default
This commit is contained in:
purian23
2025-09-04 20:57:02 -04:00
parent 4742636eb3
commit af5094b479
2 changed files with 65 additions and 12 deletions

View File

@@ -26,9 +26,9 @@ PanelWindow {
if (!notepadVariants || !notepadVariants.instances) return null if (!notepadVariants || !notepadVariants.instances) return null
for (var i = 0; i < notepadVariants.instances.length; i++) { for (var i = 0; i < notepadVariants.instances.length; i++) {
var instance = notepadVariants.instances[i] var loader = notepadVariants.instances[i]
if (instance.modelData && instance.modelData.name === root.screen?.name) { if (loader.modelData && loader.modelData.name === root.screen?.name) {
return instance return loader.ensureLoaded()
} }
} }
return null return null

View File

@@ -270,9 +270,30 @@ ShellRoot {
id: notepadSlideoutVariants id: notepadSlideoutVariants
model: SettingsData.getFilteredScreens("notepad") model: SettingsData.getFilteredScreens("notepad")
delegate: NotepadSlideout { delegate: Loader {
id: notepadSlideout id: notepadLoader
modelData: item property var modelData: item
active: false
sourceComponent: Component {
NotepadSlideout {
id: notepadSlideout
modelData: notepadLoader.modelData
Component.onCompleted: {
notepadLoader.loaded = true
}
}
}
property bool loaded: false
function ensureLoaded() {
if (!active) {
active = true
}
return item
}
} }
} }
@@ -364,23 +385,55 @@ ShellRoot {
} }
IpcHandler { IpcHandler {
function getFocusedScreenName() {
if (CompositorService.isHyprland && Hyprland.focusedWorkspace && Hyprland.focusedWorkspace.monitor) {
return Hyprland.focusedWorkspace.monitor.name
}
if (CompositorService.isNiri && NiriService.currentOutput) {
return NiriService.currentOutput
}
return ""
}
function getNotepadInstanceForScreen(screenName) {
if (!screenName || notepadSlideoutVariants.instances.length === 0) {
return null
}
for (var i = 0; i < notepadSlideoutVariants.instances.length; i++) {
var loader = notepadSlideoutVariants.instances[i]
if (loader.modelData && loader.modelData.name === screenName) {
return loader.ensureLoaded()
}
}
return null
}
function getActiveNotepadInstance() { function getActiveNotepadInstance() {
if (notepadSlideoutVariants.instances.length === 0) { if (notepadSlideoutVariants.instances.length === 0) {
return null return null
} }
if (notepadSlideoutVariants.instances.length === 1) { if (notepadSlideoutVariants.instances.length === 1) {
return notepadSlideoutVariants.instances[0] return notepadSlideoutVariants.instances[0].ensureLoaded()
} }
for (var i = 0; i < notepadSlideoutVariants.instances.length; i++) { var focusedScreen = getFocusedScreenName()
var instance = notepadSlideoutVariants.instances[i] if (focusedScreen) {
if (instance.notepadVisible) { var focusedInstance = getNotepadInstanceForScreen(focusedScreen)
return instance if (focusedInstance) {
return focusedInstance
} }
} }
return notepadSlideoutVariants.instances[0] for (var i = 0; i < notepadSlideoutVariants.instances.length; i++) {
var loader = notepadSlideoutVariants.instances[i]
if (loader.active && loader.item && loader.item.notepadVisible) {
return loader.item
}
}
return notepadSlideoutVariants.instances[0].ensureLoaded()
} }
function open(): string { function open(): string {