https://bugs.kde.org/show_bug.cgi?id=411387
--- Comment #5 from Nikolay Zlatev <n...@astrapaging.com> --- Final patch diff --git a/src/ViewSplitter.cpp b/src/ViewSplitter.cpp index 7e31172c..38c576a9 100644 --- a/src/ViewSplitter.cpp +++ b/src/ViewSplitter.cpp @@ -147,7 +147,7 @@ void ViewSplitter::handleFocusDirection(Qt::Orientation orientation, int directi auto parentSplitter = qobject_cast<ViewSplitter*>(terminalDisplay->parentWidget()); auto topSplitter = parentSplitter->getToplevelSplitter(); - const auto handleWidth = parentSplitter->handleWidth() <= 1 ? 4 : parentSplitter->handleWidth(); + const auto handleWidth = parentSplitter->handleWidth() <= 1 ? 4 : parentSplitter->handleWidth() + 1; const auto start = QPoint(terminalDisplay->x(), terminalDisplay->y()); const auto startMapped = parentSplitter->mapTo(topSplitter, start); @@ -163,20 +163,21 @@ void ViewSplitter::handleFocusDirection(Qt::Orientation orientation, int directi const auto newPoint = QPoint(newX, newY); auto child = topSplitter->childAt(newPoint); + TerminalDisplay *focusTerminal = nullptr; if (auto* terminal = qobject_cast<TerminalDisplay*>(child)) { - terminal->setFocus(Qt::OtherFocusReason); + focusTerminal = terminal; } else if (qobject_cast<QSplitterHandle*>(child) != nullptr) { auto targetSplitter = qobject_cast<QSplitter*>(child->parent()); - auto splitterTerminal = qobject_cast<TerminalDisplay*>(targetSplitter->widget(0)); - splitterTerminal->setFocus(Qt::OtherFocusReason); + focusTerminal = qobject_cast<TerminalDisplay*>(targetSplitter->widget(0)); } else if (qobject_cast<QWidget*>(child) != nullptr) { - TerminalDisplay *terminalParent = nullptr; - while(terminalParent == nullptr) { - terminalParent = qobject_cast<TerminalDisplay*>(child->parentWidget()); + while(child != nullptr && focusTerminal == nullptr) { + focusTerminal = qobject_cast<TerminalDisplay*>(child->parentWidget()); child = child->parentWidget(); } - terminalParent->setFocus(Qt::OtherFocusReason); } + + if (focusTerminal != nullptr) + focusTerminal->setFocus(Qt::OtherFocusReason); } void ViewSplitter::focusUp() -- You are receiving this mail because: You are watching all bug changes.