+ m_centralWidgetLayout(0),
+ m_tabIndex(0),
+ m_viewTab(),
+ m_actionHandler(0),
+ m_remoteEncoding(0),
+ m_settingsDialog(),
+ m_controlButton(0),
+ m_updateToolBarTimer(0),
+ m_lastHandleUrlStatJob(0)
+{
+ setObjectName("Dolphin#");
+
+ m_viewTab.append(ViewTab());
+ ViewTab& viewTab = m_viewTab[m_tabIndex];
+ viewTab.wasActive = true; // The first opened tab is automatically active
+
+ connect(&DolphinNewFileMenuObserver::instance(), &DolphinNewFileMenuObserver::errorMessage,
+ this, &DolphinMainWindow::showErrorMessage);
+
+ KIO::FileUndoManager* undoManager = KIO::FileUndoManager::self();
+ undoManager->setUiInterface(new UndoUiInterface());
+
+ connect(undoManager, static_cast<void(KIO::FileUndoManager::*)(bool)>(&KIO::FileUndoManager::undoAvailable),
+ this, &DolphinMainWindow::slotUndoAvailable);
+ connect(undoManager, &KIO::FileUndoManager::undoTextChanged,
+ this, &DolphinMainWindow::slotUndoTextChanged);
+ connect(undoManager, &KIO::FileUndoManager::jobRecordingStarted,
+ this, &DolphinMainWindow::clearStatusBar);
+ connect(undoManager, &KIO::FileUndoManager::jobRecordingFinished,
+ this, &DolphinMainWindow::showCommand);
+
+ GeneralSettings* generalSettings = GeneralSettings::self();
+ const bool firstRun = (generalSettings->version() < 200);
+ if (firstRun) {
+ generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());
+ }
+
+ setAcceptDrops(true);
+
+ viewTab.splitter = new QSplitter(this);
+ viewTab.splitter->setChildrenCollapsible(false);
+
+ setupActions();
+
+ const KUrl homeUrl(generalSettings->homeUrl());
+ setUrlAsCaption(homeUrl);
+ m_actionHandler = new DolphinViewActionHandler(actionCollection(), this);
+ connect(m_actionHandler, &DolphinViewActionHandler::actionBeingHandled, this, &DolphinMainWindow::clearStatusBar);
+ connect(m_actionHandler, &DolphinViewActionHandler::createDirectory, this, &DolphinMainWindow::createDirectory);
+
+ viewTab.primaryView = createViewContainer(homeUrl, viewTab.splitter);
+
+ m_activeViewContainer = viewTab.primaryView;
+ connectViewSignals(m_activeViewContainer);
+ DolphinView* view = m_activeViewContainer->view();
+ m_activeViewContainer->show();
+ m_actionHandler->setCurrentView(view);
+
+ m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler);
+ connect(this, &DolphinMainWindow::urlChanged,
+ m_remoteEncoding, &DolphinRemoteEncoding::slotAboutToOpenUrl);
+
+ m_tabBar = new KTabBar(this);
+ m_tabBar->setMovable(true);
+ m_tabBar->setTabsClosable(true);
+ connect(m_tabBar, &KTabBar::currentChanged,
+ this, &DolphinMainWindow::setActiveTab);
+ connect(m_tabBar, &KTabBar::tabCloseRequested,
+ this, static_cast<void(DolphinMainWindow::*)(int)>(&DolphinMainWindow::closeTab));
+ connect(m_tabBar, &KTabBar::contextMenu,
+ this, &DolphinMainWindow::openTabContextMenu);
+ connect(m_tabBar, &KTabBar::newTabRequest,
+ this, static_cast<void(DolphinMainWindow::*)()>(&DolphinMainWindow::openNewTab));
+ connect(m_tabBar, &KTabBar::testCanDecode,
+ this, &DolphinMainWindow::slotTestCanDecode);
+ connect(m_tabBar, &KTabBar::mouseMiddleClick,
+ this, static_cast<void(DolphinMainWindow::*)(int)>(&DolphinMainWindow::closeTab));
+ connect(m_tabBar, &KTabBar::tabMoved,
+ this, &DolphinMainWindow::slotTabMoved);
+ connect(m_tabBar, &KTabBar::receivedDropEvent,
+ this, &DolphinMainWindow::tabDropEvent);
+
+ m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open
+
+ QWidget* centralWidget = new QWidget(this);
+ m_centralWidgetLayout = new QVBoxLayout(centralWidget);
+ m_centralWidgetLayout->setSpacing(0);
+ m_centralWidgetLayout->setMargin(0);
+ m_centralWidgetLayout->addWidget(m_tabBar);
+ m_centralWidgetLayout->addWidget(viewTab.splitter, 1);
+
+ setCentralWidget(centralWidget);
+ setupDockWidgets();
+ emit urlChanged(homeUrl);
+
+ setupGUI(Keys | Save | Create | ToolBar);
+ stateChanged("new_file");
+
+ QClipboard* clipboard = QApplication::clipboard();
+ connect(clipboard, &QClipboard::dataChanged,
+ this, &DolphinMainWindow::updatePasteAction);