]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Show panel shortcuts in menu
[dolphin.git] / src / dolphinmainwindow.cpp
index 3b5f493ca903be55baa485d6f20013c28567a1af..74d9674580fddde24986bc098dacb6bbbf805383 100644 (file)
 #include "panels/information/informationpanel.h"
 #include "search/dolphinsearchbox.h"
 #include "search/dolphinsearchinformation.h"
-#include "settings/dolphinsettings.h"
 #include "settings/dolphinsettingsdialog.h"
 #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 +48,6 @@
 #endif
 
 #include "dolphin_generalsettings.h"
-#include "dolphin_iconsmodesettings.h"
 #include "dolphin_searchsettings.h"
 
 #include <KAcceleratorManager>
@@ -90,6 +87,8 @@
 #include <KUrlComboBox>
 #include <KToolInvocation>
 
+#include "views/dolphinplacesmodel.h"
+
 #include <QDesktopWidget>
 #include <QDBusMessage>
 #include <QKeyEvent>
 #include <QToolButton>
 #include <QSplitter>
 
+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.
  */
@@ -139,6 +144,10 @@ DolphinMainWindow::DolphinMainWindow() :
     m_lastHandleUrlStatJob(0),
     m_searchDockIsTemporaryVisible(false)
 {
+    DolphinPlacesModel::setModel(new KFilePlacesModel(this));
+    connect(DolphinPlacesModel::instance(), SIGNAL(errorMessage(QString)),
+            this, SLOT(showErrorMessage(QString)));
+
     // Workaround for a X11-issue in combination with KModifierInfo
     // (see DolphinContextMenu::initializeModifierKeyInfo() for
     // more information):
@@ -153,21 +162,15 @@ 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&)));
 
-    const DolphinSettings& settings = DolphinSettings::instance();
-
-    GeneralSettings* generalSettings = settings.generalSettings();
-    const bool firstRun = generalSettings->firstRun();
+    GeneralSettings* generalSettings = GeneralSettings::self();
+    const bool firstRun = (generalSettings->version() < 200);
     if (firstRun) {
         generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());
     }
@@ -194,7 +197,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 +207,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
 
@@ -278,8 +281,7 @@ void DolphinMainWindow::openDirectories(const QList<KUrl>& dirs)
 
     const int oldOpenTabsCount = m_viewTab.count();
 
-    const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
-    const bool hasSplitView = generalSettings->splitView();
+    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.
@@ -326,8 +328,10 @@ void DolphinMainWindow::openFiles(const QList<KUrl>& 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 +439,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);
     }
 }
@@ -505,8 +509,7 @@ void DolphinMainWindow::openNewTab(const KUrl& url)
     actionCollection()->action("close_tab")->setEnabled(true);
 
     // provide a split view, if the startup settings are set this way
-    const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
-    if (generalSettings->splitView()) {
+    if (GeneralSettings::splitView()) {
         const int tabIndex = m_viewTab.count() - 1;
         createSecondaryView(tabIndex);
         m_viewTab[tabIndex].secondaryView->setActive(true);
@@ -594,9 +597,6 @@ void DolphinMainWindow::showEvent(QShowEvent* event)
 
 void DolphinMainWindow::closeEvent(QCloseEvent* event)
 {
-    DolphinSettings& settings = DolphinSettings::instance();
-    GeneralSettings* generalSettings = settings.generalSettings();
-
     // Find out if Dolphin is closed directly by the user or
     // by the session manager because the session is closed
     bool closedByUser = true;
@@ -605,7 +605,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
         closedByUser = false;
     }
 
-    if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs() && closedByUser) {
+    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
@@ -631,7 +631,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
             KMessageBox::Notify);
 
         if (doNotAskAgainCheckboxResult) {
-            generalSettings->setConfirmClosingMultipleTabs(false);
+            GeneralSettings::setConfirmClosingMultipleTabs(false);
         }
 
         switch (result) {
@@ -647,9 +647,8 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
         }
     }
 
-    generalSettings->setFirstRun(false);
-
-    settings.save();
+    GeneralSettings::setVersion(CurrentDolphinVersion);
+    GeneralSettings::self()->writeConfig();
 
     if (m_searchDockIsTemporaryVisible) {
         QDockWidget* searchDock = findChild<QDockWidget*>("searchDock");
@@ -725,14 +724,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();
 }
@@ -948,9 +947,7 @@ void DolphinMainWindow::replaceLocation()
 
 void DolphinMainWindow::togglePanelLockState()
 {
-    GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
-
-    const bool newLockState = !generalSettings->lockPanels();
+    const bool newLockState = !GeneralSettings::lockPanels();
     foreach (QObject* child, children()) {
         DolphinDockWidget* dock = qobject_cast<DolphinDockWidget*>(child);
         if (dock) {
@@ -958,7 +955,7 @@ void DolphinMainWindow::togglePanelLockState()
         }
     }
 
-    generalSettings->setLockPanels(newLockState);
+    GeneralSettings::setLockPanels(newLockState);
 }
 
 void DolphinMainWindow::slotPlacesPanelVisibilityChanged(bool visible)
