Я пытаюсь поймать клавишу пользователя, нажав Ctrl + d в окне графического интерфейса, чтобы выйти. Мой код выглядит так:
static gboolean
callback(GtkWidget *widget,
GdkEventKey *event,
gpointer data)
{
if(event->state == GDK_CONTROL_MASK && event->keyval == 'd')
gtk_main_quit();
return FASLE;
}
Это работает на моем ноутбуке (Ubuntu 11.04, gcc 4.5.2, libgtk 2.24.4). Но когда я делаю то же самое в более новой системе (Ubuntu 12.10, gcc 4.7.2, libgtk 2.24.13), это не работает.
Я добавил g_print("%u\n", event->state);
перед оператором if
, это показывает, что когда я нажимаю Ctrl
, event->state
равно 20 вместо 4 или 1 ‹‹ 2 в документации. Если я изменю GDK_CONTROL_MASK
на 20, он будет работать в более новой системе, но не в старой. Кто-нибудь, пожалуйста, скажите мне, почему это происходит и как это исправить.