【问题标题】:gtk_events_pending( ) is TRUE, but gtk_get_current_event( ) is NULLgtk_events_pending( ) 为 TRUE,但 gtk_get_current_event( ) 为 NULL
【发布时间】:2021-12-30 13:59:35
【问题描述】:

我正在尝试将一个古老的 GTK+ 应用程序移植到 GTK2 并遇到以下问题:在 GTK+ 版本中,gtk_events_pending( ) 给出 0,而在 GTK2 版本中给出了 1。代码的更改很少,所以我不明白为什么同一个函数在 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 作为当前事件。怎么会这样?

【问题讨论】:

    标签: c gtk glib gtk2


    【解决方案1】:

    通过阅读gtk_get_current_event()的文档,

    获取当前由 GTK 处理的事件的副本。 例如,如果您正在处理“clicked” 信号,则当前事件将是触发clicked 信号的GdkEventButton

    ...我猜gtk_get_current_event() 只会在您处于该事件的信号处理程序中间时才返回该事件。

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

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

    【讨论】:

    • 感谢您的回答和提示!同时,这个问题已经被 Arch 论坛的一位网友解决了:bbs.archlinux.org/viewtopic.php?pid=2012555#p2012555 GTK2 端口现在 90% 的功能,所以现在我正在尝试将它进一步移植到 GTK3,然而,这很难,因为没有GtkGlArea 更多...
    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多