我正在尝试使用以下小部件结构,信号连接和回调将与GtkTextView支持的击键相关联的信号(CTRL + a,CTRL + x等)附加到工具栏按钮:
typedef struct
{
GtkWidget *window;
GtkWidget *text_view;
}EditorWidgets;
//...
g_signal_connect(cut, "clicked", G_CALLBACK(cut_button_press), editor_widgets);
//...
static void cut_button_press(GtkWidget *button, EditorWidgets *editor_widgets)
{
UNUSED(button);
GdkEvent *event = gdk_event_new(GDK_KEY_PRESS);
event->key.window = gtk_widget_get_window(editor_widgets->window);
event->key.send_event = FALSE;
event->key.time = 0;
event->key.state = GDK_CONTROL_MASK;
event->key.keyval = GDK_KEY_x;
event->key.string = g_strdup("x");
event->key.length = strlen(event->key.string);
gtk_main_do_event(event);
gdk_event_free(event);
}
运行时,GDK抱怨如下:
(ex1:7856): Gdk-WARNING **: Event with type 8 not holding a GdkDevice. It is most likely synthesized outside Gdk/GTK+
这让我知道我创造了不正确的信号(我假设)。然而,关于按钮发出GDK信号的情况很少,所以我对这里缺少的东西感到茫然。
作为第二个问题,我记得曾在某处读到#define
或某事的GDK TIME_NOW
,但我再也找不到了。那里有任何提示吗?
答案 0 :(得分:1)
1.使用“按键事件”代替单击,单击与鼠标指针和键盘输入键相关联,如(在python中):
def on_key_press (self, widget, event):
if event.keyval == 120:
print ('test')
2.GDK_CURRENT_TIME,在Gdk.Event类中定义