http://bugzilla.lyx.org/show_bug.cgi?id=3799

I took a look at this bug and could not refrain from making some
changes to the toolbar code in the process. 

This patch:

- gets rid of toolbar-toggle-state lfun, and adds a parameter
  "allowauto" to toogle-toolbar instead.

- adds useful status messages when toggling a toolbar.

It is not critical for release, so I can hold it if somebody wants. I
tried to test it and I do not think I changed the behaviour of the
toolbars. The only change is that now the View Toolbar menu will show
either
  [X] maths (auto)
or
  [ ] maths (auto)
depending of the current visibility of the toolbar. I think it is
better anyway.

BTW, there are horrors in Toolbars.cpp like the TurnOnFlag
C-style macro (yuck) but I tried to avoid getting carried away.

JMarc

Index: src/LyXAction.cpp
===================================================================
--- src/LyXAction.cpp	(révision 18688)
+++ src/LyXAction.cpp	(copie de travail)
@@ -364,7 +364,6 @@ void LyXAction::init()
 		{ LFUN_WINDOW_NEW, "window-new", NoBuffer },
 		{ LFUN_WINDOW_CLOSE, "window-close", NoBuffer },
 		{ LFUN_UNICODE_INSERT, "unicode-insert", Noop },
-		{ LFUN_TOOLBAR_TOGGLE_STATE, "", NoBuffer },
 		{ LFUN_TOOLBAR_TOGGLE, "toolbar-toggle", NoBuffer },
 		{ LFUN_NOMENCL_INSERT, "nomencl-insert", Noop },
 		{ LFUN_NOMENCL_PRINT, "nomencl-print", Noop },
Index: src/MenuBackend.cpp
===================================================================
--- src/MenuBackend.cpp	(révision 18688)
+++ src/MenuBackend.cpp	(copie de travail)
@@ -789,9 +789,10 @@ void expandToolbars(Menu & tomenu)
 
 	for (; cit != end; ++cit) {
 		docstring label = _(cit->gui_name);
-		// frontends are not supposed to turn on/off toolbars, if they cannot
-		// update ToolbarBackend::flags. That is to say, ToolbarsBackend::flags
-		// should reflect the true state of toolbars.
+		// frontends are not supposed to turn on/off toolbars,
+		// if they cannot update ToolbarBackend::flags. That
+		// is to say, ToolbarsBackend::flags should reflect
+		// the true state of toolbars.
 		//
 		// menu is displayed as
 		//       on/off review
@@ -801,7 +802,7 @@ void expandToolbars(Menu & tomenu)
 		if (cit->flags & ToolbarInfo::AUTO)
 			label += _(" (auto)");
 		tomenu.add(MenuItem(MenuItem::Command, label,
-				    FuncRequest(LFUN_TOOLBAR_TOGGLE_STATE, cit->name)));
+				    FuncRequest(LFUN_TOOLBAR_TOGGLE, cit->name + " allowauto")));
 	}
 }
 
Index: src/frontends/LyXView.h
===================================================================
--- src/frontends/LyXView.h	(révision 18688)
+++ src/frontends/LyXView.h	(copie de travail)
@@ -156,7 +156,7 @@ public:
 	/// get toolbar state
 	ToolbarInfo::Flags getToolbarState(std::string const & name);
 	/// toggle toolbar state
-	void toggleToolbarState(std::string const & name);
+	void toggleToolbarState(std::string const & name, bool allowauto);
 	/// update the menubar
 	void updateMenubar();
 	/// update the status bar
Index: src/frontends/Toolbars.cpp
===================================================================
--- src/frontends/Toolbars.cpp	(révision 18688)
+++ src/frontends/Toolbars.cpp	(copie de travail)
@@ -187,7 +187,7 @@ ToolbarInfo::Flags Toolbars::getToolbarS
 }
 
 
-void Toolbars::toggleToolbarState(string const & name)
+void Toolbars::toggleToolbarState(string const & name, bool allowauto)
 {
 	ToolbarBackend::Toolbars::iterator cit = toolbarbackend.begin();
 	ToolbarBackend::Toolbars::iterator end = toolbarbackend.end();
@@ -203,8 +203,10 @@ void Toolbars::toggleToolbarState(string
 			} else if (flags & ToolbarInfo::AUTO) {
 				TurnOffFlag(AUTO);
 				TurnOnFlag(OFF);
-			} else if ((flags & ToolbarInfo::MATH) || (flags & ToolbarInfo::TABLE)
-				|| (flags & ToolbarInfo::REVIEW)) {
+			} else if (allowauto 
+				   && ((flags & ToolbarInfo::MATH) 
+				       || (flags & ToolbarInfo::TABLE)
+				       || (flags & ToolbarInfo::REVIEW))) {
 				// for math etc, toggle from on -> auto
 				TurnOffFlag(ON);
 				TurnOnFlag(AUTO);
@@ -213,7 +215,7 @@ void Toolbars::toggleToolbarState(string
 				TurnOffFlag(ON);
 				TurnOnFlag(OFF);
 			}
-			cit->flags = static_cast<lyx::ToolbarInfo::Flags>(flags);
+			cit->flags = static_cast<ToolbarInfo::Flags>(flags);
 			return;
 		}
 	}
