检测用户何时完成 GTK 窗口的移动/调整大小

Man*_*nny 5 c python gtk gdk pygobject

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

我已经查看了GTK 检测用户窗口调整大小,并且能够使用配置事件检测大小/位置更改;但是,由于我的其他代码是架构师,我想知道调整大小何时完成。几乎就像 ValueChanged 而不是 ValueChanging 事件。

我在想是否我能找出鼠标按钮是否被释放,然后尝试检测它是否是我得到的最后一个事件。但是对于 window 对象也找不到办法做到这一点。

小智 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;
}
Run Code Online (Sandbox Code Playgroud)