我构建了一个复合窗口小部件,并希望它具有它自己的加速器(热键),仅当它处于焦点时才可用。到目前为止,我唯一的想法是如何实现这一点,就是当我的小工具进入和离开焦点时,将顶级加速器组更改。似乎应该有更好的方法。每个窗口小部件加速器的Gtk
0
A
回答
0
这里是类初始化函数这是我一直在寻找的解决方案
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);
}
0
每个控件类都公开指向其处理程序的指针,作为控件类结构的一部分。在调用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窗口小部件类,如果它尚未初始化。
0
看起来像我需要使用的键绑定,而不是加速器
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. 获取Tkinter窗口的每个子窗口小部件
- 5. 在单个窗口中添加2个不同的小部件GTK +
- 6. 放入CDetailView窗口小部件另一个窗口小部件
- 7. GWT:将窗口小部件添加到新窗口浏览器
- 8. 如何添加复合窗口小部件:这个窗口小部件的父窗口没有实现HasWidgets
- 9. 自定义GTK窗口小部件的外观
- 10. 将GTK窗口小部件调整到C中的vbox中012
- 11. GTK:窗口小部件的无限延迟列表
- 12. 如何更改GTK窗口小部件(如堆栈)的属性?
- 13. 窗口小部件
- 14. 增加窗口小部件的尺寸
- 15. Qt选项卡窗口小部件添加角组窗口小部件
- 16. GTK窗口小部件对话框不关闭
- 17. GTK#在点击窗口小部件时删除initialText
- 18. 从窗口访问窗口小部件*
- 19. Python GTK窗口浏览器
- 20. 追加到窗口小部件样式
- 21. 在窗口中添加小部件
- 22. gtk 3.4调整小部件和标签附加到入口小部件
- 23. GTK + 3:如何渲染INSENSITIVE窗口小部件的风格为NORMAL窗口部件
- 24. 在Gtk 3.0中基于窗口小部件大小缩放字体大小
- 25. 拾色器和窗口小部件
- 26. 如何从回调函数获取另一个窗口的窗口小部件的指针 - GTK - C
- 27. 创建一个WordPress窗口小部件 - 如何仅当页面上的窗口小部件加载脚本
- 28. 将多个gstreamer视频窗口绑定到单个GTK窗口小部件(RTSP流式传输)
- 29. MVC窗口小部件
- 30. 如何防止窗口小部件展开为整个框(GTK 2)