5

ユーザーが GTK ウィンドウのサイズ変更または移動をいつ終了したかを検出したいと考えています。基本的に、Windows のWM_EXITSIZEMOVEに相当します。

ユーザーからのウィンドウのサイズ変更を検出する GTKを調べたところ、configure-event を使用してサイズ/場所の変更を検出できました。ただし、他のコードがアーキテクトであるため、サイズ変更がいつ行われるかを知りたいです。ValueChanging イベントではなく、ValueChanged とほとんど同じです。

マウスボタンが離されたかどうかを調べて、それが最後に取得したイベントであるかどうかを検出できるかどうかを考えていました。しかし、ウィンドウオブジェクトに対してもそれを行う方法が見つかりません。

4

2 に答える 2

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;
}
于 2013-09-29T13:14:38.933 に答える