┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2020-08-27 18:55:18 +0200
committerElvis Angelaccio <[email protected]>2020-11-09 23:49:07 +0100
commit6151a7aec0516570926cb1d15da48936e38e6765 (patch)
treeccafc99ee507a90fa36bfc7c148af02c06525551 /src
parentb6fc58c3c32b03f504a5f697b62c4834dc3f650a (diff)
Add the UrlNavigator to the toolbar automatically if needed
This commit adds the DolphinUrlNavigatorWidgetAction::addToToolbarAndSave() method which changes the users toolbar configuration to contain an Url Navigator. This way the user doesn't need to do anything manually. Aside from that a bunch of minor fixes like renaming and reordering
Diffstat (limited to 'src')
-rw-r--r--src/dolphinmainwindow.cpp36
-rw-r--r--src/dolphintabpage.cpp12
-rw-r--r--src/dolphinviewcontainer.cpp4
-rw-r--r--src/dolphinviewcontainer.h12
-rw-r--r--src/views/dolphinurlnavigatorwidgetaction.cpp33
-rw-r--r--src/views/dolphinurlnavigatorwidgetaction.h15
6 files changed, 79 insertions, 33 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 5e6b6e94a..381d95013 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -358,7 +358,7 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
void DolphinMainWindow::updateHistory()
{
- const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
const int index = urlNavigator->historyIndex();
QAction* backAction = actionCollection()->action(KStandardAction::name(KStandardAction::Back));
@@ -729,7 +729,7 @@ void DolphinMainWindow::slotToolBarActionMiddleClicked(QAction *action)
void DolphinMainWindow::slotAboutToShowBackPopupMenu()
{
- const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
int entries = 0;
m_backAction->menu()->clear();
for (int i = urlNavigator->historyIndex() + 1; i < urlNavigator->historySize() && entries < MaxNumberOfNavigationentries; ++i, ++entries) {
@@ -742,7 +742,7 @@ void DolphinMainWindow::slotAboutToShowBackPopupMenu()
void DolphinMainWindow::slotGoBack(QAction* action)
{
int gotoIndex = action->data().value<int>();
- const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
for (int i = gotoIndex - urlNavigator->historyIndex(); i > 0; --i) {
goBack();
}
@@ -751,14 +751,14 @@ void DolphinMainWindow::slotGoBack(QAction* action)
void DolphinMainWindow::slotBackForwardActionMiddleClicked(QAction* action)
{
if (action) {
- const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value<int>()));
}
}
void DolphinMainWindow::slotAboutToShowForwardPopupMenu()
{
- const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
int entries = 0;
m_forwardAction->menu()->clear();
for (int i = urlNavigator->historyIndex() - 1; i >= 0 && entries < MaxNumberOfNavigationentries; --i, ++entries) {
@@ -771,7 +771,7 @@ void DolphinMainWindow::slotAboutToShowForwardPopupMenu()
void DolphinMainWindow::slotGoForward(QAction* action)
{
int gotoIndex = action->data().value<int>();
- const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
for (int i = urlNavigator->historyIndex() - gotoIndex; i > 0; --i) {
goForward();
}
@@ -858,19 +858,21 @@ void DolphinMainWindow::toggleLocationInToolbar()
const int selectionStart = lineEdit->selectionStart();
const int selectionLength = lineEdit->selectionLength();
- // prevent the switching if it would leave the user without a visible UrlNavigator
if (locationInToolbar && !toolBar()->actions().contains(urlNavigatorWidgetAction)) {
- QAction *configureToolbars = actionCollection()->action(KStandardAction::name(KStandardAction::ConfigureToolbars));
- KMessageWidget *messageWidget = m_activeViewContainer->showMessage(
+ // There is no UrlNavigator on the toolbar. Try to fix it. Otherwise show an error.
+ if (!urlNavigatorWidgetAction->addToToolbarAndSave(this)) {
+ QAction *configureToolbars = actionCollection()->action(KStandardAction::name(KStandardAction::ConfigureToolbars));
+ KMessageWidget *messageWidget = m_activeViewContainer->showMessage(
xi18nc("@info 2 is the visible text on a button just below the message",
"The location could not be moved onto the toolbar because there is currently "
"no \"%1\" item on the toolbar. Select <interface>%2</interface> and add the "
"\"%1\" item. Then this will work.", urlNavigatorWidgetAction->iconText(),
configureToolbars->iconText()), DolphinViewContainer::Information);
- messageWidget->addAction(configureToolbars);
- messageWidget->addAction(locationInToolbarAction);
- locationInToolbarAction->setChecked(false);
- return;
+ messageWidget->addAction(configureToolbars);
+ messageWidget->addAction(locationInToolbarAction);
+ locationInToolbarAction->setChecked(false);
+ return;
+ }
}
// do the switching
@@ -949,7 +951,7 @@ void DolphinMainWindow::slotTerminalPanelVisibilityChanged()
void DolphinMainWindow::goBack()
{
- DolphinUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternal();
+ DolphinUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
urlNavigator->goBack();
if (urlNavigator->locationState().isEmpty()) {
@@ -976,14 +978,14 @@ void DolphinMainWindow::goHome()
void DolphinMainWindow::goBackInNewTab()
{
- KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternal();
+ KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
const int index = urlNavigator->historyIndex() + 1;
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
}
void DolphinMainWindow::goForwardInNewTab()
{
- KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternal();
+ KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
const int index = urlNavigator->historyIndex() - 1;
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
}
@@ -2252,7 +2254,7 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
connect(navigator, &KUrlNavigator::tabRequested,
this, &DolphinMainWindow::openNewTabAfterLastTab);
- connect(container->urlNavigatorInternal(), &KUrlNavigator::historyChanged,
+ connect(container->urlNavigatorInternalWithHistory(), &KUrlNavigator::historyChanged,
this, &DolphinMainWindow::updateHistory);
}
diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp
index 30014eae8..c2c573e1d 100644
--- a/src/dolphintabpage.cpp
+++ b/src/dolphintabpage.cpp
@@ -165,12 +165,12 @@ QByteArray DolphinTabPage::saveState() const
stream << m_splitViewEnabled;
stream << m_primaryViewContainer->url();
- stream << m_primaryViewContainer->urlNavigatorInternal()->isUrlEditable();
+ stream << m_primaryViewContainer->urlNavigatorInternalWithHistory()->isUrlEditable();
m_primaryViewContainer->view()->saveState(stream);
if (m_splitViewEnabled) {
stream << m_secondaryViewContainer->url();
- stream << m_secondaryViewContainer->urlNavigatorInternal()->isUrlEditable();
+ stream << m_secondaryViewContainer->urlNavigatorInternalWithHistory()->isUrlEditable();
m_secondaryViewContainer->view()->saveState(stream);
}
@@ -206,7 +206,7 @@ void DolphinTabPage::restoreState(const QByteArray& state)
m_primaryViewContainer->setUrl(primaryUrl);
bool primaryUrlEditable;
stream >> primaryUrlEditable;
- m_primaryViewContainer->urlNavigatorInternal()->setUrlEditable(primaryUrlEditable);
+ m_primaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(primaryUrlEditable);
m_primaryViewContainer->view()->restoreState(stream);
if (isSplitViewEnabled) {
@@ -215,7 +215,7 @@ void DolphinTabPage::restoreState(const QByteArray& state)
m_secondaryViewContainer->setUrl(secondaryUrl);
bool secondaryUrlEditable;
stream >> secondaryUrlEditable;
- m_secondaryViewContainer->urlNavigatorInternal()->setUrlEditable(secondaryUrlEditable);
+ m_secondaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(secondaryUrlEditable);
m_secondaryViewContainer->view()->restoreState(stream);
}
@@ -250,7 +250,7 @@ void DolphinTabPage::restoreStateV1(const QByteArray& state)
m_primaryViewContainer->setUrl(primaryUrl);
bool primaryUrlEditable;
stream >> primaryUrlEditable;
- m_primaryViewContainer->urlNavigatorInternal()->setUrlEditable(primaryUrlEditable);
+ m_primaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(primaryUrlEditable);
if (isSplitViewEnabled) {
QUrl secondaryUrl;
@@ -258,7 +258,7 @@ void DolphinTabPage::restoreStateV1(const QByteArray& state)
m_secondaryViewContainer->setUrl(secondaryUrl);
bool secondaryUrlEditable;
stream >> secondaryUrlEditable;
- m_secondaryViewContainer->urlNavigatorInternal()->setUrlEditable(secondaryUrlEditable);
+ m_secondaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(secondaryUrlEditable);
}
stream >> m_primaryViewActive;
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 3cdad13fb..59a187e1f 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -290,12 +290,12 @@ DolphinUrlNavigator* DolphinViewContainer::urlNavigator()
return m_urlNavigatorConnected;
}
-const DolphinUrlNavigator *DolphinViewContainer::urlNavigatorInternal() const
+const DolphinUrlNavigator *DolphinViewContainer::urlNavigatorInternalWithHistory() const
{
return m_urlNavigator;
}
-DolphinUrlNavigator *DolphinViewContainer::urlNavigatorInternal()
+DolphinUrlNavigator *DolphinViewContainer::urlNavigatorInternalWithHistory()
{
return m_urlNavigator;
}
diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h
index 77c734949..2fe6b5f89 100644
--- a/src/dolphinviewcontainer.h
+++ b/src/dolphinviewcontainer.h
@@ -91,8 +91,8 @@ public:
* @see connectUrlNavigator()
* @see disconnectUrlNavigator()
*
- * Use urlNavigatorInternal() if you want to access the history.
- * @see urlNavigatorInternal()
+ * Use urlNavigatorInternalWithHistory() if you want to access the history.
+ * @see urlNavigatorInternalWithHistory()
*/
const DolphinUrlNavigator *urlNavigator() const;
/**
@@ -101,8 +101,8 @@ public:
* @see connectUrlNavigator()
* @see disconnectUrlNavigator()
*
- * Use urlNavigatorInternal() if you want to access the history.
- * @see urlNavigatorInternal()
+ * Use urlNavigatorInternalWithHistory() if you want to access the history.
+ * @see urlNavigatorInternalWithHistory()
*/
DolphinUrlNavigator *urlNavigator();
@@ -110,12 +110,12 @@ public:
* @return An UrlNavigator that contains this view's history.
* Use urlNavigator() instead when not accessing the history.
*/
- const DolphinUrlNavigator *urlNavigatorInternal() const;
+ const DolphinUrlNavigator *urlNavigatorInternalWithHistory() const;
/**
* @return An UrlNavigator that contains this view's history.
* Use urlNavigator() instead when not accessing the history.
*/
- DolphinUrlNavigator *urlNavigatorInternal();
+ DolphinUrlNavigator *urlNavigatorInternalWithHistory();
const DolphinView* view() const;
DolphinView* view();
diff --git a/src/views/dolphinurlnavigatorwidgetaction.cpp b/src/views/dolphinurlnavigatorwidgetaction.cpp
index d9c9a4bfa..108a5de13 100644
--- a/src/views/dolphinurlnavigatorwidgetaction.cpp
+++ b/src/views/dolphinurlnavigatorwidgetaction.cpp
@@ -24,6 +24,11 @@
#include "dolphinviewcontainer.h"
#include <KLocalizedString>
+#include <KXMLGUIFactory>
+#include <KXmlGuiWindow>
+
+#include <QDomDocument>
+#include <QStackedWidget>
DolphinUrlNavigatorWidgetAction::DolphinUrlNavigatorWidgetAction(QWidget *parent) :
QWidgetAction(parent)
@@ -56,3 +61,31 @@ void DolphinUrlNavigatorWidgetAction::setUrlNavigatorVisible(bool visible)
m_stackedWidget->setCurrentIndex(1); // urlNavigator
}
}
+
+bool DolphinUrlNavigatorWidgetAction::addToToolbarAndSave(KXmlGuiWindow *mainWindow)
+{
+ const QString rawXml = KXMLGUIFactory::readConfigFile(mainWindow->xmlFile());
+ QDomDocument domDocument;
+ if (rawXml.isEmpty() || !domDocument.setContent(rawXml) || domDocument.isNull()) {
+ return false;
+ }
+ QDomNode toolbar = domDocument.elementsByTagName(QStringLiteral("ToolBar")).at(0);
+ if (toolbar.isNull()) {
+ return false;
+ }
+
+ QDomElement urlNavigatorElement = domDocument.createElement(QStringLiteral("Action"));
+ urlNavigatorElement.setAttribute(QStringLiteral("name"), QStringLiteral("url_navigator"));
+
+ QDomNode position = toolbar.lastChildElement(QStringLiteral("Spacer"));
+ if (position.isNull()) {
+ toolbar.appendChild(urlNavigatorElement);
+ } else {
+ toolbar.replaceChild(urlNavigatorElement, position);
+ }
+
+ KXMLGUIFactory::saveConfigFile(domDocument, mainWindow->xmlFile());
+ mainWindow->reloadXML();
+ mainWindow->createGUI();
+ return true;
+}
diff --git a/src/views/dolphinurlnavigatorwidgetaction.h b/src/views/dolphinurlnavigatorwidgetaction.h
index 517afc05a..ed07115a6 100644
--- a/src/views/dolphinurlnavigatorwidgetaction.h
+++ b/src/views/dolphinurlnavigatorwidgetaction.h
@@ -24,7 +24,9 @@
#include "dolphinurlnavigator.h"
#include <QWidgetAction>
-#include <QStackedWidget>
+
+class KXmlGuiWindow;
+class QStackedWidget;
/**
* @brief QWidgetAction that allows to use a KUrlNavigator in a toolbar.
@@ -45,11 +47,20 @@ public:
DolphinUrlNavigator *urlNavigator() const;
/**
- * Set the QStackedWidget which is the defaultWidget() to either
+ * Sets the QStackedWidget which is the defaultWidget() to either
* show a KUrlNavigator or an expanding spacer.
*/
void setUrlNavigatorVisible(bool visible);
+ /**
+ * Adds this action to the mainWindow's toolbar and saves the change
+ * in the users ui configuration file.
+ * @return true if successful. Otherwise false.
+ * @note This method does multiple things which are discouraged in
+ * the API documentation.
+ */
+ bool addToToolbarAndSave(KXmlGuiWindow *mainWindow);
+
private:
QStackedWidget *m_stackedWidget;
};