From: Stefan Monnier Date: Wed, 6 May 2009 03:09:11 +0000 (+0000) Subject: (ns_get_screen): Rewrite. X-Git-Tag: emacs-pretest-23.0.94~105 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5996e1b74c382855c5af0ccf737aeef3ad5f4626;p=emacs.git (ns_get_screen): Rewrite. Don't presume selected-frame is of type `ns'. --- diff --git a/src/ChangeLog b/src/ChangeLog index 5f41bd894f4..47be6be45f0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2009-05-06 Stefan Monnier + * 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. diff --git a/src/nsfns.m b/src/nsfns.m index b6d0d189cc5..13f9953554f 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -203,46 +203,32 @@ ns_get_window (Lisp_Object maybeFrame) static NSScreen * -ns_get_screen (Lisp_Object anythingUnderTheSun) -{ - 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) +ns_get_screen (Lisp_Object screen) +{ + 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; }