mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
(frame): Multi-monitor support
This commit is contained in:
@@ -1974,14 +1974,6 @@ Singleton {
|
|||||||
return Quickshell.screens.filter(screen => isScreenInPreferences(screen, prefs));
|
return Quickshell.screens.filter(screen => isScreenInPreferences(screen, prefs));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFrameScreensAlways() {
|
|
||||||
const prefs = frameScreenPreferences;
|
|
||||||
if (!prefs || prefs.length === 0 || prefs.includes("all")) {
|
|
||||||
return Quickshell.screens;
|
|
||||||
}
|
|
||||||
return Quickshell.screens.filter(s => prefs.includes(s.name));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getActiveBarEdgeForScreen(screen) {
|
function getActiveBarEdgeForScreen(screen) {
|
||||||
if (!screen) return "";
|
if (!screen) return "";
|
||||||
for (var i = 0; i < barConfigs.length; i++) {
|
for (var i = 0; i < barConfigs.length; i++) {
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import qs.Common
|
|||||||
Variants {
|
Variants {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
model: SettingsData.getFrameScreensAlways()
|
model: Quickshell.screens
|
||||||
|
|
||||||
FrameInstance {
|
FrameInstance {
|
||||||
required property ShellScreen modelData
|
required property var modelData
|
||||||
|
|
||||||
screen: modelData
|
screen: modelData
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import qs.Common
|
|||||||
Scope {
|
Scope {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property ShellScreen screen
|
required property var screen
|
||||||
|
|
||||||
readonly property var barEdges: {
|
readonly property var barEdges: {
|
||||||
SettingsData.barConfigs; // force re-eval when bar configs change
|
SettingsData.barConfigs; // force re-eval when bar configs change
|
||||||
@@ -18,10 +18,12 @@ Scope {
|
|||||||
// One thin invisible PanelWindow per edge.
|
// One thin invisible PanelWindow per edge.
|
||||||
// Skips any edge where a bar already provides its own exclusiveZone.
|
// Skips any edge where a bar already provides its own exclusiveZone.
|
||||||
|
|
||||||
|
readonly property bool screenEnabled: SettingsData.frameEnabled && SettingsData.isScreenInPreferences(root.screen, SettingsData.frameScreenPreferences)
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: SettingsData.frameEnabled && !root.barEdges.includes("top")
|
active: root.screenEnabled && !root.barEdges.includes("top")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
targetScreen: root.screen
|
||||||
anchorTop: true
|
anchorTop: true
|
||||||
anchorLeft: true
|
anchorLeft: true
|
||||||
anchorRight: true
|
anchorRight: true
|
||||||
@@ -29,9 +31,9 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: SettingsData.frameEnabled && !root.barEdges.includes("bottom")
|
active: root.screenEnabled && !root.barEdges.includes("bottom")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
targetScreen: root.screen
|
||||||
anchorBottom: true
|
anchorBottom: true
|
||||||
anchorLeft: true
|
anchorLeft: true
|
||||||
anchorRight: true
|
anchorRight: true
|
||||||
@@ -39,9 +41,9 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: SettingsData.frameEnabled && !root.barEdges.includes("left")
|
active: root.screenEnabled && !root.barEdges.includes("left")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
targetScreen: root.screen
|
||||||
anchorLeft: true
|
anchorLeft: true
|
||||||
anchorTop: true
|
anchorTop: true
|
||||||
anchorBottom: true
|
anchorBottom: true
|
||||||
@@ -49,9 +51,9 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: SettingsData.frameEnabled && !root.barEdges.includes("right")
|
active: root.screenEnabled && !root.barEdges.includes("right")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
targetScreen: root.screen
|
||||||
anchorRight: true
|
anchorRight: true
|
||||||
anchorTop: true
|
anchorTop: true
|
||||||
anchorBottom: true
|
anchorBottom: true
|
||||||
@@ -59,7 +61,9 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
component EdgeExclusion: PanelWindow {
|
component EdgeExclusion: PanelWindow {
|
||||||
required property ShellScreen screen
|
required property var targetScreen
|
||||||
|
|
||||||
|
screen: targetScreen
|
||||||
property bool anchorTop: false
|
property bool anchorTop: false
|
||||||
property bool anchorBottom: false
|
property bool anchorBottom: false
|
||||||
property bool anchorLeft: false
|
property bool anchorLeft: false
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import Quickshell
|
|||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property ShellScreen screen
|
required property var screen
|
||||||
|
|
||||||
FrameWindow {
|
FrameWindow {
|
||||||
screen: root.screen
|
targetScreen: root.screen
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameExclusions {
|
FrameExclusions {
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import qs.Common
|
|||||||
PanelWindow {
|
PanelWindow {
|
||||||
id: win
|
id: win
|
||||||
|
|
||||||
required property ShellScreen screen
|
required property var targetScreen
|
||||||
|
|
||||||
|
screen: targetScreen
|
||||||
|
visible: true
|
||||||
|
|
||||||
WlrLayershell.namespace: "dms:frame"
|
WlrLayershell.namespace: "dms:frame"
|
||||||
WlrLayershell.layer: WlrLayer.Top
|
WlrLayershell.layer: WlrLayer.Top
|
||||||
@@ -28,7 +31,7 @@ PanelWindow {
|
|||||||
|
|
||||||
FrameBorder {
|
FrameBorder {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
visible: SettingsData.frameEnabled
|
visible: SettingsData.frameEnabled && SettingsData.isScreenInPreferences(win.screen, SettingsData.frameScreenPreferences)
|
||||||
barEdges: { SettingsData.barConfigs; return SettingsData.getActiveBarEdgesForScreen(win.screen); }
|
barEdges: { SettingsData.barConfigs; return SettingsData.getActiveBarEdgesForScreen(win.screen); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ Item {
|
|||||||
description: modelData.width + "×" + modelData.height
|
description: modelData.width + "×" + modelData.height
|
||||||
checked: localChecked
|
checked: localChecked
|
||||||
onToggled: isChecked => {
|
onToggled: isChecked => {
|
||||||
localChecked = isChecked;
|
|
||||||
var prefs = JSON.parse(JSON.stringify(root.displayPreferences));
|
var prefs = JSON.parse(JSON.stringify(root.displayPreferences));
|
||||||
if (!Array.isArray(prefs) || prefs.includes("all"))
|
if (!Array.isArray(prefs) || prefs.includes("all"))
|
||||||
prefs = [];
|
prefs = [];
|
||||||
@@ -94,6 +93,11 @@ Item {
|
|||||||
model: modelData.model || ""
|
model: modelData.model || ""
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (prefs.length === 0) {
|
||||||
|
localChecked = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
localChecked = isChecked;
|
||||||
root.preferencesChanged(prefs);
|
root.preferencesChanged(prefs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user