Package: dolphin Version: 4:4.4.5-1 Severity: normal Tags: patch Hi,
This bugfix: http://websvn.kde.org/?view=rev&revision=1132120 seem to be not include in kde 4.4.x releases. So, I created a patch properly formatted better than in my previous message. I join it to this mail. Best regards, Thomas PIERSON
--- a/apps/dolphin/src/dolphincolumnviewcontainer.cpp 2010-02-26 19:31:49.000000000 +0100 +++ b/apps/dolphin/src/dolphincolumnviewcontainer.cpp 2010-08-27 14:18:36.000000000 +0200 @@ -69,7 +69,7 @@ DolphinColumnView* column = new DolphinColumnView(viewport(), this, m_controller->url()); m_columns.append(column); - setActiveColumnIndex(0); + requestActivation(column); m_emptyViewport = new QFrame(viewport()); m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); @@ -171,12 +171,7 @@ } } - // 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) @@ -188,7 +183,9 @@ 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); } @@ -246,24 +243,6 @@ m_controller->setUrl(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; @@ -338,18 +317,39 @@ void DolphinColumnViewContainer::requestActivation(DolphinColumnView* column) { - m_controller->setItemView(column); + if (m_controller->itemView() != column) { + m_controller->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() } } --- a/apps/dolphin/src/dolphincolumnviewcontainer.h 2010-01-31 20:30:05.000000000 +0100 +++ b/apps/dolphin/src/dolphincolumnviewcontainer.h 2010-08-27 14:18:36.000000000 +0200 @@ -87,14 +87,6 @@ void updateActiveUrl(); private: - /** - * Deactivates the currently active column and activates - * the new column indicated by \a index. m_index represents - * the active column afterwards. Also the URL of the navigator - * will be adjusted to reflect the column URL. - */ - void setActiveColumnIndex(int index); - void layoutColumns(); void updateScrollBar(); --- a/apps/dolphin/src/dolphincolumnview.cpp 2010-02-26 19:31:49.000000000 +0100 +++ b/apps/dolphin/src/dolphincolumnview.cpp 2010-08-27 14:18:36.000000000 +0200 @@ -150,10 +150,6 @@ void DolphinColumnView::setActive(bool active) { - if (active && (m_container->focusProxy() != this)) { - m_container->setFocusProxy(this); - } - if (m_active != active) { m_active = active; @@ -308,7 +304,6 @@ void DolphinColumnView::keyPressEvent(QKeyEvent* event) { QListView::keyPressEvent(event); - requestActivation(); DolphinController* controller = m_container->m_controller; controller->handleKeyPressEvent(event); @@ -439,10 +434,16 @@ disconnect(this, SIGNAL(doubleClicked(const QModelIndex&)), m_container->m_controller, SLOT(triggerItem(const QModelIndex&))); } - + // It is important to disconnect the connection to requestActivation() temporary, otherwise the internal + // clearing of the selection would result in activating the column again. + disconnect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, SLOT(requestActivation())); const QModelIndex current = selectionModel()->currentIndex(); selectionModel()->clear(); selectionModel()->setCurrentIndex(current, QItemSelectionModel::NoUpdate); + connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, SLOT(requestActivation())); + updateBackground(); }
signature.asc
Description: This is a digitally signed message part.