From d2476a7de7794ea0e70de995dc97601cf2ff3726 Mon Sep 17 00:00:00 2001 From: Jakub Dupak Date: Wed, 29 Nov 2023 21:38:30 +0100 Subject: [PATCH] GUI: Show tab when clicking on error. --- src/gui/mainwindow/mainwindow.cpp | 8 +++----- src/gui/windows/editor/editordock.cpp | 11 +++++++++++ src/gui/windows/editor/editordock.h | 1 + src/gui/windows/editor/srceditor.cpp | 1 + 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gui/mainwindow/mainwindow.cpp b/src/gui/mainwindow/mainwindow.cpp index 887644f7..4c5c1900 100644 --- a/src/gui/mainwindow/mainwindow.cpp +++ b/src/gui/mainwindow/mainwindow.cpp @@ -573,13 +573,11 @@ void MainWindow::message_selected( (void)hint; if (file.isEmpty()) { return; } - auto editor = (file == "Unknown") ? editor_tabs->get_current_editor() - : editor_tabs->find_tab_by_filename(file)->get_editor(); - if (editor == nullptr) { return; } - editor->setCursorTo(line, column); - editor->setFocus(); + central_widget_tabs->setCurrentWidget(editor_tabs.data()); + editor_tabs->set_cursor_to(file, line, column); // Highlight the line + auto editor = editor_tabs->get_current_editor(); QTextEdit::ExtraSelection selection; selection.format.setBackground(QColor(Qt::red).lighter(160)); selection.format.setProperty(QTextFormat::FullWidthSelection, true); diff --git a/src/gui/windows/editor/editordock.cpp b/src/gui/windows/editor/editordock.cpp index bbf9f545..989f93aa 100644 --- a/src/gui/windows/editor/editordock.cpp +++ b/src/gui/windows/editor/editordock.cpp @@ -308,3 +308,14 @@ void EditorDock::confirm_close_tab_dialog(int index) { Qt::QueuedConnection); msgbox->open(); } + +void EditorDock::set_cursor_to(const QString &filename, int line, int column) { + auto tab = (filename == "Unknown") ? get_tab(currentIndex()) : find_tab_by_filename(filename); + if (tab == nullptr) { + WARN( + "Cannot find tab for file '%s'. Unable to set cursor.", filename.toStdString().c_str()); + return; + } + setCurrentWidget(tab); + tab->get_editor()->setCursorTo(line, column); +} diff --git a/src/gui/windows/editor/editordock.h b/src/gui/windows/editor/editordock.h index 2bd449eb..6e2a4477 100644 --- a/src/gui/windows/editor/editordock.h +++ b/src/gui/windows/editor/editordock.h @@ -30,6 +30,7 @@ class EditorDock : public HidingTabWidget { BORROWED [[nodiscard]] SrcEditor *get_current_editor() const; [[nodiscard]] QStringList get_open_file_list() const; bool get_modified_tab_filenames(QStringList &output, bool report_unnamed = false) const; + void set_cursor_to(const QString &filename, int line, int column); protected: void tabCountChanged() override; diff --git a/src/gui/windows/editor/srceditor.cpp b/src/gui/windows/editor/srceditor.cpp index 554e737b..d132c0a9 100644 --- a/src/gui/windows/editor/srceditor.cpp +++ b/src/gui/windows/editor/srceditor.cpp @@ -109,6 +109,7 @@ void SrcEditor::setCursorTo(int ln, int col) { QTextCursor cursor(document()->findBlockByNumber(ln - 1)); cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, col - 1); setTextCursor(cursor); + setFocus(); } bool SrcEditor::isModified() const {