![](/img/trans.png)
[英]In simple gtk key press event example, GDK_SHIFT_MASK seems to be ignored
[英]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.