On Dec 5, 2007 1:06 AM, Gilbert Harman <[EMAIL PROTECTED]> wrote:
> I have found this sufficiently annoying to go back to the previous version
> (rc2) where I am not seeing this bug.
There were a number of changes to ns_draw_window_cursor() between rc2
and rc3 to fix various bugs relating to switching between frames and
windows. The new bug thereby introduced doesn't show up on Tiger, and
I won't see Leopard for a while. If anyone finds it annoying enough
to roll up their sleeves ;), I'm appending the old version of the
function below for comparison purposes.
I suspect the line (in the new version) "if (FRAME_LAST_INACTIVE(f))"
could be at fault.
One question: are you able to observe the bug when there is only ONE
active frame with ONE active window?
thanks,
Adrian
--------------------------
void
ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row,
int x, int y, int cursor_type, int cursor_width,
int on_p, int active_p)
// ----------------------------------------------------------------------------
// External call (RIF): draw cursor
// ----------------------------------------------------------------------------
{
NSRect r,s;
int fx, fy, h;
struct frame *f = WINDOW_XFRAME (w);
struct glyph *phys_cursor_glyph;
int overspill;
NSTRACE(dumpcursor);
if (!on_p)
return; //PENDING: erase?
w->phys_cursor_type = cursor_type;
w->phys_cursor_on_p = 1;
if (cursor_type == NO_CURSOR)
{
w->phys_cursor_width = 0;
return;
}
if ((phys_cursor_glyph = get_phys_cursor_glyph (w)) == NULL)
{
if (glyph_row->exact_window_width_line_p
&& w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])
{
glyph_row->cursor_in_fringe_p = 1;
draw_fringe_bitmap (w, glyph_row, 0);
}
return;
}
get_phys_cursor_geometry (w, glyph_row, phys_cursor_glyph, &fx, &fy, &h);
r.origin.x = fx, r.origin.y = fy;
r.size.height = h;
r.size.width = w->phys_cursor_width;
//PENDING: if we overwrite the internal border area, it does not get erased;
// fix by truncating cursor, but better would be to erase properly
overspill = r.origin.x + r.size.width -
WINDOW_TEXT_TO_FRAME_PIXEL_X(w, WINDOW_BOX_RIGHT_EDGE_X(w)
- WINDOW_TOTAL_FRINGE_WIDTH(w) - FRAME_INTERNAL_BORDER_WIDTH(f));
if (overspill > 0)
r.size.width -= overspill;
//PENDING: 23: use emacs stored f->cursor_type instead of ns-specific
FRAME_CURSOR(f) = FRAME_NEW_CURSOR(f);
FRAME_CURSOR_COLOR(f) = FRAME_NEW_CURSOR_COLOR(f);
//PENDING: only needed in rare cases with last-resort font in HELLO..
// should we do this more efficiently?
ns_clip_to_row(w, glyph_row, -1, NULL);
// ns_focus(f, &r);
// draw the cursor
// needed for bar and line cursors
[FRAME_BACKGROUND_COLOR(f) set];
NSRectFill(r);
[FRAME_CURSOR_COLOR(f) set];
switch (active_p ? FRAME_CURSOR(f) : hollow_box)
{
case no_highlight:
break;
case filled_box:
NSRectFill(r);
break;
case hollow_box:
NSRectFill(r);
[FRAME_BACKGROUND_COLOR(f) set];
NSRectFill(NSInsetRect(r, 1, 1));
[FRAME_CURSOR_COLOR(f) set];
break;
case bar:
s = r;
s.origin.y += 0.75 * s.size.height;
s.size.height *= 0.25;
NSRectFill(s);
break;
case line:
s = r;
s.size.width = 2;
NSRectFill(s);
break;
}
ns_unfocus(f);
// draw the character under the cursor
draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR);
}
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Emacs-app-dev- mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emacs-app-dev-