diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index ad7b5b19c..fe0415ac0 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -135,7 +135,7 @@ if(WIN32) set(QT_USE_QTMAIN TRUE) endif(WIN32) -find_package(Qt4 COMPONENTS QtCore QtGui QtXml QtXmlPatterns REQUIRED) +find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork QtXml QtXmlPatterns REQUIRED) include(${QT_USE_FILE}) qt4_wrap_ui(OPENCS_UI_HDR ${OPENCS_UI}) diff --git a/apps/opencs/editor.cpp b/apps/opencs/editor.cpp index e05ebcdeb..36d4f9735 100644 --- a/apps/opencs/editor.cpp +++ b/apps/opencs/editor.cpp @@ -2,12 +2,16 @@ #include "editor.hpp" #include +#include +#include #include "model/doc/document.hpp" #include "model/world/data.hpp" CS::Editor::Editor() : mViewManager (mDocumentManager) { + mIpcServerName = "org.openmw.OpenCS"; + connect (&mViewManager, SIGNAL (newDocumentRequest ()), this, SLOT (createDocument ())); connect (&mViewManager, SIGNAL (loadDocumentRequest ()), this, SLOT (loadDocument ())); @@ -114,6 +118,35 @@ void CS::Editor::createNewFile() mFileDialog.hide(); } +void CS::Editor::showStartup() +{ + if(mStartup.isHidden()) + mStartup.show(); + mStartup.raise(); + mStartup.activateWindow(); +} + +bool CS::Editor::makeIPCServer() +{ + mServer = new QLocalServer(this); + + if(mServer->listen(mIpcServerName)) + { + connect(mServer, SIGNAL(newConnection()), this, SLOT(showStartup())); + return true; + } + + mServer->close(); + return false; +} + +void CS::Editor::connectToIPCServer() +{ + mClientSocket = new QLocalSocket(this); + mClientSocket->connectToServer(mIpcServerName); + mClientSocket->close(); +} + int CS::Editor::run() { mStartup.show(); diff --git a/apps/opencs/editor.hpp b/apps/opencs/editor.hpp index 380e434c2..80336d66f 100644 --- a/apps/opencs/editor.hpp +++ b/apps/opencs/editor.hpp @@ -2,6 +2,10 @@ #define CS_EDITOR_H #include +#include +#include +#include + #ifndef Q_MOC_RUN #include #endif @@ -35,6 +39,9 @@ namespace CS Editor(); + bool makeIPCServer(); + void connectToIPCServer(); + int run(); ///< \return error status @@ -45,6 +52,14 @@ namespace CS void loadDocument(); void openFiles(); void createNewFile(); + + void showStartup(); + + private: + + QString mIpcServerName; + QLocalServer *mServer; + QLocalSocket *mClientSocket; }; } diff --git a/apps/opencs/main.cpp b/apps/opencs/main.cpp index 7f6f9302e..eddeb1983 100644 --- a/apps/opencs/main.cpp +++ b/apps/opencs/main.cpp @@ -39,5 +39,11 @@ int main(int argc, char *argv[]) CS::Editor editor; + if(!editor.makeIPCServer()) + { + editor.connectToIPCServer(); + return 0; + } + return editor.run(); }