mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-20 00:41:23 +00:00
Make sure that key presses are handled in KItemListController
Key press events are forwarded from KItemListContainer to KItemListController. Right now, only the 'Home' and 'End' keys are handled (arrow keys require some more work because their action depends on the view mode). Note: 1. Before key presses are handled, the view has to be clicked with the mouse. It seems that the view does not have the keyboard focus initially. 2. The view does not scroll to the new current item yet.
This commit is contained in:
parent
2e3b7e6dd3
commit
6d6fe76dcf
|
@ -26,6 +26,7 @@
|
|||
#include "kitemlistview.h"
|
||||
#include "kitemmodelbase.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QGraphicsScene>
|
||||
#include <QGraphicsView>
|
||||
#include <QPropertyAnimation>
|
||||
|
@ -82,6 +83,20 @@ KItemListController* KItemListContainer::controller() const
|
|||
return m_controller;
|
||||
}
|
||||
|
||||
void KItemListContainer::keyPressEvent(QKeyEvent* event)
|
||||
{
|
||||
// TODO: We should find a better way to handle the key press events in the view.
|
||||
// The reasons why we need this hack are:
|
||||
// 1. Without reimplementing keyPressEvent() here, the event would not reach the QGraphicsView.
|
||||
// 2. By default, the KItemListView does not have the keyboard focus in the QGraphicsScene, so
|
||||
// simply sending the event to the QGraphicsView which is the KItemListContainer's viewport
|
||||
// does not work.
|
||||
KItemListView* view = m_controller->view();
|
||||
if (view) {
|
||||
QApplication::sendEvent(view, event);
|
||||
}
|
||||
}
|
||||
|
||||
void KItemListContainer::showEvent(QShowEvent* event)
|
||||
{
|
||||
QAbstractScrollArea::showEvent(event);
|
||||
|
|
|
@ -49,6 +49,7 @@ public:
|
|||
KItemListController* controller() const;
|
||||
|
||||
protected:
|
||||
virtual void keyPressEvent(QKeyEvent* event);
|
||||
virtual void showEvent(QShowEvent* event);
|
||||
virtual void resizeEvent(QResizeEvent* event);
|
||||
virtual void scrollContentsBy(int dx, int dy);
|
||||
|
|
|
@ -119,7 +119,14 @@ bool KItemListController::hideEvent(QHideEvent* event)
|
|||
|
||||
bool KItemListController::keyPressEvent(QKeyEvent* event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
switch (event->key()) {
|
||||
case Qt::Key_Home:
|
||||
m_selectionManager->setCurrentItem(0);
|
||||
break;
|
||||
case Qt::Key_End:
|
||||
m_selectionManager->setCurrentItem(m_model->count() - 1);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue