xcompcap-helper.hpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. #include <string>
  3. #include <list>
  4. #define blog(level, msg, ...) blog(level, "xcompcap: " msg, ##__VA_ARGS__)
  5. class PLock
  6. {
  7. pthread_mutex_t *m;
  8. bool islock;
  9. public:
  10. PLock(const PLock&) = delete;
  11. PLock& operator=(const PLock&) = delete;
  12. PLock(pthread_mutex_t* mtx, bool trylock = false);
  13. ~PLock();
  14. bool isLocked();
  15. void unlock();
  16. void lock();
  17. };
  18. class XErrorLock
  19. {
  20. bool islock;
  21. bool goterr;
  22. XErrorHandler prevhandler;
  23. public:
  24. XErrorLock(const XErrorLock&) = delete;
  25. XErrorLock& operator=(const XErrorLock&) = delete;
  26. XErrorLock();
  27. ~XErrorLock();
  28. bool isLocked();
  29. void unlock();
  30. void lock();
  31. bool gotError();
  32. std::string getErrorText();
  33. void resetError();
  34. };
  35. class ObsGsContextHolder
  36. {
  37. public:
  38. ObsGsContextHolder(const ObsGsContextHolder&) = delete;
  39. ObsGsContextHolder& operator=(const ObsGsContextHolder&) = delete;
  40. ObsGsContextHolder();
  41. ~ObsGsContextHolder();
  42. };
  43. namespace XCompcap
  44. {
  45. Display* disp();
  46. void cleanupDisplay();
  47. std::string getWindowCommand(Window win);
  48. int getRootWindowScreen(Window root);
  49. std::string getWindowName(Window win);
  50. int getWindowPid(Window win);
  51. std::list<Window> getTopLevelWindows();
  52. std::list<Window> getAllWindows();
  53. void processEvents();
  54. bool windowWasReconfigured(Window win);
  55. }