/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
// A request for the current office // that was given by command line or by IPC pipe communication. struct ProcessDocumentsRequest
{ explicit ProcessDocumentsRequest(std::optional< OUString > cwdUrl):
aCwdUrl(std::move(cwdUrl)), pcProcessed( nullptr ), bTextCat( false ), bScriptCat( false) {}
std::optional< OUString > aCwdUrl;
OUString aModule;
std::vector< OUString > aOpenList; // Documents that should be opened in the default way
std::vector< OUString > aViewList; // Documents that should be opened in viewmode
std::vector< OUString > aStartList; // Documents/Presentations that should be started
std::vector< OUString > aPrintList; // Documents that should be printed on default printer
std::vector< OUString > aForceOpenList; // Documents that should be forced to open for editing (even templates)
std::vector< OUString > aForceNewList; // Documents that should be forced to create a new document
OUString aPrinterName; // The printer name that should be used for printing
std::vector< OUString > aPrintToList; // Documents that should be printed on the given printer
std::vector< OUString > aConversionList;
OUString aConversionParams;
OUString aConversionOut;
OUString aImageConversionType;
OUString aStartListParams;
std::vector< OUString > aInFilter;
::osl::Condition *pcProcessed; // pointer condition to be set when the request has been processed bool* mpbSuccess = nullptr; // pointer to boolean receiving if the processing was successful bool bTextCat; // boolean flag indicating whether to dump text content to console bool bScriptCat; // boolean flag indicating whether to dump script content to console
};
class DispatchWatcher; class IpcThread; class PipeIpcThread; class DbusIpcThread;
class RequestHandler: public salhelper::SimpleReferenceObject
{ friend IpcThread; friend PipeIpcThread; friend DbusIpcThread;
enumclass State { Starting, RequestsEnabled, Downing };
State mState; int mnPendingRequests;
rtl::Reference<DispatchWatcher> mpDispatchWatcher;
rtl::Reference<IpcThread> mIpcThread;
/* condition to be set when the request has been processed */
::osl::Condition cProcessed; /* receives if the processing was successful (may be false e.g. when shutting down) */ bool mbSuccess = false;
/* condition to be set when the main event loop is ready otherwise an error dialogs event loop could eat away
requests from a 2nd office */
::osl::Condition cReady;
static ::osl::Mutex& GetMutex();
RequestHandler();
virtual ~RequestHandler() override;
public: enum Status
{
IPC_STATUS_OK,
IPC_STATUS_2ND_OFFICE,
IPC_STATUS_PIPE_ERROR,
IPC_STATUS_BOOTSTRAP_ERROR
};
// controlling pipe communication during shutdown staticvoid SetDowning(); staticvoid EnableRequests(); staticbool AreRequestsPending(); staticvoid RequestsCompleted(); staticbool ExecuteCmdLineRequests(
ProcessDocumentsRequest&, bool noTerminate);
// return sal_False if second office static Status Enable(bool ipc); staticvoid Disable(); // start dispatching events... staticvoid SetReady(bool bIsReady); staticvoid WaitForReady();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.