1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

[ Merge Gnome tool bars from Gnus trunk ]

* message.el (message-tool-bar-zap-list, message-tool-bar)
(message-tool-bar-gnome, message-tool-bar-retro): New variables.
(message-tool-bar-local-item-from-menu): Remove.
(message-tool-bar-map): Replace by `message-make-tool-bar'.
(message-make-tool-bar): New function.
(message-mode): Use `message-make-tool-bar'.

* gnus-sum.el (gnus-summary-tool-bar)
(gnus-summary-tool-bar-gnome, gnus-summary-tool-bar-retro)
(gnus-summary-tool-bar-zap-list): New variables.
(gnus-summary-make-tool-bar): Complete rewrite using
`gmm-tool-bar-from-list'.

* gnus-group.el (gnus-group-tool-bar, gnus-group-tool-bar-gnome)
(gnus-group-tool-bar-retro, gnus-group-tool-bar-zap-list): New
variables.
(gnus-group-make-tool-bar): Complete rewrite using
`gmm-tool-bar-from-list'.
(gnus-group-tool-bar-update): New function.

* gmm-utils.el: New file.
This commit is contained in:
Reiner Steib 2006-04-17 18:26:22 +00:00
parent 43c50d22bc
commit 18c06a99aa
5 changed files with 849 additions and 114 deletions

View file

