/* 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
#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
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))
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];
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. */
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);
}
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);
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;
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;
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;
{
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];
+ }
+ }
+ }
}
- x_set_window_size (f, 0, f->text_cols, f->text_lines, 0);
+ {
+ int inhibit
+ = ((f->after_make_frame
+ && !f->tool_bar_resized
+ && (EQ (frame_inhibit_implied_resize, Qt)
+ || (CONSP (frame_inhibit_implied_resize)
+ && !NILP (Fmemq (Qtool_bar_lines,
+ frame_inhibit_implied_resize))))
+ && 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);
+ }
}
int old_width = FRAME_INTERNAL_BORDER_WIDTH (f);
CHECK_TYPE_RANGED_INTEGER (int, arg);
- FRAME_INTERNAL_BORDER_WIDTH (f) = XINT (arg);
+ f->internal_border_width = XINT (arg);
if (FRAME_INTERNAL_BORDER_WIDTH (f) < 0)
- FRAME_INTERNAL_BORDER_WIDTH (f) = 0;
+ f->internal_border_width = 0;
if (FRAME_INTERNAL_BORDER_WIDTH (f) == old_width)
return;
NSAutoreleasePool *pool;
BOOL setMini = YES;
- NSTRACE (ns_implicitly_set_icon_type);
+ NSTRACE ("ns_implicitly_set_icon_type");
block_input ();
pool = [[NSAutoreleasePool alloc] init];
id image = nil;
BOOL setMini = YES;
- NSTRACE (x_set_icon_type);
+ NSTRACE ("x_set_icon_type");
if (!NILP (arg) && SYMBOLP (arg))
{
x_set_icon_name,
x_set_icon_type,
x_set_internal_border_width, /* generic OK */
- 0, /* x_set_right_divider_width */
- 0, /* x_set_bottom_divider_width */
+ x_set_right_divider_width,
+ x_set_bottom_divider_width,
x_set_menu_bar_lines,
x_set_mouse_color,
x_explicitly_set_name,
Lisp_Object parent;
struct kboard *kb;
static int desc_ctr = 1;
+ int x_width = 0, x_height = 0;
/* x_get_arg modifies parms. */
parms = Fcopy_alist (parms);
RES_TYPE_STRING);
parms = get_geometry_from_preferences (dpyinfo, parms);
- window_prompting = x_figure_window_size (f, parms, 1);
+ window_prompting = x_figure_window_size (f, parms, true, &x_width, &x_height);
tem = x_get_arg (dpyinfo, parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
f->no_split = minibuffer_only || (!EQ (tem, Qunbound) && !EQ (tem, Qnil));
= [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);
/* Allow x_set_window_size, now. */
f->can_x_set_window_size = true;
+ if (x_width > 0)
+ SET_FRAME_WIDTH (f, x_width);
+ if (x_height > 0)
+ SET_FRAME_HEIGHT (f, x_height);
+
adjust_frame_size (f, FRAME_TEXT_WIDTH (f), FRAME_TEXT_HEIGHT (f), 0, 1,
Qx_create_frame_2);
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).
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);
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;
}
-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
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;
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.
(setq ns-icon-type-alist
(append ns-icon-type-alist
- '((\"^\\\\*\\\\(Group\\\\*$\\\\|Summary \\\\|Article\\\\*$\\\\)\"
+ \\='((\"^\\\\*\\\\(Group\\\\*$\\\\|Summary \\\\|Article\\\\*$\\\\)\"
. \"Gnus\"))))
When you miniaturize a Group, Summary or Article frame, Gnus.tiff will
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);