Несмотря на предыдущие ответы и GTK Reference, при использовании GTK_WINDOW_POPUP можно получить фокус клавиатуры. Вам необходимо подключиться к событию "шоу" ...
GtkWindow *w = gtk_window_new(GTK_WINDOW_POPUP);
g_signal_connect(G_OBJECT(w), "show", G_CALLBACK(on_window_show), NULL);
... с обратным вызовом, пытающимся захватить клавиатуру:
static void on_window_show(GtkWidget *w, gpointer user_data) {
/* grabbing might not succeed immediately... */
while (gdk_keyboard_grab(w->window, FALSE, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) {
/* ...wait a while and try again */
sleep(0.1);
}
}
Это хорошо работает для меня.