mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
running apps: fix ordering on niri
This commit is contained in:
@@ -138,15 +138,13 @@ BasePill {
|
|||||||
readonly property real iconCellSize: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.noBackground) + 6
|
readonly property real iconCellSize: Theme.barIconSize(root.barThickness, undefined, root.barConfig?.noBackground) + 6
|
||||||
|
|
||||||
readonly property string focusedAppId: {
|
readonly property string focusedAppId: {
|
||||||
const toplevels = CompositorService.sortedToplevels;
|
if (!sortedToplevels || sortedToplevels.length === 0)
|
||||||
if (!toplevels)
|
|
||||||
return "";
|
return "";
|
||||||
let result = "";
|
for (let i = 0; i < sortedToplevels.length; i++) {
|
||||||
for (let i = 0; i < toplevels.length; i++) {
|
if (sortedToplevels[i].activated)
|
||||||
if (toplevels[i].activated)
|
return sortedToplevels[i].appId || "";
|
||||||
result = toplevels[i].appId || "";
|
|
||||||
}
|
}
|
||||||
return result;
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
visible: windowCount > 0
|
visible: windowCount > 0
|
||||||
|
|||||||
@@ -963,48 +963,34 @@ Singleton {
|
|||||||
return enrichedToplevels;
|
return enrichedToplevels;
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterCurrentWorkspace(toplevels, screenName) {
|
function _matchAndEnrichToplevels(toplevels, niriWindows) {
|
||||||
let currentWorkspaceId = null;
|
|
||||||
|
|
||||||
for (var i = 0; i < allWorkspaces.length; i++) {
|
|
||||||
const ws = allWorkspaces[i];
|
|
||||||
if (ws.output === screenName && ws.is_active) {
|
|
||||||
currentWorkspaceId = ws.id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentWorkspaceId === null)
|
|
||||||
return toplevels;
|
|
||||||
|
|
||||||
const workspaceWindows = windows.filter(niriWindow => niriWindow.workspace_id === currentWorkspaceId);
|
|
||||||
const usedToplevels = new Set();
|
const usedToplevels = new Set();
|
||||||
const result = [];
|
const result = [];
|
||||||
|
|
||||||
for (const niriWindow of workspaceWindows) {
|
for (const niriWindow of niriWindows) {
|
||||||
let bestMatch = null;
|
let bestMatch = null;
|
||||||
let bestScore = -1;
|
let bestScore = -1;
|
||||||
|
|
||||||
for (const toplevel of toplevels) {
|
for (const toplevel of toplevels) {
|
||||||
if (usedToplevels.has(toplevel))
|
if (usedToplevels.has(toplevel))
|
||||||
continue;
|
continue;
|
||||||
if (toplevel.appId === niriWindow.app_id) {
|
if (toplevel.appId !== niriWindow.app_id)
|
||||||
let score = 1;
|
continue;
|
||||||
|
|
||||||
if (niriWindow.title && toplevel.title) {
|
let score = 1;
|
||||||
if (toplevel.title === niriWindow.title) {
|
if (niriWindow.title && toplevel.title) {
|
||||||
score = 3;
|
if (toplevel.title === niriWindow.title) {
|
||||||
} else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) {
|
score = 3;
|
||||||
score = 2;
|
} else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) {
|
||||||
}
|
score = 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (score > bestScore) {
|
if (score > bestScore) {
|
||||||
bestScore = score;
|
bestScore = score;
|
||||||
bestMatch = toplevel;
|
bestMatch = toplevel;
|
||||||
if (score === 3)
|
if (score === 3)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1025,17 +1011,15 @@ Singleton {
|
|||||||
return NiriService.focusWindow(niriWindow.id);
|
return NiriService.focusWindow(niriWindow.id);
|
||||||
},
|
},
|
||||||
"close": function () {
|
"close": function () {
|
||||||
if (bestMatch.close) {
|
if (bestMatch.close)
|
||||||
return bestMatch.close();
|
return bestMatch.close();
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (let prop in bestMatch) {
|
for (let prop in bestMatch) {
|
||||||
if (!(prop in enrichedToplevel)) {
|
if (!(prop in enrichedToplevel))
|
||||||
enrichedToplevel[prop] = bestMatch[prop];
|
enrichedToplevel[prop] = bestMatch[prop];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result.push(enrichedToplevel);
|
result.push(enrichedToplevel);
|
||||||
@@ -1044,6 +1028,26 @@ Singleton {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function filterCurrentWorkspace(toplevels, screenName) {
|
||||||
|
let currentWorkspaceId = null;
|
||||||
|
|
||||||
|
for (var i = 0; i < allWorkspaces.length; i++) {
|
||||||
|
const ws = allWorkspaces[i];
|
||||||
|
if (ws.output === screenName && ws.is_active) {
|
||||||
|
currentWorkspaceId = ws.id;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentWorkspaceId === null)
|
||||||
|
return toplevels;
|
||||||
|
|
||||||
|
if (toplevels.length > 0 && toplevels[0].niriWorkspaceId !== undefined)
|
||||||
|
return toplevels.filter(t => t.niriWorkspaceId === currentWorkspaceId);
|
||||||
|
|
||||||
|
return _matchAndEnrichToplevels(toplevels, windows.filter(nw => nw.workspace_id === currentWorkspaceId));
|
||||||
|
}
|
||||||
|
|
||||||
function filterCurrentDisplay(toplevels, screenName) {
|
function filterCurrentDisplay(toplevels, screenName) {
|
||||||
if (!toplevels || toplevels.length === 0 || !screenName)
|
if (!toplevels || toplevels.length === 0 || !screenName)
|
||||||
return toplevels;
|
return toplevels;
|
||||||
@@ -1058,71 +1062,10 @@ Singleton {
|
|||||||
if (outputWorkspaceIds.size === 0)
|
if (outputWorkspaceIds.size === 0)
|
||||||
return toplevels;
|
return toplevels;
|
||||||
|
|
||||||
const displayWindows = windows.filter(niriWindow => outputWorkspaceIds.has(niriWindow.workspace_id));
|
if (toplevels.length > 0 && toplevels[0].niriWorkspaceId !== undefined)
|
||||||
const usedToplevels = new Set();
|
return toplevels.filter(t => outputWorkspaceIds.has(t.niriWorkspaceId));
|
||||||
const result = [];
|
|
||||||
|
|
||||||
for (const niriWindow of displayWindows) {
|
return _matchAndEnrichToplevels(toplevels, windows.filter(nw => outputWorkspaceIds.has(nw.workspace_id)));
|
||||||
let bestMatch = null;
|
|
||||||
let bestScore = -1;
|
|
||||||
|
|
||||||
for (const toplevel of toplevels) {
|
|
||||||
if (usedToplevels.has(toplevel))
|
|
||||||
continue;
|
|
||||||
if (toplevel.appId === niriWindow.app_id) {
|
|
||||||
let score = 1;
|
|
||||||
|
|
||||||
if (niriWindow.title && toplevel.title) {
|
|
||||||
if (toplevel.title === niriWindow.title) {
|
|
||||||
score = 3;
|
|
||||||
} else if (toplevel.title.includes(niriWindow.title) || niriWindow.title.includes(toplevel.title)) {
|
|
||||||
score = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (score > bestScore) {
|
|
||||||
bestScore = score;
|
|
||||||
bestMatch = toplevel;
|
|
||||||
if (score === 3)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bestMatch)
|
|
||||||
continue;
|
|
||||||
usedToplevels.add(bestMatch);
|
|
||||||
|
|
||||||
const workspace = workspaces[niriWindow.workspace_id];
|
|
||||||
const isFocused = niriWindow.is_focused ?? (workspace && workspace.active_window_id === niriWindow.id) ?? false;
|
|
||||||
|
|
||||||
const enrichedToplevel = {
|
|
||||||
"appId": bestMatch.appId,
|
|
||||||
"title": bestMatch.title,
|
|
||||||
"activated": isFocused,
|
|
||||||
"niriWindowId": niriWindow.id,
|
|
||||||
"niriWorkspaceId": niriWindow.workspace_id,
|
|
||||||
"activate": function () {
|
|
||||||
return NiriService.focusWindow(niriWindow.id);
|
|
||||||
},
|
|
||||||
"close": function () {
|
|
||||||
if (bestMatch.close) {
|
|
||||||
return bestMatch.close();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
for (let prop in bestMatch) {
|
|
||||||
if (!(prop in enrichedToplevel)) {
|
|
||||||
enrichedToplevel[prop] = bestMatch[prop];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.push(enrichedToplevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateNiriLayoutConfig() {
|
function generateNiriLayoutConfig() {
|
||||||
|
|||||||
Reference in New Issue
Block a user