X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c1ea2c34919b496592a0ba1083563bcfaf5ea899..2798e5d22546487ed6f93ecb9c5a4299ce96940a:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 399c662f8..9349ca7be 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -24,19 +24,21 @@ #include "dolphinremoteencoding.h" #include +#ifdef HAVE_NEPOMUK +#include "search/dolphinsearchoptionsconfigurator.h" +#endif #include "dolphinapplication.h" #include "dolphinnewmenu.h" +#include "search/dolphinsearchbox.h" #include "settings/dolphinsettings.h" #include "settings/dolphinsettingsdialog.h" -#include "dolphinsearchbox.h" -#include "dolphinstatusbar.h" #include "dolphinviewcontainer.h" #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" #include "panels/information/informationpanel.h" -#include "panels/information/metadatawidget.h" #include "mainwindowadaptor.h" +#include "statusbar/dolphinstatusbar.h" #include "viewproperties.h" #ifndef Q_OS_WIN @@ -109,12 +111,16 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_activeViewContainer(0), m_centralWidgetLayout(0), m_searchBox(0), +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator(0), +#endif m_id(id), m_tabIndex(0), m_viewTab(), m_actionHandler(0), m_remoteEncoding(0), - m_settingsDialog(0) + m_settingsDialog(0), + m_captionStatJob(0) { setObjectName("Dolphin#"); @@ -145,6 +151,68 @@ DolphinMainWindow::~DolphinMainWindow() DolphinApplication::app()->removeMainWindow(this); } +void DolphinMainWindow::openDirectories(const QList& dirs) +{ + if (dirs.isEmpty()) { + return; + } + + const int oldOpenTabsCount = m_viewTab.count(); + + const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings(); + const bool hasSplitView = generalSettings->splitView(); + + // Open each directory inside a new tab. If the "split view" option has been enabled, + // always show two directories within one tab. + QList::const_iterator it = dirs.begin(); + while (it != dirs.end()) { + openNewTab(*it); + ++it; + + if (hasSplitView && (it != dirs.end())) { + const int tabIndex = m_viewTab.count() - 1; + m_viewTab[tabIndex].secondaryView->setUrl(*it); + ++it; + } + } + + // remove the previously opened tabs + for (int i = 0; i < oldOpenTabsCount; ++i) { + closeTab(0); + } +} + +void DolphinMainWindow::openFiles(const QList& files) +{ + if (files.isEmpty()) { + return; + } + + // Get all distinct directories from 'files' and open a tab + // for each directory. If the "split view" option is enabled, two + // directories are shown inside one tab (see openDirectories()). + QList dirs; + foreach (const KUrl& url, files) { + const KUrl dir(url.directory()); + if (!dirs.contains(dir)) { + dirs.append(dir); + } + } + + openDirectories(dirs); + + // Select the files. Although the files can be split between several + // tabs, there is no need to split 'files' accordingly, as + // the DolphinView will just ignore invalid selections. + const int tabCount = m_viewTab.count(); + for (int i = 0; i < tabCount; ++i) { + m_viewTab[i].primaryView->view()->markUrlsAsSelected(files); + if (m_viewTab[i].secondaryView != 0) { + m_viewTab[i].secondaryView->view()->markUrlsAsSelected(files); + } + } +} + void DolphinMainWindow::toggleViews() { if (m_viewTab[m_tabIndex].primaryView == 0) { @@ -165,23 +233,23 @@ void DolphinMainWindow::showCommand(CommandType command) DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); switch (command) { case KIO::FileUndoManager::Copy: - statusBar->setMessage(i18nc("@info:status", "Copy operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully copied."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Move: - statusBar->setMessage(i18nc("@info:status", "Move operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully moved."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Link: - statusBar->setMessage(i18nc("@info:status", "Link operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully linked."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Trash: - statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully moved to trash."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Rename: - statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully renamed."), DolphinStatusBar::OperationCompleted); break; @@ -237,7 +305,7 @@ void DolphinMainWindow::changeUrl(const KUrl& url) updateGoActions(); setUrlAsCaption(url); if (m_viewTab.count() > 1) { - m_tabBar->setTabText(m_tabIndex, tabName(url)); + m_tabBar->setTabText(m_tabIndex, squeezedText(tabName(m_activeViewContainer->url()))); } const QString iconName = KMimeType::iconNameForUrl(url); m_tabBar->setTabIcon(m_tabIndex, KIcon(iconName)); @@ -245,11 +313,6 @@ void DolphinMainWindow::changeUrl(const KUrl& url) } } -void DolphinMainWindow::changeSelection(const KFileItemList& selection) -{ - activeViewContainer()->view()->changeSelection(selection); -} - void DolphinMainWindow::slotEditableStateChanged(bool editable) { KToggleAction* editableLocationAction = @@ -274,8 +337,6 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) compareFilesAction->setEnabled(false); } - m_activeViewContainer->updateStatusBar(); - emit selectionChanged(selection); } @@ -299,11 +360,13 @@ void DolphinMainWindow::updateHistory() const int index = urlNavigator->historyIndex(); QAction* backAction = actionCollection()->action("go_back"); + backAction->setToolTip(i18nc("@info", "Go back")); if (backAction != 0) { backAction->setEnabled(index < urlNavigator->historySize() - 1); } QAction* forwardAction = actionCollection()->action("go_forward"); + forwardAction->setToolTip(i18nc("@info", "Go forward")); if (forwardAction != 0) { forwardAction->setEnabled(index > 0); } @@ -335,15 +398,19 @@ void DolphinMainWindow::openNewTab() void DolphinMainWindow::openNewTab(const KUrl& url) { - const KIcon icon = KIcon(KMimeType::iconNameForUrl(m_activeViewContainer->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. - m_tabBar->addTab(icon, tabName(m_activeViewContainer->url())); + const KUrl currentUrl = m_activeViewContainer->url(); + m_tabBar->addTab(KIcon(KMimeType::iconNameForUrl(currentUrl)), + squeezedText(tabName(currentUrl))); m_tabBar->blockSignals(false); } - m_tabBar->addTab(icon, tabName(url)); + m_tabBar->addTab(KIcon(KMimeType::iconNameForUrl(url)), + squeezedText(tabName(url))); ViewTab viewTab; viewTab.splitter = new QSplitter(this); @@ -365,6 +432,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() @@ -423,12 +496,28 @@ 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(); GeneralSettings* generalSettings = settings.generalSettings(); - if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs()) { + // Find out if Dolphin is closed directly by the user or + // by the session manager because the session is closed + bool closedByUser = true; + DolphinApplication *application = qobject_cast(qApp); + if (application && application->sessionSaving()) { + closedByUser = false; + } + + if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs() && closedByUser) { // Ask the user if he really wants to quit and close all tabs. // Open a confirmation dialog with 3 buttons: // KDialog::Yes -> Quit @@ -539,12 +628,14 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group) void DolphinMainWindow::updateNewMenu() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->slotCheckUpToDate(); m_newMenu->setPopupFiles(activeViewContainer()->url()); } void DolphinMainWindow::createDirectory() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->setPopupFiles(activeViewContainer()->url()); m_newMenu->createDirectory(); } @@ -744,6 +835,32 @@ void DolphinMainWindow::goUp() m_activeViewContainer->urlNavigator()->goUp(); } +void DolphinMainWindow::goBack(Qt::MouseButtons buttons) +{ + // The default case (left button pressed) is handled in goBack(). + if (buttons == Qt::MidButton) { + KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator(); + openNewTab(urlNavigator->historyUrl(urlNavigator->historyIndex() + 1)); + } +} + +void DolphinMainWindow::goForward(Qt::MouseButtons buttons) +{ + // The default case (left button pressed) is handled in goForward(). + if (buttons == Qt::MidButton) { + KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator(); + openNewTab(urlNavigator->historyUrl(urlNavigator->historyIndex() - 1)); + } +} + +void DolphinMainWindow::goUp(Qt::MouseButtons buttons) +{ + // The default case (left button pressed) is handled in goUp(). + if (buttons == Qt::MidButton) { + openNewTab(activeViewContainer()->url().upUrl()); + } +} + void DolphinMainWindow::goHome() { clearStatusBar(); @@ -861,7 +978,7 @@ void DolphinMainWindow::setActiveTab(int index) m_tabIndex = index; ViewTab& viewTab = m_viewTab[index]; - m_centralWidgetLayout->addWidget(viewTab.splitter); + m_centralWidgetLayout->addWidget(viewTab.splitter, 1); viewTab.primaryView->show(); if (viewTab.secondaryView != 0) { viewTab.secondaryView->show(); @@ -966,9 +1083,12 @@ void DolphinMainWindow::slotTestCanDecode(const QDragMoveEvent* event, bool& can canDecode = KUrl::List::canDecode(event->mimeData()); } -void DolphinMainWindow::searchItems(const KUrl& url) +void DolphinMainWindow::searchItems() { - m_activeViewContainer->setUrl(url); +#ifdef HAVE_NEPOMUK + const KUrl nepomukSearchUrl = m_searchOptionsConfigurator->nepomukSearchUrl(); + m_activeViewContainer->setUrl(nepomukSearchUrl); +#endif } void DolphinMainWindow::slotTabMoved(int from, int to) @@ -977,6 +1097,13 @@ void DolphinMainWindow::slotTabMoved(int from, int to) m_tabIndex = m_tabBar->currentIndex(); } +void DolphinMainWindow::showSearchOptions() +{ +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator->show(); +#endif +} + void DolphinMainWindow::init() { DolphinSettings& settings = DolphinSettings::instance(); @@ -1017,6 +1144,14 @@ void DolphinMainWindow::init() connect(this, SIGNAL(urlChanged(const KUrl&)), m_remoteEncoding, SLOT(slotAboutToOpenUrl())); +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator = new DolphinSearchOptionsConfigurator(this); + m_searchOptionsConfigurator->hide(); + connect(m_searchOptionsConfigurator, SIGNAL(searchOptionsChanged()), + this, SLOT(searchItems())); + connect(this, SIGNAL(urlChanged(KUrl)), m_searchOptionsConfigurator, SLOT(setDirectory(KUrl))); +#endif + m_tabBar = new KTabBar(this); m_tabBar->setMovable(true); m_tabBar->setTabsClosable(true); @@ -1043,8 +1178,11 @@ void DolphinMainWindow::init() m_centralWidgetLayout = new QVBoxLayout(centralWidget); m_centralWidgetLayout->setSpacing(0); m_centralWidgetLayout->setMargin(0); +#ifdef HAVE_NEPOMUK + m_centralWidgetLayout->addWidget(m_searchOptionsConfigurator); +#endif m_centralWidgetLayout->addWidget(m_tabBar); - m_centralWidgetLayout->addWidget(m_viewTab[m_tabIndex].splitter); + m_centralWidgetLayout->addWidget(m_viewTab[m_tabIndex].splitter, 1); setCentralWidget(centralWidget); setupDockWidgets(); @@ -1054,6 +1192,12 @@ void DolphinMainWindow::init() m_searchBox->setParent(toolBar("searchToolBar")); m_searchBox->show(); + connect(m_searchBox, SIGNAL(requestSearchOptions()), + this, SLOT(showSearchOptions())); +#ifdef HAVE_NEPOMUK + connect(m_searchBox, SIGNAL(searchTextChanged(QString)), + m_searchOptionsConfigurator, SLOT(setCustomSearchQuery(QString))); +#endif stateChanged("new_file"); @@ -1158,7 +1302,11 @@ void DolphinMainWindow::setupActions() cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty); cut->setShortcut(cutShortcut); KStandardAction::copy(this, SLOT(copy()), actionCollection()); - KStandardAction::paste(this, SLOT(paste()), actionCollection()); + KAction* paste = KStandardAction::paste(this, SLOT(paste()), actionCollection()); + // The text of the paste-action is modified dynamically by Dolphin + // (e. g. to "Paste One Folder"). To prevent that the size of the toolbar changes + // due to the long text, the text "Paste" is used: + paste->setIconText(i18nc("@action:inmenu Edit", "Paste")); KAction* selectAll = actionCollection()->addAction("select_all"); selectAll->setText(i18nc("@action:inmenu Edit", "Select All")); @@ -1186,6 +1334,7 @@ void DolphinMainWindow::setupActions() KAction* stop = actionCollection()->addAction("stop"); stop->setText(i18nc("@action:inmenu View", "Stop")); + stop->setToolTip(i18nc("@info", "Stop loading")); stop->setIcon(KIcon("process-stop")); connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading())); @@ -1201,6 +1350,7 @@ void DolphinMainWindow::setupActions() // setup 'Go' menu KAction* backAction = KStandardAction::back(this, SLOT(goBack()), actionCollection()); + connect(backAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goBack(Qt::MouseButtons))); KShortcut backShortcut = backAction->shortcut(); backShortcut.setAlternate(Qt::Key_Backspace); backAction->setShortcut(backShortcut); @@ -1218,8 +1368,12 @@ void DolphinMainWindow::setupActions() m_recentTabsMenu->addSeparator(); m_recentTabsMenu->setEnabled(false); - KStandardAction::forward(this, SLOT(goForward()), actionCollection()); - KStandardAction::up(this, SLOT(goUp()), actionCollection()); + KAction* forwardAction = KStandardAction::forward(this, SLOT(goForward()), actionCollection()); + connect(forwardAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goForward(Qt::MouseButtons))); + + KAction* upAction = KStandardAction::up(this, SLOT(goUp()), actionCollection()); + connect(upAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goUp(Qt::MouseButtons))); + KStandardAction::home(this, SLOT(goHome()), actionCollection()); // setup 'Tools' menu @@ -1230,6 +1384,7 @@ void DolphinMainWindow::setupActions() KToggleAction* showFilterBar = actionCollection()->add("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))); @@ -1275,7 +1430,7 @@ void DolphinMainWindow::setupActions() // 'Search' toolbar m_searchBox = new DolphinSearchBox(this); - connect(m_searchBox, SIGNAL(search(KUrl)), this, SLOT(searchItems(KUrl))); + connect(m_searchBox, SIGNAL(search(QString)), this, SLOT(searchItems())); KAction* search = new KAction(this); actionCollection()->addAction("search_bar", search); @@ -1291,13 +1446,15 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setObjectName("infoDock"); infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); Panel* infoPanel = new InformationPanel(infoDock); + connect(infoPanel, SIGNAL(urlActivated(KUrl)), this, SLOT(handleUrl(KUrl))); infoDock->setWidget(infoPanel); - QAction* infoAction = infoDock->toggleViewAction(); + KAction* infoAction = new KAction(this); infoAction->setText(i18nc("@title:window", "Information")); infoAction->setShortcut(Qt::Key_F11); infoAction->setIcon(KIcon("dialog-information")); - actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction()); + actionCollection()->addAction("show_info_panel", infoAction); + connect(infoAction, SIGNAL(triggered()), infoDock->toggleViewAction(), SLOT(trigger())); addDockWidget(Qt::RightDockWidgetArea, infoDock); connect(this, SIGNAL(urlChanged(KUrl)), @@ -1314,19 +1471,18 @@ void DolphinMainWindow::setupDockWidgets() FoldersPanel* foldersPanel = new FoldersPanel(foldersDock); foldersDock->setWidget(foldersPanel); - QAction* foldersAction = foldersDock->toggleViewAction(); + KAction* foldersAction = new KAction(this); foldersAction->setText(i18nc("@title:window", "Folders")); foldersAction->setShortcut(Qt::Key_F7); foldersAction->setIcon(KIcon("folder")); - actionCollection()->addAction("show_folders_panel", foldersDock->toggleViewAction()); + actionCollection()->addAction("show_folders_panel", foldersAction); + connect(foldersAction, SIGNAL(triggered()), foldersDock->toggleViewAction(), SLOT(trigger())); addDockWidget(Qt::LeftDockWidgetArea, foldersDock); connect(this, SIGNAL(urlChanged(KUrl)), foldersPanel, SLOT(setUrl(KUrl))); connect(foldersPanel, SIGNAL(changeUrl(KUrl, Qt::MouseButtons)), this, SLOT(handlePlacesClick(KUrl, Qt::MouseButtons))); - connect(foldersPanel, SIGNAL(changeSelection(KFileItemList)), - this, SLOT(changeSelection(KFileItemList))); // setup "Terminal" #ifndef Q_OS_WIN @@ -1338,11 +1494,12 @@ void DolphinMainWindow::setupDockWidgets() connect(terminalPanel, SIGNAL(hideTerminalPanel()), terminalDock, SLOT(hide())); - QAction* terminalAction = terminalDock->toggleViewAction(); + KAction* terminalAction = new KAction(this); terminalAction->setText(i18nc("@title:window Shell terminal", "Terminal")); terminalAction->setShortcut(Qt::Key_F4); terminalAction->setIcon(KIcon("utilities-terminal")); - actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction()); + actionCollection()->addAction("show_terminal_panel", terminalAction); + connect(terminalAction, SIGNAL(triggered()), terminalDock->toggleViewAction(), SLOT(trigger())); addDockWidget(Qt::BottomDockWidgetArea, terminalDock); connect(this, SIGNAL(urlChanged(KUrl)), @@ -1357,6 +1514,7 @@ void DolphinMainWindow::setupDockWidgets() #endif } + // setup "Places" QDockWidget* placesDock = new QDockWidget(i18nc("@title:window", "Places")); placesDock->setObjectName("placesDock"); placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); @@ -1366,11 +1524,12 @@ void DolphinMainWindow::setupDockWidgets() placesPanel->setModel(DolphinSettings::instance().placesModel()); placesPanel->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - QAction* placesAction = placesDock->toggleViewAction(); + KAction* placesAction = new KAction(this); placesAction->setText(i18nc("@title:window", "Places")); placesAction->setShortcut(Qt::Key_F9); placesAction->setIcon(KIcon("bookmarks")); - actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction()); + actionCollection()->addAction("show_places_panel", placesAction); + connect(placesAction, SIGNAL(triggered()), placesDock->toggleViewAction(), SLOT(trigger())); addDockWidget(Qt::LeftDockWidgetArea, placesDock); connect(placesPanel, SIGNAL(urlChanged(KUrl, Qt::MouseButtons)), @@ -1434,10 +1593,7 @@ void DolphinMainWindow::rememberClosedTab(int index) const QString primaryPath = m_viewTab[index].primaryView->url().path(); const QString iconName = KMimeType::iconNameForUrl(primaryPath); - const QFontMetrics fm = fontMetrics(); - const QString actionText = fm.elidedText(primaryPath, Qt::ElideMiddle, fm.maxWidth() * 20); - - QAction* action = new QAction(actionText, tabsMenu); + QAction* action = new QAction(squeezedText(primaryPath), tabsMenu); ClosedTab closedTab; closedTab.primaryUrl = m_viewTab[index].primaryView->url(); @@ -1503,13 +1659,16 @@ void DolphinMainWindow::updateSplitAction() if (m_viewTab[m_tabIndex].secondaryView != 0) { if (m_activeViewContainer == m_viewTab[m_tabIndex].secondaryView) { splitAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + splitAction->setToolTip(i18nc("@info", "Close right view")); splitAction->setIcon(KIcon("view-right-close")); } else { splitAction->setText(i18nc("@action:intoolbar Close left view", "Close")); + splitAction->setToolTip(i18nc("@info", "Close left view")); splitAction->setIcon(KIcon("view-left-close")); } } else { splitAction->setText(i18nc("@action:intoolbar Split view", "Split")); + splitAction->setToolTip(i18nc("@info", "Split view")); splitAction->setIcon(KIcon("view-right-new")); } } @@ -1567,17 +1726,49 @@ QString DolphinMainWindow::tabProperty(const QString& property, int tabIndex) co void DolphinMainWindow::setUrlAsCaption(const KUrl& url) { - QString caption; - if (url.equals(KUrl("file:///"))) { - caption = '/'; + delete m_captionStatJob; + m_captionStatJob = 0; + + if (url.protocol() == QLatin1String("file")) { + QString caption; + if (url.equals(KUrl("file:///"))) { + caption = '/'; + } else { + caption = url.fileName(); + if (caption.isEmpty()) { + caption = url.protocol(); + } + } + + setCaption(caption); } else { - caption = url.fileName(); - if (caption.isEmpty()) { - caption = url.protocol(); - } + m_captionStatJob = KIO::stat(url, KIO::HideProgressInfo); + connect(m_captionStatJob, SIGNAL(result(KJob*)), + this, SLOT(slotCaptionStatFinished(KJob*))); } - - setCaption(caption); +} + +void DolphinMainWindow::handleUrl(const KUrl& url) +{ + if (KProtocolManager::supportsListing(url)) { + activeViewContainer()->setUrl(url); + } else { + new KRun(url, this); + } +} + +void DolphinMainWindow::slotCaptionStatFinished(KJob* job) +{ + m_captionStatJob = 0; + const KIO::UDSEntry entry = static_cast(job)->statResult(); + const QString name = entry.stringValue(KIO::UDSEntry::UDS_DISPLAY_NAME); + setCaption(name); +} + +QString DolphinMainWindow::squeezedText(const QString& text) const +{ + const QFontMetrics fm = fontMetrics(); + return fm.elidedText(text, Qt::ElideMiddle, fm.maxWidth() * 10); } DolphinMainWindow::UndoUiInterface::UndoUiInterface() :