テキストを設定した後、gtk_entry_completion_completeに電話する必要があると思います。
EDIT
申し訳@Tylterが、すごい、これは私が想像よりも方法がより困難です。私がそれを行う方法を理解できる唯一の方法は、実際にキー押しイベントをウィンドウに送信することです。
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);
}
唯一の落とし穴は、あなたが、KeyPressイベントを送信する前にダイアログウィンドウを表示しなければならないということです。
ダイスはありません。私はgtk_entry_set_text(...)を試みました。それに続くgtk_entry_completion_complete(...);何もない。 – Tyler
@Tyler、編集を参照してください。 – Mark
ありがとう@マークは素晴らしい作品です。残念ながら、私はそれが動作するために必要な方法ではありません。私はポップアップウィンドウでGtkEntryを使用していますが、何らかの理由で上記のコードがそれをトリガーしません。私がTopLevelにウインドウを変更すると、それは動作します。それがどんなアイデアなのか?私はトップレベルを使ってポップアップを偽造することができると思うが、これはまだ私のバグのようだ。 – Tyler