Prevent ChatView from scrolling up 1px on buffer switch, fixes #544
[quassel.git] / src / common / signalproxy.cpp
index 14aea7a..058e3cd 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -195,8 +195,8 @@ void SignalProxy::SignalRelay::attachSignal(QObject *sender, int signalId, const
   if(!funcName.isEmpty()) {
     fn = QMetaObject::normalizedSignature(funcName);
   } else {
-    fn = SIGNAL();
-    fn += sender->metaObject()->method(signalId).signature();
+    fn = SIGNAL(fakeMethodSignature());
+    fn = fn.replace("fakeMethodSignature()", sender->metaObject()->method(signalId).signature());
   }
 
   _slots[slotId] = Signal(sender, signalId, fn);
@@ -660,6 +660,17 @@ void SignalProxy::receivePackedFunc(AbstractPeer *sender, const QVariant &packed
 }
 
 void SignalProxy::receivePeerSignal(AbstractPeer *sender, const RequestType &requestType, const QVariantList &params) {
+  switch(requestType) {
+    // list all RequestTypes that shouldnot trigger a heartbeat counter reset here
+  case HeartBeatReply:
+    break;
+  default:
+    if(sender->type() == AbstractPeer::IODevicePeer) {
+      IODevicePeer *ioPeer = static_cast<IODevicePeer *>(sender);
+      ioPeer->sentHeartBeats = 0;
+    }
+  }
+
   switch(requestType) {
   case RpcCall:
     if(params.empty())
@@ -925,6 +936,9 @@ void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool c
 }
 
 bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVariant &item, bool compressed) {
+  if(!dev)
+    return false;
+
   QDataStream in(dev);
   in.setVersion(QDataStream::Qt_4_2);
 
@@ -934,12 +948,12 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian
   }
 
   if(blockSize > 1 << 22) {
-    disconnectDevice(dev, tr("Client tried to send package larger than max package size!"));
+    disconnectDevice(dev, tr("Peer tried to send package larger than max package size!"));
     return false;
   }
 
   if(blockSize == 0) {
-    disconnectDevice(dev, tr("Client tried to send 0 byte package!"));
+    disconnectDevice(dev, tr("Peer tried to send 0 byte package!"));
     return false;
   }
 
@@ -956,7 +970,7 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian
     if(nbytes <= 4) {
       const char *data = rawItem.constData();
       if(nbytes < 4 || (data[0]!=0 || data[1]!=0 || data[2]!=0 || data[3]!=0)) {
-       disconnectDevice(dev, tr("Client sent corrupted compressed data!"));
+       disconnectDevice(dev, tr("Peer sent corrupted compressed data!"));
        return false;
       }
     }
@@ -971,7 +985,7 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian
   }
 
   if(!item.isValid()) {
-    disconnectDevice(dev, tr("Client sent corrupt data: unable to load QVariant!"));
+    disconnectDevice(dev, tr("Peer sent corrupt data: unable to load QVariant!"));
     return false;
   }