Я пытаюсь открыть диалоговое окно после настройки Gtkmm следующим образом:
MainWindow::MainWindow() : public Gtk::Window { //etc etc
и в main ()
Gtk::Main ginit(argc,argv);
MainWindow *mw = new MainWindow; // delcared as extern in header as well for the dialog
ginit.run(*mw);
, когда запускается необходимое событие,следующий код должен работать, но не работает.Что странно, так как пример на http://library.gnome.org/devel/gtkmm-tutorial/2.21/sec-dialogs-filechooserdialog.html.en компилируется и работает отлично.
Gtk::FileChooserDialog *dlg = new Gtk::FileChooserDialog(Glib::ustring("choose destination"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
dlg->set_transient_for(*mw);
dlg->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
dlg->add_button(Glib::ustring("Select"), Gtk::RESPONSE_OK);
dlg->show_all_children();
int response =dlg->run();
Согласно GDB, все это завершается с ошибкой в dlg-> run ();И чтобы сделать его более увлекательным, он дает мне одну из двух ошибок:
(PCollab: 4583): GLib-GObject-CRITICAL **: g_object_ref: утверждение `G_IS_OBJECT (object) 'не выполнено
(PCollab: 4583): GLib-GObject-WARNING **: экземпляр недопустимого неинстанцируемого типа `-g-type-private - GTypeFlags '
(PCollab: 4583): GLib-GObject-CRITICAL **: g_signal_emit_valist: утверждение «G_TYPE_CHECK_INSTANCE (экземпляр)» не выполнено
(PCollab: 4583): GLib-GObject-CRITICAL **: g_object_unref: утверждение `G_IS_OBJECT * объект 10 * (23) (объект)1024 * (PCollab: 4583): GLib-GObject-CRITICAL **: g_object_ref: утверждение `G_IS_OBJECT (object) 'не выполнено
(PCollab: 4583): GLib-GObject-WARNING **: экземпляр недопустимого не-instantiatable тип `(null) '
(PCollab: 4583): GLib-GObject-CRITICAL **: g_signal_emit_valist: утверждение` G_TYPE_CHECK_INSTANCE (instance)' не выполнено
(PCollab: 4583):GLib-GObject-CRITICAL **: g_object_unref: утверждение `G_IS_OBJECT (объект) 'не выполнено PCollab: FatОшибка ввода-вывода 11 (Ресурс временно недоступен) на X-сервере: 0.0.
Итак, я понял, что, черт возьми, запустил
sudo xhost +
Что делает магию, которая позволяет одной и той же программе подключаться дважды к X11 (или так я читаю в всезнающем интернете) Это имеет некоторый эффект, но не тот, который я желаю.Потому что теперь это дает мне нечто более загадочное:
../../src/xcb_io.c: process_responses: Assertion `(((long) (dpy->last_request_read) - (long)(dpy->request)) <= 0)' failed.
Я бы предположил, что первая ошибка означает, что mw не указывает на Gtk :: Window, так как gtk не считает его объектом, но факт остается фактом, что mw отображается на моем экране совершенно без ошибок, когда я запускаю Gtk :: Main ginit (* mw);Поскольку у меня даже нет ни малейшего представления о том, что это значит, я надеюсь, что некоторые гуру Gtk / X11 могут указать мне правильное направление, чтобы исправить мой код.
Другие подробности, я использую Ubuntu Linux (amd64)с gcc 4.4.5 и gtkmm 2.4