GMenuBar.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <LibGUI/GMenuBar.h>
  2. #include <LibGUI/GEventLoop.h>
  3. GMenuBar::GMenuBar()
  4. {
  5. }
  6. GMenuBar::~GMenuBar()
  7. {
  8. unrealize_menubar();
  9. }
  10. void GMenuBar::add_menu(OwnPtr<GMenu>&& menu)
  11. {
  12. m_menus.append(move(menu));
  13. }
  14. int GMenuBar::realize_menubar()
  15. {
  16. WSAPI_ClientMessage request;
  17. request.type = WSAPI_ClientMessage::Type::CreateMenubar;
  18. WSAPI_ServerMessage response = GEventLoop::main().sync_request(request, WSAPI_ServerMessage::Type::DidCreateMenubar);
  19. return response.menu.menubar_id;
  20. }
  21. void GMenuBar::unrealize_menubar()
  22. {
  23. if (!m_menubar_id)
  24. return;
  25. WSAPI_ClientMessage request;
  26. request.type = WSAPI_ClientMessage::Type::DestroyMenubar;
  27. request.menu.menubar_id = m_menubar_id;
  28. GEventLoop::main().sync_request(request, WSAPI_ServerMessage::Type::DidDestroyMenubar);
  29. m_menubar_id = 0;
  30. }
  31. void GMenuBar::notify_added_to_application(Badge<GApplication>)
  32. {
  33. ASSERT(!m_menubar_id);
  34. m_menubar_id = realize_menubar();
  35. ASSERT(m_menubar_id > 0);
  36. for (auto& menu : m_menus) {
  37. ASSERT(menu);
  38. int menu_id = menu->realize_menu();
  39. ASSERT(menu_id > 0);
  40. WSAPI_ClientMessage request;
  41. request.type = WSAPI_ClientMessage::Type::AddMenuToMenubar;
  42. request.menu.menubar_id = m_menubar_id;
  43. request.menu.menu_id = menu_id;
  44. GEventLoop::main().sync_request(request, WSAPI_ServerMessage::Type::DidAddMenuToMenubar);
  45. }
  46. WSAPI_ClientMessage request;
  47. request.type = WSAPI_ClientMessage::Type::SetApplicationMenubar;
  48. request.menu.menubar_id = m_menubar_id;
  49. GEventLoop::main().sync_request(request, WSAPI_ServerMessage::Type::DidSetApplicationMenubar);
  50. }
  51. void GMenuBar::notify_removed_from_application(Badge<GApplication>)
  52. {
  53. unrealize_menubar();
  54. }