From 2b0a0fb6d44f2a4343e9301ef4ece32ac4bdb75b Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 29 May 2010 19:31:46 +0000 Subject: Fix keyboard navigation issues in the column view BUG: 236039 svn path=/trunk/KDE/kdebase/apps/; revision=1132120 --- src/dolphincolumnviewcontainer.cpp | 58 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'src/dolphincolumnviewcontainer.cpp') diff --git a/src/dolphincolumnviewcontainer.cpp b/src/dolphincolumnviewcontainer.cpp index 421f195d5..344d38d8a 100644 --- a/src/dolphincolumnviewcontainer.cpp +++ b/src/dolphincolumnviewcontainer.cpp @@ -73,7 +73,7 @@ DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent, DolphinColumnView* column = new DolphinColumnView(viewport(), this, viewModeController->url()); m_columns.append(column); - setActiveColumnIndex(0); + requestActivation(column); m_emptyViewport = new QFrame(viewport()); m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); @@ -175,12 +175,7 @@ void DolphinColumnViewContainer::showColumn(const KUrl& url) } } - // set the last column as active column without modifying the controller - // and hence the history - m_columns[m_index]->setActive(false); - m_index = columnIndex; - m_columns[m_index]->setActive(true); - assureVisibleActiveColumn(); + requestActivation(m_columns[columnIndex]); } void DolphinColumnViewContainer::mousePressEvent(QMouseEvent* event) @@ -192,7 +187,9 @@ void DolphinColumnViewContainer::mousePressEvent(QMouseEvent* event) void DolphinColumnViewContainer::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_Left) { - setActiveColumnIndex(m_index - 1); + if (m_index > 0) { + requestActivation(m_columns[m_index - 1]); + } } else { QScrollArea::keyPressEvent(event); } @@ -250,24 +247,6 @@ void DolphinColumnViewContainer::updateActiveUrl() m_dolphinViewController->requestUrlChange(activeUrl); } -void DolphinColumnViewContainer::setActiveColumnIndex(int index) -{ - if ((m_index == index) || (index < 0) || (index >= m_columns.count())) { - return; - } - - const bool hasActiveColumn = (m_index >= 0); - if (hasActiveColumn) { - m_columns[m_index]->setActive(false); - } - - m_index = index; - m_columns[m_index]->setActive(true); - - assureVisibleActiveColumn(); - m_activeUrlTimer->start(); // calls slot updateActiveUrl() -} - void DolphinColumnViewContainer::layoutColumns() { const int gap = 4; @@ -342,18 +321,39 @@ void DolphinColumnViewContainer::assureVisibleActiveColumn() void DolphinColumnViewContainer::requestActivation(DolphinColumnView* column) { - m_dolphinViewController->setItemView(column); + if (m_dolphinViewController->itemView() != column) { + m_dolphinViewController->setItemView(column); + } + if (focusProxy() != column) { + setFocusProxy(column); + } + if (column->isActive()) { assureVisibleActiveColumn(); } else { + // Deactivate the currently active column + if (m_index >= 0) { + m_columns[m_index]->setActive(false); + } + + // Get the index of the column that should get activated int index = 0; foreach (DolphinColumnView* currColumn, m_columns) { if (currColumn == column) { - setActiveColumnIndex(index); - return; + break; } ++index; } + + Q_ASSERT(index != m_index); + Q_ASSERT(index < m_columns.count()); + + // Activate the requested column + m_index = index; + m_columns[m_index]->setActive(true); + + assureVisibleActiveColumn(); + m_activeUrlTimer->start(); // calls slot updateActiveUrl() } } -- cgit v1.3