feat(launcher): M3导航栈+M5通知点击跳转 (agent-202) — nav_stack(≤16深)+MSG_NAV REPORT/EXIT+launch_activity链路注入(MEOW_ACTIVITY/MEOW_CHAIN)+栈根退出回主屏; 通知点击按route_status(0拉起/1 NO ROUTE/2 SOURCE NOT FOUND/-1 NONE关面板不动作); picker协议位预留(0x0070/0x0071); 裸App兼容

launcher 4fe4103a→a42171a1; qemu实测 declare/query/nav report/exit/notify+querynotif 全过
发现: §10.5 App前台通知中心叠加会话(MSG_NOTIF_OPEN)实际未实现,文档超前,待补
This commit is contained in:
MeowOS committed 2026-08-31 06:27:10 +08:00
1 parent 955dbe1228
commit 85b4aea24f
9 files changed
+321 -39

No files matched your search

+21
View File
@@ -1133,6 +1133,27 @@ static void ipc_dispatch(struct meow_ipc_msg *m)
logmsg("ipc: ACT_BACK -> ACK");
break;
}
/* M3 导航栈(FRAMEWORK_DESIGN §3):前台应用上报导航(REPORT)或请求退出(EXIT)。
* REPORT → 更新 nav_stack 深度/顶层;EXIT → 置退出请求,前台 waitpid 循环终止应用回主屏。
* 均在主循环单写者上下文执行(meow_ipc_process 排空处;launch_* 前台循环也调 meow_ipc_process)。 */
case MSG_NAV: {
m_nav_t n;
memset(&n, 0, sizeof n);
memcpy(&n, m->payload, m->plen < (uint16_t)sizeof n ? m->plen : (uint16_t)sizeof n);
n.app_id[MEOW_APP_ID_MAX - 1] = 0;
n.current[MEOW_ACT_MAX - 1] = 0;
if (n.nav_type == MEOW_NAV_REPORT)
meow_nav_report(n.app_id, n.depth, n.current);
else
meow_nav_request_exit(); /* MEOW_NAV_EXIT(含未知值防御性按退出处理) */
m_ack_t a;
a.code = MEOW_OK;
a.status = (uint32_t)n.depth;
ipc_send(m->fd, MSG_ACK, m->req_id, &a, sizeof a);
logmsg("ipc: NAV app=%s type=%u depth=%u top=\"%s\" -> ACK",
n.app_id, n.nav_type, n.depth, n.current);
break;
}
/* M2a:通知存储(NOTIFICATION_SYSTEM.md §4/§7/§8)。IPC 线程只入队,此处在主循环
* 单写者落存储 + 回 ACK(与 HELLO/QUERY 同一线程模型,绝不在 socket IO 阻塞)。 */
case MSG_NOTIFY: {