所以我想通过按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)
}
嗯,这很有效。但问题是我连接的所有其他按键事件都停止工作,而鼠标点击仍然有效。我无法弄清楚这一点。任何人都可以帮助我吗?
答案 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。