Fix a regression that would show some wrong context menu entries in some cases
[quassel.git] / src / uisupport / networkmodelactionprovider.cpp
index a4f84e4..9c817bf 100644 (file)
@@ -144,17 +144,13 @@ void NetworkModelActionProvider::registerAction(ActionType type, const QPixmap &
 void NetworkModelActionProvider::addActions(QMenu *menu, BufferId bufId, QObject *receiver, const char *method) {
   if(!bufId.isValid())
     return;
-  _messageFilter = 0;
-  _contextItem = QString();
   addActions(menu, Client::networkModel()->bufferIndex(bufId), receiver, method);
 }
 
 void NetworkModelActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView) {
   if(!index.isValid())
     return;
-  _messageFilter = 0;
-  _contextItem = QString();
-  addActions(menu, QList<QModelIndex>() << index, receiver, method, isCustomBufferView);
+  addActions(menu, QList<QModelIndex>() << index, 0, QString(), receiver, method, isCustomBufferView);
 }
 
 void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot) {
@@ -164,14 +160,18 @@ void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter,
 void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method) {
   if(!filter)
     return;
-  _messageFilter = filter;
-  _contextItem = chanOrNick;
-  addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), receiver, method);
+  addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, receiver, method, false);
+}
+
+void NetworkModelActionProvider::addActions(QMenu *menu, const QList<QModelIndex> &indexList, QObject *receiver,  const char *method, bool isCustomBufferView) {
+  addActions(menu, indexList, 0, QString(), receiver, method, isCustomBufferView);
 }
 
 // add a list of actions sensible for the current item(s)
 void NetworkModelActionProvider::addActions(QMenu *menu,
                                             const QList<QModelIndex> &indexList,
+                                            MessageFilter *filter,
+                                            const QString &contextItem,
                                             QObject *receiver,
                                             const char *method,
                                             bool isCustomBufferView)
@@ -180,6 +180,8 @@ void NetworkModelActionProvider::addActions(QMenu *menu,
     return;
 
   _indexList = indexList;
+  _messageFilter = filter;
+  _contextItem = contextItem;
   _receiver = receiver;
   _method = method;
 
@@ -262,6 +264,7 @@ void NetworkModelActionProvider::addNetworkItemActions(QMenu *menu, const QModel
 void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelIndex &index, bool isCustomBufferView) {
   BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
 
+  menu->addSeparator();
   switch(bufferInfo.type()) {
     case BufferInfo::ChannelBuffer:
       addAction(BufferJoin, menu, index, InactiveState);
@@ -504,10 +507,11 @@ void NetworkModelActionProvider::handleBufferAction(ActionType type, QAction *)
 void NetworkModelActionProvider::removeBuffers(const QModelIndexList &indexList) {
   QList<BufferInfo> inactive;
   foreach(QModelIndex index, indexList) {
-    if(!index.data(NetworkModel::ItemActiveRole).toBool()) {
-      BufferInfo info = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
-      if(info.isValid())
-        inactive << info;
+    BufferInfo info = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
+    if(info.isValid()) {
+      if(info.type() == BufferInfo::QueryBuffer
+        || (info.type() == BufferInfo::ChannelBuffer && !index.data(NetworkModel::ItemActiveRole).toBool()))
+          inactive << info;
     }
   }
   QString msg;