имеется простая gtk прога, использующая glade. Понадобилось уже в самой программе добавить виджет (напр. кнопка) в уже существующий Viewport (в glade-файле). Все отлично, пока это происходит в теле функции main. Как только я пытаюсь сделать это в другой функции function виджет не добавляется. В чем тут дело: я что-то не понимаю или это просто баг?
Прикрепленный файл - архив - содержит glade-файл, исходники maincorrect.cpp (работает, но без функции), mainincorrect.cpp (с функцией, но не работает), compilecorrect, compileincorrect - скрипты для компилирования вышеуказанных исходников и correct, incorrect - откомпилированные бинарники.
Мои личные данные
ос - 2.6.23-gentoo-r8
компилятор gcc-4.1.2
gtkmm-1.2
libglademm-2.4
glade-3.4.5
Листинг неработающей программы:
Код:
#include <libglademm/xml.h>
#include <gtkmm.h>
#include <iostream>
using namespace std;
Gtk::Window* function(void);
int main (int argc, char **argv)
{
Gtk::Main kit(argc, argv);
Gtk::Window* pWindow = function();
/*
Glib::RefPtr<Gnome::Glade::Xml> refXml;
#ifdef GLIBMM_EXCEPTIONS_ENABLED
try
{
refXml = Gnome::Glade::Xml::create("main.glade");
}
catch(const Gnome::Glade::XmlError& ex)
{
std::cerr << ex.what() << std::endl;
}
#else
std::auto_ptr<Gnome::Glade::XmlError> error;
refXml = Gnome::Glade::Xml::create("main.glade", "", "", error);
if(error.get())
{
std::cerr << error->what() << std::endl;
}
#endif
Gtk::Window* pWindow;
refXml->get_widget("main_window", pWindow );
Gtk::Viewport* pViewport1 = 0;
refXml->get_widget("viewport1", pViewport1);
Gtk::Button but("butt");
pViewport1 -> add(but);
but.show();
*/
kit.run(*pWindow);
return 0;
}
Gtk::Window* function(void)
{
Glib::RefPtr<Gnome::Glade::Xml> refXml;
#ifdef GLIBMM_EXCEPTIONS_ENABLED
try
{
refXml = Gnome::Glade::Xml::create("main.glade");
}
catch(const Gnome::Glade::XmlError& ex)
{
std::cerr << ex.what() << std::endl;
}
#else
std::auto_ptr<Gnome::Glade::XmlError> error;
refXml = Gnome::Glade::Xml::create("main.glade", "", "", error);
if(error.get())
{
std::cerr << error->what() << std::endl;
}
#endif
Gtk::Window* pWindow;
refXml->get_widget("main_window", pWindow );
Gtk::Viewport* pViewport1 = 0;
refXml->get_widget("viewport1", pViewport1);
Gtk::Button but("butt");
pViewport1 -> add(but);
but.show();
return pWindow;
}