ユーザーが GTK ファイル セレクターを使用してゲーム レベルをロードできる C プログラムのテスト バージョンを作成しようとしています。動作しているようで、ファイル選択ウィンドウを開きますが、ユーザーがファイルを選択しようとするとクラッシュします。次のように宣言されているにもかかわらず、GtkWindow が GtkWindow として認識されていないことが問題のようです。
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //initialize window
次に、GUI 構造体のウィンドウ ポインターに保存します。
typedef struct gui gui_t;
struct gui {
GtkWidget *window;
GtkWidget *frame;
GtkWidget *menu_bar;
GtkWidget *drawing_area;
GtkWidget *vbox;
level_t *game;
};
次に、以下の load_menu コールバックに渡されます。現在、選択されたファイル名を印刷しようとしています:
void gui_load_menu(gpointer data) {
gui_t *gui = (gui_t *)data;
GtkWindow *window = (GtkWindow *)(gui->window);
GtkWidget *dialog;
dialog = gtk_file_chooser_dialog_new("Load Level", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
fprintf(stdout, "%s", filename);
}
}
これらは、特定の実行時エラーです。
(guitest:4445): GLib-GObject-WARNING **: 無効なインスタンス化不可能な型
guchar' in cast to
GtkWindow'(guitest:4445): Gtk-CRITICAL **: gtk_window_set_transient_for: assertion `parent == NULL || GTK_IS_WINDOW (親)' が失敗しました
何か案は?
ありがとう!