Re: ScrolledWindow::remove() problem
- From: Cedric Gustin <cedric gustin gmail com>
- To: "Sebastián E.Peyrott" <as7cf yahoo com>
- Cc: gtkmm-list gnome org
- Subject: Re: ScrolledWindow::remove() problem
- Date: Tue, 24 Oct 2006 20:53:51 +0200
Hi Sebastian,
What about calling show_all_children() after you have added the widget
to the scrollwindow (instead of in the layout constructor where the
layout hasn't been fully initialized yet) ?
Works fine on my winxp box with gtkmm 2.8.
Cedric
Sebastián E.Peyrott wrote:
> Of course, here's a little app that crashes under Windows but seems to run OK
> in Linux. You'll need to click the button twice, since the ScrolledWindow is
> empty the first time. #define EXAMPLE_STANDARD_WIDGETS if you want to use
> standard widgets instead of the derived class, in which case the app should run
> without problems even under Windows.
> These are the tested configurations:
> Linux (GCC-4.1.1):
> - Build: Gtk-2.8.19/Gtkmm-2.8.3 - Runtime: Gtk-2.8.19/Gtkmm-2.8.3 -> OK!
> Windows (XP, Mingw32-GCC-4.1.1 and Mingw32-GCC-3.4.6):
> - Build: Gtk/Gtkmm-2.6 - Runtime: Gtk/Gtkmm-2.8 -> Crashes with derived widget.
> - Build: Gtk/Gtkmm-2.8 - Runtime: Gtk/Gtkmm-2.8 -> Crashes with derived widget.
>
> I should mention the Windows libraries (build + runtime) are the binaries
> provided by Cedric Gustin.
> -------------------------------------------------------------------------------
>
> #include <gtkmm/window.h>
> #include <gtkmm/scrolledwindow.h>
> #include <gtkmm/layout.h>
> #include <gtkmm/button.h>
> #include <gtkmm/main.h>
> #include <gtkmm/box.h>
> #include <gtkmm/tooltips.h>
> #include <gtkmm/label.h>
>
> /* Define me to use standard widgets. */
> /* Undefine me to use the derived class below. */
> //#define EXAMPLE_STANDARD_WIDGETS
>
> /* This is the evil class! */
> class c_DerivedLayout : public Gtk::Layout
> {
> public:
> //We do nothing.
> c_DerivedLayout()
> {
> /* Comment me out, if you think I'm guilty =) */
> put(*Gtk::manage(new Gtk::Label("Hello")), 5, 5);
> show_all_children();
> /* ------------------------------------------ */
> }
> };
>
> class c_Window : public Gtk::Window
> {
> public:
> c_Window()
> {
> set_default_size(400, 400);
> add(m_vboxBox);
> m_vboxBox.pack_start(m_scrollwScroll);
> m_vboxBox.pack_end(m_butButton);
> m_butButton.set_label("Click Me Twice! =)");
> l_auxTip.set_tip(m_butButton, "Whenever you click me, I'll remove the
> contained "
> "widget from the ScrolledWindow above me,
> and then "
> "add a new widget. The first time you do
> so, there'll "
> "be no contained widget, so everything
> should work as expected. "
> "Click me again, and, if we are in Windows,
> I'll die.");
> m_butButton.signal_clicked().connect(sigc::mem_fun(*this,
> &c_Window::on_m_butButton_clicked));
>
> show_all_children();
> }
>
> private:
> void on_m_butButton_clicked()
> {
> /* If there is no widget inside the ScrolledWindow,
> or, if the contained widget is a standard widget,
> everything works as expected.*/
> m_scrollwScroll.remove();
> /* We work with unmanaged widgets, so in this case
> we have a leak (this is obviously avoided in the
> original project).*/
> #ifdef EXAMPLE_STANDARD_WIDGETS
> m_scrollwScroll.add(*new Gtk::Layout);
> #else
> m_scrollwScroll.add(*new c_DerivedLayout);
> #endif
> }
>
> Gtk::Tooltips l_auxTip;
> Gtk::VBox m_vboxBox;
> Gtk::ScrolledWindow m_scrollwScroll;
> Gtk::Button m_butButton;
> };
>
> int main(int argc, char** argv)
> {
> Gtk::Main l_Main(argc, argv);
> c_Window l_Window;
> l_Main.run(l_Window);
> return 0;
> }
>
>
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]