+void DolphinMainWindow::openDirectories(const QList<KUrl>& 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<KUrl>::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<KUrl>& 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<KUrl> 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);
+ }
+ }
+}
+