From 04b43303933088cbc162c93b3a64dbef38288501 Mon Sep 17 00:00:00 2001 From: Zoltan Papp Date: Tue, 12 May 2026 20:01:35 +0200 Subject: [PATCH] [client/ui] Add coloured status dot to tray menu Show a small dot next to the first menu entry that reflects the daemon state: green for Connected, yellow for Connecting, blue for NeedsLogin/SessionExpired, red for LoginFailed/Error, grey for Idle/Disconnected and dark grey for DaemonUnavailable. PNGs are 24x24 with a pHYs chunk declaring 144 DPI so NSImage renders them at 12 pt while keeping retina-sharp pixel data; circles are supersampled 8x for smooth edges. Idle now surfaces as "Disconnected" in the menu label, daemon-status literals moved to status* constants, and Exit Node / Resources are gated on the Connected state instead of just daemon availability. --- .../ui/assets/netbird-menu-dot-connected.png | Bin 0 -> 452 bytes .../ui/assets/netbird-menu-dot-connecting.png | Bin 0 -> 452 bytes client/ui/assets/netbird-menu-dot-error.png | Bin 0 -> 433 bytes client/ui/assets/netbird-menu-dot-idle.png | Bin 0 -> 483 bytes client/ui/assets/netbird-menu-dot-login.png | Bin 0 -> 475 bytes client/ui/assets/netbird-menu-dot-offline.png | Bin 0 -> 456 bytes client/ui/icons.go | 22 +++++ client/ui/tray.go | 93 +++++++++++++----- 8 files changed, 88 insertions(+), 27 deletions(-) create mode 100644 client/ui/assets/netbird-menu-dot-connected.png create mode 100644 client/ui/assets/netbird-menu-dot-connecting.png create mode 100644 client/ui/assets/netbird-menu-dot-error.png create mode 100644 client/ui/assets/netbird-menu-dot-idle.png create mode 100644 client/ui/assets/netbird-menu-dot-login.png create mode 100644 client/ui/assets/netbird-menu-dot-offline.png diff --git a/client/ui/assets/netbird-menu-dot-connected.png b/client/ui/assets/netbird-menu-dot-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8ce4d857b68466807de884b622b0d22ec2c6b2 GIT binary patch literal 452 zcmV;#0XzPQP)m1pa;b#dq-Q`>4`S0@rt4 zyL%0%4?r$&e0F;~!{2{I#SI2vX8KbvrRs_76L=~Dg*hl#$Tl1V{{CYDnE^5j!vau* z5*z0D0LToGSuj34h>Y)6Jf?;P4A4kFtK1>W0P_JTom0zj2B3+ literal 0 HcmV?d00001 diff --git a/client/ui/assets/netbird-menu-dot-connecting.png b/client/ui/assets/netbird-menu-dot-connecting.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8bc29d816138baefd75c584999ff4d01660e89 GIT binary patch literal 452 zcmV;#0XzPQP);FD$dAa-wUHBb-Y?4s9INRpm zzi&5R5Yo$tOF}f%p68DJ{Q^19Pw9`I|Chn0MoyCP$)oLjGgS^MPI$fg;1{AT=zeJ7 z((>oVd|U=&v#5qeBe7Ke#2$hc+zZtW5ifeQ{Lfzo7GeyC0TyP4KQH^_B9&HOUW3yD zkjt~4UEfZs;mDRulhX7=_6a-{fx;XVEaVyv0wBF0GeBlxSOAJpV#6FC0GRh*@0jS6Y*-WY7ATvN_ zVORhv&p|~lsK6rEaFAY*8OU`5&5LV{d;n4aDso8)E|6M~9(2R8`Tz!KT4kaGP{9Q% uTVUBAl!-v;{P*jP7l_eMQve760RR7Xh`~Y9fk(0c0000S@Z{5Ey z+66*-8F5LxTD6LY`O%{Sg#!oDAN}|tgH4Sb2gj2K4h}Q_%E?U-3k&-~v<1!o|GRYg z`p(B?FgAWn|n#(1IK1&xc5tl`a4C|36W|2LmjOjDMbXbwz3z8m_@<0m$VA zZf@I2H5}QJ3A=WABKrhx0VvFs7cII@Y_Q-0py0Y27pDn}6L>NOMJT0)g8;}3kXbN3 z+yYQ)q113}W`QjLrE_Yy9tJ>Wfy{(k0LnzvG8_hAW`Zq%n1JdYyog4?yKP$Q7gn7f3Bg4|-j|Fkn?CI-sP|r#S!w b00960)gi!0=-XYW00000NkvXXu0mjfUTLV+ literal 0 HcmV?d00001 diff --git a/client/ui/assets/netbird-menu-dot-idle.png b/client/ui/assets/netbird-menu-dot-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..79e7bbbf8cf94aaea503fc2ce2162a6b774ddbcf GIT binary patch literal 483 zcmV<90UZ8`P)QaLM8!3|&OXkUd_z^KlPc|HRcIM#h z=nI7OGUAf>KXodP^X@AJx#=ogKDhlsG~~#(xy%3l{YzBv z!ClJC{Kv*CIZ{>N^%|T$0J)s!PyBjP4F`e$|Nk>Rxf>AlN67LxvQOYX0EPJmC4=j@ z!kbtCikE02Va23ed5 z-R0yM4gw%OAiW?nu=)TL<`H|RT_-kJZ~;(ot#HoLgvANm2cQV0)Nl|0nE^5j#)n$~ zN-dNcj?FBv1)y|J4cEf}$SjbVa0_CmhnY~za2SA@3AW(g_A;uu9tL1$(!4AJTcG6G z^@Q36!^{L*usCzo8ERVqGZSpVG4F>LKpBKuhJ(xknaO}02cS}sS{5Li1-AfHI zATvN_!T2bpDX5@|n;o;AoWhO)TB0sWUE+ycY@;MokOZj61t}!QaFAZ~I)UaD4%UnY zQV1$??YdZN@x=>B4x|R87MtNXeSi)?1sAAnfn|SCCIY2%SW+BN00;m8|Np)Uz<-L6 R{<#1E002ovPDHLkV1k+L#jgMW literal 0 HcmV?d00001 diff --git a/client/ui/assets/netbird-menu-dot-offline.png b/client/ui/assets/netbird-menu-dot-offline.png new file mode 100644 index 0000000000000000000000000000000000000000..7aec5d01da5b9697291400ae9b341a6f3292102e GIT binary patch literal 456 zcmV;(0XP1MP)$j9x}u60ho4 z@qEgOE0{C2BmMKI4>H))@bU>fNy)C5$v0)u1hK}jFGO1~Y3)OoXP4K{$7L`!i==b| z6Z3-Q_YkzeExIj4UGmTJfB*im5MwwDFflRxx%r$Wa@W$TH7MffE+@xu5CG``=>?gA z)d!$3?_+#+o!DT(1wg@7^j}I77AJ5YfFhJq!$AOK2FNTJpBcvB;_g}c>*o(XN-Y3^ ztCxJ#jvUz0&j9lQC{0tt^)LW33zkp77F<6v*MwSz!vM@oumwjB?4X+KVE|?(eaa#m z2ahMzHW+3m*aA(P