GMenuBar.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <LibGUI/GMenuBar.h>
  2. #include <LibGUI/GWindowServerConnection.h>
  3. GMenuBar::GMenuBar()
  4. {
  5. }
  6. GMenuBar::~GMenuBar()
  7. {
  8. unrealize_menubar();
  9. }
  10. void GMenuBar::add_menu(NonnullOwnPtr<GMenu>&& menu)
  11. {
  12. m_menus.append(move(menu));
  13. }
  14. int GMenuBar::realize_menubar()
  15. {
  16. return GWindowServerConnection::the().send_sync<WindowServer::CreateMenubar>()->menubar_id();
  17. }
  18. void GMenuBar::unrealize_menubar()
  19. {
  20. if (m_menubar_id == -1)
  21. return;
  22. GWindowServerConnection::the().send_sync<WindowServer::DestroyMenubar>(m_menubar_id);
  23. m_menubar_id = -1;
  24. }
  25. void GMenuBar::notify_added_to_application(Badge<GApplication>)
  26. {
  27. ASSERT(m_menubar_id == -1);
  28. m_menubar_id = realize_menubar();
  29. ASSERT(m_menubar_id != -1);
  30. for (auto& menu : m_menus) {
  31. int menu_id = menu.realize_menu();
  32. ASSERT(menu_id != -1);
  33. GWindowServerConnection::the().send_sync<WindowServer::AddMenuToMenubar>(m_menubar_id, menu_id);
  34. }
  35. GWindowServerConnection::the().send_sync<WindowServer::SetApplicationMenubar>(m_menubar_id);
  36. }
  37. void GMenuBar::notify_removed_from_application(Badge<GApplication>)
  38. {
  39. unrealize_menubar();
  40. }