Revert "Properly focus BufferView on first click"
[quassel.git] / src / uisupport / bufferview.cpp
index 7c4e6c5..c06e7d2 100644 (file)
@@ -36,7 +36,6 @@
 #include "buffersyncer.h"
 #include "client.h"
 #include "iconloader.h"
-#include "mappedselectionmodel.h"
 #include "network.h"
 #include "networkmodel.h"
 #include "networkmodelactionprovider.h"
@@ -100,7 +99,7 @@ void BufferView::init() {
   header()->setContextMenuPolicy(Qt::ActionsContextMenu);
   hideColumn(1);
   hideColumn(2);
-  setIndentation(5);
+  setIndentation(10);
   expandAll();
 
   setAnimated(true);
@@ -201,14 +200,17 @@ void BufferView::setConfig(BufferViewConfig *config) {
     connect(config, SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(setRootIndexForNetworkId(const NetworkId &)));
     setRootIndexForNetworkId(config->networkId());
   } else {
+    setIndentation(10);
     setRootIndex(QModelIndex());
   }
 }
 
 void BufferView::setRootIndexForNetworkId(const NetworkId &networkId) {
   if(!networkId.isValid() || !model()) {
+    setIndentation(10);
     setRootIndex(QModelIndex());
   } else {
+    setIndentation(5);
     int networkCount = model()->rowCount();
     QModelIndex child;
     for(int i = 0; i < networkCount; i++) {
@@ -239,27 +241,36 @@ void BufferView::keyPressEvent(QKeyEvent *event) {
 }
 
 void BufferView::dropEvent(QDropEvent *event) {
-  QList< QPair<NetworkId, BufferId> > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData());
+  QModelIndex index = indexAt(event->pos());
+
+  QRect indexRect = visualRect(index);
+  QPoint cursorPos = event->pos();
 
+  // check if we're really _on_ the item and not indicating a move to just above or below the item
+  const int margin = 2;
+  if(cursorPos.y() - indexRect.top() < margin
+     || indexRect.bottom() - cursorPos.y() < margin)
+    return QTreeView::dropEvent(event);
+
+  QList< QPair<NetworkId, BufferId> > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData());
   if(bufferList.count() != 1)
     return QTreeView::dropEvent(event);
 
   NetworkId networkId = bufferList[0].first;
   BufferId bufferId2 = bufferList[0].second;
 
-  QModelIndex index = indexAt(event->pos());
   if(index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
-    return;
+    return QTreeView::dropEvent(event);
 
   if(index.data(NetworkModel::BufferTypeRole) != BufferInfo::QueryBuffer)
-    return;
+    return QTreeView::dropEvent(event);
 
   if(index.data(NetworkModel::NetworkIdRole).value<NetworkId>() != networkId)
-    return;
+    return QTreeView::dropEvent(event);
 
   BufferId bufferId1 = index.data(NetworkModel::BufferIdRole).value<BufferId>();
   if(bufferId1 == bufferId2)
-    return;
+    return QTreeView::dropEvent(event);
 
   int res = QMessageBox::question(0, tr("Merge buffers permanently?"),
                                  tr("Do you want to merge the buffer \"%1\" permanently into buffer \"%2\"?\n This cannot be reversed!").arg(Client::networkModel()->bufferName(bufferId2)).arg(Client::networkModel()->bufferName(bufferId1)),
@@ -335,13 +346,12 @@ void BufferView::on_configChanged() {
       collapse(networkIdx);
   }
 
-  // update selection to current one
-  MappedSelectionModel *mappedSelectionModel = qobject_cast<MappedSelectionModel *>(selectionModel());
-  if(!config() || !mappedSelectionModel)
-    return;
+  if(config()) {
+    // update selection to current one
+    Client::bufferModel()->synchronizeView(this);
+  }
 
-  mappedSelectionModel->mappedSetCurrentIndex(Client::bufferModel()->standardSelectionModel()->currentIndex(), QItemSelectionModel::Current);
-  mappedSelectionModel->mappedSelect(Client::bufferModel()->standardSelectionModel()->selection(), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+  return;
 }
 
 void BufferView::on_collapse(const QModelIndex &index) {
@@ -401,7 +411,12 @@ void BufferView::contextMenuEvent(QContextMenuEvent *event) {
 }
 
 void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index) {
-  Client::mainUi()->actionProvider()->addActions(contextMenu, index, this, "menuActionTriggered", (bool)config());
+  QModelIndexList indexList = selectedIndexes();
+  // make sure the item we clicked on is first
+  indexList.removeAll(index);
+  indexList.prepend(index);
+
+  Client::mainUi()->actionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config());
 }
 
 void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) {
@@ -487,14 +502,6 @@ BufferViewDock::BufferViewDock(BufferViewConfig *config, QWidget *parent)
   connect(config, SIGNAL(bufferViewNameSet(const QString &)), this, SLOT(bufferViewRenamed(const QString &)));
 }
 
-BufferViewDock::BufferViewDock(QWidget *parent)
-  : QDockWidget(tr("All Buffers"), parent)
-{
-  setObjectName("BufferViewDock--1");
-  toggleViewAction()->setData((int)-1);
-  setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea);
-}
-
 void BufferViewDock::bufferViewRenamed(const QString &newName) {
   setWindowTitle(newName);
   toggleViewAction()->setText(newName);