]> git.lyx.org Git - lyx.git/blobdiff - src/Server.cpp
Fix #10328.
[lyx.git] / src / Server.cpp
index 5f5d873f54d79e95d3534b4329bd931bf3fddd1f..dfc932c67466f0ec1c5a8a3c2f3062be6680d326 100644 (file)
@@ -356,7 +356,7 @@ bool LyXComm::pipeServer()
 
                        error = GetLastError();
 
-                       if (success && error == ERROR_IO_PENDING) {
+                       if (success && (error == ERROR_IO_PENDING || error == NO_ERROR)) {
                                // The write operation is still pending.
                                // We get here when a reader is started
                                // well before a reply is ready, so delay
@@ -1003,8 +1003,24 @@ struct Sleep : QThread
 bool LyXComm::loadFilesInOtherInstance()
 {
        int pipefd;
-       int loaded_files = 0;
        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 loaded_files = 0;
        vector<string>::iterator it = theFilesToLoad().begin();
        while (it != theFilesToLoad().end()) {
                FileName fname = fileSearch(string(), os::internal_path(*it),
@@ -1067,10 +1083,7 @@ Server::~Server()
        string message;
        for (int i = 0; i != numclients_; ++i) {
                message = "LYXSRV:" + clients_[i] + ":bye\n";
-               // ignore exceptions, we are quitting anyway
-               try {
-                       pipes_.send(message);
-               } catch (...) {}
+               pipes_.send(message);
        }
 }
 
@@ -1181,7 +1194,7 @@ void Server::callback(string const & msg)
                        // connect to the lyxfunc in the single GuiView we
                        // support currently. (Lgb)
 
-                       FuncRequest fr(lyxaction.lookupFunc(cmd), from_ascii(arg));
+                       FuncRequest fr(lyxaction.lookupFunc(cmd), from_utf8(arg));
                        fr.setOrigin(FuncRequest::LYXSERVER);
                        DispatchResult dr;
                        theApp()->dispatch(fr, dr);