mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
Connected frames & defaults
This commit is contained in:
@@ -14,7 +14,7 @@ import "settings/SettingsStore.js" as Store
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
readonly property int settingsConfigVersion: 9
|
readonly property int settingsConfigVersion: 10
|
||||||
|
|
||||||
readonly property bool isGreeterMode: Quickshell.env("DMS_RUN_GREETER") === "1" || Quickshell.env("DMS_RUN_GREETER") === "true"
|
readonly property bool isGreeterMode: Quickshell.env("DMS_RUN_GREETER") === "1" || Quickshell.env("DMS_RUN_GREETER") === "true"
|
||||||
|
|
||||||
@@ -201,9 +201,9 @@ Singleton {
|
|||||||
|
|
||||||
property bool frameEnabled: false
|
property bool frameEnabled: false
|
||||||
onFrameEnabledChanged: saveSettings()
|
onFrameEnabledChanged: saveSettings()
|
||||||
property real frameThickness: 15
|
property real frameThickness: 16
|
||||||
onFrameThicknessChanged: saveSettings()
|
onFrameThicknessChanged: saveSettings()
|
||||||
property real frameRounding: 24
|
property real frameRounding: 23
|
||||||
onFrameRoundingChanged: saveSettings()
|
onFrameRoundingChanged: saveSettings()
|
||||||
property string frameColor: ""
|
property string frameColor: ""
|
||||||
onFrameColorChanged: saveSettings()
|
onFrameColorChanged: saveSettings()
|
||||||
@@ -213,7 +213,7 @@ Singleton {
|
|||||||
onFrameSyncBarColorChanged: saveSettings()
|
onFrameSyncBarColorChanged: saveSettings()
|
||||||
property var frameScreenPreferences: ["all"]
|
property var frameScreenPreferences: ["all"]
|
||||||
onFrameScreenPreferencesChanged: saveSettings()
|
onFrameScreenPreferencesChanged: saveSettings()
|
||||||
property real frameBarThickness: 48
|
property real frameBarThickness: 42
|
||||||
onFrameBarThicknessChanged: saveSettings()
|
onFrameBarThicknessChanged: saveSettings()
|
||||||
property bool frameShowOnOverview: false
|
property bool frameShowOnOverview: false
|
||||||
onFrameShowOnOverviewChanged: saveSettings()
|
onFrameShowOnOverviewChanged: saveSettings()
|
||||||
@@ -1974,6 +1974,14 @@ 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++) {
|
||||||
|
|||||||
@@ -550,8 +550,8 @@ var SPEC = {
|
|||||||
launcherPluginOrder: { def: [] },
|
launcherPluginOrder: { def: [] },
|
||||||
|
|
||||||
frameEnabled: { def: false },
|
frameEnabled: { def: false },
|
||||||
frameThickness: { def: 15 },
|
frameThickness: { def: 16 },
|
||||||
frameRounding: { def: 24 },
|
frameRounding: { def: 23 },
|
||||||
frameColor: { def: "" },
|
frameColor: { def: "" },
|
||||||
frameOpacity: { def: 1.0 },
|
frameOpacity: { def: 1.0 },
|
||||||
frameSyncBarColor: { def: true },
|
frameSyncBarColor: { def: true },
|
||||||
|
|||||||
@@ -252,8 +252,8 @@ function migrateToVersion(obj, targetVersion) {
|
|||||||
console.info("Migrating settings from version", currentVersion, "to version 7");
|
console.info("Migrating settings from version", currentVersion, "to version 7");
|
||||||
|
|
||||||
if (settings.frameEnabled === undefined) settings.frameEnabled = false;
|
if (settings.frameEnabled === undefined) settings.frameEnabled = false;
|
||||||
if (settings.frameThickness === undefined) settings.frameThickness = 15;
|
if (settings.frameThickness === undefined) settings.frameThickness = 16;
|
||||||
if (settings.frameRounding === undefined) settings.frameRounding = 24;
|
if (settings.frameRounding === undefined) settings.frameRounding = 23;
|
||||||
if (settings.frameColor === undefined) settings.frameColor = "#2a2a2a";
|
if (settings.frameColor === undefined) settings.frameColor = "#2a2a2a";
|
||||||
if (settings.frameOpacity === undefined) settings.frameOpacity = 1.0;
|
if (settings.frameOpacity === undefined) settings.frameOpacity = 1.0;
|
||||||
if (settings.frameSyncBarColor === undefined) settings.frameSyncBarColor = true;
|
if (settings.frameSyncBarColor === undefined) settings.frameSyncBarColor = true;
|
||||||
@@ -265,7 +265,7 @@ function migrateToVersion(obj, targetVersion) {
|
|||||||
if (currentVersion < 8) {
|
if (currentVersion < 8) {
|
||||||
console.info("Migrating settings from version", currentVersion, "to version 8");
|
console.info("Migrating settings from version", currentVersion, "to version 8");
|
||||||
|
|
||||||
if (settings.frameBarThickness === undefined) settings.frameBarThickness = 48;
|
if (settings.frameBarThickness === undefined) settings.frameBarThickness = 42;
|
||||||
|
|
||||||
settings.configVersion = 8;
|
settings.configVersion = 8;
|
||||||
}
|
}
|
||||||
@@ -278,6 +278,11 @@ function migrateToVersion(obj, targetVersion) {
|
|||||||
settings.configVersion = 9;
|
settings.configVersion = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// v10 migration — Session 5
|
||||||
|
if (currentVersion < 10) {
|
||||||
|
settings.configVersion = 10;
|
||||||
|
}
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ Item {
|
|||||||
required property var axis
|
required property var axis
|
||||||
required property var barConfig
|
required property var barConfig
|
||||||
|
|
||||||
|
visible: !SettingsData.frameEnabled
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
@@ -38,7 +40,7 @@ Item {
|
|||||||
|
|
||||||
property real rt: {
|
property real rt: {
|
||||||
if (SettingsData.frameEnabled)
|
if (SettingsData.frameEnabled)
|
||||||
return 0;
|
return SettingsData.frameRounding;
|
||||||
if (barConfig?.squareCorners ?? false)
|
if (barConfig?.squareCorners ?? false)
|
||||||
return 0;
|
return 0;
|
||||||
if (barWindow.hasMaximizedToplevel)
|
if (barWindow.hasMaximizedToplevel)
|
||||||
|
|||||||
@@ -23,6 +23,31 @@ Item {
|
|||||||
readonly property real innerPadding: barConfig?.innerPadding ?? 4
|
readonly property real innerPadding: barConfig?.innerPadding ?? 4
|
||||||
readonly property real outlineThickness: (barConfig?.widgetOutlineEnabled ?? false) ? (barConfig?.widgetOutlineThickness ?? 1) : 0
|
readonly property real outlineThickness: (barConfig?.widgetOutlineEnabled ?? false) ? (barConfig?.widgetOutlineThickness ?? 1) : 0
|
||||||
|
|
||||||
|
readonly property real _frameLeftInset: {
|
||||||
|
if (!SettingsData.frameEnabled || barWindow.isVertical) return 0
|
||||||
|
return barWindow.hasAdjacentLeftBar
|
||||||
|
? SettingsData.frameBarThickness
|
||||||
|
: 0
|
||||||
|
}
|
||||||
|
readonly property real _frameRightInset: {
|
||||||
|
if (!SettingsData.frameEnabled || barWindow.isVertical) return 0
|
||||||
|
return barWindow.hasAdjacentRightBar
|
||||||
|
? SettingsData.frameBarThickness
|
||||||
|
: 0
|
||||||
|
}
|
||||||
|
readonly property real _frameTopInset: {
|
||||||
|
if (!SettingsData.frameEnabled || !barWindow.isVertical) return 0
|
||||||
|
return barWindow.hasAdjacentTopBar
|
||||||
|
? SettingsData.frameThickness
|
||||||
|
: 0
|
||||||
|
}
|
||||||
|
readonly property real _frameBottomInset: {
|
||||||
|
if (!SettingsData.frameEnabled || !barWindow.isVertical) return 0
|
||||||
|
return barWindow.hasAdjacentBottomBar
|
||||||
|
? SettingsData.frameThickness
|
||||||
|
: 0
|
||||||
|
}
|
||||||
|
|
||||||
property alias hLeftSection: hLeftSection
|
property alias hLeftSection: hLeftSection
|
||||||
property alias hCenterSection: hCenterSection
|
property alias hCenterSection: hCenterSection
|
||||||
property alias hRightSection: hRightSection
|
property alias hRightSection: hRightSection
|
||||||
@@ -31,10 +56,14 @@ Item {
|
|||||||
property alias vRightSection: vRightSection
|
property alias vRightSection: vRightSection
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.leftMargin: Math.max(Theme.spacingXS, innerPadding * 0.8)
|
anchors.leftMargin: Math.max(Theme.spacingXS, innerPadding * 0.8) + _frameLeftInset
|
||||||
anchors.rightMargin: Math.max(Theme.spacingXS, innerPadding * 0.8)
|
anchors.rightMargin: Math.max(Theme.spacingXS, innerPadding * 0.8) + _frameRightInset
|
||||||
anchors.topMargin: barWindow.isVertical ? (barWindow.hasAdjacentTopBar ? outlineThickness : Theme.spacingXS) : 0
|
anchors.topMargin: (barWindow.isVertical
|
||||||
anchors.bottomMargin: barWindow.isVertical ? (barWindow.hasAdjacentBottomBar ? outlineThickness : Theme.spacingXS) : 0
|
? (barWindow.hasAdjacentTopBar ? outlineThickness : Theme.spacingXS)
|
||||||
|
: 0) + _frameTopInset
|
||||||
|
anchors.bottomMargin: (barWindow.isVertical
|
||||||
|
? (barWindow.hasAdjacentBottomBar ? outlineThickness : Theme.spacingXS)
|
||||||
|
: 0) + _frameBottomInset
|
||||||
clip: false
|
clip: false
|
||||||
|
|
||||||
property int componentMapRevision: 0
|
property int componentMapRevision: 0
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import qs.Common
|
|||||||
Variants {
|
Variants {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
model: SettingsData.frameEnabled ? SettingsData.getFrameFilteredScreens() : []
|
model: SettingsData.getFrameScreensAlways()
|
||||||
|
|
||||||
FrameInstance {
|
FrameInstance {
|
||||||
required property ShellScreen modelData
|
required property ShellScreen modelData
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import qs.Common
|
|||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property var barEdges // array of "top" | "bottom" | "left" | "right"
|
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
required property var barEdges
|
||||||
|
|
||||||
readonly property real _thickness: SettingsData.frameThickness
|
readonly property real _thickness: SettingsData.frameThickness
|
||||||
readonly property real _barThickness: SettingsData.frameBarThickness
|
readonly property real _barThickness: SettingsData.frameBarThickness
|
||||||
readonly property real _rounding: SettingsData.frameRounding
|
readonly property real _rounding: SettingsData.frameRounding
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Scope {
|
|||||||
// Skips any edge where a bar already provides its own exclusiveZone.
|
// Skips any edge where a bar already provides its own exclusiveZone.
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: !root.barEdges.includes("top")
|
active: SettingsData.frameEnabled && !root.barEdges.includes("top")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
screen: root.screen
|
||||||
anchorTop: true
|
anchorTop: true
|
||||||
@@ -29,7 +29,7 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: !root.barEdges.includes("bottom")
|
active: SettingsData.frameEnabled && !root.barEdges.includes("bottom")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
screen: root.screen
|
||||||
anchorBottom: true
|
anchorBottom: true
|
||||||
@@ -39,7 +39,7 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: !root.barEdges.includes("left")
|
active: SettingsData.frameEnabled && !root.barEdges.includes("left")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
screen: root.screen
|
||||||
anchorLeft: true
|
anchorLeft: true
|
||||||
@@ -49,7 +49,7 @@ Scope {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
active: !root.barEdges.includes("right")
|
active: SettingsData.frameEnabled && !root.barEdges.includes("right")
|
||||||
sourceComponent: EdgeExclusion {
|
sourceComponent: EdgeExclusion {
|
||||||
screen: root.screen
|
screen: root.screen
|
||||||
anchorRight: true
|
anchorRight: true
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ PanelWindow {
|
|||||||
|
|
||||||
FrameBorder {
|
FrameBorder {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
barEdges: {
|
visible: SettingsData.frameEnabled
|
||||||
SettingsData.barConfigs; // force re-eval when bar configs change
|
barEdges: { SettingsData.barConfigs; return SettingsData.getActiveBarEdgesForScreen(win.screen); }
|
||||||
return SettingsData.getActiveBarEdgesForScreen(win.screen);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1036,6 +1036,8 @@ Item {
|
|||||||
|
|
||||||
SettingsSliderRow {
|
SettingsSliderRow {
|
||||||
id: barTransparencySlider
|
id: barTransparencySlider
|
||||||
|
enabled: !SettingsData.frameEnabled
|
||||||
|
opacity: SettingsData.frameEnabled ? 0.5 : 1.0
|
||||||
text: I18n.tr("Bar Transparency")
|
text: I18n.tr("Bar Transparency")
|
||||||
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
value: (selectedBarConfig?.transparency ?? 1.0) * 100
|
||||||
minimum: 0
|
minimum: 0
|
||||||
@@ -1077,6 +1079,35 @@ Item {
|
|||||||
restoreMode: Binding.RestoreBinding
|
restoreMode: Binding.RestoreBinding
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
visible: SettingsData.frameEnabled
|
||||||
|
width: parent.width
|
||||||
|
implicitHeight: transparencyFrameNote.implicitHeight + Theme.spacingS * 2
|
||||||
|
|
||||||
|
Row {
|
||||||
|
id: transparencyFrameNote
|
||||||
|
x: Theme.spacingM
|
||||||
|
width: parent.width - Theme.spacingM * 2
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
spacing: Theme.spacingS
|
||||||
|
|
||||||
|
DankIcon {
|
||||||
|
name: "frame_source"
|
||||||
|
size: Theme.fontSizeMedium
|
||||||
|
color: Theme.primary
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
StyledText {
|
||||||
|
text: I18n.tr("Opacity is controlled by Frame Border Opacity in Frame settings")
|
||||||
|
font.pixelSize: Theme.fontSizeSmall
|
||||||
|
color: Theme.surfaceVariantText
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: parent.width - Theme.fontSizeMedium - Theme.spacingS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsCard {
|
SettingsCard {
|
||||||
@@ -1330,8 +1361,6 @@ Item {
|
|||||||
|
|
||||||
SettingsToggleRow {
|
SettingsToggleRow {
|
||||||
text: I18n.tr("No Background")
|
text: I18n.tr("No Background")
|
||||||
enabled: !SettingsData.frameEnabled
|
|
||||||
opacity: SettingsData.frameEnabled ? 0.5 : 1.0
|
|
||||||
checked: selectedBarConfig?.noBackground ?? false
|
checked: selectedBarConfig?.noBackground ?? false
|
||||||
onToggled: checked => SettingsData.updateBarConfig(selectedBarId, {
|
onToggled: checked => SettingsData.updateBarConfig(selectedBarId, {
|
||||||
noBackground: checked
|
noBackground: checked
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ Item {
|
|||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 100
|
maximum: 100
|
||||||
step: 1
|
step: 1
|
||||||
defaultValue: 24
|
defaultValue: 23
|
||||||
value: SettingsData.frameRounding
|
value: SettingsData.frameRounding
|
||||||
onSliderDragFinished: v => SettingsData.set("frameRounding", v)
|
onSliderDragFinished: v => SettingsData.set("frameRounding", v)
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ Item {
|
|||||||
minimum: 2
|
minimum: 2
|
||||||
maximum: 100
|
maximum: 100
|
||||||
step: 1
|
step: 1
|
||||||
defaultValue: 15
|
defaultValue: 16
|
||||||
value: SettingsData.frameThickness
|
value: SettingsData.frameThickness
|
||||||
onSliderDragFinished: v => SettingsData.set("frameThickness", v)
|
onSliderDragFinished: v => SettingsData.set("frameThickness", v)
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ Item {
|
|||||||
minimum: 24
|
minimum: 24
|
||||||
maximum: 100
|
maximum: 100
|
||||||
step: 1
|
step: 1
|
||||||
defaultValue: 48
|
defaultValue: 42
|
||||||
value: SettingsData.frameBarThickness
|
value: SettingsData.frameBarThickness
|
||||||
onSliderDragFinished: v => SettingsData.set("frameBarThickness", v)
|
onSliderDragFinished: v => SettingsData.set("frameBarThickness", v)
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ Item {
|
|||||||
id: opacitySlider
|
id: opacitySlider
|
||||||
settingKey: "frameOpacity"
|
settingKey: "frameOpacity"
|
||||||
tags: ["frame", "border", "opacity", "transparency"]
|
tags: ["frame", "border", "opacity", "transparency"]
|
||||||
text: I18n.tr("Border opacity")
|
text: I18n.tr("Frame Opacity")
|
||||||
unit: "%"
|
unit: "%"
|
||||||
minimum: 0
|
minimum: 0
|
||||||
maximum: 100
|
maximum: 100
|
||||||
|
|||||||
Reference in New Issue
Block a user