aboutsummaryrefslogtreecommitdiffstats
path: root/src/menu.c
diff options
context:
space:
mode:
authorJoakim Verona2012-07-27 02:22:03 +0200
committerJoakim Verona2012-07-27 02:22:03 +0200
commit5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f (patch)
tree5c55f1096a656a9759f0b53a0b5d1a2289bd366f /src/menu.c
parent0c5c85cf2b350c965bb1ffa5b2d77c2adebc406b (diff)
parent562157c814037dcba58a20cd6908a95992c22283 (diff)
downloademacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.tar.gz
emacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.zip
upstream
Diffstat (limited to 'src/menu.c')
-rw-r--r--src/menu.c97
1 files changed, 52 insertions, 45 deletions
diff --git a/src/menu.c b/src/menu.c
index 9ccfffd768c..3b8ebb65d2c 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -129,7 +129,7 @@ discard_menu_items (void)
129 menu_items = Qnil; 129 menu_items = Qnil;
130 menu_items_allocated = 0; 130 menu_items_allocated = 0;
131 } 131 }
132 xassert (NILP (menu_items_inuse)); 132 eassert (NILP (menu_items_inuse));
133} 133}
134 134
135#ifdef HAVE_NS 135#ifdef HAVE_NS
@@ -197,7 +197,8 @@ static void
197push_submenu_start (void) 197push_submenu_start (void)
198{ 198{
199 ensure_menu_items (1); 199 ensure_menu_items (1);
200 XVECTOR (menu_items)->contents[menu_items_used++] = Qnil; 200 ASET (menu_items, menu_items_used, Qnil);
201 menu_items_used++;
201 menu_items_submenu_depth++; 202 menu_items_submenu_depth++;
202} 203}
203 204
@@ -207,7 +208,8 @@ static void
207push_submenu_end (void) 208push_submenu_end (void)
208{ 209{
209 ensure_menu_items (1); 210 ensure_menu_items (1);
210 XVECTOR (menu_items)->contents[menu_items_used++] = Qlambda; 211 ASET (menu_items, menu_items_used, Qlambda);
212 menu_items_used++;
211 menu_items_submenu_depth--; 213 menu_items_submenu_depth--;
212} 214}
213 215
@@ -219,7 +221,8 @@ static void
219push_left_right_boundary (void) 221push_left_right_boundary (void)
220{ 222{
221 ensure_menu_items (1); 223 ensure_menu_items (1);
222 XVECTOR (menu_items)->contents[menu_items_used++] = Qquote; 224 ASET (menu_items, menu_items_used, Qquote);
225 menu_items_used++;
223} 226}
224 227
225/* Start a new menu pane in menu_items. 228/* Start a new menu pane in menu_items.
@@ -231,9 +234,12 @@ push_menu_pane (Lisp_Object name, Lisp_Object prefix_vec)
231 ensure_menu_items (MENU_ITEMS_PANE_LENGTH); 234 ensure_menu_items (MENU_ITEMS_PANE_LENGTH);
232 if (menu_items_submenu_depth == 0) 235 if (menu_items_submenu_depth == 0)
233 menu_items_n_panes++; 236 menu_items_n_panes++;
234 XVECTOR (menu_items)->contents[menu_items_used++] = Qt; 237 ASET (menu_items, menu_items_used, Qt);
235 XVECTOR (menu_items)->contents[menu_items_used++] = name; 238 menu_items_used++;
236 XVECTOR (menu_items)->contents[menu_items_used++] = prefix_vec; 239 ASET (menu_items, menu_items_used, name);
240 menu_items_used++;
241 ASET (menu_items, menu_items_used, prefix_vec);
242 menu_items_used++;
237} 243}
238 244
239/* Push one menu item into the current pane. NAME is the string to 245/* Push one menu item into the current pane. NAME is the string to
@@ -343,10 +349,10 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
343 if (!res) 349 if (!res)
344 return; /* Not a menu item. */ 350 return; /* Not a menu item. */
345 351
346 map = XVECTOR (item_properties)->contents[ITEM_PROPERTY_MAP]; 352 map = AREF (item_properties, ITEM_PROPERTY_MAP);
347 353
348 enabled = XVECTOR (item_properties)->contents[ITEM_PROPERTY_ENABLE]; 354 enabled = AREF (item_properties, ITEM_PROPERTY_ENABLE);
349 item_string = XVECTOR (item_properties)->contents[ITEM_PROPERTY_NAME]; 355 item_string = AREF (item_properties, ITEM_PROPERTY_NAME);
350 356
351 if (!NILP (map) && SREF (item_string, 0) == '@') 357 if (!NILP (map) && SREF (item_string, 0) == '@')
352 { 358 {
@@ -363,11 +369,11 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
363 front of them. */ 369 front of them. */
364 { 370 {
365 Lisp_Object prefix = Qnil; 371 Lisp_Object prefix = Qnil;
366 Lisp_Object type = XVECTOR (item_properties)->contents[ITEM_PROPERTY_TYPE]; 372 Lisp_Object type = AREF (item_properties, ITEM_PROPERTY_TYPE);
367 if (!NILP (type)) 373 if (!NILP (type))
368 { 374 {
369 Lisp_Object selected 375 Lisp_Object selected
370 = XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED]; 376 = AREF (item_properties, ITEM_PROPERTY_SELECTED);
371 377
372 if (skp->notbuttons) 378 if (skp->notbuttons)
373 /* The first button. Line up previous items in this menu. */ 379 /* The first button. Line up previous items in this menu. */
@@ -378,7 +384,7 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
378 while (idx < menu_items_used) 384 while (idx < menu_items_used)
379 { 385 {
380 tem 386 tem
381 = XVECTOR (menu_items)->contents[idx + MENU_ITEMS_ITEM_NAME]; 387 = AREF (menu_items, idx + MENU_ITEMS_ITEM_NAME);
382 if (NILP (tem)) 388 if (NILP (tem))
383 { 389 {
384 idx++; 390 idx++;
@@ -397,8 +403,8 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
397 { 403 {
398 if (!submenu && SREF (tem, 0) != '\0' 404 if (!submenu && SREF (tem, 0) != '\0'
399 && SREF (tem, 0) != '-') 405 && SREF (tem, 0) != '-')
400 XVECTOR (menu_items)->contents[idx + MENU_ITEMS_ITEM_NAME] 406 ASET (menu_items, idx + MENU_ITEMS_ITEM_NAME,
401 = concat2 (build_string (" "), tem); 407 concat2 (build_string (" "), tem));
402 idx += MENU_ITEMS_ITEM_LENGTH; 408 idx += MENU_ITEMS_ITEM_LENGTH;
403 } 409 }
404 } 410 }
@@ -430,11 +436,11 @@ single_menu_item (Lisp_Object key, Lisp_Object item, Lisp_Object dummy, void *sk
430#endif /* HAVE_X_WINDOWS || MSDOS */ 436#endif /* HAVE_X_WINDOWS || MSDOS */
431 437
432 push_menu_item (item_string, enabled, key, 438 push_menu_item (item_string, enabled, key,
433 XVECTOR (item_properties)->contents[ITEM_PROPERTY_DEF], 439 AREF (item_properties, ITEM_PROPERTY_DEF),
434 XVECTOR (item_properties)->contents[ITEM_PROPERTY_KEYEQ], 440 AREF (item_properties, ITEM_PROPERTY_KEYEQ),
435 XVECTOR (item_properties)->contents[ITEM_PROPERTY_TYPE], 441 AREF (item_properties, ITEM_PROPERTY_TYPE),
436 XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED], 442 AREF (item_properties, ITEM_PROPERTY_SELECTED),
437 XVECTOR (item_properties)->contents[ITEM_PROPERTY_HELP]); 443 AREF (item_properties, ITEM_PROPERTY_HELP));
438 444
439#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI) 445#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI)
440 /* Display a submenu using the toolkit. */ 446 /* Display a submenu using the toolkit. */
@@ -626,8 +632,7 @@ digest_single_submenu (int start, int end, int top_level_items)
626 widget_value **submenu_stack; 632 widget_value **submenu_stack;
627 int panes_seen = 0; 633 int panes_seen = 0;
628 634
629 submenu_stack 635 submenu_stack = alloca (menu_items_used * sizeof *submenu_stack);
630 = (widget_value **) alloca (menu_items_used * sizeof (widget_value *));
631 wv = xmalloc_widget_value (); 636 wv = xmalloc_widget_value ();
632 wv->name = "menu"; 637 wv->name = "menu";
633 wv->value = 0; 638 wv->value = 0;
@@ -645,27 +650,27 @@ digest_single_submenu (int start, int end, int top_level_items)
645 i = start; 650 i = start;
646 while (i < end) 651 while (i < end)
647 { 652 {
648 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) 653 if (EQ (AREF (menu_items, i), Qnil))
649 { 654 {
650 submenu_stack[submenu_depth++] = save_wv; 655 submenu_stack[submenu_depth++] = save_wv;
651 save_wv = prev_wv; 656 save_wv = prev_wv;
652 prev_wv = 0; 657 prev_wv = 0;
653 i++; 658 i++;
654 } 659 }
655 else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda)) 660 else if (EQ (AREF (menu_items, i), Qlambda))
656 { 661 {
657 prev_wv = save_wv; 662 prev_wv = save_wv;
658 save_wv = submenu_stack[--submenu_depth]; 663 save_wv = submenu_stack[--submenu_depth];
659 i++; 664 i++;
660 } 665 }
661 else if (EQ (XVECTOR (menu_items)->contents[i], Qt) 666 else if (EQ (AREF (menu_items, i), Qt)
662 && submenu_depth != 0) 667 && submenu_depth != 0)
663 i += MENU_ITEMS_PANE_LENGTH; 668 i += MENU_ITEMS_PANE_LENGTH;
664 /* Ignore a nil in the item list. 669 /* Ignore a nil in the item list.
665 It's meaningful only for dialog boxes. */ 670 It's meaningful only for dialog boxes. */
666 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) 671 else if (EQ (AREF (menu_items, i), Qquote))
667 i += 1; 672 i += 1;
668 else if (EQ (XVECTOR (menu_items)->contents[i], Qt)) 673 else if (EQ (AREF (menu_items, i), Qt))
669 { 674 {
670 /* Create a new pane. */ 675 /* Create a new pane. */
671 Lisp_Object pane_name; 676 Lisp_Object pane_name;
@@ -673,7 +678,7 @@ digest_single_submenu (int start, int end, int top_level_items)
673 678
674 panes_seen++; 679 panes_seen++;
675 680
676 pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME]; 681 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME);
677 682
678#ifdef HAVE_NTGUI 683#ifdef HAVE_NTGUI
679 if (STRINGP (pane_name)) 684 if (STRINGP (pane_name))
@@ -887,31 +892,31 @@ find_and_call_menu_selection (FRAME_PTR f, int menu_bar_items_used, Lisp_Object
887 int i; 892 int i;
888 893
889 entry = Qnil; 894 entry = Qnil;
890 subprefix_stack = (Lisp_Object *) alloca (menu_bar_items_used * sizeof (Lisp_Object)); 895 subprefix_stack = alloca (menu_bar_items_used * sizeof *subprefix_stack);
891 prefix = Qnil; 896 prefix = Qnil;
892 i = 0; 897 i = 0;
893 898
894 while (i < menu_bar_items_used) 899 while (i < menu_bar_items_used)
895 { 900 {
896 if (EQ (XVECTOR (vector)->contents[i], Qnil)) 901 if (EQ (AREF (vector, i), Qnil))
897 { 902 {
898 subprefix_stack[submenu_depth++] = prefix; 903 subprefix_stack[submenu_depth++] = prefix;
899 prefix = entry; 904 prefix = entry;
900 i++; 905 i++;
901 } 906 }
902 else if (EQ (XVECTOR (vector)->contents[i], Qlambda)) 907 else if (EQ (AREF (vector, i), Qlambda))
903 { 908 {
904 prefix = subprefix_stack[--submenu_depth]; 909 prefix = subprefix_stack[--submenu_depth];
905 i++; 910 i++;
906 } 911 }
907 else if (EQ (XVECTOR (vector)->contents[i], Qt)) 912 else if (EQ (AREF (vector, i), Qt))
908 { 913 {
909 prefix = XVECTOR (vector)->contents[i + MENU_ITEMS_PANE_PREFIX]; 914 prefix = AREF (vector, i + MENU_ITEMS_PANE_PREFIX);
910 i += MENU_ITEMS_PANE_LENGTH; 915 i += MENU_ITEMS_PANE_LENGTH;
911 } 916 }
912 else 917 else
913 { 918 {
914 entry = XVECTOR (vector)->contents[i + MENU_ITEMS_ITEM_VALUE]; 919 entry = AREF (vector, i + MENU_ITEMS_ITEM_VALUE);
915 /* Treat the pointer as an integer. There's no problem 920 /* Treat the pointer as an integer. There's no problem
916 as long as pointers have enough bits to hold small integers. */ 921 as long as pointers have enough bits to hold small integers. */
917 if ((intptr_t) client_data == i) 922 if ((intptr_t) client_data == i)
@@ -976,32 +981,32 @@ find_and_return_menu_selection (FRAME_PTR f, int keymaps, void *client_data)
976 981
977 while (i < menu_items_used) 982 while (i < menu_items_used)
978 { 983 {
979 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) 984 if (EQ (AREF (menu_items, i), Qnil))
980 { 985 {
981 subprefix_stack[submenu_depth++] = prefix; 986 subprefix_stack[submenu_depth++] = prefix;
982 prefix = entry; 987 prefix = entry;
983 i++; 988 i++;
984 } 989 }
985 else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda)) 990 else if (EQ (AREF (menu_items, i), Qlambda))
986 { 991 {
987 prefix = subprefix_stack[--submenu_depth]; 992 prefix = subprefix_stack[--submenu_depth];
988 i++; 993 i++;
989 } 994 }
990 else if (EQ (XVECTOR (menu_items)->contents[i], Qt)) 995 else if (EQ (AREF (menu_items, i), Qt))
991 { 996 {
992 prefix 997 prefix
993 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; 998 = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
994 i += MENU_ITEMS_PANE_LENGTH; 999 i += MENU_ITEMS_PANE_LENGTH;
995 } 1000 }
996 /* Ignore a nil in the item list. 1001 /* Ignore a nil in the item list.
997 It's meaningful only for dialog boxes. */ 1002 It's meaningful only for dialog boxes. */
998 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) 1003 else if (EQ (AREF (menu_items, i), Qquote))
999 i += 1; 1004 i += 1;
1000 else 1005 else
1001 { 1006 {
1002 entry 1007 entry
1003 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE]; 1008 = AREF (menu_items, i + MENU_ITEMS_ITEM_VALUE);
1004 if (&XVECTOR (menu_items)->contents[i] == client_data) 1009 if (&AREF (menu_items, i) == client_data)
1005 { 1010 {
1006 if (keymaps != 0) 1011 if (keymaps != 0)
1007 { 1012 {
@@ -1192,14 +1197,16 @@ no quit occurs and `x-popup-menu' returns nil. */)
1192 but I don't want to make one now. */ 1197 but I don't want to make one now. */
1193 CHECK_WINDOW (window); 1198 CHECK_WINDOW (window);
1194 1199
1195 CHECK_RANGED_INTEGER ((xpos < INT_MIN - MOST_NEGATIVE_FIXNUM 1200 CHECK_RANGED_INTEGER (x,
1201 (xpos < INT_MIN - MOST_NEGATIVE_FIXNUM
1196 ? (EMACS_INT) INT_MIN - xpos 1202 ? (EMACS_INT) INT_MIN - xpos
1197 : MOST_NEGATIVE_FIXNUM), 1203 : MOST_NEGATIVE_FIXNUM),
1198 x, INT_MAX - xpos); 1204 INT_MAX - xpos);
1199 CHECK_RANGED_INTEGER ((ypos < INT_MIN - MOST_NEGATIVE_FIXNUM 1205 CHECK_RANGED_INTEGER (y,
1206 (ypos < INT_MIN - MOST_NEGATIVE_FIXNUM
1200 ? (EMACS_INT) INT_MIN - ypos 1207 ? (EMACS_INT) INT_MIN - ypos
1201 : MOST_NEGATIVE_FIXNUM), 1208 : MOST_NEGATIVE_FIXNUM),
1202 y, INT_MAX - ypos); 1209 INT_MAX - ypos);
1203 xpos += XINT (x); 1210 xpos += XINT (x);
1204 ypos += XINT (y); 1211 ypos += XINT (y);
1205 1212