#ifndef SERVER_H
#define SERVER_H
-#include <boost/signals/trackable.hpp>
+#include <boost/signals2/trackable.hpp>
+
+#include <vector>
#ifdef _WIN32
#include <windows.h>
namespace lyx {
-class LyXFunc;
class Server;
a clean string interface.
*/
#ifndef _WIN32
-class LyXComm : public boost::signals::trackable {
+class LyXComm : public boost::signals2::trackable {
#else
class LyXComm : public QObject {
Q_OBJECT
- friend DWORD pipeServerWrapper(void *);
+ friend DWORD WINAPI pipeServerWrapper(void *);
public:
/// Max number of clients
void read_ready(DWORD);
#endif
+ /// Tell whether we asked another instance of LyX to open the files
+ bool deferredLoading() { return deferred_loading_; }
+
private:
/// the filename of the in pipe
std::string const inPipeName() const;
/// Close pipes
void closeConnection();
+ /// Load files in another running instance of LyX
+ bool loadFilesInOtherInstance();
+
#ifndef _WIN32
/// start a pipe
int startPipe(std::string const &, bool);
bool event(QEvent *);
/// Check whether the pipe server must be stopped
- bool checkStopServer();
+ bool checkStopServer(DWORD timeout = 0);
/// The filename of a (in or out) pipe instance
std::string const pipeName(DWORD) const;
/// The client callback function
ClientCallbackfct clientcb_;
+
+ /// Did we defer loading of files to another instance?
+ bool deferred_loading_;
};
// FIXME IN 0.13
// Hack! This should be changed in 0.13
- // The lyx server should not take an argument "LyXFunc" but this is
- // how it will be done for 0.12. In 0.13 we must write a non-gui
- // bufferview.
// IMO lyxserver is atypical, and for the moment the only one, non-gui
// bufferview. We just have to find a way to handle situations like if
// lyxserver is using a buffer that is being edited with a bufferview.
// With a common buffer list this is not a problem, maybe. (Alejandro)
///
- Server(LyXFunc * f, std::string const & pip);
+ Server(std::string const & pip);
///
~Server();
///
void notifyClient(std::string const &);
+ ///
+ bool deferredLoadingToOtherInstance() { return pipes_.deferredLoading(); }
/// whilst crashing etc.
void emergencyCleanup() { pipes_.emergencyCleanup(); }
///
int numclients_;
///
- LyXFunc * func_;
- ///
LyXComm pipes_;
};
/// Implementation is in LyX.cpp
-extern Server & theServer();
+Server & theServer();
+
+/// Implementation is in LyX.cpp
+extern std::vector<std::string> & theFilesToLoad();
} // namespace lyx