Mercurial > emacs
changeset 103163:8dbdd97b2aae
(ns_get_screen): Rewrite.
Don't presume selected-frame is of type `ns'.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 06 May 2009 03:09:11 +0000 |
parents | cb1886d1427b |
children | 59c06c5e090e |
files | src/ChangeLog src/nsfns.m |
diffstat | 2 files changed, 26 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Wed May 06 02:57:47 2009 +0000 +++ b/src/ChangeLog Wed May 06 03:09:11 2009 +0000 @@ -1,5 +1,8 @@ 2009-05-06 Stefan Monnier <monnier@iro.umontreal.ca> + * nsfns.m (ns_get_screen): Rewrite. + Don't presume selected-frame is of type `ns'. + * font.c (font_update_drivers): Sanity fallback to avoid disabling all drivers.
--- a/src/nsfns.m Wed May 06 02:57:47 2009 +0000 +++ b/src/nsfns.m Wed May 06 03:09:11 2009 +0000 @@ -203,46 +203,32 @@ static NSScreen * -ns_get_screen (Lisp_Object anythingUnderTheSun) +ns_get_screen (Lisp_Object screen) { - id window =nil; - NSScreen *screen = 0; - - struct terminal *terminal; - struct ns_display_info *dpyinfo; - struct frame *f = NULL; - Lisp_Object frame; - - if (INTEGERP (anythingUnderTheSun)) { - /* we got a terminal */ - terminal = get_terminal (anythingUnderTheSun, 1); - dpyinfo = terminal->display_info.ns; - f = dpyinfo->x_focus_frame; - if (!f) - f = dpyinfo->x_highlight_frame; - - } else if (FRAMEP (anythingUnderTheSun) && - FRAME_NS_P (XFRAME (anythingUnderTheSun))) { - /* we got a frame */ - f = XFRAME (anythingUnderTheSun); - - } else if (STRINGP (anythingUnderTheSun)) { /* FIXME/cl for multi-display */ - } - - if (!f) - f = SELECTED_FRAME (); - if (f) + struct terminal *terminal = get_terminal (screen, 1); + if (terminal->type != output_ns) + // Not sure if this special case for nil is needed. It does seem to be + // important in xfns.c for the make-frame call in frame-initialize, + // so let's keep it here for now. + return (NILP (screen) ? [NSScreen mainScreen] : NULL); + else { - XSETFRAME (frame, f); - window = ns_get_window (frame); + struct ns_display_info *dpyinfo = terminal->display_info.ns; + struct frame *f = dpyinfo->x_focus_frame; + if (!f) + f = dpyinfo->x_highlight_frame; + if (!f) + return NULL; + else + { + id window = nil; + Lisp_Object frame; + eassert (FRAME_NS_P (f)); + XSETFRAME (frame, f); + window = ns_get_window (frame); + return window ? [window screen] : NULL; + } } - - if (window) - screen = [window screen]; - if (!screen) - screen = [NSScreen mainScreen]; - - return screen; }