QString PluginContext::applicationPath(){ #ifdef Q_OS_DARWIN return QDir(QFileInfo(applicationFilePath()).path() + "/..").absolutePath(); #else return QFileInfo(applicationFilePath()).path(); #endif }
QLuaApplication::QLuaApplication(int &argc, char **argv, bool guiEnabled, bool onethread) : QApplication(argc, argv, guiEnabled), d(new Private(this)) { // one thread only d->oneThread = onethread; // extract program name QString cuteName = QFileInfo(applicationFilePath()).baseName(); d->programNameData = cuteName.toLocal8Bit(); d->programName = d->programNameData.constData(); QRegExp re("^(mac(?=qlua)|win(?=qlua)|)(q?)(.*)", Qt::CaseInsensitive); cuteName = capitalize(cuteName); if (re.indexIn(cuteName) >= 0 && re.numCaptures() == 3) cuteName = capitalize(re.cap(2)) + capitalize(re.cap(3)); // basic setup setApplicationName(cuteName); setOrganizationName(QLUA_ORG); setOrganizationDomain(LUA_DOMAIN); #ifndef Q_WS_MAC if (guiEnabled && windowIcon().isNull()) setWindowIcon(QIcon(":/qlua.png")); #else extern void qt_mac_set_native_menubar(bool); extern void qt_mac_set_menubar_icons(bool); # ifdef QT_MAC_USE_NATIVE_MENUBAR qt_mac_set_native_menubar(true); # else qt_mac_set_native_menubar(false); # endif qt_mac_set_menubar_icons(false); #endif // create console // It is important to create this first because // the console code ensures that posix signals are // processed from the console thread. d->theConsole = new QLuaConsole(this); connect(d->theConsole, SIGNAL(ttyBreak()), d, SLOT(consoleBreak()) ); connect(d->theConsole, SIGNAL(ttyInput(QByteArray)), d, SLOT(ttyInput(QByteArray)) ); connect(d->theConsole, SIGNAL(ttyEndOfFile()), d, SLOT(ttyEndOfFile()) ); connect(d->theConsole, SIGNAL(consoleOutput(QByteArray)), this, SIGNAL(luaConsoleOutput(QByteArray)) ); }
void AssignmentClientMonitor::spawnChildClient() { QProcess *assignmentClient = new QProcess(this); _childProcesses.append(QPointer<QProcess>(assignmentClient)); // make sure that the output from the child process appears in our output assignmentClient->setProcessChannelMode(QProcess::ForwardedChannels); assignmentClient->start(applicationFilePath(), _childArguments); // link the child processes' finished slot to our childProcessFinished slot connect(assignmentClient, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(childProcessFinished(int, QProcess::ExitStatus))); qDebug() << "Spawned a child client with PID" << assignmentClient->pid(); }
bool KviApplication::checkUriAssociations(const char * pcProto) { #define QUERY_BUFFER 2048 char * pcBuffer; DWORD len = QUERY_BUFFER; DWORD err; pcBuffer = (char *)malloc(len * sizeof(char)); HKEY hKey; KviCString szStoredKey = pcProto; KviCString szKey = szStoredKey; len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCI(__tr2qs("URL:IRC Protocol").toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if((err = RegQueryValueEx(hKey, "URL Protocol", 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } szKey = szStoredKey + "\\DefaultIcon"; len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { QString szIcon = applicationFilePath() + ",0"; szIcon.replace('/', "\\"); if(!kvi_strEqualCI(szIcon.toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; szKey = szStoredKey + "\\Shell\\open"; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCI(__tr2qs("Open with KVIrc").toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; szKey = szStoredKey + "\\Shell\\open\\command"; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { QString szCmd = applicationFilePath() + " \"%1\""; szCmd.replace('/', "\\"); if(!kvi_strEqualCI(szCmd.toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } free(pcBuffer); #else bool KviApplication::checkUriAssociations(const char *) { #endif return true; } #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) void KviApplication::setupUriAssociations(const char * pcProto) { HKEY hKey; DWORD err; KviCString szStoredKey = pcProto; KviCString szKey = szStoredKey; QByteArray tmp; QString szAppPath = applicationFilePath(); szAppPath.replace('/', "\\"); SHDeleteKey(HKEY_CLASSES_ROOT, szKey); err = RegCreateKeyEx(HKEY_CLASSES_ROOT, szKey, 0, 0, 0, KEY_WRITE, 0, &hKey, 0); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE) "URL:IRC Protocol", 16); RegSetValueEx(hKey, "URL Protocol", 0, REG_SZ, (LPBYTE) "", 0); szKey = szStoredKey + "\\DefaultIcon"; RegCreateKeyEx(HKEY_CLASSES_ROOT, szKey, 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + ",0").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); szKey = szStoredKey + "\\Shell\\open"; RegCreateKeyEx(HKEY_CLASSES_ROOT, szKey, 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("Open with KVIrc").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); szKey = szStoredKey + "\\Shell\\open\\command"; RegCreateKeyEx(HKEY_CLASSES_ROOT, szKey, 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + " --external \"%1\"").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); #else void KviApplication::setupUriAssociations(const char *) { #endif } void KviApplication::setupFileAssociations() { #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) HKEY hKey; DWORD err; QByteArray tmp; QString szAppPath = applicationFilePath(); szAppPath.replace('/', "\\"); SHDeleteKey(HKEY_CLASSES_ROOT, ".kvs"); err = RegCreateKeyEx(HKEY_CLASSES_ROOT, ".kvs", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE) "KVIrcScript", 11); SHDeleteKey(HKEY_CLASSES_ROOT, "KVIrcScript"); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("KVIrc KVS Script").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\DefaultIcon", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + ",1").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\Shell\\Parse", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("Run KVS Script").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\Shell\\Parse\\command", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + " \"%1\"").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); //Configs SHDeleteKey(HKEY_CLASSES_ROOT, ".kvc"); err = RegCreateKeyEx(HKEY_CLASSES_ROOT, ".kvc", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE) "KVIrcConfig", 11); SHDeleteKey(HKEY_CLASSES_ROOT, "KVIrcConfig"); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcConfig", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("KVIrc Configuration File").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcConfig\\DefaultIcon", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + ",2").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); // Themes SHDeleteKey(HKEY_CLASSES_ROOT, ".kvt"); err = RegCreateKeyEx(HKEY_CLASSES_ROOT, ".kvt", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE) "KVIrcTheme", 11); SHDeleteKey(HKEY_CLASSES_ROOT, "KVIrcTheme"); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcTheme", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("KVIrc Theme Package").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcTheme\\DefaultIcon", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + ",3").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcTheme\\Shell\\Install", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("Install Theme Package").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcTheme\\Shell\\Install\\command", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + " \"%1\"").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); //Addons SHDeleteKey(HKEY_CLASSES_ROOT, ".kva"); err = RegCreateKeyEx(HKEY_CLASSES_ROOT, ".kva", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE) "KVIrcAddon", 11); SHDeleteKey(HKEY_CLASSES_ROOT, "KVIrcAddon"); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcAddon", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("KVIrc Addon Package").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcAddon\\DefaultIcon", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + ",4").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcAddon\\Shell\\Install", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = __tr2qs("Install Package").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); RegCreateKeyEx(HKEY_CLASSES_ROOT, "KVIrcAddon\\Shell\\Install\\command", 0, 0, 0, KEY_WRITE, 0, &hKey, 0); tmp = QString(szAppPath + " \"%1\"").toLocal8Bit(); RegSetValueEx(hKey, 0, 0, REG_SZ, (LPBYTE)tmp.data(), tmp.length()); #endif }
bool KviApplication::checkFileAssociations() { #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) #define QUERY_BUFFER 2048 char * pcBuffer; DWORD len = QUERY_BUFFER; DWORD err; pcBuffer = (char *)malloc(len * sizeof(char)); HKEY hKey; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".kvs", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCIN("KVIrcScript", pcBuffer, 11)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCI(__tr2qs("KVIrc KVS Script").toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\DefaultIcon", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { QString szIcon = applicationFilePath() + ",1"; szIcon.replace('/', "\\"); if(!kvi_strEqualCI(szIcon.toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\Shell\\Parse", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCI(__tr2qs("Run KVS Script").toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcScript\\Shell\\Parse\\command", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if(RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { QString szCmd = applicationFilePath() + " \"%1\""; szCmd.replace('/', "\\"); if(!kvi_strEqualCI(szCmd.toLocal8Bit().data(), pcBuffer)) { free(pcBuffer); return false; } } //Config if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".kvc", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCIN("KVIrcConfig", pcBuffer, 11)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcConfig", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } //Addon if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".kva", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCIN("KVIrcAddon", pcBuffer, 11)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcAddon", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } //Theme if(RegOpenKeyEx(HKEY_CLASSES_ROOT, ".kvt", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } if((err = RegQueryValueEx(hKey, 0, 0, 0, (LPBYTE)pcBuffer, &len)) != ERROR_SUCCESS) { free(pcBuffer); return false; } else { if(!kvi_strEqualCIN("KVIrcTheme", pcBuffer, 11)) { free(pcBuffer); return false; } } len = QUERY_BUFFER; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "KVIrcTheme", 0, KEY_READ, &hKey) != ERROR_SUCCESS) { free(pcBuffer); return false; } free(pcBuffer); #endif return true; }