如何使用gdk_设备_get_position()?

如何使用gdk_设备_get_position()?,position,cursor,gtk,glib,gdk,Position,Cursor,Gtk,Glib,Gdk,我试图在Gdk中获取屏幕上的指针位置,发现Gdk\u display\u get\u pointer(),它工作正常,但它被标记为已弃用,现在引用Gdk\u device\u get\u position() 但是我如何使用这个函数呢?我无法获得GdkDevice,因为没有工厂,也没有构造函数。使用Gdk.DeviceManager ..... ..... GdkDisplay *display = gdk_display_get_default (); GdkDeviceManager *de

我试图在Gdk中获取屏幕上的指针位置,发现
Gdk\u display\u get\u pointer()
,它工作正常,但它被标记为已弃用,现在引用
Gdk\u device\u get\u position()

但是我如何使用这个函数呢?我无法获得
GdkDevice
,因为没有工厂,也没有构造函数。

使用Gdk.DeviceManager

.....
.....
GdkDisplay *display = gdk_display_get_default ();
GdkDeviceManager *device_manager = gdk_display_get_device_manager (display);
GdkDevice *device = gdk_device_manager_get_client_pointer (device_manager);

// do whatever with Gdk.Device, i.e:
int x, y;
gdk_device_get_position (device, NULL, &x, &y);
printf ("x= %d, y=%d", x,y);

由于GTK+3.20+,luciomrx的答案变成:

GdkDisplay* display = gdk_display_get_default();
GdkSeat* seat = gdk_display_get_default_seat(display);
GdkDevice* pointer = gdk_seat_get_pointer(seat);

我可能会为任何有兴趣在窗口中获取光标位置的人添加,您可以使用
gdk_window\u get_device\u position(gtk_widget\u get_window(gtk_window),device,&x,&y,NULL)
我应该担心调用这三个函数的速度吗?最后我需要调用
gdk\u window\u get\u device\u position
,正如jackw11111所说,但我只有一个GtkDrawingArea(小部件)。强制调用
gdk_窗口获取设备位置(gtk_小部件获取窗口(my_小部件)、gdk_设备管理器获取客户端指针(gdk_显示获取设备管理器(gdk_显示获取默认值())、&x、&y、NULL)似乎有点奇怪。
只是为了在我的绘图区域获取x和y:/