Сейчас я работаю над переносом моего старого приложения (созданного в wxWidgets 3.0.2 и предназначенного для Windows) на macOS. Мое приложение является редактором кода, и при закрытии приложения я хотел спросить, хочет ли пользователь сохранить.
switch (dialog->ShowModal())
{
case wxID_YES:
OnMenuSave(e);
// Only break if the file is not saved
// The user must have clicked on cancel button in save as box
if (!editorPage->CodeChanged())
break;
case wxID_CANCEL:
e.Veto();
dialog->Destroy();
return;
}
Раньше это работало нормально, но, тем не менее, я хотел показать диалоги в стиле mac, как будто они были прикреплены к окну, из которого они созданы.
Поэтому, когда я написал вспомогательную функцию для использования функции ShowWindowModalThenDo
в диалоговом окне.
template <typename Functor>
inline void ShowWindowModalThenDo(wxDialog *dlg, const Functor& onEndModal)
{
#ifdef __WXMAC__
dlg->ShowWindowModalThenDo(onEndModal);
#else
onEndModal(dlg->ShowModal());
#endif
}
Проблема в том, что он не приостанавливает событие, пока отображается диалоговое окно. Это особенно проблематично, поскольку я обращаюсь с этим в событии закрытия редактора. Таким образом, даже когда диалоговое окно отображается и позволяет пользователю нажать кнопку «Отмена», страница редактора закрывается.
Как временно приостановить обработку событий в родительском окне?