From: Manuel Nickschas Date: Tue, 27 Nov 2007 23:39:48 +0000 (+0000) Subject: Make Quassel less crashy (yeah, case sensitivity in channel names is baaaad)... make X-Git-Tag: 0.1.0~62 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=ec17201104f75eafaddccc174de8709b42b15ccb Make Quassel less crashy (yeah, case sensitivity in channel names is baaaad)... make autoconnect-to-core work correctly... fiddle around with our Settings implementation to try to make it work with SXE-enabled Qtopia (nope, still doesn't work).. And stop Quassel from crashing at disconnect-from-core due to the nickview not being updated. --- diff --git a/qtopia-build/quasseltopia.pro b/qtopia-build/quasseltopia.pro index fa32432e..a4db28b3 100644 --- a/qtopia-build/quasseltopia.pro +++ b/qtopia-build/quasseltopia.pro @@ -29,12 +29,12 @@ FORMS = $$FRMS desktop.files=../src/qtopia/quasseltopia.desktop desktop.path=/apps/Applications -desktop.trtarget=example-nct +#desktop.trtarget=example-nct desktop.hint=nct desktop -#pics.files=pics/* -#pics.path=/pics/example -#pics.hint=pics +pics.files=../src/images/qirc-icon.png +pics.path=/pics/quasselirc/ +pics.hint=pics #help.source=help #help.files=example.html @@ -47,5 +47,5 @@ pkg.desc=Quassel IRC, a next-gen IRC client pkg.version=0.0.1-1 pkg.maintainer=www.quassel-irc.org pkg.license=GPL -pkg.domain=docapi,pim,profiles,window,qdl,qds,doc_write +pkg.domain=window,net diff --git a/src/client/client.cpp b/src/client/client.cpp index bfce15d1..0e4a368b 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -103,10 +103,11 @@ Buffer *Client::buffer(BufferInfo id) { // FIXME switch to netids! // WHEN IS THIS NEEDED ANYHOW!? +// ...only for finding the Buffer for a channel, I guess... BufferInfo Client::bufferInfo(QString net, QString buf) { foreach(Buffer *buffer_, buffers()) { BufferInfo bufferInfo = buffer_->bufferInfo(); - if(bufferInfo.network() == net && bufferInfo.buffer() == buf) + if(!bufferInfo.network().compare(net, Qt::CaseInsensitive) && !bufferInfo.buffer().compare(buf, Qt::CaseInsensitive)) return bufferInfo; } Q_ASSERT(false); // should never happen! diff --git a/src/client/clientsettings.h b/src/client/clientsettings.h index b14cb451..4b2e4e95 100644 --- a/src/client/clientsettings.h +++ b/src/client/clientsettings.h @@ -24,7 +24,6 @@ #include "settings.h" class ClientSettings : public Settings { - Q_OBJECT public: virtual ~ClientSettings(); @@ -41,7 +40,6 @@ class ClientSettings : public Settings { }; class AccountSettings : public ClientSettings { - Q_OBJECT public: AccountSettings(); diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 4f061854..b5ca9167 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -22,11 +22,33 @@ #include #include -#include "settings.h" - -Settings::Settings(QString g) : QObject(), group(g) { +#ifdef Q_WS_QWS +#include +#include +#endif +#include "settings.h" +Settings::Settings(QString g) : group(g) { + +#ifndef Q_WS_QWS + QSettings(); +#else + // FIXME sandboxDir() is not currently working correctly... + //if(Qtopia::sandboxDir().isEmpty()) QSettings(); + //else QSettings(Qtopia::sandboxDir() + "/etc/QuasselIRC.conf", QSettings::NativeFormat); + // ...so we have to use a workaround: + /* + QString appPath = QCoreApplication::applicationFilePath(); + if(appPath.startsWith(Qtopia::packagePath())) { + QString sandboxPath = appPath.left(Qtopia::packagePath().length() + 32); + QSettings(sandboxPath + "/etc/QuasselIRC.conf", QSettings::IniFormat); + } else { + QSettings(); + } + */ + QSettings(); +#endif } Settings::~Settings() { @@ -39,38 +61,41 @@ void Settings::setGroup(QString g) { } QStringList Settings::allLocalKeys() { - QSettings s; - s.beginGroup(group); - return s.allKeys(); + beginGroup(group); + QStringList res = allKeys(); + endGroup(); + return res; } QStringList Settings::localChildKeys() { - QSettings s; - s.beginGroup(group); - return s.childKeys(); + beginGroup(group); + QStringList res = childKeys(); + endGroup(); + return res; } QStringList Settings::localChildGroups() { - QSettings s; - s.beginGroup(group); - return s.childGroups(); + beginGroup(group); + QStringList res = childGroups(); + endGroup(); + return res; } void Settings::setLocalValue(const QString &key, const QVariant &data) { - QSettings s; - s.beginGroup(group); - s.setValue(key, data); + beginGroup(group); + setValue(key, data); + endGroup(); } QVariant Settings::localValue(const QString &key, const QVariant &def) { - QSettings s; - s.beginGroup(group); - return s.value(key, def); + beginGroup(group); + QVariant res = value(key, def); + endGroup(); + return res; } void Settings::removeLocalKey(const QString &key) { - QSettings s; - s.beginGroup(group); - s.remove(key); + beginGroup(group); + remove(key); + endGroup(); } - diff --git a/src/common/settings.h b/src/common/settings.h index efa03d7a..9fe6e64b 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -23,9 +23,9 @@ #include #include +#include -class Settings : public QObject { - Q_OBJECT +class Settings : private QSettings { public: virtual ~Settings(); @@ -52,6 +52,7 @@ class Settings : public QObject { virtual void removeLocalKey(const QString &key); QString group; + }; diff --git a/src/core/coresettings.h b/src/core/coresettings.h index e11b4666..205187dc 100644 --- a/src/core/coresettings.h +++ b/src/core/coresettings.h @@ -25,7 +25,6 @@ #include "settings.h" class CoreSettings : public Settings { - Q_OBJECT public: virtual ~CoreSettings(); diff --git a/src/qtopia/nicklistwidget.cpp b/src/qtopia/nicklistwidget.cpp index f14fc86b..e53b6a39 100644 --- a/src/qtopia/nicklistwidget.cpp +++ b/src/qtopia/nicklistwidget.cpp @@ -19,7 +19,7 @@ ***************************************************************************/ #include "nicklistwidget.h" -#include "nicktreemodel.h" +//#include "nicktreemodel.h" NickListWidget::NickListWidget(QWidget *parent) : QDialog(parent) { ui.setupUi(this); @@ -35,6 +35,6 @@ NickListWidget::~NickListWidget() { } void NickListWidget::setNickModel(NickTreeModel *model) { - ui.nickView->setModel(model); + //ui.nickView->setModel(model); } diff --git a/src/qtopia/qtopiamainwin.cpp b/src/qtopia/qtopiamainwin.cpp index 618b2e63..081201f7 100644 --- a/src/qtopia/qtopiamainwin.cpp +++ b/src/qtopia/qtopiamainwin.cpp @@ -31,6 +31,8 @@ #include "qtopiaui.h" #include "signalproxy.h" +#include + // This constructor is the first thing to be called for a Qtopia app, so we do the init stuff // here (rather than in a main.cpp). QtopiaMainWin::QtopiaMainWin(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { @@ -47,10 +49,6 @@ QtopiaMainWin::QtopiaMainWin(QWidget *parent, Qt::WFlags flags) : QMainWindow(pa QCoreApplication::setApplicationName("Quassel IRC"); QCoreApplication::setOrganizationName("Quassel IRC Team"); - QSettings s(QSettings::UserScope, "quassel", "quassel"); - s.setValue("foo", "bar"); - - //Style::init(); QtopiaUi *gui = new QtopiaUi(this); Client::init(gui); diff --git a/src/qtopia/quasseltopia.desktop b/src/qtopia/quasseltopia.desktop index 195a29f8..e1ca46d4 100644 --- a/src/qtopia/quasseltopia.desktop +++ b/src/qtopia/quasseltopia.desktop @@ -5,6 +5,6 @@ [Desktop Entry] Comment[]=A Next-Gen IRC Client Exec=quasseltopia -Icon=example/Example +Icon=/pics/quasselirc/qirc-icon.png Type=Application Name[]=QuasselTopia diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index 16d4552c..c3c73d52 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -59,8 +59,8 @@ CoreConnectDlg::CoreConnectDlg(QWidget *parent, bool /*doAutoConnect*/) : QDialo connect(Client::instance(), SIGNAL(showConfigWizard(const QVariantMap &)), this, SLOT(showConfigWizard(const QVariantMap &))); AccountSettings s; + QString lastacc = s.lastAccount(); ui.accountList->addItems(s.knownAccounts()); - curacc = s.lastAccount(); if(!ui.accountList->count()) { //if(doAutoConnect) reject(); @@ -90,7 +90,7 @@ CoreConnectDlg::CoreConnectDlg(QWidget *parent, bool /*doAutoConnect*/) : QDialo autoConnectToggled(true); */ } else { - if(!curacc.isEmpty()) { + if(!lastacc.isEmpty()) { //if(doAutoConnect) { qDebug() << "auto"; // AccountSettings s; // int idx = ui.accountList->findText(s.autoConnectAccount()); @@ -100,7 +100,7 @@ CoreConnectDlg::CoreConnectDlg(QWidget *parent, bool /*doAutoConnect*/) : QDialo // doConnect(); // } //} else { - int idx = ui.accountList->findText(curacc); + int idx = ui.accountList->findText(lastacc); ui.accountList->setCurrentIndex(idx); //} } diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index a815df9b..c5ab8fdc 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -207,6 +207,7 @@ void MainWin::disconnectedFromCore() { ui.actionNetworkList->setEnabled(false); ui.bufferWidget->hide(); ui.actionConnectCore->setEnabled(true); + nickListWidget->reset(); statusBar()->showMessage(tr("Not connected to core.")); } diff --git a/src/qtui/nicklistwidget.cpp b/src/qtui/nicklistwidget.cpp index a7a78dec..024ebeb4 100644 --- a/src/qtui/nicklistwidget.cpp +++ b/src/qtui/nicklistwidget.cpp @@ -29,6 +29,10 @@ NickListWidget::NickListWidget(QWidget *parent) : QWidget(parent) { } void NickListWidget::setBuffer(Buffer *buf) { + if(!buf) { + ui.stackedWidget->setCurrentWidget(ui.emptyPage); + return; + } if(buf->bufferType() != Buffer::ChannelType) { ui.stackedWidget->setCurrentWidget(ui.emptyPage); } else { @@ -43,3 +47,10 @@ void NickListWidget::setBuffer(Buffer *buf) { } } } + +void NickListWidget::reset() { + foreach(NickView *view, nickViews.values()) { + ui.stackedWidget->removeWidget(view); + view->deleteLater(); + } +} diff --git a/src/qtui/nicklistwidget.h b/src/qtui/nicklistwidget.h index 579d8fbf..6c95f9b4 100644 --- a/src/qtui/nicklistwidget.h +++ b/src/qtui/nicklistwidget.h @@ -36,6 +36,7 @@ class NickListWidget : public QWidget { public slots: void setBuffer(Buffer *); + void reset(); private: Ui::NickListWidget ui; diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index d4eb827d..9894ba80 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -22,7 +22,6 @@ #include "nickmodel.h" #include -#include NickView::NickView(QWidget *parent) : QTreeView(parent) { setGeometry(0, 0, 30, 30); @@ -47,5 +46,4 @@ NickView::~NickView() { void NickView::setModel(NickModel *model) { filteredModel->setSourceModel(model); expandAll(); - }