diff --git a/reader/browser/SheetBrowser.cpp b/reader/browser/SheetBrowser.cpp index 43b86e359..0623f83f6 100644 --- a/reader/browser/SheetBrowser.cpp +++ b/reader/browser/SheetBrowser.cpp @@ -1,5 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -1735,6 +1734,15 @@ void SheetBrowser::jumpToPrevSearchResult() } } +void SheetBrowser::hideFindWidget() +{ + if (!m_findWidget.isNull()) { + m_findWidget->hide(); + m_findWidget->deleteLater(); + m_findWidget = nullptr; + } +} + void SheetBrowser::handleSearchStart() { m_searchCurIndex = 0; diff --git a/reader/browser/SheetBrowser.h b/reader/browser/SheetBrowser.h index 91578206d..13802b727 100644 --- a/reader/browser/SheetBrowser.h +++ b/reader/browser/SheetBrowser.h @@ -1,5 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -262,6 +261,12 @@ class SheetBrowser : public Dtk::Widget::DGraphicsView */ void handlePrepareSearch(); + /** + * @brief hideFindWidget + * 隐藏并销毁搜索框,切换标签页时调用,防止搜索串档 + */ + void hideFindWidget(); + /** * @brief jumpToNextSearchResult * 跳到下一个搜索条目中 diff --git a/reader/uiframe/CentralDocPage.cpp b/reader/uiframe/CentralDocPage.cpp index bfa140ef5..9c4f16618 100644 --- a/reader/uiframe/CentralDocPage.cpp +++ b/reader/uiframe/CentralDocPage.cpp @@ -1,5 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -275,6 +274,11 @@ void CentralDocPage::onOpened(DocSheet *sheet, deepin_reader::Document::Error er void CentralDocPage::onTabChanged(DocSheet *sheet) { if (nullptr != sheet) { + // 关闭前一个 sheet 的搜索框,防止切换标签后搜索串档 + QPointer prevSheet = qobject_cast(m_stackedLayout->currentWidget()); + if (prevSheet && prevSheet != sheet && prevSheet->opened()) { + prevSheet->closeFindWidget(); + } m_stackedLayout->setCurrentWidget(sheet); sheet->defaultFocus(); diff --git a/reader/uiframe/DocSheet.cpp b/reader/uiframe/DocSheet.cpp index 0687e5ea4..11a86a3f4 100644 --- a/reader/uiframe/DocSheet.cpp +++ b/reader/uiframe/DocSheet.cpp @@ -1,5 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -1129,6 +1128,13 @@ void DocSheet::jumpToPrevSearchResult() m_browser->jumpToPrevSearchResult(); } +void DocSheet::closeFindWidget() +{ + stopSearch(); + if (m_browser) + m_browser->hideFindWidget(); +} + void DocSheet::stopSearch() { m_searchTask->stopSearch(); diff --git a/reader/uiframe/DocSheet.h b/reader/uiframe/DocSheet.h index 053cbbb55..6fca5e2e3 100644 --- a/reader/uiframe/DocSheet.h +++ b/reader/uiframe/DocSheet.h @@ -1,5 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -576,6 +575,12 @@ class DocSheet : public Dtk::Widget::DSplitter */ void jumpToPrevSearchResult(); + /** + * @brief closeFindWidget + * 关闭搜索框并停止搜索,切换标签页时调用 + */ + void closeFindWidget(); + /** * @brief showEncryPage * 显示解锁页面