Index: lisp/gutter-items.el =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/lisp/Attic/gutter-items.el,v retrieving revision 1.1.2.36 diff -u -r1.1.2.36 gutter-items.el --- lisp/gutter-items.el 2000/03/17 17:34:45 1.1.2.36 +++ lisp/gutter-items.el 2000/03/20 17:00:23 @@ -305,7 +305,7 @@ ;;; Finally the list is sorted to gutter display order, and the tab data ;;; structure is created and returned. ;;; #### Docstring isn't very well expressed. -(defun buffers-tab-items (&optional in-deletion frame) +(defun buffers-tab-items (&optional in-deletion frame force-selection) "This is the tab filter for the top-level buffers \"Buffers\" tab. It dynamically creates a list of buffers to use as the contents of the tab. Only the most-recently-used few buffers will be listed on the tab, for @@ -315,6 +315,12 @@ (save-match-data (let* ((buffers (delete-if buffers-tab-omit-function (buffer-list frame))) (first-buf (car buffers))) + ;; maybe force the selected window + (when (and force-selection + (not in-deletion) + (not (eq first-buf (window-buffer (selected-window frame))))) + (setq buffers (cons (window-buffer (selected-window frame)) + (delq first-buf buffers)))) ;; if we're in deletion ignore the current buffer (when in-deletion (setq buffers (delq (current-buffer) buffers)) @@ -354,7 +360,7 @@ (if (or (eq gutter-buffers-tab-orientation 'top) (eq gutter-buffers-tab-orientation 'bottom)) '(gutter-pixel-width) '(gutter-pixel-height)) - :properties (list :items (buffers-tab-items)))))) + :properties (list :items (buffers-tab-items nil nil t)))))) ;; Nuke all existing tabs (remove-gutter-element top-gutter 'buffers-tab) @@ -391,7 +397,7 @@ ))) (console-type-list)))) -(defun update-tab-in-gutter (&optional frame-or-buffer) +(defun update-tab-in-gutter (&optional frame-or-buffer force-selection) "Update the tab control in the gutter area." (let ((locale (if (framep frame-or-buffer) frame-or-buffer))) ;; dedicated frames don't get tabs @@ -409,7 +415,7 @@ (last-nonminibuf-window frame-or-buffer))))) (set-image-instance-property inst :items (buffers-tab-items - nil locale)))))))) + nil locale force-selection)))))))) (defun remove-buffer-from-gutter-tab () "Remove the current buffer from the tab control in the gutter area." @@ -423,17 +429,18 @@ (get-buffer-create "*scratch*"))))) (set-image-instance-property inst :items buffers)))) -(defun update-tab-hook (&optional arg) - (when gutter-buffers-tab (update-tab-in-gutter arg))) - +;; A myriad of different update hooks all doing slightly different things (add-hook 'kill-buffer-hook 'remove-buffer-from-gutter-tab) -(add-hook 'create-frame-hook 'update-tab-hook) +(add-hook 'create-frame-hook + #'(lambda (frame) + (when gutter-buffers-tab (update-tab-in-gutter frame t)))) (add-hook 'record-buffer-hook 'update-tab-in-gutter) -(add-hook 'default-gutter-position-changed 'update-tab-hook) +(add-hook 'default-gutter-position-changed + #'(lambda (arg) + (when gutter-buffers-tab (update-tab-in-gutter arg)))) (add-hook 'gutter-element-visibility-changed-hook #'(lambda (prop visible-p) - (when (and (eq prop 'buffers-tab) - visible-p) + (when (and (eq prop 'buffers-tab) visible-p) (update-tab-in-gutter)))) ;; Index: src/glyphs.c =================================================================== RCS file: /usr/CVSroot/XEmacs/xemacs/src/glyphs.c,v retrieving revision 1.23.2.58 diff -u -r1.23.2.58 glyphs.c --- src/glyphs.c 2000/03/19 14:14:45 1.23.2.58 +++ src/glyphs.c 2000/03/20 17:00:34 @@ -2791,7 +2791,9 @@ if (!WINDOWP (domain)) signal_simple_error ("Can't instantiate text or subwindow outside a window", instantiator); - else if (MINI_WINDOW_P (XWINDOW (domain))) + else if ((dest_mask & (IMAGE_SUBWINDOW_MASK + | IMAGE_WIDGET_MASK)) + && MINI_WINDOW_P (XWINDOW (domain))) domain = Fnext_window (domain, Qnil, Qnil, Qnil); }