@@ -1313,7 +1310,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);
     }
 }
 
@@ -1368,13 +1366,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<QAction*>& customActions)
 {
-    QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, item, url);
-    contextMenu->setCustomActions(customActions);
-    const DolphinContextMenu::Command command = contextMenu->open();
+    QWeakPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, pos, item, url);
+    contextMenu.data()->setCustomActions(customActions);
+    const DolphinContextMenu::Command command = contextMenu.data()->open();
 
     switch (command) {
     case DolphinContextMenu::OpenParentFolderInNewWindow: {
@@ -1391,7 +1390,7 @@ void DolphinMainWindow::openContextMenu(const KFileItem& item,
         break;
     }
 
-    delete contextMenu;
+    delete contextMenu.data();
 }
 
 void DolphinMainWindow::updateToolBarMenu()
@@ -1403,8 +1402,6 @@ void DolphinMainWindow::updateToolBarMenu()
     // by connecting to the aboutToHide() signal from the parent-menu.
     menu->clear();
 
-    const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
-
     KActionCollection* ac = actionCollection();
 
     // Add "Edit" actions
@@ -1418,7 +1415,7 @@ void DolphinMainWindow::updateToolBarMenu()
     }
 
     // Add "View" actions
-    if (!generalSettings->showZoomSlider()) {
+    if (!GeneralSettings::showZoomSlider()) {
         addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ZoomIn)), menu);
         addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ZoomOut)), menu);
         menu->addSeparator();
@@ -1479,6 +1476,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);
@@ -1654,7 +1656,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);
@@ -1662,8 +1664,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"));
@@ -1673,10 +1675,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());
 
@@ -1700,7 +1702,9 @@ void DolphinMainWindow::setupActions()
     connect(openTerminal, SIGNAL(triggered()), this, SLOT(openTerminal()));
 
     // setup 'Settings' menu
-    KStandardAction::showMenubar(this, SLOT(toggleShowMenuBar()), actionCollection());
+    KToggleAction* showMenuBar = KStandardAction::showMenubar(0, 0, actionCollection());
+    connect(showMenuBar, SIGNAL(triggered(bool)),                   // Fixes #286822
+            this, SLOT(toggleShowMenuBar()), Qt::QueuedConnection);
     KStandardAction::preferences(this, SLOT(editSettings()), actionCollection());
 
     // not in menu actions
@@ -1736,7 +1740,7 @@ void DolphinMainWindow::setupActions()
 
 void DolphinMainWindow::setupDockWidgets()
 {
-    const bool lock = DolphinSettings::instance().generalSettings()->lockPanels();
+    const bool lock = GeneralSettings::lockPanels();
 
     KDualAction* lockLayoutAction = actionCollection()->add<KDualAction>("lock_panels");
     lockLayoutAction->setActiveText(i18nc("@action:inmenu Panels", "Unlock Panels"));
@@ -1757,9 +1761,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)),
@@ -1779,15 +1781,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
@@ -1801,12 +1801,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)),
@@ -1825,16 +1823,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 (GeneralSettings::version() < 200) {
         infoDock->hide();
         foldersDock->hide();
 #ifndef Q_OS_WIN
@@ -1858,18 +1853,16 @@ void DolphinMainWindow::setupDockWidgets()
     placesActions.append(separator);
     placesActions.append(lockLayoutAction);
     placesPanel->addActions(placesActions);
-    placesPanel->setModel(DolphinSettings::instance().placesModel());
+    placesPanel->setModel(DolphinPlacesModel::instance());
     placesPanel->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     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)),
@@ -2060,11 +2053,10 @@ void DolphinMainWindow::refreshViews()
 
     setActiveViewContainer(activeViewContainer);
 
-    const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
-    if (generalSettings->modifiedStartupSettings()) {
+    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 bool splitView = GeneralSettings::splitView();
         const ViewTab& activeTab = m_viewTab[m_tabIndex];
         const bool toggle =    ( splitView && !activeTab.secondaryView)
                             || (!splitView &&  activeTab.secondaryView);
@@ -2099,23 +2091,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<QAction*>&)),
-            this, SLOT(openContextMenu(KFileItem, const KUrl&, const QList<QAction*>&)));
+    connect(view, SIGNAL(tabRequested(KUrl)),
+            this, SLOT(openNewTab(KUrl)));
+    connect(view, SIGNAL(requestContextMenu(QPoint,KFileItem,KUrl,QList<QAction*>)),
+            this, SLOT(openContextMenu(QPoint,KFileItem,KUrl,QList<QAction*>)));
     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)));
 }
 
@@ -2176,7 +2168,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<int>() << newWidth << newWidth);
     connectViewSignals(m_viewTab[tabIndex].secondaryView);
@@ -2211,12 +2203,19 @@ 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);
+    dockAction->setShortcut(shortcut);
+    connect(panelAction, SIGNAL(triggered()), dockAction, SLOT(trigger()));
 }
 
 DolphinMainWindow::UndoUiInterface::UndoUiInterface() :
@@ -2267,20 +2266,18 @@ 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();
     }
 
-    pos += screen.topLeft();
-
     move(pos);
 }