GDialog.cpp 1010 B

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