Fix default button behavior in CoreConnectDlg.
[quassel.git] / src / client / client.cpp
index e09684b..1cd8939 100644 (file)
@@ -81,7 +81,7 @@ void Client::init() {
 
   SignalProxy *p = signalProxy();
 
-  p->attachSlot(SIGNAL(displayMsg(const Message &)), this, SLOT(recvMessage(const Message &)));
+  p->attachSlot(SIGNAL(displayMsg(Message &)), this, SLOT(recvMessage(Message &)));
   p->attachSlot(SIGNAL(displayStatusMsg(QString, QString)), this, SLOT(recvStatusMsg(QString, QString)));
 
   p->attachSlot(SIGNAL(backlogData(BufferInfo, const QVariantList &, bool)), this, SLOT(recvBacklogData(BufferInfo, const QVariantList &, bool)));
@@ -379,24 +379,23 @@ void Client::networkDestroyed() {
   }
 }
 
-void Client::recvMessage(const Message &msg) {
+void Client::recvMessage(Message &msg) {
+  Buffer *b;
+  
   if(msg.type() == Message::Error) {
-    Buffer *b = buffer(msg.bufferInfo().bufferId());
-    if(b) {
-      b->appendMsg(msg);
-      networkModel()->updateBufferActivity(msg);
-    } else {
-      //TODO: display message in the status buffer
+    b = buffer(msg.bufferInfo().bufferId());
+    if(!b) {
+      // FIXME: if buffer doesn't exist, forward the message to the status or current buffer
       b = buffer(msg.bufferInfo());
-      b->appendMsg(msg);
-      networkModel()->updateBufferActivity(msg);
     }
   } else {
-    Buffer *b = buffer(msg.bufferInfo());
-    b->appendMsg(msg);
-    networkModel()->updateBufferActivity(msg);
+    b = buffer(msg.bufferInfo());
   }
-
+  
+  checkForHighlight(msg);
+  b->appendMsg(msg);
+  networkModel()->updateBufferActivity(msg);
+  
   if(msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) {
     const Network *net = network(msg.bufferInfo().networkId());
     QString networkName = net != 0
@@ -417,6 +416,7 @@ void Client::recvBacklogData(BufferInfo id, QVariantList msgs, bool /*done*/) {
   Buffer *b = buffer(id);
   foreach(QVariant v, msgs) {
     Message msg = v.value<Message>();
+    checkForHighlight(msg);
     b->prependMsg(msg);
     networkModel()->updateBufferActivity(msg);
     if(!layoutQueue.contains(b)) layoutQueue.append(b);
@@ -439,3 +439,11 @@ AbstractUiMsg *Client::layoutMsg(const Message &msg) {
   return instance()->mainUi->layoutMsg(msg);
 }
 
+void Client::checkForHighlight(Message &msg) const {
+  const Network *net = network(msg.bufferInfo().networkId());
+  if(net && !net->myNick().isEmpty()) {
+    QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$");
+    if((msg.type() == Message::Plain || msg.type() == Message::Notice || msg.type() == Message::Action) && nickRegExp.exactMatch(msg.text()))
+      msg.setFlags(msg.flags() | Message::Highlight);
+  }
+}