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:
@@ -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
|
||||
|
||||
71
shell.qml
71
shell.qml
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user