我認爲你需要設置文本之後調用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);
}
我這個看到的只是小問題,就是你必須在發送按鍵事件之前顯示對話框窗口。
沒有骰子。我試過gtk_entry_set_text(...);然後是gtk_entry_completion_complete(...);沒事了。 – Tyler 2011-01-07 21:56:18