From a4fd98d93474cf3d859be2730dbf1fd2b3114735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Tue, 24 Mar 2026 01:21:17 -0400 Subject: [PATCH] fix: add system tray icon for all platforms (macOS, Windows, Linux) Tray was invisible on Windows/Linux (icon not bundled in asar) and completely absent on macOS (early return guard). Generate dedicated tray-sized icons, bundle them in the packaged app, and create tray on all platforms with macOS Template image support. Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/tray-icon.png | Bin 0 -> 1789 bytes assets/tray-icon@2x.png | Bin 0 -> 4450 bytes assets/tray-iconTemplate.png | Bin 0 -> 201 bytes assets/tray-iconTemplate@2x.png | Bin 0 -> 311 bytes electron-builder.yml | 2 ++ package.json | 2 +- src/main/desktop-shell-service.ts | 33 +++++++++++++++++++++++++++--- 7 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 assets/tray-icon.png create mode 100644 assets/tray-icon@2x.png create mode 100644 assets/tray-iconTemplate.png create mode 100644 assets/tray-iconTemplate@2x.png diff --git a/assets/tray-icon.png b/assets/tray-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7453a11923728f57b1c711d7fd44329a782c79e4 GIT binary patch literal 1789 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$_XGugsR9Fe^SIuu!RTMw(&6|&Q zX5RFRPCoz#sFp-2E)0o8M6s5D(S<9cAt5X^F%ma!bZazXG%k!W(Zr918y5m@BrYVj zCIkiR!kStPbXr>4GA*59W;%V>^E>z5_ujPSFVNH6ckey-eEiP2=ia#``md99uLN{= zcjq0;IzqNRWGj^>QX52}+RXDH!7S-{$P(psrT*|d@5hCOg;^|bq^$tN`g(d!^TKJ% zvidAv0-YXjR8gdS9Oy8Xp1;9Zshf=I!?{~?@3BZD3Sy%*r!SxX#Io&EmLHvQY#|;d z0|;Z!)1DcqcIqPufrKEC4^OGD=I7^5vFaN1K{4IwZ*On!Yqn**0c$WSf707B=e3}R zFE{5>ODaXRT21(3g=OF@Y~V6Lv1t#rX42J4xqJ~^kPeFn`Fy@RW?AFxxEnUag!FLQ zJcnYPoqq7vs}yq_dgaYClt?E1lq-(Z-v;T!EcgjpYBbh{78e(buw&x`icxIXw(V{| zZU$iSA~*IP_O{GnXm8%7ftgFR>-w0C*SYd^*0clO~DrMK#4eie03dxn9!+$ zJ@!w>20ADmkJ0FjJKR=e{LK9we9}~?>+5Z_={tlOp#Xr)APq7IqGRT*v)ayFk`C?6 z(#)MYO)TD}Ke-iGYLbyc8)pHgjlStO*a<5yS_2RgGFr_&Vry{zNA|Q)dn!g(=E_v6 zu2ZSz(XVqA>R{gSfp(GEj6mChjW9>ro8x;8ee=lFO%Mt5*4cS~Hc5~5wovZC2)%gX z03Bbgie4_0B5U$89a{O8zWXalMb3^CD`!JlLAJ#lK6c2W2mtH`km`L#FEg$T6vvw9 zar8OrOeg5ZwJ92#Eb~>UZ&lBZ(LrZ{I$9H4A8qvU4kkg^kgB&S-4F%R~tGD##7L1 zt7aMkz#)%(-_a7I=Lg&6EzlCT=~}5qf0ydy$OQweFxT81KFZgY z>oj@0O3=Y7Y~U1mvIV}p&3oiiumy~HTv-|q_HuW7lIAN7zE;;L!Ik{OKPyz_NHD$^ zVG9xM`N?Go0^>N#4|F8ymtvXXoPTVArPS}nMqsT_DD>1Dc#?;;0r(q#@l$J`R)vVjbuQF@cWL925tSrx~h;xHFaAL4v zft%>@K%Qt4vgYGS#kKMFY;o$WQHj(5QE$HUedW=YaH(^k_gYB=zI8T?{g2jwnVTNE z(RIu%Y_C$^WKzyM#yR>R1DMRt&U$xN9zL6Ox!TCu#}TAW6y`~8<{Nu#uJGVY9O^mv zY-@p8@3y f>iSkP|MUI@ogGX$ob9P500000NkvXXu0mjf(sf82 literal 0 HcmV?d00001 diff --git a/assets/tray-icon@2x.png b/assets/tray-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4922587ad82f1156509a21224d9f3585ecfcb58 GIT binary patch literal 4450 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 literal 0 HcmV?d00001 diff --git a/assets/tray-iconTemplate.png b/assets/tray-iconTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..4801ceb5e656e07b50b4b0e3ddc493f724e4e224 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULn`K+y&TPT$UwmD;rgi8 z)28G(iQI{I{NQ<~b-HfmQoE4ED_W-eDiRbFCkxlj_@Epa!Ebn&<>>5x!hJU$3GutF zxbS7o)z8Y^`g-@XIh$uMcr)8Fz|C=#%G8>$@N z3WGC_Z+{Ve BP^AC> literal 0 HcmV?d00001 diff --git a/assets/tray-iconTemplate@2x.png b/assets/tray-iconTemplate@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72c59429146f32b01e335520f40dea3080fdf5d3 GIT binary patch literal 311 zcmV-70m%M|P)Jjwbg~LT&Q5r5bq%3fkaRg^dxR{;~~UDs3#DlXc1R+TNg1Qlw>L)nT5_D z-exA5?<3^F8~%G%0((0+K!%N$=g;tr2TXqZ(kf2yig`yh!5N0j;6q$@2wtpPj6wp( zJ;IARZ-Q^*ErP%Y_6q2rB5?R4(Ra3RR40%{fEU@X6KLCNZBnwT0`rIhC2J6RDn^n( z5=a6`APH0jLi1tQDOpv4uZRLAt19pmQQ)y|aTinlk7S=1H<_JA5V#C|nh|b#gx_I3 zBtU*QxWIdd;3=-Kwg?Ng-dH{