Re: [gtk-list] Quitting gracefully in Gtk--



In message <3780E886.DCB284A2@student2.lu.se>Carl Johan Lejdfors writes
>Hello,
>
>I have som questions concerning some features of Gtk--.
>
>1.  If I have a class like:
>
>     class My_Window : public Gtk_Window {
>
>         public:
>
>          gint delete_event_impl( GdkEventAny* ) {
>              Gtk_Main::instance()->quit();
>              return 0;
>          }
>          void on_quit_activate() {
>              Gtk_Main::instance()->quit();
>          }
>
>     //code deletet for purpose of clarity
>     }
>
>with a some stuff on it and a menubar with a Quit button.
>Then when I delete the window everything works fine.
>However when I press the Quit button the window dissappears
>and I get a Seg-fault or Bus error.

Hmm.  I don't get that on my version, but then I am not using
on_quit_activate.  The skeleton I have always used is this:

class MainWindowClass : public Gtk_Window 
  {
      gint delete_event_impl(GdkEventAny *) 
        {app->quit();
         return 0;
        }
  };

MainWindowClass::MainWindowClass(void) : Gtk_Window(GTK_WINDOW_TOPLEVEL)
  {
   // Connect the Quit button to the application quit
   connect_to_method(button->clicked,app,&Gtk_Main::quit);
  }


If this doesn't work, get a backtrace of the offending event and
mail it to the gtkmm maillist.


>There is the same problem with the planet example included with the
>distribution.
>I suspect this has to do with the other delete event-handlers not being
>called properly
>(if I change the return from delete_event_impl() to a 1 the program also
>seg-faults.)

I have never actually tried that, but it seems likely that some
part of Gtk-- probably died on the quit and returning 1 is
causing it to continue using that piece.  I will have to spec it 
out more closely.

(You mention the planet demo.  Is that from the Gtk-- distribution or
the GtkGLArea-- dist?)


>Is there a way to quit more gracefully? Is it due to some error in Gtk--
>or the compilation
>(I run Gtk-- 1.0.1 on top of gtk+-1.2.3 with glib-1.2.3 on an IRIX 6.5
>with the native compiler)

There should be.  It always exits gracefully on my Linux System.  
(I am currently trying to get acces to an IRIX system to test
other code which has problems on that compiler.  I will check
this as well when I do.  It seems likely that the IRIX compiler
is "weak" in support of some structures and that some of the 
less than portable tricks we use of Linux are breaking down.)

>2. Why does a window resize (on my platform anyway) generate one
>configure event followed by *two* expose events?

It is not uncommon for a single change to result in multiple expose
events.  There is a count field in the expose event that indicates
the number of pending expose events for the window.  If you are 
redrawing the entire window at each expose event just skip all
event that do not have a count of 0.   A single bring forward 
can generate more then 4 exposes depending on the number of windows
that overlap.

Hope it helps.

--Karl



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]