Index: src/frontends/LyXView.cpp
===================================================================
--- src/frontends/LyXView.cpp	(révision 18688)
+++ src/frontends/LyXView.cpp	(copie de travail)
@@ -353,7 +353,7 @@ ToolbarInfo::Flags LyXView::getToolbarSt
 }
 
 
-void LyXView::toggleToolbarState(string const & name)
+void LyXView::toggleToolbarState(string const & name, bool allowauto)
 {
 	// it is possible to get current toolbar status like this,...
 	// but I decide to obey the order of ToolbarBackend::flags
@@ -361,7 +361,7 @@ void LyXView::toggleToolbarState(string 
 	// toolbars_->saveToolbarInfo();
 	//
 	// toggle state on/off/auto
-	toolbars_->toggleToolbarState(name);
+	toolbars_->toggleToolbarState(name, allowauto);
 	// update toolbar
 	updateToolbars();
 }
Index: src/frontends/Toolbars.h
===================================================================
--- src/frontends/Toolbars.h	(révision 18688)
+++ src/frontends/Toolbars.h	(copie de travail)
@@ -93,8 +93,10 @@ public:
 	/// get toolbar state (on/off/auto)
 	ToolbarInfo::Flags getToolbarState(std::string const & name);
 
-	/// toggle the state of toolbars (on/off/auto)
-	void toggleToolbarState(std::string const & name);
+	/** toggle the state of toolbars (on/off/auto). Skip "auto"
+	 * when allowauto is false.
+	 */
+	void toggleToolbarState(std::string const & name, bool allowauto);
 
 	/// Update the state of the toolbars.
 	void update(bool in_math, bool in_table, bool review);
Index: src/LyXFunc.cpp
===================================================================
--- src/LyXFunc.cpp	(révision 18688)
+++ src/LyXFunc.cpp	(copie de travail)
@@ -617,19 +617,11 @@ FuncStatus LyXFunc::getStatus(FuncReques
 		enable = LyX::ref().session().bookmarks().size() > 0;
 		break;
 
-	case LFUN_TOOLBAR_TOGGLE_STATE: {
-		ToolbarInfo::Flags flags = lyx_view_->getToolbarState(to_utf8(cmd.argument()));
-		if (!(flags & ToolbarInfo::AUTO))
-			flag.setOnOff(flags & ToolbarInfo::ON);
-		break;
-	}
-
 	case LFUN_TOOLBAR_TOGGLE: {
 		bool const current = lyx_view_->getToolbars().visible(cmd.getArg(0));
 		flag.setOnOff(current);
 		break;
 	}
-	
 	case LFUN_WINDOW_CLOSE: {
 		enable = (theApp()->gui().viewIds().size() > 1);
 		break;
@@ -1763,15 +1755,23 @@ void LyXFunc::dispatch(FuncRequest const
 			LyX::ref().session().bookmarks().clear();
 			break;
 
-		case LFUN_TOOLBAR_TOGGLE_STATE:
-			lyx_view_->toggleToolbarState(argument);
-			break;
-
 		case LFUN_TOOLBAR_TOGGLE: {
 			BOOST_ASSERT(lyx_view_);
-			string const name = to_utf8(cmd.argument());
-			bool const current = lyx_view_->getToolbars().visible(name);
-			lyx_view_->getToolbars().display(name, !current);
+			string const name = cmd.getArg(0);
+			bool const allowauto = cmd.getArg(1) == "allowauto";
+			lyx_view_->toggleToolbarState(name, allowauto);
+			ToolbarInfo::Flags const flags = 
+				lyx_view_->getToolbarState(name);
+			docstring state;
+			if (flags & ToolbarInfo::ON)
+				state = _("on");
+			else if (flags & ToolbarInfo::OFF)
+				state = _("off");
+			else if (flags & ToolbarInfo::AUTO)
+				state = _("auto");
+
+			setMessage(bformat(_("Toolbar \"%1$s\" state set to %2$s"), 
+						   from_ascii(name), state));
 			break;
 		}
 
Index: src/lfuns.h
===================================================================
--- src/lfuns.h	(révision 18688)
+++ src/lfuns.h	(copie de travail)
@@ -371,15 +371,13 @@ enum kb_action {
 	LFUN_WINDOW_CLOSE,               // Abdel 20061023
 	LFUN_UNICODE_INSERT,             // Lgb 20061022
 	LFUN_BOOKMARK_CLEAR,             // bpeng 20061031
-	LFUN_TOOLBAR_TOGGLE_STATE,       // bpeng 20061101
 	LFUN_NOMENCL_INSERT,             // Ugras
-	// 285
 	LFUN_NOMENCL_PRINT,              // Ugras
+	// 285
 	LFUN_CLEARPAGE_INSERT,           // Ugras 20061125
 	LFUN_CLEARDOUBLEPAGE_INSERT,     // Ugras 20061125
 	LFUN_LISTING_INSERT,             // Herbert 20011110, bpeng 20070502
 	LFUN_TOOLBAR_TOGGLE,             // Edwin 20070521
-	//290
 
 	LFUN_LASTACTION                  // end of the table
 };

Reply via email to