0 前言
输入是GTK+3迁移到GTK4时断裂最大的领域:挂在控件上的事件信号(key-press-event、button-press-event)连同事件掩码机制被整体删除,替代者是EventController与Gesture两套体系。老GTK程序员的第一反应往往是“我连个键盘事件都收不到了”——不是收不到,是收的方式整个换了。
断裂不止在事件。窗口自己在屏幕上的位置(gtk_window_get_position())也被删了——与《GTK4截图工具》里“屏幕像素收归合成器”是同一个逻辑:合成器收走了像素,也收走了坐标。本文沿“坐标没了→事件体系换了→手势怎么竞争→实战整合”四步展开,实战篇落地两个程序:手势画板集齐Drag、Click、Scroll、LongPress、Key与Shortcut六件套,贪吃蛇演示键盘加滑动的双输入。
验证环境:Ubuntu 26.04 LTS
1 窗口定位为什么没了
1.1 被删除的不止两个函数
GTK+3时代查询“窗口在屏幕的哪里”有一整套API,GTK4的删除相当彻底:
表1.1GTK+3定位API在GTK4的结局
| GTK+3 API | GTK4的结局 |
|---|