| 80 | MSWindowsScreen *MSWindowsScreen::s_screen = nullptr; |
| 81 | |
| 82 | MSWindowsScreen::MSWindowsScreen(bool isPrimary, bool useHooks, IEventQueue *events, bool enableLangSync) |
| 83 | : PlatformScreen(events), |
| 84 | m_isPrimary(isPrimary), |
| 85 | m_useHooks(useHooks), |
| 86 | m_isOnScreen(m_isPrimary), |
| 87 | m_hasMouse(GetSystemMetrics(SM_MOUSEPRESENT) != 0), |
| 88 | m_events(events) |
| 89 | { |
| 90 | LOG_DEBUG("settting up %s screen", m_isPrimary ? "primary" : "secondary"); |
| 91 | |
| 92 | assert(s_windowInstance != nullptr); |
| 93 | assert(s_screen == nullptr); |
| 94 | |
| 95 | s_screen = this; |
| 96 | try { |
| 97 | if (m_isPrimary && m_useHooks) { |
| 98 | m_hook.loadLibrary(); |
| 99 | } |
| 100 | |
| 101 | m_screensaver = new MSWindowsScreenSaver(); |
| 102 | m_desks = new MSWindowsDesks( |
| 103 | m_isPrimary, m_useHooks, m_screensaver, m_events, |
| 104 | new TMethodJob<MSWindowsScreen>(this, &MSWindowsScreen::updateKeysCB) |
| 105 | ); |
| 106 | m_keyState = new MSWindowsKeyState( |
| 107 | m_desks, getEventTarget(), m_events, AppUtil::instance().getKeyboardLayoutList(), enableLangSync |
| 108 | ); |
| 109 | |
| 110 | updateScreenShape(); |
| 111 | m_class = createWindowClass(); |
| 112 | m_window = createWindow(m_class, LPCWSTR(kAppName)); |
| 113 | setupMouseKeys(); |
| 114 | LOG_DEBUG("screen shape: %d,%d %dx%d %s", m_x, m_y, m_w, m_h, m_multimon ? "(multi-monitor)" : ""); |
| 115 | LOG_DEBUG("window is 0x%08x", m_window); |
| 116 | |
| 117 | if (Settings::value(Settings::Core::PreventSleep).toBool()) { |
| 118 | m_powerManager.disableSleep(); |
| 119 | } |
| 120 | |
| 121 | OleInitialize(0); |
| 122 | } catch (...) { |
| 123 | delete m_keyState; |
| 124 | delete m_desks; |
| 125 | delete m_screensaver; |
| 126 | destroyWindow(m_window); |
| 127 | destroyClass(m_class); |
| 128 | s_screen = nullptr; |
| 129 | throw; |
| 130 | } |
| 131 | |
| 132 | // install event handlers |
| 133 | m_events->addHandler(EventTypes::System, m_events->getSystemTarget(), [this](const auto &e) { |
| 134 | handleSystemEvent(e); |
| 135 | }); |
| 136 | |
| 137 | // install the platform event queue |
| 138 | m_events->adoptBuffer(new MSWindowsEventQueueBuffer(m_events)); |
| 139 | } |
nothing calls this directly
no test coverage detected