From: Frank Reininghaus Date: Sat, 29 Aug 2015 19:50:16 +0000 (+0200) Subject: Only store modified columns widths after the mouse button was released X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/5ce01c864f4ab9848a54ee982f6ac18e63f04773?hp=-c Only store modified columns widths after the mouse button was released This prevents that the new widths are written to disk multiple times in quick succession, which can make column resizing quite slow. BUG: 351846 REVIEW: 351846 FIXED-IN: 15.08.1 --- 5ce01c864f4ab9848a54ee982f6ac18e63f04773 diff --git a/src/kitemviews/kitemlistheader.cpp b/src/kitemviews/kitemlistheader.cpp index a3fa14d35..935961a8b 100644 --- a/src/kitemviews/kitemlistheader.cpp +++ b/src/kitemviews/kitemlistheader.cpp @@ -83,5 +83,7 @@ KItemListHeader::KItemListHeader(KItemListView* listView) : connect(m_headerWidget, &KItemListHeaderWidget::columnWidthChanged, this, &KItemListHeader::columnWidthChanged); + connect(m_headerWidget, &KItemListHeaderWidget::columnWidthChangeFinished, + this, &KItemListHeader::columnWidthChangeFinished); } diff --git a/src/kitemviews/kitemlistheader.h b/src/kitemviews/kitemlistheader.h index cc2b74793..76c420559 100644 --- a/src/kitemviews/kitemlistheader.h +++ b/src/kitemviews/kitemlistheader.h @@ -79,6 +79,13 @@ signals: qreal currentWidth, qreal previousWidth); + /** + * Is emitted if the user has released the mouse button after adjusting the + * width of a visible role. + */ + void columnWidthChangeFinished(const QByteArray& role, + qreal currentWidth); + private: KItemListHeader(KItemListView* listView); diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index 45ce4e759..cc11e19da 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -232,6 +232,13 @@ void KItemListHeaderWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) break; } + case ResizeRoleOperation: { + const QByteArray pressedRole = m_columns[m_pressedRoleIndex]; + const qreal currentWidth = m_columnWidths.value(pressedRole); + emit columnWidthChangeFinished(pressedRole, currentWidth); + break; + } + case MoveRoleOperation: m_movingRole.pixmap = QPixmap(); m_movingRole.x = 0; @@ -337,6 +344,7 @@ void KItemListHeaderWidget::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* even qreal currentWidth = columnWidth(role); emit columnWidthChanged(role, currentWidth, previousWidth); + emit columnWidthChangeFinished(role, currentWidth); } } diff --git a/src/kitemviews/private/kitemlistheaderwidget.h b/src/kitemviews/private/kitemlistheaderwidget.h index 307def74d..2a80c205d 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.h +++ b/src/kitemviews/private/kitemlistheaderwidget.h @@ -75,6 +75,13 @@ signals: qreal currentWidth, qreal previousWidth); + /** + * Is emitted if the user has released the mouse button after adjusting the + * width of a visible role. + */ + void columnWidthChangeFinished(const QByteArray& role, + qreal currentWidth); + /** * Is emitted if the position of the column has been changed. */ diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index d3023585a..07b40dceb 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -177,8 +177,8 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : this, &DolphinView::slotVisibleRolesChangedByHeader); connect(m_view, &DolphinItemListView::roleEditingCanceled, this, &DolphinView::slotRoleEditingCanceled); - connect(m_view->header(), &KItemListHeader::columnWidthChanged, - this, &DolphinView::slotHeaderColumnWidthChanged); + connect(m_view->header(), &KItemListHeader::columnWidthChangeFinished, + this, &DolphinView::slotHeaderColumnWidthChangeFinished); KItemListSelectionManager* selectionManager = controller->selectionManager(); connect(selectionManager, &KItemListSelectionManager::selectionChanged, @@ -971,10 +971,8 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) delete menu; } -void DolphinView::slotHeaderColumnWidthChanged(const QByteArray& role, qreal current, qreal previous) +void DolphinView::slotHeaderColumnWidthChangeFinished(const QByteArray& role, qreal current) { - Q_UNUSED(previous); - const QList visibleRoles = m_view->visibleRoles(); ViewProperties props(viewPropertiesUrl()); diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 24b560f10..d1a5d5005 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -566,7 +566,7 @@ private slots: void slotItemContextMenuRequested(int index, const QPointF& pos); void slotViewContextMenuRequested(const QPointF& pos); void slotHeaderContextMenuRequested(const QPointF& pos); - void slotHeaderColumnWidthChanged(const QByteArray& role, qreal current, qreal previous); + void slotHeaderColumnWidthChangeFinished(const QByteArray& role, qreal current); void slotItemHovered(int index); void slotItemUnhovered(int index); void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);