我想检测用户何时完成调整大小或移动GTK窗口。基本上等同于Windows中的WM_EXITSIZEMOVE。
我看过GTK从用户处检测窗口调整大小,并能够使用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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句