/// Returns the active document SPDocument* Editor::getActiveDocument() { if (getActiveDesktop()) { return sp_desktop_document (getActiveDesktop()); } return NULL; }
SPDesktop* Editor::createDesktop (SPDocument* doc) { g_assert (doc != 0); (_funCreateEditWidget(doc))->present(); sp_document_unref (doc); SPDesktop *dt = getActiveDesktop(); reactivateDesktop (dt); return dt; }
void MSWindowsWatchdog::startProcess() { if (m_command.empty()) { throw XMSWindowsWatchdogError("cannot start process, command is empty"); } m_commandChanged = false; if (m_processRunning) { LOG((CLOG_DEBUG "closing existing process to make way for new one")); shutdownProcess(m_processInfo.hProcess, m_processInfo.dwProcessId, 20); m_processRunning = false; } m_session.updateActiveSession(); SECURITY_ATTRIBUTES sa; ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); getActiveDesktop(&sa); ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); HANDLE userToken = getUserToken(&sa); m_autoElevated = false; // patch by Jack Zhou and Henry Tung // set UIAccess to fix Windows 8 GUI interaction // http://synergy-project.org/spit/issues/details/3338/#c70 DWORD uiAccess = 1; SetTokenInformation(userToken, TokenUIAccess, &uiAccess, sizeof(DWORD)); BOOL createRet = doStartProcess(m_command, userToken, &sa); if (!createRet) { LOG((CLOG_ERR "could not launch")); DWORD exitCode = 0; GetExitCodeProcess(m_processInfo.hProcess, &exitCode); LOG((CLOG_ERR "exit code: %d", exitCode)); throw XArch(new XArchEvalWindows); } else { // wait for program to fail. ARCH->sleep(1); if (!isProcessActive()) { throw XMSWindowsWatchdogError("process immediately stopped"); } m_processRunning = true; m_processFailures = 0; LOG((CLOG_DEBUG "started process, session=%i, command=%s", m_session.getActiveSessionId(), m_command.c_str())); } }