SIGINT (Ctrl+C) are received. Should be portable (it's ISO C at least), but if not,
just comment out the few lines in main.cpp and tell me.
***************************************************************************/
#include "settings.h"
***************************************************************************/
#include "settings.h"
#if defined BUILD_CORE
#include <QCoreApplication>
#if defined BUILD_CORE
#include <QCoreApplication>
#error "Something is wrong - you need to #define a build mode!"
#endif
#error "Something is wrong - you need to #define a build mode!"
#endif
+#include <signal.h>
+
+//! Signal handler for graceful shutdown.
+void handle_signal(int sig) {
+ qWarning(QString("Caught signal %1 - exiting.").arg(sig).toAscii());
+ QCoreApplication::quit();
+}
+
int main(int argc, char **argv) {
int main(int argc, char **argv) {
+ // We catch SIGTERM and SIGINT (caused by Ctrl+C) to graceful shutdown Quassel.
+ signal(SIGTERM, handle_signal);
+ signal(SIGINT, handle_signal);
+
qRegisterMetaType<Message>("Message");
qRegisterMetaType<BufferId>("BufferId");
qRegisterMetaTypeStreamOperators<Message>("Message");
qRegisterMetaType<Message>("Message");
qRegisterMetaType<BufferId>("BufferId");
qRegisterMetaTypeStreamOperators<Message>("Message");
connect(ui.hostEdit, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputValid()));
connect(ui.userEdit, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputValid()));
connect(ui.internalCore, SIGNAL(toggled(bool)), this, SLOT(checkInputValid()));
connect(ui.hostEdit, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputValid()));
connect(ui.userEdit, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputValid()));
connect(ui.internalCore, SIGNAL(toggled(bool)), this, SLOT(checkInputValid()));
+ connect(ui.internalCore, SIGNAL(toggled(bool)), ui.hostEdit, SLOT(setDisabled(bool)));
+ connect(ui.internalCore, SIGNAL(toggled(bool)), ui.port, SLOT(setDisabled(bool)));
connect(ui.accountList, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(accountChanged(const QString &)));
connect(ui.autoConnect, SIGNAL(clicked(bool)), this, SLOT(autoConnectToggled(bool)));
connect(ui.accountList, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(accountChanged(const QString &)));
connect(ui.autoConnect, SIGNAL(clicked(bool)), this, SLOT(autoConnectToggled(bool)));
curacc = s.lastAccount();
if(!ui.accountList->count()) {
//if(doAutoConnect) reject();
curacc = s.lastAccount();
if(!ui.accountList->count()) {
//if(doAutoConnect) reject();
setAccountEditEnabled(false);
QString newacc = QInputDialog::getText(this, tr("Create Account"), tr(
"In order to connect to a Quassel Core, you need to create an account.<br>"
setAccountEditEnabled(false);
QString newacc = QInputDialog::getText(this, tr("Create Account"), tr(
"In order to connect to a Quassel Core, you need to create an account.<br>"
ui.internalCore->setChecked(false);
setAccountEditEnabled(true);
}
ui.internalCore->setChecked(false);
setAccountEditEnabled(true);
}
// FIXME We create a default account here that just connects to the internal core
curacc = "Default";
ui.accountList->addItem("Default");
// FIXME We create a default account here that just connects to the internal core
curacc = "Default";
ui.accountList->addItem("Default");
ui.accountList->setCurrentIndex(0);
ui.autoConnect->setChecked(true);
autoConnectToggled(true);
ui.accountList->setCurrentIndex(0);
ui.autoConnect->setChecked(true);
autoConnectToggled(true);
} else {
if(!curacc.isEmpty()) {
//if(doAutoConnect) { qDebug() << "auto";
} else {
if(!curacc.isEmpty()) {
//if(doAutoConnect) { qDebug() << "auto";