mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-20 10:14:01 -04:00
grids: hand committed layouts and display picks to callbacks, not var signals
fixes #3746
This commit is contained in:
@@ -46,7 +46,7 @@ DEditableGrid {
|
||||
packer: items => GridUtils.packCells(clamped(items), placementOrder, columns, null, CcMetrics.gridStep, true).cells
|
||||
placeholderRadius: draggingSlot?.small ? Theme.fullRadius(draggingSlot.width, draggingSlot.height) : (draggingSlot?.tileItem?.bodyRadius ?? Theme.fullRadius(width, CcMetrics.tileHeight))
|
||||
|
||||
onLayoutCommitted: items => model.setLayout(withHidden(items))
|
||||
commitHandler: items => model.setLayout(withHidden(items))
|
||||
|
||||
function clamped(items) {
|
||||
return items.map(widget => Object.assign({}, widget, WidgetUtils.clampSize(widget, columns, maximumRows)));
|
||||
|
||||
@@ -130,7 +130,7 @@ Item {
|
||||
editMode: root.editMode
|
||||
sourceItems: root.widgets
|
||||
slotLayout: GridUtils.packCards(layoutItems, placementOrder, root.columns, width, DashMetrics.gridGap, DashMetrics.gridRowUnit, I18n.isRtl, id => root.specFor(id) !== null)
|
||||
onLayoutCommitted: items => root.save(WidgetUtils.resolve(root.definitions, items))
|
||||
commitHandler: items => root.save(WidgetUtils.resolve(root.definitions, items))
|
||||
|
||||
function requestFocus(backwards) {
|
||||
const targets = root.focusTargets();
|
||||
|
||||
@@ -41,7 +41,7 @@ DEditableGrid {
|
||||
minimumHeight: DashMetrics.tabMinHeight
|
||||
placeholderRadius: DashMetrics.cardRadius
|
||||
|
||||
onLayoutCommitted: items => {
|
||||
commitHandler: items => {
|
||||
commitPanelPreview();
|
||||
CardUtils.setLayout(items);
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ Item {
|
||||
allowEmpty: true
|
||||
showLastDisplay: true
|
||||
showOnLastDisplay: bar.selectedBarConfig?.showOnLastDisplay ?? true
|
||||
onPreferencesChanged: prefs => dankBarTab.setBarScreenPreferences(bar.selectedBarId, prefs)
|
||||
preferencesHandler: prefs => dankBarTab.setBarScreenPreferences(bar.selectedBarId, prefs)
|
||||
onLastDisplayToggled: checked => dankBarTab.setBarShowOnLastDisplay(bar.selectedBarId, checked)
|
||||
}
|
||||
}
|
||||
@@ -412,7 +412,7 @@ Item {
|
||||
|
||||
SettingsDisplayPicker {
|
||||
displayPreferences: SettingsData.frameScreenPreferences
|
||||
onPreferencesChanged: prefs => SettingsData.set("frameScreenPreferences", prefs)
|
||||
preferencesHandler: prefs => SettingsData.set("frameScreenPreferences", prefs)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ Item {
|
||||
allowEmpty: true
|
||||
showLastDisplay: true
|
||||
showOnLastDisplay: dot.config?.showOnLastDisplay ?? true
|
||||
onPreferencesChanged: prefs => dot.apply("screenPreferences", prefs)
|
||||
preferencesHandler: prefs => dot.apply("screenPreferences", prefs)
|
||||
onLastDisplayToggled: checked => dot.apply("showOnLastDisplay", checked)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ Column {
|
||||
|
||||
SettingsDisplayPicker {
|
||||
displayPreferences: root.cfg.displayPreferences ?? ["all"]
|
||||
onPreferencesChanged: prefs => root.updateConfig("displayPreferences", prefs)
|
||||
preferencesHandler: prefs => root.updateConfig("displayPreferences", prefs)
|
||||
}
|
||||
|
||||
SettingsRow {
|
||||
|
||||
@@ -154,7 +154,7 @@ Item {
|
||||
allowEmpty: true
|
||||
showLastDisplay: ["notifications", "osd", "toast", "notepad"].includes(componentCard.modelData.id) || componentCard.modelData.id.startsWith("bar:")
|
||||
showOnLastDisplay: root.getShowOnLastDisplay(componentCard.modelData.id)
|
||||
onPreferencesChanged: prefs => root.setScreenPreferences(componentCard.modelData.id, prefs)
|
||||
preferencesHandler: prefs => root.setScreenPreferences(componentCard.modelData.id, prefs)
|
||||
onLastDisplayToggled: checked => root.setShowOnLastDisplay(componentCard.modelData.id, checked)
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ Item {
|
||||
SettingsDisplayPicker {
|
||||
displayPreferences: dock.screenPreferences
|
||||
emptyMeansAll: false
|
||||
onPreferencesChanged: preferences => dock.setOption("screenPreferences", preferences)
|
||||
preferencesHandler: preferences => dock.setOption("screenPreferences", preferences)
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
|
||||
@@ -667,7 +667,7 @@ Item {
|
||||
SettingsDisplayPicker {
|
||||
width: parent.width
|
||||
displayPreferences: SettingsData.screenPreferences?.lockScreen || ["all"]
|
||||
onPreferencesChanged: prefs => {
|
||||
preferencesHandler: prefs => {
|
||||
var p = SettingsData.screenPreferences || {};
|
||||
var updated = Object.assign({}, p);
|
||||
updated["lockScreen"] = prefs;
|
||||
|
||||
@@ -14,7 +14,8 @@ Column {
|
||||
property bool showOnLastDisplay: false
|
||||
readonly property bool localAllDisplays: !Array.isArray(displayPreferences) || displayPreferences.includes("all") || (emptyMeansAll && displayPreferences.length === 0)
|
||||
|
||||
signal preferencesChanged(var preferences)
|
||||
// A callback, not a signal: Qt 6.12 hands signal array parameters over as a V4Sequence that fails Array.isArray.
|
||||
property var preferencesHandler: null
|
||||
signal lastDisplayToggled(bool checked)
|
||||
|
||||
width: parent?.width ?? 0
|
||||
@@ -34,7 +35,7 @@ Column {
|
||||
SettingsToggleRow {
|
||||
text: I18n.tr("All displays")
|
||||
checked: root.localAllDisplays
|
||||
onToggled: checked => root.preferencesChanged(checked ? ["all"] : Quickshell.screens.map(screen => root.screenPref(screen)))
|
||||
onToggled: checked => root.preferencesHandler?.(checked ? ["all"] : Quickshell.screens.map(screen => root.screenPref(screen)))
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
@@ -61,7 +62,7 @@ Column {
|
||||
prefs.push(root.screenPref(modelData));
|
||||
if (!root.allowEmpty && prefs.length === 0)
|
||||
return;
|
||||
root.preferencesChanged(prefs);
|
||||
root.preferencesHandler?.(prefs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ Singleton {
|
||||
valid = typeof value === "number" && Number.isFinite(value);
|
||||
break;
|
||||
case "a":
|
||||
valid = Array.isArray(value) && value.every(v => typeof v === "string");
|
||||
valid = value instanceof Array && value.every(v => typeof v === "string");
|
||||
break;
|
||||
case "r":
|
||||
valid = value && ["x", "y", "width", "height"].every(k => Number.isSafeInteger(value[k]));
|
||||
|
||||
@@ -363,7 +363,7 @@ Singleton {
|
||||
}
|
||||
|
||||
function keepUnchanged(previous, next) {
|
||||
if (!Array.isArray(previous) || !Array.isArray(next))
|
||||
if (!(previous instanceof Array) || !(next instanceof Array))
|
||||
return next;
|
||||
const byContent = new Map();
|
||||
for (const item of previous)
|
||||
@@ -390,7 +390,7 @@ Singleton {
|
||||
|
||||
if (!state.wifiNetworks && !state.savedWifiNetworks)
|
||||
return;
|
||||
const hasSavedWifiState = DMSService.apiVersion >= savedWifiStateApiVersion && Array.isArray(state.savedWifiNetworks);
|
||||
const hasSavedWifiState = DMSService.apiVersion >= savedWifiStateApiVersion && state.savedWifiNetworks instanceof Array;
|
||||
const sourceSavedNetworks = hasSavedWifiState ? state.savedWifiNetworks : (state.wifiNetworks || []).filter(network => network.saved);
|
||||
const normalized = sourceSavedNetworks.map(network => Object.assign({}, network, {
|
||||
saved: true,
|
||||
|
||||
@@ -32,6 +32,8 @@ Item {
|
||||
property var dropHandler: null
|
||||
// An item hovering from outside, placed first so the grid makes room for it.
|
||||
property var externalItem: null
|
||||
// A callback, not a signal: Qt 6.12 hands signal array parameters over as a V4Sequence that fails Array.isArray.
|
||||
property var commitHandler: null
|
||||
// The layout compacts upward, so a drop has to account for the hole the dragged item leaves.
|
||||
property bool gravity: false
|
||||
// Takes the items with the dragged one at its target and returns their packed cells, so a drop can tell
|
||||
@@ -62,8 +64,6 @@ Item {
|
||||
return gravity && dragCell && draggingSourceIndex >= 0 ? GridUtils.dropInto(changed, pinnedCells, draggingSourceIndex, dragCell, packer, rowStep) : changed;
|
||||
}
|
||||
|
||||
signal layoutCommitted(var items)
|
||||
|
||||
implicitHeight: Math.max(minimumHeight, layoutHeight) + contentPadding * 2
|
||||
height: implicitHeight
|
||||
|
||||
@@ -156,7 +156,7 @@ Item {
|
||||
const moved = pinnedCells.some((cell, i) => cell && (cell.col !== items[i].col || cell.row !== items[i].row));
|
||||
cancelInteraction();
|
||||
if (moved)
|
||||
layoutCommitted(items);
|
||||
commitHandler?.(items);
|
||||
}
|
||||
|
||||
function previewExternal(item, x, y) {
|
||||
@@ -196,7 +196,7 @@ Item {
|
||||
const changed = item && Object.keys(preview.changes).some(key => item[key] !== preview.changes[key]);
|
||||
const items = committedItems();
|
||||
if (changed)
|
||||
layoutCommitted(items);
|
||||
commitHandler?.(items);
|
||||
cancelInteraction();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user