LINUX.ORG.RU

gtk обработка can_activate_accel


0

0

Подскажите не могу разобраться... допустим мне надо обрабатывать горячие 
нажатия клавишь в программе.... Делаю так:

  accel_group = gtk_accel_group_new ();

  main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_add_accelerator (main_window, "activate_default", accel_group,
                              GDK_F, (GdkModifierType) GDK_CONTROL_MASK | GDK_MOD1_MASK,
                              GTK_ACCEL_VISIBLE);

  gtk_window_add_accel_group (GTK_WINDOW (main_window), accel_group);


...

  g_signal_connect ((gpointer) main_window, "can_activate_accel",
                    G_CALLBACK (on_main_window_can_activate_accel),
                    NULL);

...

gboolean
on_main_window_can_activate_accel      (GtkWidget       *widget,
                                        guint            arg1,
                                        gpointer         user_data)
{
 // Как проверить нажал ли я ctrl+alt+F или другую комбинацию?
}
★★★

Возьми что-ли существующий пример с GtkUIManager, чтобы так сильно не путаться. С GtkUIManager проще всего ускорителей понаделать.

Ты ускоритель на сигнал "activate_default" повесил, при чём здесь "can_activate_accel"? "can_activate_accel" служит для перехвата сигналов в дочерних классах. Функция gtk_widget_add_accelerator очень простая - после нажатия на одну заданную клавишу будет порождён сигнал. При этом не различается, какая клавиша нажата и т.д. Преимущество acceloв - пользователь их может изменять, но используются они в основном только в меню.

Правильнее того же эффекта добиться, перехватив сигнал key_pressed или использовав GtkBindings. Ну это если класс оформлен отдельный.

welkam ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.