X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2FForkedCalls.h;h=8a4bf1d4aa40a9cc53a4e904fd73ff464eab4cbc;hb=41a8994da902031a743373c1c57d028b7c900797;hp=e628f882cc83abefff2c522f8303d6d164b3a923;hpb=1741c87a4eb54b945cef3664ba778d3ff3e2c167;p=lyx.git diff --git a/src/support/ForkedCalls.h b/src/support/ForkedCalls.h index e628f882cc..8a4bf1d4aa 100644 --- a/src/support/ForkedCalls.h +++ b/src/support/ForkedCalls.h @@ -14,14 +14,15 @@ #ifndef FORKEDCALLS_H #define FORKEDCALLS_H -#include -#include +#include "support/signals.h" +#include "support/strfwd.h" #ifdef HAVE_SYS_TYPES_H # include #endif -#include +#include + namespace lyx { namespace support { @@ -41,9 +42,9 @@ public: /// virtual ~ForkedProcess() {} /// - virtual boost::shared_ptr clone() const = 0; + virtual std::shared_ptr clone() const = 0; - /** A SignalType signal can be emitted once the forked process + /** A Signal signal can be emitted once the forked process * has finished. It passes: * the PID of the child and; * the return value from the child. @@ -52,7 +53,8 @@ public: * we can return easily to C++ methods, rather than just globally * accessible functions. */ - typedef boost::signal SignalType; + typedef signals2::signal sig; + typedef sig::slot_type slot; /** The signal is connected in the calling routine to the desired * slot. We pass a shared_ptr rather than a reference to the signal @@ -60,9 +62,10 @@ public: * class (and hence the signal) to be destructed before the forked * call is complete. * - * It doesn't matter if the slot disappears, SigC takes care of that. + * Use Slot::track or Signal::scoped_connection to ensure that the + * connection is closed before the slot expires. */ - typedef boost::shared_ptr SignalTypePtr; + typedef std::shared_ptr sigPtr; /** Invoking the following methods makes sense only if the command * is running asynchronously! @@ -113,7 +116,7 @@ protected: pid_t fork(); /// Callback function - SignalTypePtr signal_; + sigPtr signal_; /// identifying command (for display in the GUI perhaps). std::string command_; @@ -135,7 +138,7 @@ private: }; -/* +/** * An instance of class ForkedCall represents a single child process. * * Class ForkedCall uses fork() and execvp() to lauch the child process. @@ -151,13 +154,17 @@ private: class ForkedCall : public ForkedProcess { public: /// - virtual boost::shared_ptr clone() const { - return boost::shared_ptr(new ForkedCall(*this)); + ForkedCall(std::string const & path = empty_string(), + std::string const & lpath = empty_string()); + /// + virtual std::shared_ptr clone() const { + return std::make_shared(*this); } /** Start the child process. * - * The command "what" is passed to execvp() for execution. + * The command "what" is passed to execvp() for execution. "$$s" is + * replaced accordingly by commandPrep(). * * There are two startScript commands available. They differ in that * the second receives a signal that is executed on completion of @@ -170,11 +177,13 @@ public: int startScript(Starttype, std::string const & what); /// - int startScript(std::string const & what, SignalTypePtr); + int startScript(std::string const & what, sigPtr ptr); private: /// virtual int generateChild(); + /// + std::string cmd_prefix_; }; @@ -188,11 +197,11 @@ private: namespace ForkedCallQueue { -ForkedCall::SignalTypePtr add(std::string const & process); +ForkedCall::sigPtr add(std::string const & process); /// Query whether the queue is running a forked process now. bool running(); -} +} // namespace ForkedCallQueue /**