GUIEventDevice.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "GUIEventDevice.h"
  2. #include <Kernel/Process.h>
  3. #include <AK/Lock.h>
  4. #include <LibC/errno_numbers.h>
  5. #include <WindowServer/WSMessageLoop.h>
  6. //#define GUIEVENTDEVICE_DEBUG
  7. GUIEventDevice::GUIEventDevice()
  8. : CharacterDevice(66, 1)
  9. {
  10. }
  11. GUIEventDevice::~GUIEventDevice()
  12. {
  13. }
  14. bool GUIEventDevice::can_read(Process& process) const
  15. {
  16. return !process.gui_events().is_empty();
  17. }
  18. ssize_t GUIEventDevice::read(Process& process, byte* buffer, size_t size)
  19. {
  20. #ifdef GUIEVENTDEVICE_DEBUG
  21. dbgprintf("GUIEventDevice::read(): %s<%u>, size=%u, sizeof(GUI_ServerMessage)=%u\n", process.name().characters(), process.pid(), size, sizeof(GUI_ServerMessage));
  22. #endif
  23. if (process.gui_events().is_empty())
  24. return 0;
  25. LOCKER(process.gui_events_lock());
  26. ASSERT(size == sizeof(GUI_ServerMessage));
  27. *reinterpret_cast<GUI_ServerMessage*>(buffer) = process.gui_events().take_first();
  28. return size;
  29. }
  30. ssize_t GUIEventDevice::write(Process& process, const byte* data, size_t size)
  31. {
  32. return WSMessageLoop::the().on_receive_from_client(process.gui_client_id(), data, size);
  33. }