diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index d9b534e3f6..0523085ae7 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -397,6 +397,8 @@ void DolphinMainWindow::openNewTab() void DolphinMainWindow::openNewTab(const KUrl& url) { + QWidget* focusWidget = QApplication::focusWidget(); + if (m_viewTab.count() == 1) { // Only one view is open currently and hence no tab is shown at // all. Before creating a tab for 'url', provide a tab for the current URL. @@ -429,6 +431,12 @@ void DolphinMainWindow::openNewTab(const KUrl& url) m_viewTab[tabIndex].secondaryView->setActive(true); m_viewTab[tabIndex].isPrimaryViewActive = false; } + + if (focusWidget != 0) { + // The DolphinViewContainer grabbed the keyboard focus. As the tab is opened + // in background, assure that the previous focused widget gets the focus back. + focusWidget->setFocus(); + } } void DolphinMainWindow::activateNextTab() @@ -487,6 +495,14 @@ void DolphinMainWindow::toggleActiveView() setActiveViewContainer(m_activeViewContainer == right ? left : right); } +void DolphinMainWindow::showEvent(QShowEvent* event) +{ + KXmlGuiWindow::showEvent(event); + if (!event->spontaneous()) { + m_activeViewContainer->view()->setFocus(); + } +} + void DolphinMainWindow::closeEvent(QCloseEvent* event) { DolphinSettings& settings = DolphinSettings::instance(); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index cfdc21618d..269c71844d 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -165,6 +165,9 @@ signals: void requestItemInfo(const KFileItem& item); protected: + /** @see QWidget::showEvent() */ + virtual void showEvent(QShowEvent* event); + /** @see QMainWindow::closeEvent() */ virtual void closeEvent(QCloseEvent* event);