X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FServer.h;h=1a46c892817a5d6380c172d388bb8ad92d5eb29a;hb=6642152e6610f1e885babfaeb3c99bd0004916fc;hp=767a35c234057506fa66ae7ec62fe98a7c7828eb;hpb=71b8b37ac3b3c4c9ffbadbbdf90e4b34a0999fee;p=lyx.git diff --git a/src/Server.h b/src/Server.h index 767a35c234..1a46c89281 100644 --- a/src/Server.h +++ b/src/Server.h @@ -14,7 +14,9 @@ #ifndef SERVER_H #define SERVER_H -#include +#include + +#include #ifdef _WIN32 #include @@ -25,7 +27,6 @@ namespace lyx { -class LyXFunc; class Server; @@ -37,11 +38,13 @@ 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 WINAPI pipeServerWrapper(void *); + public: /// Max number of clients enum { MAX_CLIENTS = 10 }; @@ -98,11 +101,11 @@ public: void read_ready(); #else void read_ready(DWORD); - - /// The pipe server - void pipeServer(); #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; @@ -116,6 +119,9 @@ private: /// 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); @@ -129,20 +135,23 @@ private: /// This is -1 if not open int outfd_; #else + /// The pipe server returns false when exiting due to an error + bool pipeServer(); + /// Start an overlapped connection - void startPipe(DWORD); + bool startPipe(DWORD); /// Reset an overlapped connection - void resetPipe(DWORD, bool close_handle = false); + bool resetPipe(DWORD, bool close_handle = false); /// Close event and pipe handles - void closeHandles(DWORD); + void closeHandles(); /// Catch pipe ready-to-be-read notification 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; @@ -177,6 +186,9 @@ private: /// The client callback function ClientCallbackfct clientcb_; + + /// Did we defer loading of files to another instance? + bool deferred_loading_; }; @@ -186,19 +198,18 @@ public: // 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(); } @@ -217,13 +228,14 @@ private: /// int numclients_; /// - LyXFunc * func_; - /// LyXComm pipes_; }; /// Implementation is in LyX.cpp -extern Server & theServer(); +Server & theServer(); + +/// Implementation is in LyX.cpp +extern std::vector & theFilesToLoad(); } // namespace lyx