Я модифицирую существующую программу, поэтому я не реализовал ускорители, но я нашел способ их получить, вот мой код:
GList* accel_groups;
accel_groups = gtk_accel_groups_from_object(G_OBJECT(toplevel_window));
printf("%d\n", g_list_length(accel_groups));
//the length of the list is 1, that's why I don't show you a cicle there, but just get the first element
GtkAccelGroup* accel_group;
accel_group = g_list_nth_data(accel_groups, 0);
printf("%d\n", gtk_accel_group_disconnect(GTK_ACCEL_GROUP(accel_group), NULL));
accel_groups = gtk_accel_groups_from_object(G_OBJECT(toplevel_window));
printf("%d\n", g_list_length(accel_groups));
Сначала printf
печатает 1
,поэтому у меня есть один GtkAccelGroup
в окне.Второй printf
печатает 1
и в соответствии с https://developer.gnome.org/gtk2/stable/gtk2-Keyboard-Accelerators.html#gtk-accel-group-disconnect это означает, что ускоритель был найден и деактивирован.Третий printf
печатает снова 1
, поэтому у окна все еще есть один GtkAccelGroup
.
Есть ли способ удалить GtkAccelGroup
из window
?Причина с моим кодом, горячие клавиши все еще работают после gtk_accel_group_disconnect