Mercurial > emacs
comparison src/nsfns.m @ 108393:c80b29e796ea
Merge from mainline.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Fri, 08 Jan 2010 14:59:17 +0000 |
parents | 16b52378e95a |
children | 1d1d5d9bd884 |
comparison
equal
deleted
inserted
replaced
106747:47e4680680fe | 108393:c80b29e796ea |
---|---|
204 | 204 |
205 | 205 |
206 static NSScreen * | 206 static NSScreen * |
207 ns_get_screen (Lisp_Object screen) | 207 ns_get_screen (Lisp_Object screen) |
208 { | 208 { |
209 struct terminal *terminal = get_terminal (screen, 1); | 209 struct frame *f; |
210 struct terminal *terminal; | |
211 | |
212 if (EQ (Qt, screen)) /* not documented */ | |
213 return [NSScreen mainScreen]; | |
214 | |
215 terminal = get_terminal (screen, 1); | |
210 if (terminal->type != output_ns) | 216 if (terminal->type != output_ns) |
211 // Not sure if this special case for nil is needed. It does seem to be | 217 return NULL; |
212 // important in xfns.c for the make-frame call in frame-initialize, | 218 |
213 // so let's keep it here for now. | 219 if (NILP (screen)) |
214 return (NILP (screen) ? [NSScreen mainScreen] : NULL); | 220 f = SELECTED_FRAME (); |
221 else if (FRAMEP (screen)) | |
222 f = XFRAME (screen); | |
215 else | 223 else |
216 { | 224 { |
217 struct ns_display_info *dpyinfo = terminal->display_info.ns; | 225 struct ns_display_info *dpyinfo = terminal->display_info.ns; |
218 struct frame *f = dpyinfo->x_focus_frame; | 226 f = (dpyinfo->x_focus_frame || dpyinfo->x_highlight_frame); |
219 if (!f) | 227 } |
220 f = dpyinfo->x_highlight_frame; | 228 |
221 if (!f) | 229 return ((f && FRAME_NS_P (f)) ? [[FRAME_NS_VIEW (f) window] screen] |
222 return NULL; | 230 : NULL); |
223 else | |
224 { | |
225 id window = nil; | |
226 Lisp_Object frame; | |
227 eassert (FRAME_NS_P (f)); | |
228 XSETFRAME (frame, f); | |
229 window = ns_get_window (frame); | |
230 return window ? [window screen] : NULL; | |
231 } | |
232 } | |
233 } | 231 } |
234 | 232 |
235 | 233 |
236 /* Return the X display structure for the display named NAME. | 234 /* Return the X display structure for the display named NAME. |
237 Open a new connection if necessary. */ | 235 Open a new connection if necessary. */ |
2323 that stands for the selected frame's display. */) | 2321 that stands for the selected frame's display. */) |
2324 (display) | 2322 (display) |
2325 Lisp_Object display; | 2323 Lisp_Object display; |
2326 { | 2324 { |
2327 int top; | 2325 int top; |
2326 NSScreen *screen; | |
2328 NSRect vScreen; | 2327 NSRect vScreen; |
2329 | 2328 |
2330 check_ns (); | 2329 check_ns (); |
2331 vScreen = [ns_get_screen (display) visibleFrame]; | 2330 screen = ns_get_screen (display); |
2332 top = vScreen.origin.y == 0.0 ? | 2331 if (!screen) |
2333 (int) [ns_get_screen (display) frame].size.height - vScreen.size.height : 0; | 2332 return Qnil; |
2334 | 2333 |
2334 vScreen = [screen visibleFrame]; | |
2335 | |
2336 /* NS coordinate system is upside-down. | |
2337 Transform to screen-specific coordinates. */ | |
2335 return list4 (make_number ((int) vScreen.origin.x), | 2338 return list4 (make_number ((int) vScreen.origin.x), |
2336 make_number (top), | 2339 make_number ((int) [screen frame].size.height |
2340 - vScreen.size.height - vScreen.origin.y), | |
2337 make_number ((int) vScreen.size.width), | 2341 make_number ((int) vScreen.size.width), |
2338 make_number ((int) vScreen.size.height)); | 2342 make_number ((int) vScreen.size.height)); |
2339 } | 2343 } |
2340 | 2344 |
2341 | 2345 |