[LyX/master] Disable some Adv F&R widgets for read-only documents

Jean-Marc Lasgouttes lasgouttes at lyx.org
Thu Dec 3 16:34:22 UTC 2020


commit c30b0aac4bd5baabd430c3488aa97286a9ed5b41
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Thu Dec 3 18:02:40 2020 +0100

    Disable some Adv F&R widgets for read-only documents
---
 src/Buffer.cpp                      |    5 +++++
 src/Buffer.h                        |    2 ++
 src/frontends/qt/FindAndReplace.cpp |    8 ++++++--
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 4f397ef..0196965 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -3138,6 +3138,11 @@ ParConstIterator Buffer::par_iterator_end() const
 	return ParConstIterator(doc_iterator_end(this));
 }
 
+bool Buffer::empty() const
+{
+	return paragraphs().size() == 1 && paragraphs().front().empty();
+}
+
 
 Language const * Buffer::language() const
 {
diff --git a/src/Buffer.h b/src/Buffer.h
index a917c6e..9adc717 100644
--- a/src/Buffer.h
+++ b/src/Buffer.h
@@ -567,6 +567,8 @@ public:
 	ParIterator par_iterator_end();
 	///
 	ParConstIterator par_iterator_end() const;
+	/// Is document empty ?
+	bool empty() const;
 
 	// Position of the child buffer where it appears first in the master.
 	DocIterator firstChildPosition(Buffer const * child);
diff --git a/src/frontends/qt/FindAndReplace.cpp b/src/frontends/qt/FindAndReplace.cpp
index af2bbbb..bd3edcf 100644
--- a/src/frontends/qt/FindAndReplace.cpp
+++ b/src/frontends/qt/FindAndReplace.cpp
@@ -67,7 +67,7 @@ FindAndReplaceWidget::FindAndReplaceWidget(GuiView & view)
 	// We don't want two cursors blinking.
 	find_work_area_->stopBlinkingCaret();
 	replace_work_area_->stopBlinkingCaret();
-	old_buffer_ = view_.documentBufferView() ? 
+	old_buffer_ = view_.documentBufferView() ?
 	    &(view_.documentBufferView()->buffer()) : 0;
 
 	// align items on top
@@ -90,6 +90,7 @@ void FindAndReplaceWidget::dockLocationChanged(Qt::DockWidgetArea area)
 
 bool FindAndReplaceWidget::eventFilter(QObject * obj, QEvent * event)
 {
+	updateGUI();
 	if (event->type() != QEvent::KeyPress
 		  || (obj != find_work_area_ && obj != replace_work_area_))
 		return QWidget::eventFilter(obj, event);
@@ -622,7 +623,10 @@ void FindAndReplaceWidget::updateGUI()
 	} else
 		old_buffer_ = nullptr;
 
-	bool const replace_enabled = bv && !bv->buffer().isReadonly();
+	bool const find_enabled = !find_work_area_->bufferView().buffer().empty();
+	findNextPB->setEnabled(find_enabled);
+	bool const replace_enabled = find_enabled && bv && !bv->buffer().isReadonly();
+	replaceLabel->setEnabled(replace_enabled);
 	replace_work_area_->setEnabled(replace_enabled);
 	replacePB->setEnabled(replace_enabled);
 	replaceallPB->setEnabled(replace_enabled);


More information about the lyx-cvs mailing list