xcompcap-helper.hpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 XDisplayLock
  36. {
  37. bool islock;
  38. public:
  39. XDisplayLock(const XDisplayLock&) = delete;
  40. XDisplayLock& operator=(const XDisplayLock&) = delete;
  41. XDisplayLock();
  42. ~XDisplayLock();
  43. bool isLocked();
  44. void unlock();
  45. void lock();
  46. };
  47. class ObsGsContextHolder
  48. {
  49. public:
  50. ObsGsContextHolder(const ObsGsContextHolder&) = delete;
  51. ObsGsContextHolder& operator=(const ObsGsContextHolder&) = delete;
  52. ObsGsContextHolder();
  53. ~ObsGsContextHolder();
  54. };
  55. namespace XCompcap
  56. {
  57. Display* disp();
  58. void cleanupDisplay();
  59. std::string getWindowCommand(Window win);
  60. int getRootWindowScreen(Window root);
  61. std::string getWindowAtom(Window win, const char *atom);
  62. int getWindowPid(Window win);
  63. bool ewmhIsSupported();
  64. std::list<Window> getTopLevelWindows();
  65. std::list<Window> getAllWindows();
  66. inline std::string getWindowName(Window win)
  67. {
  68. return getWindowAtom(win, "_NET_WM_NAME");
  69. }
  70. inline std::string getWindowClass(Window win)
  71. {
  72. return getWindowAtom(win, "WM_CLASS");
  73. }
  74. void processEvents();
  75. bool windowWasReconfigured(Window win);
  76. }