- // exit the main GUI loop during the next iteration (i.e. it does not
- // stop the program immediately!)
- virtual void ExitMainLoop();
+ // adds an event handler to the list of the handlers with pending events
+ void AppendPendingEventHandler(wxEvtHandler* toAppend);
+
+ // moves the event handler from the list of the handlers with pending events
+ //to the list of the handlers with _delayed_ pending events
+ void DelayPendingEventHandler(wxEvtHandler* toDelay);
+
+ // deletes the current pending events
+ void DeletePendingEvents();
+
+
+ // delayed destruction
+ // -------------------
+
+ // If an object may have pending events for it, it shouldn't be deleted
+ // immediately as this would result in a crash when trying to handle these
+ // events: instead, it should be scheduled for destruction and really
+ // destroyed only after processing all pending events.
+ //
+ // Notice that this is only possible if we have a running event loop,
+ // otherwise the object is just deleted directly by ScheduleForDestruction()
+ // and IsScheduledForDestruction() always returns false.
+
+ // schedule the object for destruction in the near future
+ void ScheduleForDestruction(wxObject *object);
+
+ // return true if the object is scheduled for destruction
+ bool IsScheduledForDestruction(wxObject *object) const;