GtkButton发出GDK_KEY_PRESS

时间:2014-07-21 21:05:07

标签: c gtk gtk3

我正在尝试使用以下小部件结构,信号连接和回调将与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,但我再也找不到了。那里有任何提示吗?

1 个答案:

答案 0 :(得分:1)

1.使用“按键事件”代替单击,单击与鼠标指针和键盘输入键相关联,如(在python中):

   def on_key_press (self, widget, event):
       if event.keyval == 120:
          print ('test')

2.GDK_CURRENT_TIME,在Gdk.Event类中定义

相关问题