Make Quassel less crashy (yeah, case sensitivity in channel names is baaaad)... make
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 27 Nov 2007 23:39:48 +0000 (23:39 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 27 Nov 2007 23:39:48 +0000 (23:39 +0000)
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.

14 files changed:
qtopia-build/quasseltopia.pro
src/client/client.cpp
src/client/clientsettings.h
src/common/settings.cpp
src/common/settings.h
src/core/coresettings.h
src/qtopia/nicklistwidget.cpp
src/qtopia/qtopiamainwin.cpp
src/qtopia/quasseltopia.desktop
src/qtui/coreconnectdlg.cpp
src/qtui/mainwin.cpp
src/qtui/nicklistwidget.cpp
src/qtui/nicklistwidget.h
src/uisupport/nickview.cpp

index fa32432..a4db28b 100644 (file)
@@ -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
 
index bfce15d..0e4a368 100644 (file)
@@ -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!
index b14cb45..4b2e4e9 100644 (file)
@@ -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();
index 4f06185..b5ca916 100644 (file)
 #include <QStringList>
 #include <QDebug>
 
-#include "settings.h"
-
-Settings::Settings(QString g) : QObject(), group(g) {
+#ifdef Q_WS_QWS
+#include <Qtopia>
+#include <QCoreApplication>
+#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();
 }
-
index efa03d7..9fe6e64 100644 (file)
@@ -23,9 +23,9 @@
 
 #include <QString>
 #include <QVariant>
+#include <QSettings>
 
-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;
+
 };
 
 
index e11b466..205187d 100644 (file)
@@ -25,7 +25,6 @@
 #include "settings.h"
 
 class CoreSettings : public Settings {
-  Q_OBJECT
   
   public:
     virtual ~CoreSettings();
index f14fc86..e53b6a3 100644 (file)
@@ -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);
 
 }
index 618b2e6..081201f 100644 (file)
@@ -31,6 +31,8 @@
 #include "qtopiaui.h"
 #include "signalproxy.h"
 
+#include <Qtopia>
+
 // 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);
 
index 195a29f..e1ca46d 100644 (file)
@@ -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
index 16d4552..c3c73d5 100644 (file)
@@ -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);
       //}
     }
index a815df9..c5ab8fd 100644 (file)
@@ -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."));
 }
 
index a7a78de..024ebeb 100644 (file)
@@ -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();
+  }
+}
index 579d8fb..6c95f9b 100644 (file)
@@ -36,6 +36,7 @@ class NickListWidget : public QWidget {
 
   public slots:
     void setBuffer(Buffer *);
+    void reset();
 
   private:
     Ui::NickListWidget ui;
index d4eb827..9894ba8 100644 (file)
@@ -22,7 +22,6 @@
 #include "nickmodel.h"
 
 #include <QHeaderView>
-#include <QSortFilterProxyModel>
 
 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();
-  
 }