Я создаю составной виджет и хотел бы, чтобы у него были свои собственные ускорители (горячие клавиши), доступные только тогда, когда они находятся в фокусе. Единственная идея, которой я до сих пор знаю, как это сделать, - это изменить группу ускорителей на верхнем уровне, когда мой виджет входит и выходит из фокуса. Кажется, должен быть лучший способ.Gtk для ускорителей виджета
ответ
Вот функция класса инициализации, которая является решением я искал
static void
webview_class_init (WebviewClass *klass)
{
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
GtkBindingSet *binding_set;
signals[ZOOM_IN] = g_signal_new_class_handler("zoom_in",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_CALLBACK (webview_zoom_in),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 1,
G_TYPE_BOOLEAN, TRUE);
binding_set = gtk_binding_set_by_class (klass);
gtk_binding_entry_add_signal (binding_set, GDK_plus, GDK_CONTROL_MASK,
"zoom_in", 1,
G_TYPE_BOOLEAN, TRUE);
}
Каждый класс виджетов предоставляет указатели на его обработчики как часть структуры класса виджетов. Вы можете их исправить во время выполнения, после вызова gtk_init()
, но перед входом в основной цикл приложения.
Так, например, вы могли бы залатать ключ-отжимают обработчик GtkFoo так:
static gboolean (*oldFooKeyPress)(GtkWidget* _widget, GdkEventKey* _event);
...
GtkWidgetClass* fooClass = GTK_WIDGET_CLASS(g_type_class_ref(GTK_TYPE_FOO));
oldFooKeyPress = fooClass->key_press_event;
fooClass->key_press_event = myFooKeyPress;
Тогда вы могли бы написать myFooKeyPress()
так:
static gboolean myFooKeyPress(GtkWidget* widget, GdkEventKey* event)
{
if (widget is one I am interested in &&
event is a special accelerator for that widget)
{
do something special here
and maybe return
}
return oldFooKeyPress(widget, event);
}
Насколько я помню, когда вы делаете исправление выше, вызывая GTK_TYPE_FOO
, инициализирует класс виджета Foo, если он еще не был инициализирован.
Похоже, мне нужно использовать сочетания клавиш вместо ускорителями
http://library.gnome.org/devel/gtk/unstable/gtk-Bindings.html
Перекрестная ссылка на GtkTextView показывает, как http://www.koders.com/c/fid959C3555A3004EA74AD6E0276122FC19673F9912.aspx?s=sort
- 1. Фиксация размера виджета GTK?
- 2. Функция обратного вызова вызова GTK для виджета
- 3. Состояние GTK + виджета не обновлено?
- 4. Пользовательских GTK виджета с Валом
- 5. GTK - сделать настройки виджета постоянными
- 6. GTK сетки добавить два виджета
- 7. Перемещение виджета gtk, закрепленного в текстовом виде gtk
- 8. Добавление пользовательского виджета GTK # в каталог Glade
- 9. GTK # delete initialText при щелчке виджета
- 10. Полностью запутать о создании виджета GTK + C
- 11. Как изменить цвета произвольного виджета в GTK +?
- 12. Получение красивого размера виджета в MonoDevelop (Gtk #)
- 13. gtk # добавление виджета при нажатии кнопки
- 14. Как установить расположение виджета в GTK +?
- 15. Mono GTK # - PropertyNotifyEvent окна или виджета
- 16. Как использовать вязкость любого виджета на gtk?
- 17. Оптимальный способ получения дочернего виджета в Gtk #
- 18. Python: Как работают экземпляры виджета GTK?
- 19. Добавление виджета с общей высотой в gtk #
- 20. Как установить цвет для каждого виджета в GTK
- 21. Почему визуальный дизайнер GTK использует систему «pack» для размещения виджета?
- 22. Преимущества использования ускорителей XML
- 23. Можно определить несколько ускорителей для JMenuItem?
- 24. Для виджета для Android-виджета
- 25. Как получить родительский Gtk :: Окно изнутри производного класса виджета?
- 26. Как заставить размер виджета в поле с Gtk 3
- 27. Есть ли официальный способ создания дискретного диапазона виджета в GTK?
- 28. Размер шрифта на основе размера виджета в Gtk 3.0
- 29. Python: Как два виджета GTK могут взаимодействовать друг с другом?
- 30. Gtk Как добавить виджет GtkMenu на конец края виджета