;;; tool-bar.el --- setting up the tool bar
;;
;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
;;
;; Author: Dave Love <fx@gnu.org>
;; Keywords: mouse frames
:group 'frames
(if tool-bar-mode
(progn
- (dolist (frame (frame-list))
- (if (display-graphic-p frame)
- (set-frame-parameter frame 'tool-bar-lines 1)))
+ ;; Make one tool-bar-line for any - including non-graphical -
+ ;; terminal, see Bug#1754. If this causes problems, we should
+ ;; handle the problem in `modify-frame-parameters' or do not
+ ;; call `modify-all-frames-parameters' when toggling the tool
+ ;; bar off either.
+ (modify-all-frames-parameters (list (cons 'tool-bar-lines 1)))
(if (= 1 (length (default-value 'tool-bar-map))) ; not yet setup
(tool-bar-setup)))
(modify-all-frames-parameters (list (cons 'tool-bar-lines 0)))))
(declare-function image-mask-p "image.c" (spec &optional frame))
+(defconst tool-bar-keymap-cache (make-hash-table :weakness t :test 'equal))
+
(defun tool-bar-make-keymap (&optional ignore)
"Generate an actual keymap from `tool-bar-map'.
Its main job is to figure out which images to use based on the display's
color capability and based on the available image libraries."
+ (let ((key (cons (frame-terminal) tool-bar-map)))
+ (or (gethash key tool-bar-keymap-cache)
+ (puthash key (tool-bar-make-keymap-1) tool-bar-keymap-cache))))
+
+(defun tool-bar-make-keymap-1 ()
+ "Generate an actual keymap from `tool-bar-map', without caching."
(mapcar (lambda (bind)
(let (image-exp plist)
(when (and (eq (car-safe (cdr-safe bind)) 'menu-item)
bind))
tool-bar-map))
-(defconst tool-bar-find-image-cache (make-hash-table :weakness t :test 'equal))
-
-(defun tool-bar-find-image (specs)
- "Like `find-image' but with caching."
- (or (gethash specs tool-bar-find-image-cache)
- (puthash specs (find-image specs) tool-bar-find-image-cache)))
-
;;;###autoload
(defun tool-bar-add-item (icon def key &rest props)
"Add an item to the tool bar.
(concat icon ".pbm")) colors))
(xbm-spec (append (list :type 'xbm :file
(concat icon ".xbm")) colors))
- (image-exp `(tool-bar-find-image
+ (image-exp `(find-image
(cond ((not (display-color-p))
',(list pbm-spec xbm-spec xpm-lo-spec xpm-spec))
((< (display-color-cells) 256)
(concat icon ".pbm")) colors))
(xbm-spec (append (list :type 'xbm :file
(concat icon ".xbm")) colors))
- (image-exp `(tool-bar-find-image
+ (image-exp `(find-image
(cond ((not (display-color-p))
',(list pbm-spec xbm-spec xpm-lo-spec xpm-spec))
((< (display-color-cells) 256)