ConnectionToWindowMangerServer.cpp 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2021, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibGUI/ConnectionToWindowMangerServer.h>
  7. #include <LibGUI/Event.h>
  8. #include <LibGUI/Window.h>
  9. namespace GUI {
  10. ConnectionToWindowMangerServer& ConnectionToWindowMangerServer::the()
  11. {
  12. static RefPtr<ConnectionToWindowMangerServer> s_connection = nullptr;
  13. if (!s_connection)
  14. s_connection = ConnectionToWindowMangerServer::try_create().release_value_but_fixme_should_propagate_errors();
  15. return *s_connection;
  16. }
  17. void ConnectionToWindowMangerServer::window_state_changed(i32 wm_id, i32 client_id, i32 window_id,
  18. i32 parent_client_id, i32 parent_window_id, u32 workspace_row, u32 workspace_column,
  19. bool is_active, bool is_minimized, bool is_modal, bool is_frameless, i32 window_type,
  20. String const& title, Gfx::IntRect const& rect, Optional<i32> const& progress)
  21. {
  22. if (auto* window = Window::from_window_id(wm_id))
  23. Core::EventLoop::current().post_event(*window, make<WMWindowStateChangedEvent>(client_id, window_id, parent_client_id, parent_window_id, title, rect, workspace_row, workspace_column, is_active, is_modal, static_cast<WindowType>(window_type), is_minimized, is_frameless, progress));
  24. }
  25. void ConnectionToWindowMangerServer::applet_area_size_changed(i32 wm_id, Gfx::IntSize const& size)
  26. {
  27. if (auto* window = Window::from_window_id(wm_id))
  28. Core::EventLoop::current().post_event(*window, make<WMAppletAreaSizeChangedEvent>(size));
  29. }
  30. void ConnectionToWindowMangerServer::window_rect_changed(i32 wm_id, i32 client_id, i32 window_id, Gfx::IntRect const& rect)
  31. {
  32. if (auto* window = Window::from_window_id(wm_id))
  33. Core::EventLoop::current().post_event(*window, make<WMWindowRectChangedEvent>(client_id, window_id, rect));
  34. }
  35. void ConnectionToWindowMangerServer::window_icon_bitmap_changed(i32 wm_id, i32 client_id, i32 window_id, Gfx::ShareableBitmap const& bitmap)
  36. {
  37. if (auto* window = Window::from_window_id(wm_id)) {
  38. Core::EventLoop::current().post_event(*window, make<WMWindowIconBitmapChangedEvent>(client_id, window_id, bitmap.bitmap()));
  39. }
  40. }
  41. void ConnectionToWindowMangerServer::window_removed(i32 wm_id, i32 client_id, i32 window_id)
  42. {
  43. if (auto* window = Window::from_window_id(wm_id))
  44. Core::EventLoop::current().post_event(*window, make<WMWindowRemovedEvent>(client_id, window_id));
  45. }
  46. void ConnectionToWindowMangerServer::super_key_pressed(i32 wm_id)
  47. {
  48. if (auto* window = Window::from_window_id(wm_id))
  49. Core::EventLoop::current().post_event(*window, make<WMSuperKeyPressedEvent>(wm_id));
  50. }
  51. void ConnectionToWindowMangerServer::super_space_key_pressed(i32 wm_id)
  52. {
  53. if (auto* window = Window::from_window_id(wm_id))
  54. Core::EventLoop::current().post_event(*window, make<WMSuperSpaceKeyPressedEvent>(wm_id));
  55. }
  56. void ConnectionToWindowMangerServer::super_digit_key_pressed(i32 wm_id, u8 digit)
  57. {
  58. if (auto* window = Window::from_window_id(wm_id))
  59. Core::EventLoop::current().post_event(*window, make<WMSuperDigitKeyPressedEvent>(wm_id, digit));
  60. }
  61. void ConnectionToWindowMangerServer::workspace_changed(i32 wm_id, u32 row, u32 column)
  62. {
  63. if (auto* window = Window::from_window_id(wm_id))
  64. Core::EventLoop::current().post_event(*window, make<WMWorkspaceChangedEvent>(wm_id, row, column));
  65. }
  66. void ConnectionToWindowMangerServer::keymap_changed(i32 wm_id, String const& keymap)
  67. {
  68. if (auto* window = Window::from_window_id(wm_id))
  69. Core::EventLoop::current().post_event(*window, make<WMKeymapChangedEvent>(wm_id, keymap));
  70. }
  71. }