Guard GUI click handlers against stale button slices

This commit is contained in:
2026-04-06 09:49:39 +07:00
parent ec6880abd4
commit 8dccb9fddc

View File

@@ -219,7 +219,7 @@ func (u *ui) handleClicks(gtx layout.Context) {
u.addWireGuardFromFile() u.addWireGuardFromFile()
} }
for i := range u.vlessConnectBtns { for i := 0; i < minInt(len(u.configs.VLESS), len(u.vlessConnectBtns), len(u.vlessDeleteBtns), len(u.vlessPingBtns)); i++ {
for u.vlessConnectBtns[i].Clicked(gtx) { for u.vlessConnectBtns[i].Clicked(gtx) {
if i < len(u.configs.VLESS) { if i < len(u.configs.VLESS) {
name := u.configs.VLESS[i].Name name := u.configs.VLESS[i].Name
@@ -251,7 +251,7 @@ func (u *ui) handleClicks(gtx layout.Context) {
} }
} }
for i := range u.wgConnectBtns { for i := 0; i < minInt(len(u.configs.WireGuard), len(u.wgConnectBtns), len(u.wgDeleteBtns)); i++ {
for u.wgConnectBtns[i].Clicked(gtx) { for u.wgConnectBtns[i].Clicked(gtx) {
if i < len(u.configs.WireGuard) { if i < len(u.configs.WireGuard) {
name := u.configs.WireGuard[i].Name name := u.configs.WireGuard[i].Name
@@ -268,7 +268,7 @@ func (u *ui) handleClicks(gtx layout.Context) {
} }
} }
for i := range u.subUpdateBtns { for i := 0; i < minInt(len(u.subs.Subscriptions), len(u.subUpdateBtns), len(u.subDeleteBtns), len(u.subTestBtns)); i++ {
for u.subUpdateBtns[i].Clicked(gtx) { for u.subUpdateBtns[i].Clicked(gtx) {
if i < len(u.subs.Subscriptions) { if i < len(u.subs.Subscriptions) {
name := u.subs.Subscriptions[i].Name name := u.subs.Subscriptions[i].Name
@@ -1041,3 +1041,15 @@ func trimForPreview(value string, limit int) string {
func rgb(r, g, b uint8) color.NRGBA { func rgb(r, g, b uint8) color.NRGBA {
return color.NRGBA{R: r, G: g, B: b, A: 255} return color.NRGBA{R: r, G: g, B: b, A: 255}
} }
func minInt(values ...int) int {
if len(values) == 0 {
return 0
}
min := values[0]
for _, value := range values[1:] {
if value < min {
min = value
}
}
return min
}