X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/603ec47b8b1221c8fdf5ff2eaaae0a6a9fcc4880..283f97ac27c3cfe5c72682b0843503e31643a612:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 9324cdb21..34ff8b71b 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -42,7 +42,6 @@ #include "statusbar/dolphinstatusbar.h" #include "views/dolphinviewactionhandler.h" #include "views/dolphinremoteencoding.h" -#include "views/draganddrophelper.h" #include "views/viewproperties.h" #ifndef Q_OS_WIN @@ -50,7 +49,6 @@ #endif #include "dolphin_generalsettings.h" -#include "dolphin_iconsmodesettings.h" #include "dolphin_searchsettings.h" #include @@ -97,6 +95,12 @@ #include #include +namespace { + // Used for GeneralSettings::version() to determine whether + // an updated version of Dolphin is running. + const int CurrentDolphinVersion = 200; +}; + /* * Menu shown when pressing the configure-button in the toolbar. */ @@ -153,21 +157,21 @@ DolphinMainWindow::DolphinMainWindow() : connect(undoManager, SIGNAL(undoAvailable(bool)), this, SLOT(slotUndoAvailable(bool))); - connect(undoManager, SIGNAL(undoTextChanged(const QString&)), - this, SLOT(slotUndoTextChanged(const QString&))); + connect(undoManager, SIGNAL(undoTextChanged(QString)), + this, SLOT(slotUndoTextChanged(QString))); connect(undoManager, SIGNAL(jobRecordingStarted(CommandType)), this, SLOT(clearStatusBar())); connect(undoManager, SIGNAL(jobRecordingFinished(CommandType)), this, SLOT(showCommand(CommandType))); - connect(DolphinSettings::instance().placesModel(), SIGNAL(errorMessage(const QString&)), - this, SLOT(showErrorMessage(const QString&))); - connect(&DragAndDropHelper::instance(), SIGNAL(errorMessage(const QString&)), - this, SLOT(showErrorMessage(const QString&))); + connect(DolphinSettings::instance().placesModel(), SIGNAL(errorMessage(QString)), + this, SLOT(showErrorMessage(QString))); + //connect(&DragAndDropHelper::instance(), SIGNAL(errorMessage(QString)), + // this, SLOT(showErrorMessage(QString))); const DolphinSettings& settings = DolphinSettings::instance(); GeneralSettings* generalSettings = settings.generalSettings(); - const bool firstRun = generalSettings->firstRun(); + const bool firstRun = (generalSettings->version() < 200); if (firstRun) { generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime()); } @@ -194,7 +198,7 @@ DolphinMainWindow::DolphinMainWindow() : m_actionHandler->setCurrentView(view); m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler); - connect(this, SIGNAL(urlChanged(const KUrl&)), + connect(this, SIGNAL(urlChanged(KUrl)), m_remoteEncoding, SLOT(slotAboutToOpenUrl())); m_tabBar = new KTabBar(this); @@ -204,18 +208,18 @@ DolphinMainWindow::DolphinMainWindow() : this, SLOT(setActiveTab(int))); connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); - connect(m_tabBar, SIGNAL(contextMenu(int, const QPoint&)), - this, SLOT(openTabContextMenu(int, const QPoint&))); + connect(m_tabBar, SIGNAL(contextMenu(int,QPoint)), + this, SLOT(openTabContextMenu(int,QPoint))); connect(m_tabBar, SIGNAL(newTabRequest()), this, SLOT(openNewTab())); - connect(m_tabBar, SIGNAL(testCanDecode(const QDragMoveEvent*, bool&)), - this, SLOT(slotTestCanDecode(const QDragMoveEvent*, bool&))); + connect(m_tabBar, SIGNAL(testCanDecode(const QDragMoveEvent*,bool&)), + this, SLOT(slotTestCanDecode(const QDragMoveEvent*,bool&))); connect(m_tabBar, SIGNAL(mouseMiddleClick(int)), this, SLOT(closeTab(int))); - connect(m_tabBar, SIGNAL(tabMoved(int, int)), - this, SLOT(slotTabMoved(int, int))); - connect(m_tabBar, SIGNAL(receivedDropEvent(int, QDropEvent*)), - this, SLOT(tabDropEvent(int, QDropEvent*))); + connect(m_tabBar, SIGNAL(tabMoved(int,int)), + this, SLOT(slotTabMoved(int,int))); + connect(m_tabBar, SIGNAL(receivedDropEvent(int,QDropEvent*)), + this, SLOT(tabDropEvent(int,QDropEvent*))); m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open @@ -326,8 +330,10 @@ void DolphinMainWindow::openFiles(const QList& files) const int tabCount = m_viewTab.count(); for (int i = 0; i < tabCount; ++i) { m_viewTab[i].primaryView->view()->markUrlsAsSelected(files); + m_viewTab[i].primaryView->view()->markUrlAsCurrent(files.at(0)); if (m_viewTab[i].secondaryView) { m_viewTab[i].secondaryView->view()->markUrlsAsSelected(files); + m_viewTab[i].secondaryView->view()->markUrlAsCurrent(files.at(0)); } } } @@ -435,14 +441,14 @@ void DolphinMainWindow::updateHistory() const int index = urlNavigator->historyIndex(); QAction* backAction = actionCollection()->action("go_back"); - backAction->setToolTip(i18nc("@info", "Go back")); if (backAction) { + backAction->setToolTip(i18nc("@info", "Go back")); backAction->setEnabled(index < urlNavigator->historySize() - 1); } QAction* forwardAction = actionCollection()->action("go_forward"); - forwardAction->setToolTip(i18nc("@info", "Go forward")); if (forwardAction) { + forwardAction->setToolTip(i18nc("@info", "Go forward")); forwardAction->setEnabled(index > 0); } } @@ -647,8 +653,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) } } - generalSettings->setFirstRun(false); - + generalSettings->setVersion(CurrentDolphinVersion); settings.save(); if (m_searchDockIsTemporaryVisible) { @@ -725,14 +730,14 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group) void DolphinMainWindow::updateNewMenu() { - m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); + m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->hiddenFilesShown()); m_newFileMenu->checkUpToDate(); m_newFileMenu->setPopupFiles(activeViewContainer()->url()); } void DolphinMainWindow::createDirectory() { - m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); + m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->hiddenFilesShown()); m_newFileMenu->setPopupFiles(activeViewContainer()->url()); m_newFileMenu->createDirectory(); } @@ -824,6 +829,7 @@ void DolphinMainWindow::find() void DolphinMainWindow::slotSearchLocationChanged() { +#ifdef HAVE_NEPOMUK QDockWidget* searchDock = findChild("searchDock"); if (!searchDock) { return; @@ -835,6 +841,7 @@ void DolphinMainWindow::slotSearchLocationChanged() ? SearchPanel::FromCurrentDir : SearchPanel::Everywhere); } +#endif } void DolphinMainWindow::updatePasteAction() @@ -1311,7 +1318,8 @@ void DolphinMainWindow::tabDropEvent(int tab, QDropEvent* event) if (!urls.isEmpty() && tab != -1) { const ViewTab& viewTab = m_viewTab[tab]; const KUrl destPath = viewTab.isPrimaryViewActive ? viewTab.primaryView->url() : viewTab.secondaryView->url(); - DragAndDropHelper::instance().dropUrls(KFileItem(), destPath, event, m_tabBar); + Q_UNUSED(destPath); + //DragAndDropHelper::instance().dropUrls(KFileItem(), destPath, event, m_tabBar); } } @@ -1366,13 +1374,14 @@ void DolphinMainWindow::slotSearchModeChanged(bool enabled) #endif } -void DolphinMainWindow::openContextMenu(const KFileItem& item, +void DolphinMainWindow::openContextMenu(const QPoint& pos, + const KFileItem& item, const KUrl& url, const QList& customActions) { - QPointer contextMenu = new DolphinContextMenu(this, item, url); - contextMenu->setCustomActions(customActions); - const DolphinContextMenu::Command command = contextMenu->open(); + QWeakPointer contextMenu = new DolphinContextMenu(this, pos, item, url); + contextMenu.data()->setCustomActions(customActions); + const DolphinContextMenu::Command command = contextMenu.data()->open(); switch (command) { case DolphinContextMenu::OpenParentFolderInNewWindow: { @@ -1389,7 +1398,7 @@ void DolphinMainWindow::openContextMenu(const KFileItem& item, break; } - delete contextMenu; + delete contextMenu.data(); } void DolphinMainWindow::updateToolBarMenu() @@ -1477,6 +1486,11 @@ void DolphinMainWindow::updateToolBarMenu() connect(menu, SIGNAL(aboutToHide()), helpMenu, SLOT(deleteLater())); helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::HelpContents))); helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::WhatsThis))); + helpMenu->addSeparator(); + helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::ReportBug))); + helpMenu->addSeparator(); + helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))); + helpMenu->addSeparator(); helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::AboutApp))); helpMenu->addAction(ac->action(KStandardAction::name(KStandardAction::AboutKDE))); menu->addMenu(helpMenu); @@ -1652,7 +1666,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))); + 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); @@ -1660,8 +1674,8 @@ void DolphinMainWindow::setupActions() m_recentTabsMenu = new KActionMenu(i18n("Recently Closed Tabs"), this); m_recentTabsMenu->setIcon(KIcon("edit-undo")); actionCollection()->addAction("closed_tabs", m_recentTabsMenu); - connect(m_recentTabsMenu->menu(), SIGNAL(triggered(QAction *)), - this, SLOT(restoreClosedTab(QAction *))); + connect(m_recentTabsMenu->menu(), SIGNAL(triggered(QAction*)), + this, SLOT(restoreClosedTab(QAction*))); QAction* action = new QAction(i18n("Empty Recently Closed Tabs"), m_recentTabsMenu); action->setIcon(KIcon("edit-clear-list")); @@ -1671,10 +1685,10 @@ void DolphinMainWindow::setupActions() m_recentTabsMenu->setEnabled(false); KAction* forwardAction = KStandardAction::forward(this, SLOT(goForward()), actionCollection()); - connect(forwardAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goForward(Qt::MouseButtons))); + 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))); + connect(upAction, SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), this, SLOT(goUp(Qt::MouseButtons))); KStandardAction::home(this, SLOT(goHome()), actionCollection()); @@ -1755,9 +1769,7 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setWidget(infoPanel); QAction* infoAction = infoDock->toggleViewAction(); - infoAction->setIcon(KIcon("dialog-information")); - infoAction->setShortcut(Qt::Key_F11); - addActionCloneToCollection(infoAction, "show_information_panel"); + createPanelAction(KIcon("dialog-information"), Qt::Key_F11, infoAction, "show_information_panel"); addDockWidget(Qt::RightDockWidgetArea, infoDock); connect(this, SIGNAL(urlChanged(KUrl)), @@ -1777,15 +1789,13 @@ void DolphinMainWindow::setupDockWidgets() foldersDock->setWidget(foldersPanel); QAction* foldersAction = foldersDock->toggleViewAction(); - foldersAction->setShortcut(Qt::Key_F7); - foldersAction->setIcon(KIcon("folder")); - addActionCloneToCollection(foldersAction, "show_folders_panel"); + createPanelAction(KIcon("folder"), Qt::Key_F7, foldersAction, "show_folders_panel"); 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(changeUrl(KUrl,Qt::MouseButtons)), + this, SLOT(handlePlacesClick(KUrl,Qt::MouseButtons))); // Setup "Terminal" #ifndef Q_OS_WIN @@ -1799,12 +1809,10 @@ void DolphinMainWindow::setupDockWidgets() connect(terminalPanel, SIGNAL(hideTerminalPanel()), terminalDock, SLOT(hide())); connect(terminalDock, SIGNAL(visibilityChanged(bool)), - terminalPanel, SLOT(visibilityChanged(bool))); + terminalPanel, SLOT(dockVisibilityChanged())); QAction* terminalAction = terminalDock->toggleViewAction(); - terminalAction->setShortcut(Qt::Key_F4); - terminalAction->setIcon(KIcon("utilities-terminal")); - addActionCloneToCollection(terminalAction, "show_terminal_panel"); + createPanelAction(KIcon("utilities-terminal"), Qt::Key_F4, terminalAction, "show_terminal_panel"); addDockWidget(Qt::BottomDockWidgetArea, terminalDock); connect(this, SIGNAL(urlChanged(KUrl)), @@ -1823,16 +1831,13 @@ void DolphinMainWindow::setupDockWidgets() searchDock->setWidget(searchPanel); QAction* searchAction = searchDock->toggleViewAction(); - searchAction->setShortcut(Qt::Key_F12); - searchAction->setIcon(KIcon("system-search")); - addActionCloneToCollection(searchAction, "show_search_panel"); + createPanelAction(KIcon("system-search"), Qt::Key_F12, searchAction, "show_search_panel"); addDockWidget(Qt::RightDockWidgetArea, searchDock); connect(this, SIGNAL(urlChanged(KUrl)), searchPanel, SLOT(setUrl(KUrl))); #endif - const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun(); - if (firstRun) { + if (DolphinSettings::instance().generalSettings()->version() < 200) { infoDock->hide(); foldersDock->hide(); #ifndef Q_OS_WIN @@ -1861,13 +1866,11 @@ void DolphinMainWindow::setupDockWidgets() placesDock->setWidget(placesPanel); QAction* placesAction = placesDock->toggleViewAction(); - placesAction->setShortcut(Qt::Key_F9); - placesAction->setIcon(KIcon("bookmarks")); - addActionCloneToCollection(placesAction, "show_places_panel"); + createPanelAction(KIcon("bookmarks"), Qt::Key_F9, placesAction, "show_places_panel"); addDockWidget(Qt::LeftDockWidgetArea, placesDock); - connect(placesPanel, SIGNAL(urlChanged(KUrl, Qt::MouseButtons)), - this, SLOT(handlePlacesClick(KUrl, Qt::MouseButtons))); + connect(placesPanel, SIGNAL(urlChanged(KUrl,Qt::MouseButtons)), + this, SLOT(handlePlacesClick(KUrl,Qt::MouseButtons))); connect(this, SIGNAL(urlChanged(KUrl)), placesPanel, SLOT(setUrl(KUrl))); connect(placesDock, SIGNAL(visibilityChanged(bool)), @@ -2097,23 +2100,23 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(slotRequestItemInfo(KFileItem))); connect(view, SIGNAL(activated()), this, SLOT(toggleActiveView())); - connect(view, SIGNAL(tabRequested(const KUrl&)), - this, SLOT(openNewTab(const KUrl&))); - connect(view, SIGNAL(requestContextMenu(KFileItem, const KUrl&, const QList&)), - this, SLOT(openContextMenu(KFileItem, const KUrl&, const QList&))); + connect(view, SIGNAL(tabRequested(KUrl)), + this, SLOT(openNewTab(KUrl))); + connect(view, SIGNAL(requestContextMenu(QPoint,KFileItem,KUrl,QList)), + this, SLOT(openContextMenu(QPoint,KFileItem,KUrl,QList))); connect(view, SIGNAL(startedPathLoading(KUrl)), this, SLOT(enableStopAction())); connect(view, SIGNAL(finishedPathLoading(KUrl)), this, SLOT(disableStopAction())); const KUrlNavigator* navigator = container->urlNavigator(); - connect(navigator, SIGNAL(urlChanged(const KUrl&)), - this, SLOT(changeUrl(const KUrl&))); + connect(navigator, SIGNAL(urlChanged(KUrl)), + this, SLOT(changeUrl(KUrl))); connect(navigator, SIGNAL(historyChanged()), this, SLOT(updateHistory())); connect(navigator, SIGNAL(editableStateChanged(bool)), this, SLOT(slotEditableStateChanged(bool))); - connect(navigator, SIGNAL(tabRequested(const KUrl&)), + connect(navigator, SIGNAL(tabRequested(KUrl)), this, SLOT(openNewTab(KUrl))); } @@ -2174,7 +2177,7 @@ void DolphinMainWindow::createSecondaryView(int tabIndex) const int newWidth = (m_viewTab[tabIndex].primaryView->width() - splitter->handleWidth()) / 2; const DolphinView* view = m_viewTab[tabIndex].primaryView->view(); - m_viewTab[tabIndex].secondaryView = createViewContainer(view->rootUrl(), 0); + m_viewTab[tabIndex].secondaryView = createViewContainer(view->url(), 0); splitter->addWidget(m_viewTab[tabIndex].secondaryView); splitter->setSizes(QList() << newWidth << newWidth); connectViewSignals(m_viewTab[tabIndex].secondaryView); @@ -2209,12 +2212,18 @@ QString DolphinMainWindow::squeezedText(const QString& text) const return fm.elidedText(text, Qt::ElideMiddle, fm.maxWidth() * 10); } -void DolphinMainWindow::addActionCloneToCollection(QAction* action, const QString& actionName) +void DolphinMainWindow::createPanelAction(const KIcon& icon, + const QKeySequence& shortcut, + QAction* dockAction, + const QString& actionName) { - KAction* actionClone = actionCollection()->addAction(actionName); - actionClone->setText(action->text()); - actionClone->setIcon(action->icon()); - connect(actionClone, SIGNAL(triggered()), action, SLOT(trigger())); + KAction* panelAction = actionCollection()->addAction(actionName); + panelAction->setText(dockAction->text()); + panelAction->setIcon(icon); + panelAction->setShortcut(shortcut); + + dockAction->setIcon(icon); + connect(panelAction, SIGNAL(triggered()), dockAction, SLOT(trigger())); } DolphinMainWindow::UndoUiInterface::UndoUiInterface() : @@ -2265,15 +2274,15 @@ void ToolBarMenu::showEvent(QShowEvent* event) // Assure that the menu is not shown outside the screen boundaries and // that it does not overlap with the parent button. const QRect screen = QApplication::desktop()->screenGeometry(QCursor::pos()); - if (pos.x() < 0) { - pos.rx() = 0; - } else if (pos.x() + width() >= screen.width()) { - pos.rx() = screen.width() - width(); + if (pos.x() < screen.x()) { + pos.rx() = screen.x(); + } else if (pos.x() + width() > screen.x() + screen.width()) { + pos.rx() = screen.x() + screen.width() - width(); } - if (pos.y() < 0) { - pos.ry() = 0; - } else if (pos.y() + height() >= screen.height()) { + if (pos.y() < screen.y()) { + pos.ry() = screen.y(); + } else if (pos.y() + height() > screen.y() + screen.height()) { pos.ry() = button->mapToGlobal(QPoint(0, 0)).y() - height(); }