Suppress LocalSend's redundant tray item (#6852)

LocalSend registers an Ayatana item with no ItemIsMenu and no Activate
handler, so its primary click is a silent no-op and the menu offers only
Open and Quit. Share > Receive already opens it, so drop the item the way
Dropbox's is dropped when its dedicated widget owns the surface.

Closes #6838

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier Hansson
2026-08-14 08:23:45 +02:00
committed by GitHub
co-authored by Claude Opus 5
parent df708831b6
commit dc698e5df0
3 changed files with 23 additions and 17 deletions
+3 -3
View File
@@ -159,9 +159,9 @@ BarWidget {
return "drawer"
}
function ownedByDedicatedWidget(item) {
function ownedByOmarchy(item) {
var layout = root.bar && root.bar.layoutConfig ? root.bar.layoutConfig : null
return TrayModel.ownedByDedicatedWidget(item, layout)
return TrayModel.ownedByOmarchy(item, layout)
}
function bucket(category) {
@@ -170,7 +170,7 @@ BarWidget {
for (var i = 0; i < values.length; i++) {
var item = values[i]
if (item.status === Status.Passive) continue
if (ownedByDedicatedWidget(item)) continue
if (ownedByOmarchy(item)) continue
if (category === "all") {
result.push(item)
continue
+12 -8
View File
@@ -2,11 +2,11 @@ function text(value) {
return String(value || "").toLowerCase()
}
function isDropboxTrayItem(item) {
function itemNamed(item, name) {
if (!item) return false
return text(item.id).indexOf("dropbox") !== -1
|| text(item.title).indexOf("dropbox") !== -1
|| text(item.tooltipTitle).indexOf("dropbox") !== -1
return text(item.id).indexOf(name) !== -1
|| text(item.title).indexOf(name) !== -1
|| text(item.tooltipTitle).indexOf(name) !== -1
}
function entryId(entry) {
@@ -30,15 +30,19 @@ function layoutHasWidget(layout, id) {
return false
}
function ownedByDedicatedWidget(item, layout) {
return layoutHasWidget(layout, "omarchy.dropbox") && isDropboxTrayItem(item)
// LocalSend's item shows no state, offers only Open and Quit, and its primary
// click is a no-op, so Share > Receive is the whole surface. Hiding it by hand
// doesn't stick either: LocalSend picks a fresh tray id every launch.
function ownedByOmarchy(item, layout) {
return itemNamed(item, "localsend")
|| (layoutHasWidget(layout, "omarchy.dropbox") && itemNamed(item, "dropbox"))
}
if (typeof module !== "undefined") {
module.exports = {
isDropboxTrayItem: isDropboxTrayItem,
itemNamed: itemNamed,
entryId: entryId,
layoutHasWidget: layoutHasWidget,
ownedByDedicatedWidget: ownedByDedicatedWidget
ownedByOmarchy: ownedByOmarchy
}
}