You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Common Lisp CFFI关闭Gtk4应用的所有窗口?

问题描述

关闭Gtk4库的常规方式是关闭所有窗口,但基于GIR的绑定仅支持关闭单个窗口。glib的g_list_foreach函数似乎是可行的解决思路——我想把应用的窗口列表传入该函数,调用window-close来批量关闭窗口。请点评我下面这个初级实现尝试,另外假设我的Gtk4调用逻辑没问题,该怎么用CFFI完成这个操作?

我的尝试代码:

(cffi:define-foreign-library libglib)
(cffi:use-foreign-library libglib)
(cffi:defcfun "g_list_foreach" :void
  (list :pointer)
  (func :pointer)
  (user-data :pointer))
(cffi:foreign-funcall "g_list_foreach"
                      :pointer (gtk4:application-windows app)
                      :pointer #'gtk4:window-close
                      :pointer nil)                                               

我用cl-gtk4搭建了应用,还在自己的分支里加了glib绑定,但GIR自省没法给出我需要的实现方案。

可能的解决方案
(loop for aw = (gtk4:application-active-window app)
      until (null aw)
      do (gtk4:window-close aw))

内容的提问来源于stack exchange,提问作者ruby_object

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:12:52