使用 GTK 查询光标位置

Query cursor position with GTK

有没有办法使用 GTK C 库查询光标位置?我正在编写一个程序,我需要实时读出光标的位置(通过回调函数或轮询值以查找变化)。我已经浏览了 GTK 文档,但找不到任何明显的暴露光标位置的内容。

我目前正在使用 GTK C 库编写这个程序,因为 a) 我已经有一些用 C 编写的代码来与低级 Raspberry Pi 外围设备接口,我不想重写它如果我能避免的话,使用不同的语言。低级代码基于 mmap(),我相信它仍然适用于 C++,所以如果到了紧要关头,我想我可以用 C++ 用其他一些 GUI 库(如 wxWidgets 或 QT)重写它。 (有没有简单的方法可以用这些库读取光标位置?)

你可以看看那些在面板上吸引眼球的玩具小部件是如何完成的,例如xfce4-eyes-plugin.

gboolean
where (void)
{
  gint x, y;
  GdkWindow *window;
  GdkDevice *mouse_device;

#if GTK_CHECK_VERSION (3,20,0)
  GdkSeat *seat = gdk_display_get_default_seat (gdk_display_get_default ());
  mouse_device = gdk_seat_get_pointer (seat);
#else
  GdkDeviceManager *devman = gdk_display_get_device_manager (gdk_display_get_default ());
  mouse_device = gdk_device_manager_get_client_pointer (devman);
#endif

  window = gdk_display_get_default_group (gdk_display_get_default ());
  gdk_window_get_device_position (window, mouse_device, &x, &y, NULL);
  g_message ("pointer: %i %i", x, y);

  return G_SOURCE_CONTINUE;
}