+void DolphinMainWindow::toggleLocationInToolbar()
+{
+ // collect needed variables
+ const bool locationInToolbar = actionCollection()->action(QStringLiteral("location_in_toolbar"))->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();
+
+ // 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);
+ }
+ }
+
+}
+