Git commit 8663b4be86fbdd45583dcbc373c4b989bd8e819d by Tomaz Canabrava, on behalf of Kamay Xutax. Committed on 23/05/2022 at 14:50. Pushed by tcanabrava into branch 'master'.
Be able to resize the splits to the same size. Here how it looks like: https://imgur.com/a/uaMQvT6 Before, it was impossible to resize the splits with the same size in case they were manually resized. I have added a new button menu for doing so: in View -> Split View -> Equal size to all views. First I wanted to make this as a plugin, but since I thought it could make splits a bit more useful, I decided to merge it not as a plugin but internally. GUI: Menu -> View -> Split View -> Equal size to all views CHANGELOG: Added equal size to all split views. M +1 -0 desktop/konsoleui.rc M +8 -0 doc/manual/index.docbook M +38 -0 src/ViewManager.cpp M +1 -0 src/ViewManager.h https://invent.kde.org/utilities/konsole/commit/8663b4be86fbdd45583dcbc373c4b989bd8e819d diff --git a/desktop/konsoleui.rc b/desktop/konsoleui.rc index 02aa1d833..7b70d9449 100644 --- a/desktop/konsoleui.rc +++ b/desktop/konsoleui.rc @@ -25,6 +25,7 @@ <Action name="expand-active-view"/> <Action name="shrink-active-view"/> <Action name="toggle-maximize-current-view"/> + <Action name="equal-size-view"/> </Menu> <Separator/> <Action name="detach-tab" /> diff --git a/doc/manual/index.docbook b/doc/manual/index.docbook index 0eeeae96d..08d91096c 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. </para></listitem> </varlistentry> +<varlistentry> +<term><menuchoice> +<shortcut><keycombo action="simul">&Ctrl;&Shift;<keycap>\</keycap></keycombo></shortcut> +<guimenu>View</guimenu><guisubmenu>Split View</guisubmenu><guimenuitem>Equal size to all views</guimenuitem></menuchoice> +</term> +<listitem><para><action>Sets the same size for all views</action> +</para></listitem> +</varlistentry> <varlistentry> <term><menuchoice> diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 9e3675a2e..ac7fe98a6 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<void(ViewSplitter *)> 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<ViewSplitter *>(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 7b243936a..6d7c455f1 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();
