diff --git a/7.0.062 b/7.0.062 new file mode 100644 index 0000000..5e9cf9d --- /dev/null +++ b/7.0.062 @@ -0,0 +1,120 @@ +To: vim-dev@vim.org +Subject: Patch 7.0.062 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.0.062 +Problem: Mac: Crash when using the popup menu for spell correction. The + popup menu appears twice when letting go of the right mouse button + early. +Solution: Don't show the popup menu on the release of the right mouse + button. Also check that a menu pointer is actually valid. +Files: src/proto/menu.pro, src/menu.c, src/normal.c, src/term.c + + +*** ../vim-7.0.061/src/proto/menu.pro Fri Mar 24 23:37:59 2006 +--- src/proto/menu.pro Wed Aug 16 20:25:57 2006 +*************** +*** 10,15 **** +--- 10,16 ---- + extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu)); + extern int menu_is_toolbar __ARGS((char_u *name)); + extern int menu_is_separator __ARGS((char_u *name)); ++ extern int check_menu_pointer __ARGS((vimmenu_T *root, vimmenu_T *menu_to_check)); + extern void gui_create_initial_menus __ARGS((vimmenu_T *menu)); + extern void gui_update_menus __ARGS((int modes)); + extern int gui_is_menu_shortcut __ARGS((int key)); +*** ../vim-7.0.061/src/menu.c Wed Aug 16 15:56:58 2006 +--- src/menu.c Wed Aug 16 20:35:09 2006 +*************** +*** 1778,1783 **** +--- 1778,1804 ---- + } + + /* ++ * Check that a pointer appears in the menu tree. Used to protect from using ++ * a menu that was deleted after it was selected but before the event was ++ * handled. ++ * Return OK or FAIL. Used recursively. ++ */ ++ int ++ check_menu_pointer(root, menu_to_check) ++ vimmenu_T *root; ++ vimmenu_T *menu_to_check; ++ { ++ vimmenu_T *p; ++ ++ for (p = root; p != NULL; p = p->next) ++ if (p == menu_to_check ++ || (p->children != NULL ++ && check_menu_pointer(p->children, menu_to_check) == OK)) ++ return OK; ++ return FAIL; ++ } ++ ++ /* + * After we have started the GUI, then we can create any menus that have been + * defined. This is done once here. add_menu_path() may have already been + * called to define these menus, and may be called again. This function calls +*** ../vim-7.0.061/src/normal.c Sat Apr 29 23:53:55 2006 +--- src/normal.c Wed Aug 16 19:54:04 2006 +*************** +*** 2504,2510 **** + * NOTE: Ignore right button down and drag mouse events. + * Windows only shows the popup menu on the button up event. + */ +! #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) + if (!is_click) + return FALSE; + #endif +--- 2504,2511 ---- + * NOTE: Ignore right button down and drag mouse events. + * Windows only shows the popup menu on the button up event. + */ +! #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \ +! || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) + if (!is_click) + return FALSE; + #endif +*** ../vim-7.0.061/src/term.c Wed May 3 23:26:49 2006 +--- src/term.c Wed Aug 16 21:24:21 2006 +*************** +*** 4783,4788 **** +--- 4783,4796 ---- + return -1; + current_menu = (vimmenu_T *)val; + slen += num_bytes; ++ ++ /* The menu may have been deleted right after it was used, check ++ * for that. */ ++ if (check_menu_pointer(root_menu, current_menu) == FAIL) ++ { ++ key_name[0] = KS_EXTRA; ++ key_name[1] = (int)KE_IGNORE; ++ } + } + # endif + # ifdef FEAT_GUI_TABLINE +*** ../vim-7.0.061/src/version.c Wed Aug 16 21:26:19 2006 +--- src/version.c Wed Aug 16 21:40:37 2006 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 62, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +166. You have been on your computer soo long that you didn't realize + you had grandchildren. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///