2013-09-27 26 views
3

我想检测用户完成调整大小或移动GTK窗口的时间。在Windows中基本上相当于WM_EXITSIZEMOVE检测GTK窗口何时完成移动/用户调整大小

我看过GTK detecting window resize from the user,并能够使用配置事件检测大小/位置更改;然而,由于我的其他代码是架构师,我想知道调整大小的时间。几乎像ValueChanged而不是ValueChanging事件。

我在想如果我能发现是鼠标按钮被释放或不是,然后尝试检测它是否是我得到的最后一个事件。但无法找到一种方法来做到这一点或者对于窗口对象。

回答

2

您可以使用一个超时函数,调用完成后调用它。超时时间以毫秒为单位,您可能想要使用该值来在调用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; 
} 
+0

谢谢!这确实工作正常。但是,我担心我正在引入一个时间相关的代码。有没有什么方法可以检测出调整大小的方法,而不是依赖于某个超时。 – Manny

+0

据我所知,我恐怕不知道:(我不确定X在调整大小时提供了一个信号,只要它被请求。如果你担心超时函数被延迟,你可以使用' g_timeout_add_full'并设置高优先级。 –

相关问题