From: Peter Penz Date: Mon, 19 Mar 2012 15:47:11 +0000 (+0100) Subject: Let additional mouse buttons trigger history navigation X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/5798e081f52371b9fd91cf0348cc946ebcc28a4a?ds=inline Let additional mouse buttons trigger history navigation Thanks to Sebastian Dörner for the patch! REVIEW: 101335 BUG: 181823 FIXED-IN: 4.9 --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 4c551b2c3..947db7703 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -2123,6 +2123,10 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(enableStopAction())); connect(view, SIGNAL(finishedPathLoading(KUrl)), this, SLOT(disableStopAction())); + connect(view, SIGNAL(goBackRequested()), + this, SLOT(goBack())); + connect(view, SIGNAL(goForwardRequested()), + this, SLOT(goForward())); const KUrlNavigator* navigator = container->urlNavigator(); connect(navigator, SIGNAL(urlChanged(KUrl)), diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 1ad760ae2..35d503867 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -454,9 +454,7 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const m_pressedMousePos = transform.map(event->pos()); m_pressedIndex = m_view->itemAt(m_pressedMousePos); - if (m_pressedIndex >= 0) { - emit itemPressed(m_pressedIndex, event->button()); - } + emit mouseButtonPressed(m_pressedIndex, event->buttons()); if (m_view->isAboveExpansionToggle(m_pressedIndex, m_pressedMousePos)) { m_selectionManager->endAnchoredSelection(); @@ -637,9 +635,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con return false; } - if (m_pressedIndex >= 0) { - emit itemReleased(m_pressedIndex, event->button()); - } + emit mouseButtonReleased(m_pressedIndex, event->buttons()); const bool isAboveSelectionToggle = m_view->isAboveSelectionToggle(m_pressedIndex, m_pressedMousePos); if (isAboveSelectionToggle) { diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h index 9ac4c76e6..b44fcca3c 100644 --- a/src/kitemviews/kitemlistcontroller.h +++ b/src/kitemviews/kitemlistcontroller.h @@ -177,14 +177,18 @@ signals: /** * Is emitted if a mouse-button has been pressed above an item. + * If the index is smaller than 0, the mouse-button has been pressed + * above the viewport. */ - void itemPressed(int index, Qt::MouseButton button); + void mouseButtonPressed(int itemIndex, Qt::MouseButtons buttons); /** * Is emitted if a mouse-button has been released above an item. - * It is assured that the signal itemPressed() has been emitted before. + * It is assured that the signal mouseButtonPressed() has been emitted before. + * If the index is smaller than 0, the mouse-button has been pressed + * above the viewport. */ - void itemReleased(int index, Qt::MouseButton button); + void mouseButtonReleased(int itemIndex, Qt::MouseButtons buttons); void itemExpansionToggleClicked(int index); diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 29a132184..75561a9c6 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -142,7 +142,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(controller, SIGNAL(itemContextMenuRequested(int,QPointF)), this, SLOT(slotItemContextMenuRequested(int,QPointF))); connect(controller, SIGNAL(viewContextMenuRequested(QPointF)), this, SLOT(slotViewContextMenuRequested(QPointF))); connect(controller, SIGNAL(headerContextMenuRequested(QPointF)), this, SLOT(slotHeaderContextMenuRequested(QPointF))); - connect(controller, SIGNAL(itemPressed(int,Qt::MouseButton)), this, SLOT(hideToolTip())); + connect(controller, SIGNAL(mouseButtonPressed(int,Qt::MouseButtons)), this, SLOT(slotMouseButtonPressed(int,Qt::MouseButtons))); connect(controller, SIGNAL(itemHovered(int)), this, SLOT(slotItemHovered(int))); connect(controller, SIGNAL(itemUnhovered(int)), this, SLOT(slotItemUnhovered(int))); connect(controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*))); @@ -889,6 +889,22 @@ void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* prev m_versionControlObserver->setModel(fileItemModel); } +void DolphinView::slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons) +{ + hideToolTip(); + + if (itemIndex < 0) { + // Trigger the history navigation only when clicking on the viewport: + // Above an item the XButtons provide a simple way to select items in + // the singleClick mode. + if (buttons & Qt::XButton1) { + emit goBackRequested(); + } else if (buttons & Qt::XButton2) { + emit goForwardRequested(); + } + } +} + void DolphinView::slotSelectionChanged(const QSet& current, const QSet& previous) { const int currentCount = current.count(); diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 628ab2dc5..48d0646c4 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -511,6 +511,18 @@ signals: */ void writeStateChanged(bool isFolderWritable); + /** + * Is emitted if the URL should be changed to the previous URL of the + * history (e.g. because the "back"-mousebutton has been pressed). + */ + void goBackRequested(); + + /** + * Is emitted if the URL should be changed to the next URL of the + * history (e.g. because the "next"-mousebutton has been pressed). + */ + void goForwardRequested(); + protected: /** Changes the zoom level if Control is pressed during a wheel event. */ virtual void wheelEvent(QWheelEvent* event); @@ -535,6 +547,7 @@ private slots: void slotItemUnhovered(int index); void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event); void slotModelChanged(KItemModelBase* current, KItemModelBase* previous); + void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons); /** * Emits the signal \a selectionChanged() with a small delay. This is