1

所以我想通过按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)
}

嗯,这行得通。但问题是我连接的所有其他按键事件都停止工作,而鼠标点击仍然有效。我想不通。谁能帮我?

4

1 回答 1

2

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

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

根据GOBject Signal 的文档,它应该返回 TRUE 以停止为事件调用其他处理程序或 FALSE 以进一步传播事件。

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

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

于 2013-04-15T00:41:12.270 回答