From 0301268e2ba6a1ce8ddf77473e74d1aea856427b Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Wed, 2 Mar 1994 22:51:20 +0000 Subject: [PATCH] (menu_bar_items): When moving an item to the end, shift all the following ones forward one slot. --- src/keyboard.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index fc9ce849e00..1ea938c654f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3558,17 +3558,20 @@ menu_bar_items (old) for (i = 0; i < end; i += 3) if (EQ (XCONS (tail)->car, XVECTOR (menu_bar_items_vector)->contents[i])) { - Lisp_Object tem; - end -= 3; -#define EXCH(a, b) tem = a, a = b, b = tem - EXCH (XVECTOR (menu_bar_items_vector)->contents[i], - XVECTOR (menu_bar_items_vector)->contents[end]); - EXCH (XVECTOR (menu_bar_items_vector)->contents[i + 1], - XVECTOR (menu_bar_items_vector)->contents[end + 1]); - EXCH (XVECTOR (menu_bar_items_vector)->contents[i + 2], - XVECTOR (menu_bar_items_vector)->contents[end + 2]); -#undef EXCH - i -= 3; + Lisp_Object tem0, tem1, tem2; + /* Move the item at index I to the end, + shifting all the others forward. */ + tem0 = XVECTOR (menu_bar_items_vector)->contents[i + 0]; + tem1 = XVECTOR (menu_bar_items_vector)->contents[i + 1]; + tem2 = XVECTOR (menu_bar_items_vector)->contents[i + 2]; + if (end > i + 3) + bcopy (&XVECTOR (menu_bar_items_vector)->contents[i + 3], + &XVECTOR (menu_bar_items_vector)->contents[i], + (end - i - 3) * sizeof (Lisp_Object)); + XVECTOR (menu_bar_items_vector)->contents[end - 3] = tem0; + XVECTOR (menu_bar_items_vector)->contents[end - 2] = tem1; + XVECTOR (menu_bar_items_vector)->contents[end - 1] = tem2; + break; } } -- 2.39.5