12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #include <precomp.h>
- #ifdef WASABI_API_COMPONENT
- #include <api/wac/main.h> //CUT!!!
- #endif
- #include "ipcs.h"
- #ifdef LINUX
- #include <api/linux/linuxapi.h>
- #endif
- using namespace IpcsCommand;
- #ifdef WIN32
- IpcsPtr::IpcsPtr(HWND h) {
- hwnd = h;
- }
- #else
- IpcsPtr::IpcsPtr(int q) {
- qid = q;
- }
- #endif
- void IpcsPtr::moveToForeground() {
- #ifdef WIN32
- if (IsIconic(hwnd)) ShowWindow(hwnd, SW_RESTORE);
- // ShowWindow(hwnd,SW_SHOW); //FG> SW_RESTORE should take care of it and is trapped for taskbar button hiding. Explicitly showing the window will make an iconless button reapear if studio is set to not have a taskbar button
- SetForegroundWindow(hwnd);
- #else
- DebugString( "portme -- IpcsPtr::moveToForeground\n" );
- #endif
- }
- void IpcsPtr::sendWasabiCommand(int command, void *param, int paramlen) {
- #ifdef WIN32
- COPYDATASTRUCT cd;
- cd.dwData=command;
- cd.cbData=paramlen;
- cd.lpData=param;
- SendMessage(hwnd, WM_COPYDATA, NULL, (long)&cd);
- #else
- wa_msgbuf msg;
- msg.mtype = command;
- ASSERT( paramlen < IPC_MSGMAX - 4 );
- msg.paramlen = paramlen;
- MEMCPY( msg.param, param, paramlen );
- if ( msgsnd( qid , &msg, IPC_MSGMAX, 0 ) == 1 ) {
- perror( "msgsnd" );
- }
- #endif
- }
- void IpcsPtr::sendWasabiCommand(int command, const char *param) {
- sendWasabiCommand(command, (void *)param, STRLEN(param)+1);
- }
- IpcsPtr *Ipcs::getOtherWasabiInstance() {
- extern String ipcWindowClassName;
- #ifdef WIN32
- HWND hwnd_instance=FindWindow(ipcWindowClassName,NULL);
- if(!hwnd_instance) return NULL;
-
- return(new IpcsPtr(hwnd_instance));
- #else
- int key = ftok( ".", 'w' );
- int qid = msgget( key, 0 );
- if ( qid == -1 && errno == ENOENT ) {
- qid = msgget( key, IPC_CREAT | IPC_EXCL | 0660 );
- LinuxAPI::setIPCId( qid );
- return NULL;
- } else if ( qid == -1 ) {
- return NULL;
- } else {
- return new IpcsPtr( qid );
- }
- #endif
- }
- #pragma warning(push)
- #pragma warning(disable: 4060)
- int Ipcs::onIpcsMessage(int command, void *param, int paramlen) {
- switch(command) {
- #ifdef WASABI_API_COMPONENT
- case IPC_COMMANDLINE:
- Main::processCommandLine((const char *)param);
- return 0;
- #endif
- }
- return 0;
- }
- #pragma warning(pop)
|