X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/36e89e9fa614cbc428ada94784147dca341d2fb7..85302c93da59d1bc09bfc2de0edcd3909f8677c1:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index e3f3a4d10..140ad06a2 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -28,6 +28,10 @@ #include "dolphinnewfilemenu.h" #include "dolphinviewcontainer.h" #include "mainwindowadaptor.h" +#ifdef HAVE_NEPOMUK + #include "panels/filter/filterpanel.h" + #include +#endif #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" #include "panels/information/informationpanel.h" @@ -114,7 +118,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_actionHandler(0), m_remoteEncoding(0), m_settingsDialog(0), - m_lastHandleUrlStatJob(0) + m_lastHandleUrlStatJob(0), + m_filterDockIsTemporaryVisible(false) { // Workaround for a X11-issue in combination with KModifierInfo // (see DolphinContextMenu::initializeModifierKeyInfo() for @@ -280,6 +285,19 @@ void DolphinMainWindow::refreshViews() } setActiveViewContainer(activeViewContainer); + + const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings(); + if (generalSettings->modifiedStartupSettings()) { + // The startup settings have been changed by the user (see bug #254947). + // Synchronize the split-view setting with the active view: + const bool splitView = generalSettings->splitView(); + const ViewTab& activeTab = m_viewTab[m_tabIndex]; + const bool toggle = ( splitView && (activeTab.secondaryView == 0)) + || (!splitView && (activeTab.secondaryView != 0)); + if (toggle) { + toggleSplitView(); + } + } } void DolphinMainWindow::pasteIntoFolder() @@ -569,6 +587,14 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) settings.save(); + if (m_filterDockIsTemporaryVisible) { + QDockWidget* filterDock = findChild("filterDock"); + if (filterDock != 0) { + filterDock->hide(); + } + m_filterDockIsTemporaryVisible = false; + } + KXmlGuiWindow::closeEvent(event); } @@ -814,9 +840,9 @@ void DolphinMainWindow::disableStopAction() actionCollection()->action("stop")->setEnabled(false); } -void DolphinMainWindow::toggleFilterBarVisibility(bool show) +void DolphinMainWindow::showFilterBar() { - m_activeViewContainer->showFilterBar(show); + m_activeViewContainer->setFilterBarVisible(true); } void DolphinMainWindow::toggleEditLocation() @@ -843,14 +869,14 @@ void DolphinMainWindow::replaceLocation() void DolphinMainWindow::goBack() { clearStatusBar(); - + KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator(); urlNavigator->goBack(); - + if (urlNavigator->locationState().isEmpty()) { // An empty location state indicates a redirection URL, // which must be skipped too - urlNavigator->goBack(); + urlNavigator->goBack(); } } @@ -919,7 +945,7 @@ void DolphinMainWindow::compareFiles() case 0: { Q_ASSERT(m_viewTab[m_tabIndex].secondaryView != 0); items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems(); - Q_ASSERT(urls.count() == 2); + Q_ASSERT(items.count() == 2); urlA = items[0].url(); urlB = items[1].url(); break; @@ -1167,7 +1193,7 @@ void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job) m_lastHandleUrlStatJob = 0; const KIO::UDSEntry entry = static_cast(job)->statResult(); const KUrl url = static_cast(job)->url(); - if ( entry.isDir() ) { + if (entry.isDir()) { activeViewContainer()->setUrl(url); } else { new KRun(url, this); @@ -1189,13 +1215,33 @@ void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable) newFileMenu()->setEnabled(isFolderWritable); } +void DolphinMainWindow::slotSearchModeChanged(bool enabled) +{ + QDockWidget* filterDock = findChild("filterDock"); + if ((filterDock == 0) || !filterDock->isEnabled()) { + return; + } + + if (enabled) { + if (!filterDock->isVisible()) { + m_filterDockIsTemporaryVisible = true; + } + filterDock->show(); + } else { + if (filterDock->isVisible() && m_filterDockIsTemporaryVisible) { + filterDock->hide(); + } + m_filterDockIsTemporaryVisible = false; + } +} + void DolphinMainWindow::openContextMenu(const KFileItem& item, const KUrl& url, const QList& customActions) { - DolphinContextMenu contextMenu(this, item, url); - contextMenu.setCustomActions(customActions); - const DolphinContextMenu::Command command = contextMenu.open(); + QPointer contextMenu = new DolphinContextMenu(this, item, url); + contextMenu->setCustomActions(customActions); + const DolphinContextMenu::Command command = contextMenu->open(); switch (command) { case DolphinContextMenu::OpenParentFolderInNewWindow: { @@ -1213,6 +1259,8 @@ void DolphinMainWindow::openContextMenu(const KFileItem& item, default: break; } + + delete contextMenu; } void DolphinMainWindow::init() @@ -1468,11 +1516,11 @@ void DolphinMainWindow::setupActions() KStandardAction::home(this, SLOT(goHome()), actionCollection()); // setup 'Tools' menu - KToggleAction* showFilterBar = actionCollection()->add("show_filter_bar"); + KAction* showFilterBar = actionCollection()->addAction("show_filter_bar"); showFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar")); showFilterBar->setIcon(KIcon("view-filter")); showFilterBar->setShortcut(Qt::CTRL | Qt::Key_I); - connect(showFilterBar, SIGNAL(triggered(bool)), this, SLOT(toggleFilterBarVisibility(bool))); + connect(showFilterBar, SIGNAL(triggered()), this, SLOT(showFilterBar())); KAction* compareFiles = actionCollection()->addAction("compare_files"); compareFiles->setText(i18nc("@action:inmenu Tools", "Compare Files")); @@ -1579,12 +1627,35 @@ void DolphinMainWindow::setupDockWidgets() terminalPanel, SLOT(setUrl(KUrl))); #endif + // setup "Filter" +#ifdef HAVE_NEPOMUK + const bool nepomukActivated = (Nepomuk::ResourceManager::instance()->init() == 0); + QDockWidget* filterDock = new QDockWidget(i18nc("@title:window", "Filter")); + filterDock->setObjectName("filterDock"); + filterDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + filterDock->setEnabled(nepomukActivated); + Panel* filterPanel = new FilterPanel(filterDock); + connect(filterPanel, SIGNAL(urlActivated(KUrl)), this, SLOT(handleUrl(KUrl))); + filterDock->setWidget(filterPanel); + + QAction* filterAction = filterDock->toggleViewAction(); + filterAction->setShortcut(Qt::Key_F12); + filterAction->setIcon(KIcon("view-filter")); + filterAction->setEnabled(nepomukActivated); + addDockWidget(Qt::RightDockWidgetArea, filterDock); + connect(this, SIGNAL(urlChanged(KUrl)), + filterPanel, SLOT(setUrl(KUrl))); +#endif + const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun(); if (firstRun) { infoDock->hide(); foldersDock->hide(); #ifndef Q_OS_WIN terminalDock->hide(); +#endif +#ifdef HAVE_NEPOMUK + filterDock->hide(); #endif } @@ -1617,6 +1688,9 @@ void DolphinMainWindow::setupDockWidgets() #ifndef Q_OS_WIN panelsMenu->addAction(terminalAction); #endif +#ifdef HAVE_NEPOMUK + panelsMenu->addAction(filterAction); +#endif } void DolphinMainWindow::updateEditActions() @@ -1716,6 +1790,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(updateFilterBarAction(bool))); connect(container, SIGNAL(writeStateChanged(bool)), this, SLOT(slotWriteStateChanged(bool))); + connect(container, SIGNAL(searchModeChanged(bool)), + this, SLOT(slotSearchModeChanged(bool))); DolphinView* view = container->view(); connect(view, SIGNAL(selectionChanged(KFileItemList)),