diff --git a/desktop/konsoleui.rc b/desktop/konsoleui.rc
index 02aa1d83..7b70d944 100644
--- a/desktop/konsoleui.rc
+++ b/desktop/konsoleui.rc
@@ -25,6 +25,7 @@
+
diff --git a/doc/manual/index.docbook b/doc/manual/index.docbook
index 0eeeae96..08d91096 100644
--- a/doc/manual/index.docbook
+++ b/doc/manual/index.docbook
@@ -695,6 +695,14 @@ Any output on one view is duplicated in the other view.
+
+
+&Ctrl;&Shift;\
+ViewSplit ViewEqual size to all views
+
+Sets the same size for all views
+
+
diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp
index 9e3675a2..ac7fe98a 100644
--- a/src/ViewManager.cpp
+++ b/src/ViewManager.cpp
@@ -274,6 +274,14 @@ void ViewManager::setupActions()
_multiTabOnlyActions << action;
_viewContainer->addAction(action);
+ action = new QAction(this);
+ action->setText(i18nc("@action:inmenu", "Equal size to all views"));
+ collection->setDefaultShortcut(action, Konsole::ACCEL | Qt::SHIFT | Qt::Key_Backslash);
+ action->setEnabled(false);
+ collection->addAction(QStringLiteral("equal-size-view"), action);
+ connect(action, &QAction::triggered, this, &ViewManager::equalSizeAllContainers);
+ _multiSplitterOnlyActions << action;
+
// _viewSplitter->addAction(lastUsedViewReverseAction);
const int SWITCH_TO_TAB_COUNT = 19;
for (int i = 0; i < SWITCH_TO_TAB_COUNT; ++i) {
@@ -632,6 +640,36 @@ void ViewManager::shrinkActiveContainer()
_viewContainer->activeViewSplitter()->adjustActiveTerminalDisplaySize(-10);
}
+void ViewManager::equalSizeAllContainers()
+{
+ std::function processChildren = [&processChildren](ViewSplitter *viewSplitter) -> void {
+ // divide the size of the parent widget by the amount of children splits
+ auto hintSize = viewSplitter->size();
+ auto sizes = viewSplitter->sizes();
+ auto sharedSize = hintSize / sizes.size();
+ if (viewSplitter->orientation() == Qt::Horizontal) {
+ for (auto &&size : sizes) {
+ size = sharedSize.width();
+ }
+ } else {
+ for (auto &&size : sizes) {
+ size = sharedSize.height();
+ }
+ }
+ // set new sizes
+ viewSplitter->setSizes(sizes);
+
+ // set equal sizes for each splitter children
+ for (auto &&child : viewSplitter->children()) {
+ auto childViewSplitter = qobject_cast(child);
+ if (childViewSplitter) {
+ processChildren(childViewSplitter);
+ }
+ }
+ };
+ processChildren(_viewContainer->activeViewSplitter()->getToplevelSplitter());
+}
+
SessionController *ViewManager::createController(Session *session, TerminalDisplay *view)
{
// create a new controller for the session, and ensure that this view manager
diff --git a/src/ViewManager.h b/src/ViewManager.h
index 7b243936..6d7c455f 100644
--- a/src/ViewManager.h
+++ b/src/ViewManager.h
@@ -318,6 +318,7 @@ private Q_SLOTS:
void splitTopBottom();
void expandActiveContainer();
void shrinkActiveContainer();
+ void equalSizeAllContainers();
// called when the "Detach View" menu item is selected
void detachActiveView();