Simplify tray: static template icon, click focuses the app
The setImage-swapped progress frames lost the template treatment on macOS and rendered black-on-dark once transfers started. Dial back per user decision: the tray is now just the glyph (template image set once at construction, never swapped) and clicking it activates the window — no menu, no progress effects. Removes everything that only served the fancy version: progress frames + generation, engine.aggregateProgress, the workspacesSync webview->bun channel (schema, send proxy, panels effect, handlers) and the activate-tab action. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+1
-6
@@ -67,13 +67,8 @@ export class App {
|
||||
});
|
||||
}
|
||||
|
||||
/** Native application-menu / tray actions forwarded from the bun process. */
|
||||
/** Native application-menu actions forwarded from the bun process. */
|
||||
private handleMenuAction(action: string): void {
|
||||
if (action.startsWith('activate-tab:')) {
|
||||
const id = Number(action.slice('activate-tab:'.length));
|
||||
if (Number.isFinite(id)) this.panels.setActiveWorkspace(id);
|
||||
return;
|
||||
}
|
||||
if (action.startsWith('connect:')) {
|
||||
const id = action.slice('connect:'.length);
|
||||
const connection = this.connections.connections().find((c) => c.id === id);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Injectable, computed, effect, signal, type WritableSignal } from '@angular/core';
|
||||
import { Injectable, computed, signal, type WritableSignal } from '@angular/core';
|
||||
import type { ConnectionConfig, FileEntry, SavedConnection } from '@shared/types';
|
||||
import { RpcService } from './rpc.service';
|
||||
import { ToastService } from './toast.service';
|
||||
@@ -180,21 +180,6 @@ export class PanelsService {
|
||||
) {
|
||||
this.newWorkspace();
|
||||
|
||||
// keep the bun-side tray informed about tabs (names, sessions, active)
|
||||
if (this.rpc.available) {
|
||||
effect(() => {
|
||||
this.rpc.send.workspacesSync({
|
||||
workspaces: this.workspaces().map((ws) => ({
|
||||
id: ws.id,
|
||||
name: this.workspaceName(ws),
|
||||
remote: this.workspaceIsRemote(ws),
|
||||
sessionIds: [ws.left.sessionId(), ws.right.sessionId()],
|
||||
})),
|
||||
activeId: this.activeWorkspaceId(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// a session died on its own — reset every panel bound to it, in any tab
|
||||
this.rpc.onSessionClosed((event) => {
|
||||
for (const workspace of this.workspaces()) {
|
||||
|
||||
@@ -87,20 +87,4 @@ export class RpcService {
|
||||
});
|
||||
}
|
||||
|
||||
/** Fire-and-forget messages to the bun process (e.g. workspacesSync). */
|
||||
get send() {
|
||||
const rpc = this.rpc;
|
||||
if (!rpc) throw new Error('RPC is only available inside the desktop app');
|
||||
const ready = this.ready;
|
||||
return new Proxy({} as (typeof rpc)['send'], {
|
||||
get:
|
||||
(_target, message: string) =>
|
||||
(payload?: unknown) => {
|
||||
void ready.then(() => {
|
||||
const messages = rpc.send as unknown as Record<string, (p?: unknown) => void>;
|
||||
messages[message](payload);
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user