diff options
| author | Joakim Verona | 2012-07-27 02:22:03 +0200 |
|---|---|---|
| committer | Joakim Verona | 2012-07-27 02:22:03 +0200 |
| commit | 5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f (patch) | |
| tree | 5c55f1096a656a9759f0b53a0b5d1a2289bd366f /src/menu.c | |
| parent | 0c5c85cf2b350c965bb1ffa5b2d77c2adebc406b (diff) | |
| parent | 562157c814037dcba58a20cd6908a95992c22283 (diff) | |
| download | emacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.tar.gz emacs-5fb63197843dcae66f2fe0ddd6f4a9d560e9db2f.zip | |
upstream
Diffstat (limited to 'src/menu.c')
| -rw-r--r-- | src/menu.c | 97 |
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 | |||
| 197 | push_submenu_start (void) | 197 | push_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 | |||
| 207 | push_submenu_end (void) | 208 | push_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 | |||
| 219 | push_left_right_boundary (void) | 221 | push_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 | ||