在GTK的早期版本中,我们添加了一个必要的事件掩码,附加到configure-event
。
gtk_widget_add_events(GTK_WIDGET(window), GDK_CONFIGURE);
g_signal_connect(G_OBJECT(window), "configure-event",
G_CALLBACK(configure_callback), NULL);
我们从处理程序中得到了相应的x,y坐标。
void configure_callback(GtkWindow *window,
GdkEvent *event, gpointer data) {
int x, y;
x = event->configure.x;
y = event->configure.y;
...
}
与此最相似的是GtkEventControllerMotion
,但它是用于鼠标指针,而不用于窗口移动事件。
如何在GTK4中做到这一点?
你不能。这是因为出于隐私和/或技术原因,并非所有窗口管理器/合成器都提供此信息。
例如,Wayland不提供窗口坐标,因为并不是每个Wayland合成器都是2D矩形——例如,像cage或gamescope这样的kiosk合成器,或者像wxrd这样的VR合成器。
因此,GTK4的功能被删除。您需要使用特定于X11的API来获得这些信息,但请注意,您需要强制应用程序使用X11(在Wayland上的XWayland合成器上(
https://docs.gtk.org/gtk4/migrating-3to4.html#adapt-到gtkwindow api更改