MCPcopy Create free account
hub / github.com/deskflow/deskflow / XWindowsScreenSaver

Method XWindowsScreenSaver

src/lib/platform/XWindowsScreenSaver.cpp:36–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

34//
35
36XWindowsScreenSaver::XWindowsScreenSaver(Display *display, Window window, void *eventTarget, IEventQueue *events)
37 : m_display(display),
38 m_xscreensaverSink(window),
39 m_eventTarget(eventTarget),
40 m_events(events)
41{
42 // get atoms
43 m_atomScreenSaver = XInternAtom(m_display, "SCREENSAVER", False);
44 m_atomScreenSaverVersion = XInternAtom(m_display, "_SCREENSAVER_VERSION", False);
45 m_atomScreenSaverActivate = XInternAtom(m_display, "ACTIVATE", False);
46 m_atomScreenSaverDeactivate = XInternAtom(m_display, "DEACTIVATE", False);
47
48 // check for DPMS extension. this is an alternative screen saver
49 // that powers down the display.
50#if HAVE_X11_EXTENSIONS_DPMS_H
51 int eventBase;
52 int errorBase;
53 if (DPMSQueryExtension(m_display, &eventBase, &errorBase) && DPMSCapable(m_display)) {
54 // we have DPMS
55 m_dpms = true;
56 }
57#endif
58
59 // watch top-level windows for changes
60 bool error = false;
61 {
62 XWindowsUtil::ErrorLock lock(m_display, &error);
63 Window root = DefaultRootWindow(m_display);
64 XWindowAttributes attr;
65 XGetWindowAttributes(m_display, root, &attr);
66 m_rootEventMask = attr.your_event_mask;
67 XSelectInput(m_display, root, m_rootEventMask | SubstructureNotifyMask);
68 }
69 if (error) {
70 LOG_DEBUG("didn't set root event mask");
71 m_rootEventMask = 0;
72 }
73
74 // get the built-in settings
75 XGetScreenSaver(m_display, &m_timeout, &m_interval, &m_preferBlanking, &m_allowExposures);
76
77 // get the DPMS settings
78 m_dpmsEnabled = isDPMSEnabled();
79
80 // get the xscreensaver window, if any
81 if (!findXScreenSaver()) {
82 setXScreenSaver(None);
83 }
84
85 // install disable timer event handler
86 m_events->addHandler(EventTypes::Timer, this, [this](const auto &) { handleDisableTimer(); });
87}
88
89XWindowsScreenSaver::~XWindowsScreenSaver()
90{

Callers

nothing calls this directly

Calls 1

addHandlerMethod · 0.80

Tested by

no test coverage detected