>>>>> "Angus" == Angus Leeming <[EMAIL PROTECTED]> writes:

Angus> Sure and sure. I showed you the logic path. The behaviour is
Angus> just a natural result of same.

OK, I have to admit that you were right :)

Here is the patch I came up with. Lars, is it OK?

I have opened a bug for that at:
http://bugzilla.lyx.org/show_bug.cgi?id=1950

JMarc

Index: src/frontends/controllers/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ChangeLog,v
retrieving revision 1.489
diff -u -p -r1.489 ChangeLog
--- src/frontends/controllers/ChangeLog	27 Jul 2005 15:22:05 -0000	1.489
+++ src/frontends/controllers/ChangeLog	27 Jul 2005 22:45:01 -0000
@@ -1,3 +1,15 @@
+2005-07-28  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	bug 1950.
+	
+	* Dialog.h (exitEarly): virtual function, returns false as a
+	default. 
+
+	* ControlSpellchecker.h (exitEarly): return exitEarly_
+
+	* ControlSpellchecker.C (check): set exitEarly_ to true when
+	spell-checking is finished, false otherwise.
+
 2005-07-27  Jürgen Spitzmüller  <[EMAIL PROTECTED]>
 
 	* ControlToc.[Ch]: getGuiName takes a type argument now.
Index: src/frontends/controllers/ControlSpellchecker.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlSpellchecker.C,v
retrieving revision 1.82
diff -u -p -r1.82 ControlSpellchecker.C
--- src/frontends/controllers/ControlSpellchecker.C	3 May 2005 22:24:43 -0000	1.82
+++ src/frontends/controllers/ControlSpellchecker.C	27 Jul 2005 22:45:01 -0000
@@ -54,7 +54,7 @@ namespace frontend {
 
 
 ControlSpellchecker::ControlSpellchecker(Dialog & parent)
-	: Dialog::Controller(parent),
+	: Dialog::Controller(parent), exit_early_(false),
 	  oldval_(0), newvalue_(0), count_(0)
 {}
 
@@ -202,6 +202,7 @@ void ControlSpellchecker::check()
 		++start;
 
 	BufferParams & bufferparams = kernel().buffer().params();
+	exitEarly_ = false;
 
 	while (res == SpellBase::OK || res == SpellBase::IGNORED_WORD) {
 		word_ = nextWord(cur, start, bufferparams);
@@ -209,6 +210,7 @@ void ControlSpellchecker::check()
 		// end of document
 		if (getWord().empty()) {
 			showSummary();
+			exitEarly_ = true;
 			return;
 		}
 
Index: src/frontends/controllers/ControlSpellchecker.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ControlSpellchecker.h,v
retrieving revision 1.22
diff -u -p -r1.22 ControlSpellchecker.h
--- src/frontends/controllers/ControlSpellchecker.h	19 May 2004 15:11:30 -0000	1.22
+++ src/frontends/controllers/ControlSpellchecker.h	27 Jul 2005 22:45:01 -0000
@@ -40,6 +40,8 @@ public:
 	virtual void dispatchParams() {}
 	///
 	virtual bool isBufferDependent() const { return true; }
+	///
+	virtual bool exitEarly() const { return exitEarly_; }
 
 	/// replace word with replacement
 	void replace(std::string const &);
@@ -75,6 +77,10 @@ private:
 
 	/// show count of checked words at normal exit
 	void showSummary();
+
+private:
+	/// set to true when spellchecking is finished
+	bool exitEarly_;
 
 	/// current word being checked and lang code
 	WordLangTuple word_;
Index: src/frontends/controllers/Dialog.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/Dialog.h,v
retrieving revision 1.15
diff -u -p -r1.15 Dialog.h
--- src/frontends/controllers/Dialog.h	26 Apr 2005 09:37:52 -0000	1.15
+++ src/frontends/controllers/Dialog.h	27 Jul 2005 22:45:01 -0000
@@ -186,6 +186,12 @@ public:
 	 *  return true.
 	 */
 	virtual bool disconnectOnApply() const { return false; }
+
+	/** \return true if Dialog::View::show() should not display the dialog
+	 *   after running update. Currently, only ControlSpellchecker 
+	 *   makes use of that.
+	*/
+	virtual bool exitEarly() const { return false; }
 	//@}
 
 protected:
Index: src/frontends/gtk/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/gtk/ChangeLog,v
retrieving revision 1.128
diff -u -p -r1.128 ChangeLog
--- src/frontends/gtk/ChangeLog	27 Jul 2005 15:22:06 -0000	1.128
+++ src/frontends/gtk/ChangeLog	27 Jul 2005 22:45:01 -0000
@@ -1,3 +1,8 @@
+2005-07-28  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* GViewBase.C (show): exit after update if Controller::exitEarly()
+	is true. (bug 1950)
+
 2005-07-27  Jürgen Spitzmüller  <[EMAIL PROTECTED]>
 
 	* GToc.C (update, updateContents): Do not compare against 
Index: src/frontends/gtk/GViewBase.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/gtk/GViewBase.C,v
retrieving revision 1.14
diff -u -p -r1.14 GViewBase.C
--- src/frontends/gtk/GViewBase.C	29 Jan 2005 15:09:14 -0000	1.14
+++ src/frontends/gtk/GViewBase.C	27 Jul 2005 22:45:01 -0000
@@ -62,6 +62,9 @@ void GViewBase::show()
 		build();
 	}
 	update();
+	if (dialog().controller().exitEarly())
+		return;
+
 	window()->show();
 }
 
