フォーカスを当てたいウィジェットでgtk_widget_grab_focus
を使用してください。ウィジェットは、のフォーカスがあるでなければなりません。これは、ボタンの場合はデフォルトでtrueです。参考用のサンプルコードは次のとおりです。
#include <gtk/gtk.h>
/* Uncomment the below macro to see the default focus */
//#define DEFAULT_FOCUS
int main(void)
{
gtk_init (NULL, NULL);
#ifdef DIALOG_WITH_BUTTONS
GtkWidget * dialog = gtk_dialog_new_with_buttons ("Dialog",
NULL,
GTK_DIALOG_MODAL,
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL,
GTK_STOCK_OK,
GTK_RESPONSE_OK,
NULL);
#ifndef DEFAULT_FOCUS
gtk_widget_grab_focus(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK));
#endif
#else
GtkWidget *dialog = gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog), "Dialog");
GtkWidget *action_area = gtk_dialog_get_action_area(GTK_DIALOG(dialog));
GtkWidget *ok_button = gtk_button_new_with_label("OK");
GtkWidget *cancel_button = gtk_button_new_with_label("Cancel");
gtk_container_add(GTK_CONTAINER(action_area), cancel_button);
gtk_container_add(GTK_CONTAINER(action_area), ok_button);
gtk_widget_show_all(dialog);
#ifndef DEFAULT_FOCUS
gtk_widget_grab_focus(ok_button);
#endif
#endif
g_signal_connect(dialog, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_main();
return 0;
}
はい!ありがとう、これは絶対に私が探していたものでしたが、あなたはその大きな例を書く必要はありませんでした;)私はgtk_window_set_defaultを使った私の最初の試みがうまくいかなかった理由はまだ疑問です。 – Ancurio
フォーカスウィジェットがある場合、デフォルトのウィジェットはフォーカスを受け取らないように見えるからです。 'gtk_window_set_default'を動作させるには、ウィジェットがデフォルト(あなたが行った)とウィンドウのフォーカスを' NULL'に設定できることを確認してください。したがって、上記のコードでは、 'gtk_widget_grab_focus(ok_button);'は 'gtk_window_set_focus(GTK_WINDOW(dialog)、NULL)に置き換えることができます。 gtk_widget_set_can_default(ok_button、TRUE); gtk_window_set_default(GTK_WINDOW(ダイアログ)、ok_button); ' –