fixed some quickshell stuff + hypr
This commit is contained in:
1 parent
32b43bdbb3
commit
1f7f5aef8a
6 files changed
+151
-11
No files matched your search
+23
-6
@@ -16,15 +16,32 @@ Column {
|
||||
spacing: Theme.padS + 2
|
||||
visible: root.shownItems.length > 0
|
||||
|
||||
// Applets whose whole job the rail already does. nm-applet and blueman keep
|
||||
// running — they are the Wi-Fi secret agent and the pairing agent — but
|
||||
// their icons were a second network and a second bluetooth glyph a few
|
||||
// slots below the rail's own.
|
||||
readonly property var hiddenIds: ["nm-applet", "blueman"]
|
||||
// Applets whose whole job the rail already does. blueman keeps running as
|
||||
// the pairing agent, but its icon was a second bluetooth glyph a few slots
|
||||
// below the rail's own.
|
||||
readonly property var hiddenIds: ["blueman"]
|
||||
|
||||
readonly property var shownItems: SystemTray.items.values
|
||||
.filter(item => root.hiddenIds.indexOf(item.id) === -1)
|
||||
|
||||
// Electron and Chromium apps send only a full-colour pixmap, and flattening
|
||||
// that loses everything inside the outline: Brave's lion became a plain
|
||||
// shield. The icon theme often ships a panel glyph drawn for exactly this
|
||||
// job, so look one up by the app's name and use the pixmap only when none
|
||||
// exists. The id is no help here ("chrome_status_icon_1" for Brave and
|
||||
// Proton Pass alike), so the tooltip title is the name we go by.
|
||||
function themedIcon(item: SystemTrayItem): string {
|
||||
if (item.icon.startsWith("image://icon/")) return item.icon;
|
||||
|
||||
const name = (item.tooltipTitle || item.title || item.id)
|
||||
.toLowerCase().replace(/[^a-z0-9]+/g, "-");
|
||||
for (const suffix of ["-tray", "-panel", "-symbolic"]) {
|
||||
const path = Quickshell.iconPath(name + suffix, true);
|
||||
if (path !== "") return path;
|
||||
}
|
||||
return item.icon;
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: root.shownItems
|
||||
|
||||
@@ -45,7 +62,7 @@ Column {
|
||||
IconImage {
|
||||
id: img
|
||||
anchors.fill: parent
|
||||
source: entry.modelData.icon
|
||||
source: root.themedIcon(entry.modelData)
|
||||
asynchronous: true
|
||||
|
||||
layer.enabled: true
|
||||
|
||||
@@ -304,18 +304,25 @@ Singleton {
|
||||
// So when the target declares no placeholder we build the command line
|
||||
// ourselves and hand uwsm an argv instead of an ID. It is still scoped and
|
||||
// still supervised; we just did the expansion.
|
||||
//
|
||||
// The same fallback covers entries whose file name uwsm will not accept as
|
||||
// an ID at all. Its check is the regex below, so `Proton Authenticator
|
||||
// .desktop` and most Steam/Lutris shortcuts ("Hollow Knight.desktop") fail
|
||||
// with "Invalid Desktop Entry ID" before anything runs.
|
||||
readonly property var fieldRe: /%[fFuU]/
|
||||
readonly property var anyFieldRe: /^%[a-zA-Z]$/
|
||||
readonly property var uwsmIdRe: /^[a-zA-Z0-9_][a-zA-Z0-9_.-]*\.desktop(:.*)?$/
|
||||
|
||||
function launch(item: var, arg: string): void {
|
||||
root._remember(item.key);
|
||||
const byId = root.uwsmIdRe.test(item.key);
|
||||
|
||||
if (arg === "") {
|
||||
if (byId && arg === "") {
|
||||
Quickshell.execDetached(["uwsm", "app", "--", item.key]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (root.fieldRe.test(item.exec || "")) {
|
||||
if (byId && root.fieldRe.test(item.exec || "")) {
|
||||
Quickshell.execDetached(["uwsm", "app", "--", item.key, arg]);
|
||||
return;
|
||||
}
|
||||
@@ -323,10 +330,10 @@ Singleton {
|
||||
const argv = root._tokenize(item.exec || "")
|
||||
.filter(t => !root.anyFieldRe.test(t));
|
||||
if (argv.length === 0) {
|
||||
Quickshell.execDetached(["uwsm", "app", "--", item.key]);
|
||||
if (byId) Quickshell.execDetached(["uwsm", "app", "--", item.key]);
|
||||
return;
|
||||
}
|
||||
argv.push(arg);
|
||||
if (arg !== "") argv.push(arg);
|
||||
|
||||
// Without this the unit is named after the bare executable and every
|
||||
// app launched this way collides in the unit namespace.
|
||||
|
||||
Reference in new issue
Block a user