]> git.lyx.org Git - lyx.git/blobdiff - src/Server.cpp
Amend 3093789e for cmake build
[lyx.git] / src / Server.cpp
index 5fb089d758300cc69b3980081fb912afe7e75d4d..79340492c6d62254beb78fcc8d03471b3ff5d3d2 100644 (file)
@@ -378,6 +378,9 @@ bool LyXComm::pipeServer()
                        if (!resetPipe(i, !success))
                                return false;
                        break;
+               case CONNECTING_STATE:
+                       LYXERR0("Wrong pipe state");
+                       break;
                }
        }
 
@@ -1000,16 +1003,27 @@ struct Sleep : QThread
 } // namespace
 
 
-bool LyXComm::loadFilesInOtherInstance()
+bool LyXComm::loadFilesInOtherInstance() const
 {
+       int pipefd;
+       FileName const pipe(inPipeName());
+
        if (theFilesToLoad().empty()) {
                LYXERR0("LyX is already running in another instance\n"
                        "and 'use single instance' is active.");
+               // Wait a while for the other instance to reset the connection
+               Sleep::millisec(200);
+               pipefd = ::open(pipe.toFilesystemEncoding().c_str(), O_WRONLY);
+               if (pipefd >= 0) {
+                       string const cmd = "LYXCMD:pipe:window-raise\n";
+                       if (::write(pipefd, cmd.c_str(), cmd.length()) < 0)
+                               LYXERR0("Cannot communicate with running instance!");
+                       ::close(pipefd);
+               }
                return true;
        }
-       int pipefd;
+
        int loaded_files = 0;
-       FileName const pipe(inPipeName());
        vector<string>::iterator it = theFilesToLoad().begin();
        while (it != theFilesToLoad().end()) {
                FileName fname = fileSearch(string(), os::internal_path(*it),