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 ///