class WXDLLIMPEXP_FWD_CORE wxSizer;
class WXDLLIMPEXP_FWD_CORE wxSizerFlags;
+// Under GTK and OS X "About" dialogs are not supposed to be modal, unlike MSW
+// and, presumably, all the other platforms.
+#ifndef wxUSE_MODAL_ABOUT_DIALOG
+ #if defined(__WXGTK__) || defined(__WXMAC__)
+ #define wxUSE_MODAL_ABOUT_DIALOG 0
+ #else
+ #define wxUSE_MODAL_ABOUT_DIALOG 1
+ #endif
+#endif // wxUSE_MODAL_ABOUT_DIALOG not defined
+
// ----------------------------------------------------------------------------
// wxGenericAboutDialog: generic "About" dialog implementation
// ----------------------------------------------------------------------------
// common part of all ctors
void Init() { m_sizerText = NULL; }
+#if !wxUSE_MODAL_ABOUT_DIALOG
+ // An explicit handler for deleting the dialog when it's closed is needed
+ // when we show it non-modally.
+ void OnCloseWindow(wxCloseEvent& event);
+ void OnOK(wxCommandEvent& event);
+#endif // !wxUSE_MODAL_ABOUT_DIALOG
wxSizer *m_sizerText;
};
CentreOnParent();
+#if !wxUSE_MODAL_ABOUT_DIALOG
+ Connect(wxEVT_CLOSE_WINDOW,
+ wxCloseEventHandler(wxGenericAboutDialog::OnCloseWindow));
+ Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED,
+ wxCommandEventHandler(wxGenericAboutDialog::OnOK));
+#endif // !wxUSE_MODAL_ABOUT_DIALOG
+
return true;
}
m_sizerText->Add(pane, wxSizerFlags(0).Expand().Border(wxBOTTOM));
}
+#if !wxUSE_MODAL_ABOUT_DIALOG
+
+void wxGenericAboutDialog::OnCloseWindow(wxCloseEvent& event)
+{
+ Destroy();
+
+ event.Skip();
+}
+
+void wxGenericAboutDialog::OnOK(wxCommandEvent& WXUNUSED(event))
+{
+ // By default a modeless dialog would be just hidden, destroy this one
+ // instead.
+ Destroy();
+}
+
+#endif // !wxUSE_MODAL_ABOUT_DIALOG
+
// ----------------------------------------------------------------------------
// public functions
// ----------------------------------------------------------------------------
void wxGenericAboutBox(const wxAboutDialogInfo& info, wxWindow* parent)
{
-#if !defined(__WXGTK__) && !defined(__WXMAC__)
+#if wxUSE_MODAL_ABOUT_DIALOG
wxGenericAboutDialog dlg(info, parent);
dlg.ShowModal();
#else