簡體   English   中英

GtkButton發出GDK_KEY_PRESS

[英]GtkButton to emit GDK_KEY_PRESS

我試圖使用以下窗口小部件結構,信號連接和回調將與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信號的信息很少,因此我對這里缺少的內容感到迷惑。

作為第二個問題,我記得在某處讀到一個GDK #define用於TIME_NOW東西,但是我再也找不到了。 有什么提示嗎?

1.使用“ key-press-event”代替單擊,單擊與鼠標指針和鍵盤輸入鍵相關聯,類似於(在python中):

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

2.GDK_CURRENT_TIME,在Gdk.Event類中定義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM