Subject: 23.0.90; Vertical window border on OS X
From: Aaron Ecay <[email-masked]>
To: [email-masked]
Date: Mon, 16 Feb 2009 22:51:56 -0500

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the [email-masked] mailing list.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

On the OS X (and presumably GNUstep) port, the drawing of a vertical
border between two frames does not work.  This currently uses the
NSDrawGroove function from the Cocoa/GNUstep API.  According to
http://preview.tinyurl.com/c2flh9 (apologies for the shortening, the
link goes to some Apple API documentation and the URL is gargantuan),
the function NSDrawGroove "Draws a gray-filled rectangle with a groove
border".  This would not be desirable behavior in any case, as making
the divider gray disregards the setting of the vertical-border face.
And in any event, it appears to be a no-op on OS X.5 (Leopard) -- after
doing a C-x 3, there is no vertical frame border apparent against either
a dark or a white background.  The function to use, IMHO, is NSRectFill;
substituting this fn makes the border drawing happen.  NSRectFill was
used in Emacs 22 (`emacs22' branch in the git repo, src/nsterm.m line
2466).  The patch below fixes this behavior.  It also restores another
bit of v.22 status quo, namely making the vertical window divider one
pixel in width, instead of the current two.

####### BEGIN PATCH #######
diff --git a/src/nsterm.m b/src/nsterm.m
index b674eda..c2ebf9f 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -2454,7 +2454,7 @@ ns_draw_vertical_window_border (struct window *w, int x, int y0, int y1)
 {
   struct frame *f = XFRAME (WINDOW_FRAME (w));
   struct face *face;
-  NSRect r = NSMakeRect (x, y0, 2, y1-y0);
+  NSRect r = NSMakeRect (x, y0, 1, y1-y0);
 
   NSTRACE (ns_draw_vertical_window_border);
 
@@ -2463,7 +2463,7 @@ ns_draw_vertical_window_border (struct window *w, int x, int y0, int y1)
       [ns_lookup_indexed_color(face->foreground, f) set];
 
   ns_focus (f, &r, 1);
-  NSDrawGroove (r, r);
+  NSRectFill(r);
   ns_unfocus (f);
 }

####### END PATCH #######

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/opt/src/emacs/nextstep/Emacs.app/Contents/Resources/etc/DEBUG for instructions.

In GNU Emacs 23.0.90.7 (i386-apple-darwin9.6.0, NS apple-appkit-949.43)
 of 2009-02-15 on dhcp0403.vpm.resnet.group.upenn.edu
Windowing system distributor `Apple', version 10.3.949
configured using `configure  '--with-ns''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: nil
  value of $XMODIFIERS: nil
  locale-coding-system: nil
  default-enable-multibyte-characters: t

Major mode: Emacs-Lisp

Minor modes in effect:
  diff-auto-refine-mode: t
  paredit-mode: t
  auto-insert-mode: t
  desktop-save-mode: t
  mac-print-mode: t
  shell-dirtrack-mode: t
  show-paren-mode: t
  global-auto-complete-mode: t
  auto-complete-mode: t
  display-battery-mode: t
  icomplete-mode: t
  savehist-mode: t
  recentf-mode: t
  partial-completion-mode: t
  display-time-mode: t
  ns-extended-platform-support-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
<wheel-down> <wheel-up> <double-wheel-up> <wheel-up> 
<double-wheel-up> <wheel-down> <double-wheel-down> 
<wheel-down> <double-wheel-down> <wheel-down> <wheel-down> 
<wheel-down> <wheel-down> <wheel-down> <double-wheel-down> 
<wheel-up> <wheel-down> <wheel-down> <help-echo> <wheel-down> 
<help-echo> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <help-echo> 
<switch-frame> <help-echo> <help-echo> <ns-open-file-line> 
<switch-frame> <switch-frame> <wheel-down> <double-wheel-down> 
<wheel-up> <double-wheel-up> <wheel-down> <double-wheel-down> 
<wheel-up> <wheel-up> <wheel-down> <double-wheel-down> 
<wheel-down> <wheel-down> <double-wheel-down> <triple-wheel-down> 
<wheel-down> <wheel-down> <wheel-down> <wheel-down> 
<wheel-up> <wheel-down> <wheel-down> <wheel-down> <wheel-down> 
<wheel-down> <wheel-down> <wheel-down> <double-wheel-down> 
<wheel-down> <double-wheel-down> <triple-wheel-down> 
<triple-wheel-down> <wheel-down> <double-wheel-down> 
<triple-wheel-down> <triple-wheel-down> <triple-wheel-down> 
<triple-wheel-down> <triple-wheel-down> <wheel-up> 
<double-wheel-up> <triple-wheel-up> <triple-wheel-up> 
<triple-wheel-up> <triple-wheel-up> <triple-wheel-up> 
<triple-wheel-up> <triple-wheel-up> <triple-wheel-up> 
<triple-wheel-up> <triple-wheel-up> <switch-frame> 
<up> <up> <up> C-r C-h C-g C-e <return> <return> # 
SPC T O D O : SPC f u n c t i o n SPC t o SPC e d i 
t SPC i n SPC t e r m i n a l SPC ( e ) <return> <return> 
<backspace> C-x C-s C-h f r e p o r t - e m <tab> <return> 
<help-echo> <switch-frame> <switch-frame> <down-mouse-1> 
<mouse-movement> <mouse-1> C-h v u s e r - m a <return> 
<switch-frame> s h i <down> <down> <down> <up> <right> 
<down> <down> <down> <up> s h u u q h n n n n n n n 
s C-e C-e <return> <return> M-; T O O D : SPC <backspace> 
<backspace> <backspace> <backspace> D O : SPC m o v 
C-M-x C-x 3 C-x 0 C-x < M-x r e p o r t <return>

Recent messages:
Mark saved where search started
byte-code: End of buffer [3 times]
byte-code: Beginning of buffer [3 times]
Saving file /Users/aecay/home/.zshrc...
Wrote /Users/aecay/home/.zshrc
Type "q" to quit. [2 times]
Entering debugger...
Back to top level.
Mark set