我想检测用户何时完成重新调整大小或移动GTK窗口.基本上相当于
Windows中的
WM_EXITSIZEMOVE.
我查看了GTK detecting window resize from the user,并且能够使用configure-event检测大小/位置变化;但是由于我的其他代码是架构师,我想知道何时完成调整大小.几乎像ValueChanged而不是ValueChanging事件.
我在想是否能找到鼠标按钮是否被释放然后尝试检测它是否是我收到的最后一个事件.但无法找到一种方法来为窗口对象做到这一点.
最佳答案 您可以使用在调整大小完成后调用的超时函数.超时以毫秒为单位,您可能希望使用该值来在调用resize_done的延迟和在完成调整大小之前触发它之间取得平衡.
#define TIMEOUT 250
gboolean resize_done (gpointer data)
{
guint *id = data;
*id = 0;
/* call your existing code here */
return FALSE;
}
gboolean on_configure_event (GtkWidget *window, GdkEvent *event, gpointer data)
{
static guint id = 0;
if (id)
g_source_remove (id);
id = g_timeout_add (TIMEOUT, resize_done, &id);
return FALSE;
}