--- /dev/null
+;; @(#) ada-support.el --- Override some standard Emacs functions
+
+;; Copyright (C) 1994-1999 Free Software Foundation, Inc.
+
+;; Author: Emmanuel Briot <briot@gnat.com>
+;; Maintainer: Emmanuel Briot <briot@gnat.com>
+;; Ada Core Technologies's version: $Revision: 1.3 $
+;; Keywords: languages ada xref
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;;; Commentary:
+;;; This file overrides some functions that are defined in Emacs/XEmacs,
+;;; since some of them have known bugs in old versions.
+;;; This is intended as a support package for older Emacs versions, and
+;;; should not be needed for the latest version of Emacs (currently 20.4)
+;;; where these bugs have been fixed
+
+
+
+;;; Some functions have been renamed from one version to the other
+;;; `easy-menu-create-keymaps' has been renamed `easy-menu-create-menu'
+;;; from Emacs >= 20.3
+;;; Do nothing for XEmacs
+
+(unless (or (ada-check-emacs-version 20 3)
+ (not (ada-check-emacs-version 1 1 t)))
+
+ (if (and (not (fboundp 'easy-menu-create-menu))
+ (fboundp 'easy-menu-create-keymaps))
+ (defun easy-menu-create-menu (menu-name menu-items)
+ "Alias redefined in ada-support.el"
+ (easy-menu-create-keymaps menu-name menu-items))))
+
+
+
+;;; A fix for Emacs <= 20.3
+;;; Imenu does not support name overriding in submenus (the first such name
+;;; is always selected, whichever the user actually chose).
+;;; This has been fixed in Emacs 20.4
+;;; Fix was: use assq instead of assoc in the submenus
+
+(unless (ada-check-emacs-version 20 4)
+
+ (defun imenu--mouse-menu (index-alist event &optional title)
+ "Overrides the default imenu--mouse-menu from imenu.el, that has a bug.
+The default one does not know anything about overriding in submenus, since
+it is using assoc instead of assq"
+ (set 'index-alist (imenu--split-submenus index-alist))
+ (let* ((menu (imenu--split-menu index-alist
+ (or title (buffer-name))))
+ position)
+ (set 'menu (imenu--create-keymap-1 (car menu)
+ (if (< 1 (length (cdr menu)))
+ (cdr menu)
+ (cdr (car (cdr menu))))))
+ (set 'position (x-popup-menu event menu))
+ (cond ((eq position nil)
+ position)
+ ;; If one call to x-popup-menu handled the nested menus,
+ ;; find the result by looking down the menus here.
+ ((and (listp position)
+ (numberp (car position))
+ (stringp (nth (1- (length position)) position)))
+ (let ((final menu))
+ (while position
+ (set 'final (assq (car position) final))
+ (set 'position (cdr position)))
+ (or (string= (car final) (car imenu--rescan-item))
+ (nthcdr 3 final))))
+ ;; If x-popup-menu went just one level and found a leaf item,
+ ;; return the INDEX-ALIST element for that.
+ ((and (consp position)
+ (stringp (car position))
+ (null (cdr position)))
+ (or (string= (car position) (car imenu--rescan-item))
+ (assq (car position) index-alist)))
+ ;; If x-popup-menu went just one level
+ ;; and found a non-leaf item (a submenu),
+ ;; recurse to handle the rest.
+ ((listp position)
+ (imenu--mouse-menu position event
+ (if title
+ (concat title imenu-level-separator
+ (car (rassq position index-alist)))
+ (car (rassq position index-alist))))))))
+ )
+
+(provide 'ada-support)
\ No newline at end of file