在Gtk +中,一个键盘事件禁用了所有其他键盘事件

时间:2013-04-15 00:25:19

标签: c gtk

所以我想通过按Ctrl + c来实现退出程序。我这样做了:

static void
quitit(GtkWidget   *widget,
       GdkEventKey *event,
       gpointer    data)
{
    if(event->state == GDK_CONTROL_MASK &&
       event->keyval == 'c')
        gtk_main_quit();
}

...

int
main(int argc,
     char **argv)
{ 
    ...

    g_signal_connect(window, "key_press_event",
                     G_CALLBACK(quitit), NULL);

    ... (Other keypress events)
}

嗯,这很有效。但问题是我连接的所有其他按键事件都停止工作,而鼠标点击仍然有效。我无法弄清楚这一点。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

key-press-event信号的回调原型是:

gboolean  user_function (GtkWidget *widget,
                         GdkEvent  *event,
                         gpointer   user_data): Run Last

根据GOBject Signal's documentation,它应该返回TRUE以阻止为事件调用其他处理程序,或者返回FALSE以进一步传播事件。

因为您将quitit()定义为void,所以它可以返回除FALSE(0)以外的任何值。因此,它会阻止其他处理程序被调用。

解决方案是更改quitit()的定义以返回gboolean并返回FALSE。