X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d4fe840df0b5fdb3aed538fae2ced143a471f60a..d8affa3dc5267c5da120ac09e14a81e0afed8fe8:/src/nsfns.m diff --git a/src/nsfns.m b/src/nsfns.m index 43002ca6fe..ea099081a7 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1,14 +1,14 @@ /* Functions for the NeXT/Open/GNUstep and MacOSX window system. -Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2015 Free Software +Copyright (C) 1989, 1992-1994, 2005-2006, 2008-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -49,13 +49,6 @@ GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu) #include "macfont.h" #endif -#if 0 -int fns_trace_num = 1; -#define NSTRACE(x) fprintf (stderr, "%s:%d: [%d] " #x "\n", \ - __FILE__, __LINE__, ++fns_trace_num) -#else -#define NSTRACE(x) -#endif #ifdef HAVE_NS @@ -364,7 +357,7 @@ static void x_set_icon_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { NSView *view = FRAME_NS_VIEW (f); - NSTRACE (x_set_icon_name); + NSTRACE ("x_set_icon_name"); /* see if it's changed */ if (STRINGP (arg)) @@ -412,10 +405,12 @@ ns_set_name_internal (struct frame *f, Lisp_Object name) NSString *str; NSView *view = FRAME_NS_VIEW (f); + encoded_name = ENCODE_UTF_8 (name); str = [NSString stringWithUTF8String: SSDATA (encoded_name)]; + /* Don't change the name if it's already NAME. */ if (! [[[view window] title] isEqualToString: str]) [[view window] setTitle: str]; @@ -436,7 +431,7 @@ ns_set_name_internal (struct frame *f, Lisp_Object name) static void ns_set_name (struct frame *f, Lisp_Object name, int explicit) { - NSTRACE (ns_set_name); + NSTRACE ("ns_set_name"); /* Make sure that requests from lisp code override requests from Emacs redisplay code. */ @@ -477,7 +472,7 @@ ns_set_name (struct frame *f, Lisp_Object name, int explicit) static void x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - NSTRACE (x_explicitly_set_name); + NSTRACE ("x_explicitly_set_name"); ns_set_name (f, arg, 1); } @@ -488,11 +483,16 @@ x_explicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) void x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - NSTRACE (x_implicitly_set_name); + NSTRACE ("x_implicitly_set_name"); + + Lisp_Object frame_title = buffer_local_value + (Qframe_title_format, XWINDOW (f->selected_window)->contents); + Lisp_Object icon_title = buffer_local_value + (Qicon_title_format, XWINDOW (f->selected_window)->contents); /* Deal with NS specific format t. */ - if (FRAME_NS_P (f) && ((FRAME_ICONIFIED_P (f) && EQ (Vicon_title_format, Qt)) - || EQ (Vframe_title_format, Qt))) + if (FRAME_NS_P (f) && ((FRAME_ICONIFIED_P (f) && EQ (icon_title, Qt)) + || EQ (frame_title, Qt))) ns_set_name_as_filename (f); else ns_set_name (f, arg, 0); @@ -505,7 +505,7 @@ x_implicitly_set_name (struct frame *f, Lisp_Object arg, Lisp_Object oldval) static void x_set_title (struct frame *f, Lisp_Object name, Lisp_Object old_name) { - NSTRACE (x_set_title); + NSTRACE ("x_set_title"); /* Don't change the title if it's already NAME. */ if (EQ (name, f->title)) return; @@ -533,7 +533,7 @@ ns_set_name_as_filename (struct frame *f) NSAutoreleasePool *pool; Lisp_Object encoded_name, encoded_filename; NSString *str; - NSTRACE (ns_set_name_as_filename); + NSTRACE ("ns_set_name_as_filename"); if (f->explicit_name || ! NILP (f->title)) return; @@ -655,8 +655,15 @@ x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) void x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) { + /* Currently, when the tool bar change state, the frame is resized. + + TODO: It would be better if this didn't occur when 1) the frame + is full height or maximized or 2) when specified by + `frame-inhibit-implied-resize'. */ int nlines; + NSTRACE ("x_set_tool_bar_lines"); + if (FRAME_MINIBUF_ONLY_P (f)) return; @@ -676,7 +683,21 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) { free_frame_tool_bar (f); FRAME_EXTERNAL_TOOL_BAR (f) = 0; - } + + { + EmacsView *view = FRAME_NS_VIEW (f); + int fs_state = [view fullscreenState]; + + if (fs_state == FULLSCREEN_MAXIMIZED) + { + [view setFSValue:FULLSCREEN_WIDTH]; + } + else if (fs_state == FULLSCREEN_HEIGHT) + { + [view setFSValue:FULLSCREEN_NONE]; + } + } + } } { @@ -687,12 +708,12 @@ x_set_tool_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) || (CONSP (frame_inhibit_implied_resize) && !NILP (Fmemq (Qtool_bar_lines, frame_inhibit_implied_resize)))) - /* This will probably fail to DTRT in the - fullheight/-width cases. */ && NILP (get_frame_param (f, Qfullscreen))) ? 0 : 2); + NSTRACE_MSG ("inhibit:%d", inhibit); + frame_size_history_add (f, Qupdate_frame_tool_bar, 0, 0, Qnil); adjust_frame_size (f, -1, -1, inhibit, 0, Qtool_bar_lines); } @@ -729,7 +750,7 @@ ns_implicitly_set_icon_type (struct frame *f) NSAutoreleasePool *pool; BOOL setMini = YES; - NSTRACE (ns_implicitly_set_icon_type); + NSTRACE ("ns_implicitly_set_icon_type"); block_input (); pool = [[NSAutoreleasePool alloc] init]; @@ -797,7 +818,7 @@ x_set_icon_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval) id image = nil; BOOL setMini = YES; - NSTRACE (x_set_icon_type); + NSTRACE ("x_set_icon_type"); if (!NILP (arg) && SYMBOLP (arg)) { @@ -1305,6 +1326,8 @@ This function is an internal primitive--use `make-frame' instead. */) = [NSCursor arrowCursor]; f->output_data.ns->current_pointer = f->output_data.ns->text_cursor; + f->output_data.ns->in_animation = NO; + [[EmacsView alloc] initFrameFromEmacs: f]; x_icon (f, parms); @@ -1661,7 +1684,7 @@ DEFUN ("x-server-max-request-size", Fx_server_max_request_size, DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, doc: /* Return the "vendor ID" string of Nextstep display server TERMINAL. -(Labeling every distributor as a "vendor" embodies the false assumption +\(Labeling every distributor as a "vendor" embodies the false assumption that operating systems cannot be developed and distributed noncommercially.) The optional argument TERMINAL specifies which display to ask about. TERMINAL should be a terminal object, a frame or a display name (a string). @@ -1707,7 +1730,7 @@ If omitted or nil, that stands for the selected frame's display. Note: "screen" here is not in Nextstep terminology but in X11's. For the number of physical monitors, use `(length -(display-monitor-attributes-list TERMINAL))' instead. */) +\(display-monitor-attributes-list TERMINAL))' instead. */) (Lisp_Object terminal) { check_ns_display_info (terminal); @@ -1838,7 +1861,7 @@ DISPLAY is the name of the display to connect to. Optional second arg XRM-STRING is a string of resources in xrdb format. If the optional third arg MUST-SUCCEED is non-nil, terminate Emacs if we can't open the connection. -(In the Nextstep version, the last two arguments are currently ignored.) */) +\(In the Nextstep version, the last two arguments are currently ignored.) */) (Lisp_Object display, Lisp_Object resource_string, Lisp_Object must_succeed) { struct ns_display_info *dpyinfo; @@ -2076,39 +2099,6 @@ there was no result. */) } -DEFUN ("ns-convert-utf8-nfd-to-nfc", Fns_convert_utf8_nfd_to_nfc, - Sns_convert_utf8_nfd_to_nfc, 1, 1, 0, - doc: /* Return an NFC string that matches the UTF-8 NFD string STR. */) - (Lisp_Object str) -{ -/* TODO: If GNUstep ever implements precomposedStringWithCanonicalMapping, - remove this. */ - NSString *utfStr; - Lisp_Object ret = Qnil; - NSAutoreleasePool *pool; - - CHECK_STRING (str); - pool = [[NSAutoreleasePool alloc] init]; - utfStr = [NSString stringWithUTF8String: SSDATA (str)]; -#ifdef NS_IMPL_COCOA - if (utfStr) - utfStr = [utfStr precomposedStringWithCanonicalMapping]; -#endif - if (utfStr) - { - const char *cstr = [utfStr UTF8String]; - if (cstr) - ret = build_string (cstr); - } - - [pool release]; - if (NILP (ret)) - error ("Invalid UTF-8"); - - return ret; -} - - #ifdef NS_IMPL_COCOA /* Compile and execute the AppleScript SCRIPT and return the error @@ -2311,7 +2301,7 @@ x_get_focus_frame (struct frame *frame) DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, doc: /* Internal function called by `color-defined-p', which see. -(Note that the Nextstep version of this function ignores FRAME.) */) +\(Note that the Nextstep version of this function ignores FRAME.) */) (Lisp_Object color, Lisp_Object frame) { NSColor * col; @@ -3118,6 +3108,8 @@ void syms_of_nsfns (void) { DEFSYM (Qfontsize, "fontsize"); + DEFSYM (Qframe_title_format, "frame-title-format"); + DEFSYM (Qicon_title_format, "icon-title-format"); DEFVAR_LISP ("ns-icon-type-alist", Vns_icon_type_alist, doc: /* Alist of elements (REGEXP . IMAGE) for images of icons associated to frames. @@ -3182,7 +3174,6 @@ be used as the image of the icon representing the frame. */); defsubr (&Sns_emacs_info_panel); defsubr (&Sns_list_services); defsubr (&Sns_perform_service); - defsubr (&Sns_convert_utf8_nfd_to_nfc); defsubr (&Sns_popup_font_panel); defsubr (&Sns_popup_color_panel);