1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-29 07:52:50 -05:00

displays: workaround for duplicate models

This commit is contained in:
bbedward
2025-11-27 10:34:18 -05:00
parent 384c775f1a
commit 28ad641070
5 changed files with 92 additions and 10 deletions

View File

@@ -927,10 +927,46 @@ rm -rf '${home}'/.cache/icon-cache '${home}'/.cache/thumbnails 2>/dev/null || tr
return barConfigs.filter(cfg => cfg.enabled); return barConfigs.filter(cfg => cfg.enabled);
} }
function getScreensSortedByPosition() {
const screens = [];
for (let i = 0; i < Quickshell.screens.length; i++) {
screens.push(Quickshell.screens[i]);
}
screens.sort((a, b) => {
if (a.x !== b.x)
return a.x - b.x;
return a.y - b.y;
});
return screens;
}
function getScreenModelIndex(screen) {
if (!screen || !screen.model)
return -1;
const sorted = getScreensSortedByPosition();
let modelCount = 0;
let screenIndex = -1;
for (let i = 0; i < sorted.length; i++) {
if (sorted[i].model === screen.model) {
if (sorted[i].name === screen.name) {
screenIndex = modelCount;
}
modelCount++;
}
}
if (modelCount <= 1)
return -1;
return screenIndex;
}
function getScreenDisplayName(screen) { function getScreenDisplayName(screen) {
if (!screen) if (!screen)
return ""; return "";
if (displayNameMode === "model" && screen.model) { if (displayNameMode === "model" && screen.model) {
const modelIndex = getScreenModelIndex(screen);
if (modelIndex >= 0) {
return screen.model + "-" + modelIndex;
}
return screen.model; return screen.model;
} }
return screen.name; return screen.name;
@@ -940,13 +976,27 @@ rm -rf '${home}'/.cache/icon-cache '${home}'/.cache/thumbnails 2>/dev/null || tr
if (!screen) if (!screen)
return false; return false;
const screenDisplayName = getScreenDisplayName(screen);
return prefs.some(pref => { return prefs.some(pref => {
if (typeof pref === "string") { if (typeof pref === "string") {
return pref === "all" || pref === screen.name || pref === screen.model; if (pref === "all" || pref === screen.name)
return true;
if (displayNameMode === "model") {
return pref === screenDisplayName;
}
return pref === screen.model;
} }
if (displayNameMode === "model") { if (displayNameMode === "model") {
return pref.model && screen.model && pref.model === screen.model; if (pref.model && screen.model) {
if (pref.modelIndex !== undefined) {
const screenModelIndex = getScreenModelIndex(screen);
return pref.model === screen.model && pref.modelIndex === screenModelIndex;
}
return pref.model === screen.model;
}
return false;
} }
return pref.name === screen.name; return pref.name === screen.name;
}); });

View File

@@ -1,4 +1,5 @@
import QtQuick import QtQuick
import Quickshell
import qs.Common import qs.Common
import qs.Services import qs.Services
import qs.Widgets import qs.Widgets
@@ -16,10 +17,16 @@ Rectangle {
property string currentDeviceName: "" property string currentDeviceName: ""
function getScreenPinKey() { function getScreenPinKey() {
if (!screenName)
return "";
const screen = Quickshell.screens.find(s => s.name === screenName);
if (screen) {
return SettingsData.getScreenDisplayName(screen);
}
if (SettingsData.displayNameMode === "model" && screenModel && screenModel.length > 0) { if (SettingsData.displayNameMode === "model" && screenModel && screenModel.length > 0) {
return screenModel; return screenModel;
} }
return screenName || ""; return screenName;
} }
function resolveDeviceName() { function resolveDeviceName() {

View File

@@ -1,4 +1,5 @@
import QtQuick import QtQuick
import Quickshell
import qs.Common import qs.Common
import qs.Modules.Plugins import qs.Modules.Plugins
import qs.Services import qs.Services
@@ -79,10 +80,16 @@ BasePill {
} }
function getScreenPinKey() { function getScreenPinKey() {
if (!root.screenName)
return "";
const screen = Quickshell.screens.find(s => s.name === root.screenName);
if (screen) {
return SettingsData.getScreenDisplayName(screen);
}
if (SettingsData.displayNameMode === "model" && root.screenModel && root.screenModel.length > 0) { if (SettingsData.displayNameMode === "model" && root.screenModel && root.screenModel.length > 0) {
return root.screenModel; return root.screenModel;
} }
return root.screenName || ""; return root.screenName;
} }
function getPinnedBrightnessDevice() { function getPinnedBrightnessDevice() {

View File

@@ -1486,17 +1486,26 @@ Item {
currentPrefs = []; currentPrefs = [];
} }
const screenModelIndex = SettingsData.getScreenModelIndex(screenData);
let newPrefs = currentPrefs.filter(pref => { let newPrefs = currentPrefs.filter(pref => {
if (typeof pref === "string") if (typeof pref === "string")
return false; return false;
if (pref.modelIndex !== undefined && screenModelIndex >= 0) {
return !(pref.model === screenData.model && pref.modelIndex === screenModelIndex);
}
return pref.name !== screenData.name || pref.model !== screenData.model; return pref.name !== screenData.name || pref.model !== screenData.model;
}); });
if (checked) { if (checked) {
newPrefs.push({ const prefObj = {
name: screenData.name, name: screenData.name,
model: screenData.model || "" model: screenData.model || ""
}); };
if (screenModelIndex >= 0) {
prefObj.modelIndex = screenModelIndex;
}
newPrefs.push(prefObj);
} }
dankBarTab.setBarScreenPreferences(selectedBarId, newPrefs); dankBarTab.setBarScreenPreferences(selectedBarId, newPrefs);

View File

@@ -691,9 +691,9 @@ Item {
StyledText { StyledText {
text: { text: {
if (parent.currentMode) { if (parent.currentMode) {
return parent.currentMode.width + "×" + parent.currentMode.height + "@" + Math.round(parent.currentMode.refresh / 1000) + "Hz" return parent.currentMode.width + "×" + parent.currentMode.height + "@" + Math.round(parent.currentMode.refresh / 1000) + "Hz";
} }
return modelData.width + "×" + modelData.height return modelData.width + "×" + modelData.height;
} }
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText color: Theme.surfaceVariantText
@@ -870,17 +870,26 @@ Item {
currentPrefs = []; currentPrefs = [];
} }
const screenModelIndex = SettingsData.getScreenModelIndex(screenData);
var newPrefs = currentPrefs.filter(pref => { var newPrefs = currentPrefs.filter(pref => {
if (typeof pref === "string") if (typeof pref === "string")
return false; return false;
if (pref.modelIndex !== undefined && screenModelIndex >= 0) {
return !(pref.model === screenData.model && pref.modelIndex === screenModelIndex);
}
return pref.name !== screenData.name || pref.model !== screenData.model; return pref.name !== screenData.name || pref.model !== screenData.model;
}); });
if (checked) { if (checked) {
newPrefs.push({ const prefObj = {
name: screenData.name, name: screenData.name,
model: screenData.model || "" model: screenData.model || ""
}); };
if (screenModelIndex >= 0) {
prefObj.modelIndex = screenModelIndex;
}
newPrefs.push(prefObj);
} }
displaysTab.setScreenPreferences(componentId, newPrefs); displaysTab.setScreenPreferences(componentId, newPrefs);