| 83 | XWindowsScreen *XWindowsScreen::s_screen = nullptr; |
| 84 | |
| 85 | XWindowsScreen::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 |
nothing calls this directly
no test coverage detected