GDialog.cpp 920 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include <LibGUI/GDialog.h>
  2. #include <LibGUI/GEventLoop.h>
  3. GDialog::GDialog(CObject* parent)
  4. : GWindow(parent)
  5. {
  6. set_modal(true);
  7. set_should_exit_event_loop_on_close(true);
  8. }
  9. GDialog::~GDialog()
  10. {
  11. }
  12. int GDialog::exec()
  13. {
  14. ASSERT(!m_event_loop);
  15. m_event_loop = make<GEventLoop>();
  16. if (parent() && parent()->is_window()) {
  17. auto& parent_window = *static_cast<GWindow*>(parent());
  18. auto new_rect = rect();
  19. new_rect.center_within(parent_window.rect());
  20. set_rect(new_rect);
  21. }
  22. show();
  23. auto result = m_event_loop->exec();
  24. m_event_loop = nullptr;
  25. dbgprintf("%s: event loop returned with result %d\n", class_name(), result);
  26. return result;
  27. }
  28. void GDialog::done(int result)
  29. {
  30. if (!m_event_loop)
  31. return;
  32. m_result = result;
  33. dbgprintf("%s: quit event loop with result %d\n", class_name(), result);
  34. m_event_loop->quit(result);
  35. }