@ -39,6 +39,7 @@
(require 'gnus-range)
(require 'gnus-win)
(require 'gnus-undo)
(require 'gmm-utils)
(require 'time-date)
(require 'gnus-ems)
@ -979,36 +980,135 @@ simple manner.")
(gnus-run-hooks 'gnus-group-menu-hook)))
(defvar gnus-group-toolbar-map nil)
;; Emacs 21 tool bar. Should be no-op otherwise.
(defun gnus-group-make-tool-bar ()
(if (and
(condition-case nil (require 'tool-bar) (error nil))
(fboundp 'tool-bar-add-item-from-menu)
(default-value 'tool-bar-mode)
(not gnus-group-toolbar-map))
(setq gnus-group-toolbar-map
(let ((tool-bar-map (make-sparse-keymap))
(load-path (mm-image-load-path)))
(tool-bar-add-item-from-menu
'gnus-group-get-new-news "get-news" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-get-new-news-this-group "gnntg" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-catchup-current "catchup" gnus-group-mode-map)
(tool-bar-add-item-from-menu
'gnus-group-describe-group "describe-group" gnus-group-mode-map)
(tool-bar-add-item "subscribe" 'gnus-group-subscribe 'subscribe
:help "Subscribe to the current group")
(tool-bar-add-item "unsubscribe" 'gnus-group-unsubscribe
'unsubscribe
:help "Unsubscribe from the current group")
(tool-bar-add-item-from-menu
'gnus-group-exit "exit-gnus" gnus-group-mode-map)
tool-bar-map)))
(if gnus-group-toolbar-map
(set (make-local-variable 'tool-bar-map) gnus-group-toolbar-map)))
(defvar gnus-group-tool-bar-map nil)
(defun gnus-group-tool-bar-update (&optional symbol value)
"Update group buffer toolbar.
Setter function for custom variables."
(when symbol
(set-default symbol value))
;; (setq-default gnus-group-tool-bar-map nil)
;; (use-local-map gnus-group-mode-map)
(when (gnus-alive-p)
(with-current-buffer gnus-group-buffer
(gnus-group-make-tool-bar t))))
(defcustom gnus-group-tool-bar (if (eq gmm-tool-bar-style 'gnome)
'gnus-group-tool-bar-gnome
'gnus-group-tool-bar-retro)
"Specifies the Gnus group tool bar.
It can be either a list or a symbol refering to a list. See
`gmm-tool-bar-from-list' for the format of the list. The
default key map is `gnus-group-mode-map'.
Pre-defined symbols include `gnus-group-tool-bar-gnome' and
`gnus-group-tool-bar-retro'."
:type '(choice (const :tag "GNOME style" gnus-group-tool-bar-gnome)
(const :tag "Retro look" gnus-group-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
:version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-gnome
'((gnus-group-post-news "mail/compose")
;; Some useful agent icons? I don't use the agent so agent users should
;; suggest useful commands:
(gnus-agent-toggle-plugged "connect" t
:visible (and gnus-agent (not gnus-plugged)))
(gnus-agent-toggle-plugged "disconnect" t
:visible (and gnus-agent gnus-plugged))
;; FIXME: gnus-agent-toggle-plugged (in gnus-agent-group-make-menu-bar)
;; should have a better help text.
(gnus-group-send-queue "mail/outbox" t
:visible (and gnus-agent gnus-plugged)
:help "Send articles from the queue group")
(gnus-group-get-new-news "mail/inbox" nil
:visible (or (not gnus-agent)
gnus-plugged))
;; FIXME: gnus-*-read-group should have a better help text.
(gnus-topic-read-group "open" nil
:visible (and (boundp 'gnus-topic-mode)
gnus-topic-mode))
(gnus-group-read-group "open" nil
:visible (not (and (boundp 'gnus-topic-mode)
gnus-topic-mode)))
;; (gnus-group-find-new-groups "???" nil)
(gnus-group-save-newsrc "save")
(gnus-group-describe-group "describe")
(gnus-group-unsubscribe-current-group "gnus/toggle-subscription")
(gnus-group-prev-unread-group "left-arrow")
(gnus-group-next-unread-group "right-arrow")
(gnus-group-exit "exit")
(gmm-customize-mode "preferences" t :help "Edit mode preferences")
(gnus-info-find-node "help"))
"List of functions for the group tool bar (GNOME style).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-retro
'((gnus-group-get-new-news "gnus/get-news")
(gnus-group-get-new-news-this-group "gnus/gnntg")
(gnus-group-catchup-current "gnus/catchup")
(gnus-group-describe-group "gnus/describe-group")
(gnus-group-subscribe "gnus/subscribe" t
:help "Subscribe to the current group")
(gnus-group-unsubscribe "gnus/unsubscribe" t
:help "Unsubscribe from the current group")
(gnus-group-exit "gnus/exit-gnus" gnus-group-mode-map))
"List of functions for the group tool bar (retro look).
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
:version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defcustom gnus-group-tool-bar-zap-list t
"List of icon items from the global tool bar.
These items are not displayed in the Gnus group mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
:version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
(defvar image-load-path)
(defun gnus-group-make-tool-bar (&optional force)
"Make a group mode tool bar from `gnus-group-tool-bar'.
When FORCE, rebuild the tool bar."
(when (and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)
tool-bar-mode
;; The Gnus 5.10.6 code checked (default-value 'tool-bar-mode).
;; Why? --rsteib
(or (not gnus-group-tool-bar-map) force))
(let* ((load-path
(gmm-image-load-path-for-library "gnus"
"gnus/toggle-subscription.xpm"
nil t))
(image-load-path (cons (car load-path)
(when (boundp 'image-load-path)
image-load-path)))
(map (gmm-tool-bar-from-list gnus-group-tool-bar
gnus-group-tool-bar-zap-list
'gnus-group-mode-map)))
(if map
(set (make-local-variable 'tool-bar-map) map))))
gnus-group-tool-bar-map)
(defun gnus-group-mode ()
"Major mode for reading news.
@ -1379,6 +1479,18 @@ if it is a string, only list groups matching REGEXP."
(gnus-range-difference (list active) (gnus-info-read info))
seen))))))
;; Moving through the Group buffer (in topic mode) e.g. with C-n doesn't
;; update the state (enabled/disabled) of the icon
;; `gnus-group-describe-group'. After `C-l' the state is correct. See the
;; following report on emacs-devel
;; <http://thread.gmane.org/v9acdmrcse.fsf@marauder.physik.uni-ulm.de>:
;; From: Reiner Steib
;; Subject: tool bar icons not updated according to :active condition
;; Newsgroups: gmane.emacs.devel
;; Date: Mon, 23 Jan 2006 19:59:13 +0100
;; Message-ID: <v9acdmrcse.fsf@marauder.physik.uni-ulm.de>
(defcustom gnus-group-update-tool-bar
(and (not (featurep 'xemacs))
(boundp 'tool-bar-mode)