xcompcap-helper.hpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. #include <string>
  3. #include <list>
  4. #define blog(level, msg, ...) blog(level, "xcompcap: " msg, ##__VA_ARGS__)
  5. class PLock {
  6. pthread_mutex_t *m;
  7. bool islock;
  8. public:
  9. PLock(const PLock &) = delete;
  10. PLock &operator=(const PLock &) = delete;
  11. PLock(pthread_mutex_t *mtx, bool trylock = false);
  12. ~PLock();
  13. bool isLocked();
  14. void unlock();
  15. void lock();
  16. };
  17. class XErrorLock {
  18. bool islock;
  19. bool goterr;
  20. XErrorHandler prevhandler;
  21. public:
  22. XErrorLock(const XErrorLock &) = delete;
  23. XErrorLock &operator=(const XErrorLock &) = delete;
  24. XErrorLock();
  25. ~XErrorLock();
  26. bool isLocked();
  27. void unlock();
  28. void lock();
  29. bool gotError();
  30. std::string getErrorText();
  31. void resetError();
  32. };
  33. class XDisplayLock {
  34. bool islock;
  35. public:
  36. XDisplayLock(const XDisplayLock &) = delete;
  37. XDisplayLock &operator=(const XDisplayLock &) = delete;
  38. XDisplayLock();
  39. ~XDisplayLock();
  40. bool isLocked();
  41. void unlock();
  42. void lock();
  43. };
  44. class ObsGsContextHolder {
  45. public:
  46. ObsGsContextHolder(const ObsGsContextHolder &) = delete;
  47. ObsGsContextHolder &operator=(const ObsGsContextHolder &) = delete;
  48. ObsGsContextHolder();
  49. ~ObsGsContextHolder();
  50. };
  51. class XCompcapMain;
  52. namespace XCompcap {
  53. Display *disp();
  54. void cleanupDisplay();
  55. int getRootWindowScreen(Window root);
  56. std::string getWindowAtom(Window win, const char *atom);
  57. bool ewmhIsSupported();
  58. std::list<Window> getTopLevelWindows();
  59. inline std::string getWindowName(Window win)
  60. {
  61. return getWindowAtom(win, "_NET_WM_NAME");
  62. }
  63. inline std::string getWindowClass(Window win)
  64. {
  65. return getWindowAtom(win, "WM_CLASS");
  66. }
  67. void registerSource(XCompcapMain *source, Window win);
  68. void unregisterSource(XCompcapMain *source);
  69. void processEvents();
  70. bool sourceWasReconfigured(XCompcapMain *source);
  71. }