+void DolphinMainWindow::toggleLocationInToolbar()
+{
+ // collect needed variables
+ QAction *locationInToolbarAction = actionCollection()->action(QStringLiteral("location_in_toolbar"));
+ const bool locationInToolbar = locationInToolbarAction->isChecked();
+ auto viewContainers = this->viewContainers();
+ auto urlNavigatorWidgetAction = static_cast<DolphinUrlNavigatorWidgetAction *>
+ (actionCollection()->action(QStringLiteral("url_navigator")));
+ const bool isEditable = m_activeViewContainer->urlNavigator()->isUrlEditable();
+ const QLineEdit *lineEdit = m_activeViewContainer->urlNavigator()->editor()->lineEdit();
+ const bool hasFocus = lineEdit->hasFocus();
+ const int cursorPosition = lineEdit->cursorPosition();
+ 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(
+ 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;
+ }
+
+ // do the switching
+ GeneralSettings::setLocationInToolbar(locationInToolbar);
+ if (locationInToolbar) {
+ for (const auto viewContainer : viewContainers) {
+ viewContainer->disconnectUrlNavigator();
+ }
+ m_activeViewContainer->connectUrlNavigator(urlNavigatorWidgetAction->urlNavigator());
+ } else {
+ m_activeViewContainer->disconnectUrlNavigator();
+ for (const auto viewContainer : viewContainers) {
+ viewContainer->connectToInternalUrlNavigator();
+ }
+ }
+
+ urlNavigatorWidgetAction->setUrlNavigatorVisible(locationInToolbar);
+ m_activeViewContainer->urlNavigator()->setUrlEditable(isEditable);
+ if (hasFocus) { // the rest of this method is unneeded perfectionism
+ m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setText(lineEdit->text());
+ m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setFocus();
+ m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setCursorPosition(cursorPosition);
+ if (selectionStart != -1) {
+ m_activeViewContainer->urlNavigator()->editor()->lineEdit()->setSelection(selectionStart, selectionLength);
+ }
+ }
+}
+