gtk_events_pending( ) 为 TRUE,但 gtk_get_current_event( ) 为 NULL

gtk_events_pending( ) is TRUE, but gtk_get_current_event( ) is NULL

我正在尝试将一个古老的 GTK+ 应用程序移植到 GTK2,但遇到以下问题:在 GTK+ 版本中 gtk_events_pending( ) 给出 0,而在 GTK2 版本中它给出 1。变化非常少代码,所以我不明白为什么相同的函数 returns 在 GTK+ 和 GTK2 中有不同的值。所以我试图找出哪个事件正在等待:

if (gtk_events_pending( ) == 0) {
  fprintf(stderr, "gtk_events_pending=0\n");
} else {
  fprintf(stderr, "gtk_events_pending=1\n");
  if ( gtk_get_current_event () == NULL ) {
    fprintf(stderr, "current event is NULL\n");
  }
}

但是,我总是得到 NULL 作为当前事件。怎么会这样?

阅读 gtk_get_current_event()

的文档

Obtains a copy of the event currently being processed by GTK. For example, if you are handling a “clicked” signal, the current event will be the GdkEventButton that triggered the clicked signal.

...我猜 gtk_get_current_event() 只会 return 如果您处于该事件的信号处理程序的中间,则您会收到该事件。

您可以通过设置环境变量 GDK_DEBUG=events 获得有关触发哪些事件的信息。此环境变量有一个值列表 here

另请注意,GTK 2 已经过时 12 年了!随着时间的推移,你越来越不可能找到关于它的问题的好答案......