2013-09-27 25 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'並設置高優先級。 –

相關問題