2011-01-07 45 views
2

希望這是一個容易回答的問題!我試圖用GtkEntryCompletion(一拉例子here),但在此代碼的工作,我似乎無法得到GtkEntry中的,當我設置字段的文本編程方式來呈現的自動完成結果。我試圖完成的是一個半預先填充的文本條目,它已經向用戶展示了一些自動完成選項。GtkEntryCompletion而無需用戶輸入?

設置我已經使用函數gtk_entry_set_text(...),gtk_entry_buffer_insert_text(...),甚至gtk_entry_buffer_emit_inserted_text(...),但無濟於事試過的文本。有沒有辦法做到這一點,以便像常規用戶輸入和顯示建議?

回答

2

我認爲你需要設置文本之後調用gtk_entry_completion_complete

編輯

對不起@Tylter,但哇,這比我想象的方式更加困難。我可以想出如何做到這一點的唯一方法是將keypress事件實際發送到窗口。

gtk_widget_grab_focus(entry); 

    GdkEvent new_event; 
    new_event.key.type = GDK_KEY_PRESS; 
    new_event.key.window = gtk_widget_get_parent_window(entry); 
    new_event.key.send_event = TRUE; 
    new_event.key.time = GDK_CURRENT_TIME; 
    new_event.key.keyval = 0x053; // capital S 
    new_event.key.state = GDK_KEY_PRESS_MASK; 
    new_event.key.length = 0; 
    new_event.key.string = 0; 
    new_event.key.hardware_keycode = 0; 
    new_event.key.group = 0; 

    gdk_event_put((gpointer)&new_event); 

EDIT 2

您是否使用了GtkDialog爲你彈出?我把它編碼得非常快,它似乎工作。在這裏,你將在一個按鈕單擊事件要創建對話框:

static void click_event(GtkWidget *widget, 
        gpointer data) 
{ 
    GtkWidget* window = gtk_dialog_new(); 
    completion = create_completion(); 
    entry = gtk_entry_new(); 
    gtk_entry_set_completion(GTK_ENTRY(entry), completion); 
    // add entry to dialog 
    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), 
         entry, TRUE, TRUE, 0); 

    gtk_widget_show(entry);  
    gtk_widget_show(window); // you must show the window before sending the keypress event 

    gtk_widget_grab_focus(entry); 

    GdkEvent new_event; 
    new_event.key.type = GDK_KEY_PRESS; 
    new_event.key.window = gtk_widget_get_parent_window(entry); 
    new_event.key.send_event = TRUE; 
    new_event.key.time = GDK_CURRENT_TIME; 
    new_event.key.keyval = 0x053; // capital S 
    new_event.key.state = GDK_KEY_PRESS_MASK; 
    new_event.key.length = 0; 
    new_event.key.string = 0; 
    new_event.key.hardware_keycode = 0; 
    new_event.key.group = 0; 

    gdk_event_put((gpointer)&new_event); 

} 

我這個看到的只是小問題,就是你必須在發送按鍵事件之前顯示對話框窗口。

+0

沒有骰子。我試過gtk_entry_set_text(...);然後是gtk_entry_completion_complete(...);沒事了。 – Tyler 2011-01-07 21:56:18

相關問題