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

Method XWindowsScreen

src/lib/platform/XWindowsScreen.cpp:85–154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

83XWindowsScreen *XWindowsScreen::s_screen = nullptr;
84
85XWindowsScreen::XWindowsScreen(const char *displayName, bool isPrimary, IEventQueue *events)
86 : PlatformScreen(events),
87 m_isPrimary(isPrimary),
88 m_isOnScreen(m_isPrimary),
89 m_events(events)
90{
91 assert(s_screen == nullptr);
92 s_screen = this;
93
94 if (XInitThreads() == 0) {
95 throw std::runtime_error("XInitThreads() returned zero");
96 }
97
98 // set the X I/O error handler so we catch the display disconnecting
99 XSetIOErrorHandler(&XWindowsScreen::ioErrorHandler);
100
101 try {
102 m_display = openDisplay(displayName);
103 m_root = DefaultRootWindow(m_display);
104 saveShape();
105 m_window = openWindow();
106 m_screensaver = new XWindowsScreenSaver(m_display, m_window, getEventTarget(), events);
107 m_keyState = new XWindowsKeyState(m_display, m_xkb, events, m_keyMap);
108 LOG_DEBUG("screen shape: %d,%d %dx%d %s", m_x, m_y, m_w, m_h, m_xinerama ? "(xinerama)" : "");
109 LOG_DEBUG("window is 0x%08x", m_window);
110 } catch (...) {
111 if (m_display != nullptr) {
112 XCloseDisplay(m_display);
113 }
114 throw;
115 }
116
117 // primary/secondary screen only initialization
118 if (m_isPrimary) {
119#ifdef HAVE_XI2
120 m_xi2detected = detectXI2();
121 if (m_xi2detected) {
122 selectXIRawMotion();
123 } else
124#endif
125 {
126 // start watching for events on other windows
127 selectEvents(m_root);
128 }
129
130 // prepare to use input methods
131 openIM();
132 } else {
133 // become impervious to server grabs
134 XTestGrabControl(m_display, True);
135 }
136
137 // disable sleep if the flag is set
138 if (Settings::value(Settings::Core::PreventSleep).toBool()) {
139 m_powerManager.disableSleep();
140 }
141
142 // initialize the clipboards

Callers

nothing calls this directly

Calls 4

addHandlerMethod · 0.80
getSystemTargetMethod · 0.80
adoptBufferMethod · 0.80
disableSleepMethod · 0.45

Tested by

no test coverage detected