1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-06 05:25:41 -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
for (var i = 0; i < notepadVariants.instances.length; i++) {
var instance = notepadVariants.instances[i]
if (instance.modelData && instance.modelData.name === root.screen?.name) {
return instance
var loader = notepadVariants.instances[i]
if (loader.modelData && loader.modelData.name === root.screen?.name) {
return loader.ensureLoaded()
}
}
return null

View File

@@ -270,9 +270,30 @@ ShellRoot {
id: notepadSlideoutVariants
model: SettingsData.getFilteredScreens("notepad")
delegate: NotepadSlideout {
id: notepadSlideout
modelData: item
delegate: Loader {
id: notepadLoader
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 {
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() {
if (notepadSlideoutVariants.instances.length === 0) {
return null
}
if (notepadSlideoutVariants.instances.length === 1) {
return notepadSlideoutVariants.instances[0]
return notepadSlideoutVariants.instances[0].ensureLoaded()
}
for (var i = 0; i < notepadSlideoutVariants.instances.length; i++) {
var instance = notepadSlideoutVariants.instances[i]
if (instance.notepadVisible) {
return instance
var focusedScreen = getFocusedScreenName()
if (focusedScreen) {
var focusedInstance = getNotepadInstanceForScreen(focusedScreen)
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 {