Index: src/frontends/qt2/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/ChangeLog,v
retrieving revision 1.813
diff -u -p -r1.813 ChangeLog
--- src/frontends/qt2/ChangeLog	27 Jul 2005 17:11:17 -0000	1.813
+++ src/frontends/qt2/ChangeLog	27 Jul 2005 22:45:01 -0000
@@ -1,3 +1,8 @@
+2005-07-28  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* QDialogView.C (show): exit after update if Controller::exitEarly()
+	is true. (bug 1950)
+
 2005-07-27  Jürgen Spitzmüller  <[EMAIL PROTECTED]>
 
 	* QToc.C (update_contents): fix missing qstring->string translation.
Index: src/frontends/qt2/QDialogView.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QDialogView.C,v
retrieving revision 1.12
diff -u -p -r1.12 QDialogView.C
--- src/frontends/qt2/QDialogView.C	12 May 2005 23:12:42 -0000	1.12
+++ src/frontends/qt2/QDialogView.C	27 Jul 2005 22:45:02 -0000
@@ -51,6 +51,8 @@ void QDialogView::show()
 	form()->setMinimumSize(form()->sizeHint());
 
 	update();  // make sure its up-to-date
+	if (dialog().controller().exitEarly())
+		return;
 
 	form()->setCaption(toqstr("LyX: " + getTitle()));
 
Index: src/frontends/xforms/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/ChangeLog,v
retrieving revision 1.1000
diff -u -p -r1.1000 ChangeLog
--- src/frontends/xforms/ChangeLog	27 Jul 2005 15:22:06 -0000	1.1000
+++ src/frontends/xforms/ChangeLog	27 Jul 2005 22:45:02 -0000
@@ -1,3 +1,8 @@
+2005-07-28  Jean-Marc Lasgouttes  <[EMAIL PROTECTED]>
+
+	* FormDialogView.C (show): exit after update if Controller::exitEarly()
+	is true. (bug 1950)
+
 2005-07-27  Jürgen Spitzmüller  <[EMAIL PROTECTED]>
 
 	* FormToc.C (updateType, update_contents): Do not compare against 
Index: src/frontends/xforms/FormDialogView.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormDialogView.C,v
retrieving revision 1.18
diff -u -p -r1.18 FormDialogView.C
--- src/frontends/xforms/FormDialogView.C	19 May 2004 15:11:35 -0000	1.18
+++ src/frontends/xforms/FormDialogView.C	27 Jul 2005 22:45:02 -0000
@@ -145,6 +145,8 @@ void FormDialogView::show()
 	fl_freeze_form(form());
 	update();
 	fl_unfreeze_form(form());
+	if (dialog().controller().exitEarly())
+		return;
 
 	if (form()->visible) {
 		fl_raise_form(form());

Reply via email to