The attached patch fixes an old-timer:
http://bugzilla.lyx.org/show_bug.cgi?id=223

In the long run, we should implement an item inset; until then, this is the 
best we can do.

Comments?

Jürgen
Index: src/Text3.cpp
===================================================================
--- src/Text3.cpp	(Revision 26834)
+++ src/Text3.cpp	(Arbeitskopie)
@@ -1944,6 +1944,8 @@
 		break;
 	case LFUN_LISTING_INSERT:
 		code = LISTINGS_CODE;
+		// not allowed in description items
+		enable = !inDescriptionItem(cur);
 		break;
 	case LFUN_FOOTNOTE_INSERT:
 		code = FOOT_CODE;
@@ -1957,21 +1959,29 @@
 	case LFUN_FLOAT_INSERT:
 	case LFUN_FLOAT_WIDE_INSERT:
 		code = FLOAT_CODE;
+		// not allowed in description items
+		enable = !inDescriptionItem(cur);
 		break;
 	case LFUN_WRAP_INSERT:
 		code = WRAP_CODE;
+		// not allowed in description items
+		enable = !inDescriptionItem(cur);
 		break;
 	case LFUN_FLOAT_LIST_INSERT:
 		code = FLOAT_LIST_CODE;
 		break;
 	case LFUN_CAPTION_INSERT:
 		code = CAPTION_CODE;
+		// not allowed in description items
+		enable = !inDescriptionItem(cur);
 		break;
 	case LFUN_NOTE_INSERT:
 		code = NOTE_CODE;
-		// in commands (sections etc., only Notes are allowed)
+		// in commands (sections etc.) and description items,
+		// only Notes are allowed
 		enable = (cmd.argument().empty() || cmd.getArg(0) == "Note" ||
-			  !cur.paragraph().layout().isCommand());
+			  (!cur.paragraph().layout().isCommand()
+			   && !inDescriptionItem(cur)));
 		break;
 	case LFUN_FLEX_INSERT: {
 		code = FLEX_CODE;
@@ -2174,6 +2184,11 @@
 		break;
 	}
 
+	case LFUN_NEWPAGE_INSERT:
+		// not allowed in description items
+		enable = !inDescriptionItem(cur);
+		break;
+
 	case LFUN_WORD_DELETE_FORWARD:
 	case LFUN_WORD_DELETE_BACKWARD:
 	case LFUN_LINE_DELETE:
@@ -2222,7 +2237,6 @@
 	case LFUN_DATE_INSERT:
 	case LFUN_SELF_INSERT:
 	case LFUN_LINE_INSERT:
-	case LFUN_NEWPAGE_INSERT:
 	case LFUN_MATH_DISPLAY:
 	case LFUN_MATH_MODE:
 	case LFUN_MATH_MACRO:
@@ -2295,4 +2309,22 @@
 	}
 }
 
+
+// FIXME: an item inset would make things much easier.
+bool Text::inDescriptionItem(Cursor & cur) const
+{
+	Paragraph & par = cur.paragraph();
+	pos_type const pos = cur.pos();
+	pos_type const body_pos = par.beginOfBody();
+
+	if (par.layout().latextype != LATEX_LIST_ENVIRONMENT
+	    && (par.layout().latextype != LATEX_ITEM_ENVIRONMENT
+		|| par.layout().margintype != MARGIN_FIRST_DYNAMIC))
+		return false;
+
+	return (pos < body_pos
+		|| (pos == body_pos
+		    && (pos == 0 || par.getChar(pos - 1) != ' ')));
+}
+
 } // namespace lyx
Index: src/Text.h
===================================================================
--- src/Text.h	(Revision 26834)
+++ src/Text.h	(Arbeitskopie)
@@ -329,6 +329,8 @@
 	bool backspacePos0(Cursor & cur);
 	/// handle the case where bibitems were deleted
 	bool handleBibitems(Cursor & cur);
+	/// are we in a list item (description etc.)?
+	bool inDescriptionItem(Cursor & cur) const;
 	///
 	void charInserted(Cursor & cur);
 	/// set 'number' font property

Reply via email to