---
read_when:
    - กำลังเปลี่ยนพฤติกรรมของไอคอนแถบเมนู
summary: สถานะและแอนิเมชันของไอคอนแถบเมนูสำหรับ OpenClaw บน macOS
title: ไอคอนแถบเมนู
x-i18n:
    generated_at: "2026-04-23T05:44:56Z"
    model: gpt-5.4
    provider: openai
    source_hash: a67a6e6bbdc2b611ba365d3be3dd83f9e24025d02366bc35ffcce9f0b121872b
    source_path: platforms/mac/icon.md
    workflow: 15
---

# สถานะของไอคอนแถบเมนู

ผู้เขียน: steipete · อัปเดต: 2025-12-06 · ขอบเขต: แอป macOS (`apps/macos`)

- **ว่าง:** แอนิเมชันไอคอนปกติ (กะพริบ, ขยับเล็กน้อยเป็นครั้งคราว)
- **หยุดชั่วคราว:** status item ใช้ `appearsDisabled`; ไม่มีการเคลื่อนไหว
- **ทริกเกอร์เสียง (หูใหญ่):** ตัวตรวจจับ voice wake จะเรียก `AppState.triggerVoiceEars(ttl: nil)` เมื่อได้ยิน wake word ทำให้ `earBoostActive=true` อยู่ตลอดช่วงที่กำลังจับคำพูด หูจะขยายขึ้น (1.9x), มีรูหูทรงกลมเพื่อให้อ่านง่ายขึ้น จากนั้นจะลดลงผ่าน `stopVoiceEars()` หลังเงียบไป 1 วินาที จะทริกเกอร์เฉพาะจาก voice pipeline ภายในแอปเท่านั้น
- **กำลังทำงาน (เอเจนต์กำลังรัน):** `AppState.isWorking=true` จะขับการเคลื่อนไหวจิ๋วแบบ “หาง/ขาวิ่งพล่าน”: ขาขยับเร็วขึ้นและมีการเยื้องเล็กน้อยระหว่างที่งานกำลังประมวลผลอยู่ ปัจจุบันสลับค่านี้รอบการรันเอเจนต์ของ WebChat; ให้เพิ่มการสลับแบบเดียวกันรอบงานยาวอื่น ๆ เมื่อคุณเชื่อมต่อมัน

จุดเชื่อมต่อ

- Voice wake: runtime/tester เรียก `AppState.triggerVoiceEars(ttl: nil)` เมื่อมีทริกเกอร์ และ `stopVoiceEars()` หลังเงียบไป 1 วินาที เพื่อให้ตรงกับช่วงเวลาการจับคำพูด
- กิจกรรมของเอเจนต์: ตั้งค่า `AppStateStore.shared.setWorking(true/false)` รอบช่วงการทำงาน (ทำไว้แล้วในการเรียกเอเจนต์ของ WebChat) ให้ช่วงเวลาสั้น และรีเซ็ตในบล็อก `defer` เพื่อหลีกเลี่ยงแอนิเมชันค้าง

รูปร่างและขนาด

- ไอคอนฐานถูกวาดใน `CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:)`
- ค่าเริ่มต้นของการขยายหูคือ `1.0`; voice boost จะตั้ง `earScale=1.9` และสลับ `earHoles=true` โดยไม่เปลี่ยนเฟรมโดยรวม (ภาพเทมเพลต 18×18 pt ที่เรนเดอร์ลงใน Retina backing store ขนาด 36×36 px)
- การวิ่งพล่านใช้ leg wiggle สูงสุดประมาณ ~1.0 พร้อมการส่ายแนวนอนเล็กน้อย; มันจะถูกบวกเพิ่มจากการขยับแบบว่างที่มีอยู่แล้ว

หมายเหตุด้านพฤติกรรม

- ไม่มีการสลับ ears/working ผ่าน CLI/broker ภายนอก; ควรเก็บไว้ภายในสัญญาณของแอปเองเพื่อหลีกเลี่ยงการกระพือแบบไม่ตั้งใจ
- ตั้ง TTL ให้สั้น (&lt;10s) เพื่อให้ไอคอนกลับสู่ค่าพื้นฐานได้เร็วหากงานค้าง
