1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-16 10:50:49 -08:00

Unify shutdown handling under NS, via ns-power-off key event (where appropriate) and save-buffers-kill-emacs.

remove  NS-specific preferences window that used to show NS-specific preferences.
Integrate preferences in Lisp accessible customization system where possible.
Remove ns-expand-space, because it can be set only during fontloading (i.e. not at runtime),
and because of redundancy with line-spacing frame parameter.

Remove loading of most and saving of all NS resources (from org.gnu.Emacs.plist).

nsterm.m (ns_shutdown_properly, -terminate): remove global state variable as it was never reset
(ns_term_init): remove initialization of Lisp-settable defaults and ns_expand_space
(-setPanelFromDefaultValues): remove ns_expand_space.
(-showPreferencesWindow): send new KEY_NS_SHOW_PREFS key.

nsfont.m (nsfont_open): remove ns_expand_space, assume -0.5 i.e. no additional spacing, similar to Carbon port.

nsterm.h: define KEY_NS_SHOW_PREFS key.
nsfns.m (ns-popup-prefs-panel): remove.

term/ns-win.el (ns-expand-space): remove.
(ns-show-prefs event): run `customize'.
(ns-power-off): run `save-buffers-kill-emacs', but ask user whether to save files (as is standard)
(clipboard-yank, clipboard-kill-ring-save, clipboard-kill-region)
(menu-bar-enable-clipboard): do not undefine these.
(ns-save-preferences,ns-save-options,ns-show-preferences-help): remove.
This commit is contained in:
David Reitter 2009-03-14 21:19:56 +00:00
parent b769f3daad
commit c6c62e780c
7 changed files with 75 additions and 487 deletions

View file

@ -1,3 +1,13 @@
2009-03-14 David Reitter <david.reitter@gmail.com>
* term/ns-win.el (ns-expand-space): remove.
(ns-show-prefs event): run `customize'.
(ns-power-off): run `save-buffers-kill-emacs', but ask user
whether to save files (as is standard)
(clipboard-yank, clipboard-kill-ring-save, clipboard-kill-region)
(menu-bar-enable-clipboard): do not undefine these.
(ns-save-preferences,ns-save-options,ns-show-preferences-help): remove.
2009-03-14 Glenn Morris <rgm@gnu.org> 2009-03-14 Glenn Morris <rgm@gnu.org>
* mail/sendmail.el (mail-interactive): Doc fix. * mail/sendmail.el (mail-interactive): Doc fix.

View file

@ -283,8 +283,7 @@ The properties returned may include `top', `left', `height', and `width'."
;; Special Nextstep-generated events are converted to function keys. Here ;; Special Nextstep-generated events are converted to function keys. Here
;; are the bindings for them. ;; are the bindings for them.
(define-key global-map [ns-power-off] (define-key global-map [ns-power-off] 'save-buffers-kill-emacs)
(lambda () (interactive) (save-buffers-kill-emacs t)))
(define-key global-map [ns-open-file] 'ns-find-file) (define-key global-map [ns-open-file] 'ns-find-file)
(define-key global-map [ns-open-temp-file] [ns-open-file]) (define-key global-map [ns-open-temp-file] [ns-open-file])
(define-key global-map [ns-drag-file] 'ns-insert-file) (define-key global-map [ns-drag-file] 'ns-insert-file)
@ -296,7 +295,7 @@ The properties returned may include `top', `left', `height', and `width'."
(define-key global-map [ns-spi-service-call] 'ns-spi-service-call) (define-key global-map [ns-spi-service-call] 'ns-spi-service-call)
(define-key global-map [ns-new-frame] 'make-frame) (define-key global-map [ns-new-frame] 'make-frame)
(define-key global-map [ns-toggle-toolbar] 'ns-toggle-toolbar) (define-key global-map [ns-toggle-toolbar] 'ns-toggle-toolbar)
(define-key global-map [ns-info-prefs] 'ns-show-preferences-help) (define-key global-map [ns-show-prefs] 'customize)
;; Functions to set environment variables by running a subshell. ;; Functions to set environment variables by running a subshell.
@ -406,7 +405,7 @@ this defaults to \"printenv\"."
(cons (logior (lsh 0 16) 11) 'ns-spi-service-call) (cons (logior (lsh 0 16) 11) 'ns-spi-service-call)
(cons (logior (lsh 0 16) 12) 'ns-new-frame) (cons (logior (lsh 0 16) 12) 'ns-new-frame)
(cons (logior (lsh 0 16) 13) 'ns-toggle-toolbar) (cons (logior (lsh 0 16) 13) 'ns-toggle-toolbar)
(cons (logior (lsh 0 16) 14) 'ns-info-prefs) (cons (logior (lsh 0 16) 14) 'ns-show-prefs)
(cons (logior (lsh 1 16) 32) 'f1) (cons (logior (lsh 1 16) 32) 'f1)
(cons (logior (lsh 1 16) 33) 'f2) (cons (logior (lsh 1 16) 33) 'f2)
(cons (logior (lsh 1 16) 34) 'f3) (cons (logior (lsh 1 16) 34) 'f3)
@ -494,10 +493,10 @@ this defaults to \"printenv\"."
;; Must come after keybindings. ;; Must come after keybindings.
(fmakunbound 'clipboard-yank) ;; (fmakunbound 'clipboard-yank)
(fmakunbound 'clipboard-kill-ring-save) ;; (fmakunbound 'clipboard-kill-ring-save)
(fmakunbound 'clipboard-kill-region) ;; (fmakunbound 'clipboard-kill-region)
(fmakunbound 'menu-bar-enable-clipboard) ;; (fmakunbound 'menu-bar-enable-clipboard)
;; Add a couple of menus and rearrange some others; easiest just to redo toplvl ;; Add a couple of menus and rearrange some others; easiest just to redo toplvl
;; Note keymap defns must be given last-to-first ;; Note keymap defns must be given last-to-first
@ -985,135 +984,10 @@ Lines are highlighted according to `ns-input-line'."
(t (read res))))) (t (read res)))))
;; nsterm.m ;; nsterm.m
(defvar ns-command-modifier)
(defvar ns-control-modifier)
(defvar ns-function-modifier)
(defvar ns-antialias-text)
(defvar ns-use-qd-smoothing)
(defvar ns-use-system-highlight-color)
(defvar ns-confirm-quit)
(declare-function ns-set-resource "nsfns.m" (owner name value))
(declare-function ns-font-name "nsfns.m" (name))
(declare-function ns-read-file-name "nsfns.m" (declare-function ns-read-file-name "nsfns.m"
(prompt &optional dir isLoad init)) (prompt &optional dir isLoad init))
(defun ns-save-preferences ()
"Set all the defaults."
(interactive)
;; Global preferences
(ns-set-resource nil "AlternateModifier" (symbol-name ns-alternate-modifier))
(ns-set-resource nil "CommandModifier" (symbol-name ns-command-modifier))
(ns-set-resource nil "ControlModifier" (symbol-name ns-control-modifier))
(ns-set-resource nil "FunctionModifier" (symbol-name ns-function-modifier))
(ns-set-resource nil "ExpandSpace"
(if ns-expand-space
(number-to-string ns-expand-space)
"NO"))
(ns-set-resource nil "GSFontAntiAlias" (if ns-antialias-text "YES" "NO"))
(ns-set-resource nil "UseQuickdrawSmoothing"
(if ns-use-qd-smoothing "YES" "NO"))
(ns-set-resource nil "UseSystemHighlightColor"
(if ns-use-system-highlight-color "YES" "NO"))
(ns-set-resource nil "ConfirmQuit"
(if ns-confirm-quit "YES" "NO"))
;; Default frame parameters
(let ((p (frame-parameters))
v)
(if (setq v (assq 'font p))
(ns-set-resource nil "Font" (ns-font-name (cdr v))))
(if (setq v (assq 'fontsize p))
(ns-set-resource nil "FontSize" (number-to-string (cdr v))))
(if (setq v (assq 'foreground-color p))
(ns-set-resource nil "Foreground" (cdr v)))
(if (setq v (assq 'background-color p))
(ns-set-resource nil "Background" (cdr v)))
(if (setq v (assq 'cursor-color p))
(ns-set-resource nil "CursorColor" (cdr v)))
(if (setq v (assq 'cursor-type p))
(ns-set-resource nil "CursorType" (if (symbolp (cdr v))
(symbol-name (cdr v))
(cdr v))))
(if (setq v (assq 'underline p))
(ns-set-resource nil "Underline"
(case (cdr v)
((t) "YES")
((nil) "NO")
(t (cdr v)))))
(if (setq v (assq 'internal-border-width p))
(ns-set-resource nil "InternalBorderWidth"
(number-to-string (cdr v))))
(if (setq v (assq 'vertical-scroll-bars p))
(ns-set-resource nil "VerticalScrollBars"
(case (cdr v)
((t) "YES")
((nil) "NO")
((left) "left")
((right) "right")
(t nil))))
(if (setq v (assq 'height p))
(ns-set-resource nil "Height" (number-to-string (cdr v))))
(if (setq v (assq 'width p))
(ns-set-resource nil "Width" (number-to-string (cdr v))))
(if (setq v (assq 'top p))
(ns-set-resource nil "Top" (number-to-string (cdr v))))
(if (setq v (assq 'left p))
(ns-set-resource nil "Left" (number-to-string (cdr v))))
;; These not fully supported
(if (setq v (assq 'auto-raise p))
(ns-set-resource nil "AutoRaise" (if (cdr v) "YES" "NO")))
(if (setq v (assq 'auto-lower p))
(ns-set-resource nil "AutoLower" (if (cdr v) "YES" "NO")))
(if (setq v (assq 'menu-bar-lines p))
(ns-set-resource nil "Menus" (if (cdr v) "YES" "NO")))
)
(let ((fl (face-list)))
(while (consp fl)
(or (eq 'default (car fl))
;; dont save Default* since it causes all created faces to
;; inherit its values. The properties of the default face
;; have already been saved from the frame-parameters anyway.
(let* ((name (symbol-name (car fl)))
(font (face-font (car fl)))
;; (fontsize (face-fontsize (car fl)))
(foreground (face-foreground (car fl)))
(background (face-background (car fl)))
(underline (face-underline-p (car fl)))
(italic (face-italic-p (car fl)))
(bold (face-bold-p (car fl)))
(stipple (face-stipple (car fl))))
;; (ns-set-resource nil (concat name ".attributeFont")
;; (if font font nil))
;; (ns-set-resource nil (concat name ".attributeFontSize")
;; (if fontsize (number-to-string fontsize) nil))
(ns-set-resource nil (concat name ".attributeForeground")
(if foreground foreground nil))
(ns-set-resource nil (concat name ".attributeBackground")
(if background background nil))
(ns-set-resource nil (concat name ".attributeUnderline")
(if underline "YES" nil))
(ns-set-resource nil (concat name ".attributeItalic")
(if italic "YES" nil))
(ns-set-resource nil (concat name ".attributeBold")
(if bold "YES" nil))
(and stipple
(or (stringp stipple)
(setq stipple (prin1-to-string stipple))))
(ns-set-resource nil (concat name ".attributeStipple")
(if stipple stipple nil))))
(setq fl (cdr fl)))))
(declare-function menu-bar-options-save-orig "ns-win" () t)
;; call ns-save-preferences when menu-bar-options-save is called
(fset 'menu-bar-options-save-orig (symbol-function 'menu-bar-options-save))
(defun ns-save-options ()
(interactive)
(menu-bar-options-save-orig)
(ns-save-preferences))
(fset 'menu-bar-options-save (symbol-function 'ns-save-options))
;;;; File handling. ;;;; File handling.
(defun ns-open-file-using-panel () (defun ns-open-file-using-panel ()
@ -1242,11 +1116,6 @@ unless the current buffer is a scratch buffer.")
;;;; Dialog-related functions. ;;;; Dialog-related functions.
(defun ns-show-preferences-help ()
"Show NS Preferences panel section in the Emacs manual"
(interactive)
(info "(emacs)Mac / GNUstep Customization"))
;; Ask user for confirm before printing. Due to Kevin Rodgers. ;; Ask user for confirm before printing. Due to Kevin Rodgers.
(defun ns-print-buffer () (defun ns-print-buffer ()
"Interactive front-end to `print-buffer': asks for user confirmation first." "Interactive front-end to `print-buffer': asks for user confirmation first."

View file

@ -1,3 +1,17 @@
2009-03-14 David Reitter <david.reitter@gmail.com>
* nsterm.m (ns_shutdown_properly, -terminate): remove global state
variable as it was never reset
(ns_term_init): remove initialization of Lisp-settable defaults
and ns_expand_space
(-setPanelFromDefaultValues): remove ns_expand_space.
(-showPreferencesWindow): send new KEY_NS_SHOW_PREFS key.
* nsfont.m (nsfont_open): remove ns_expand_space, assume -0.5
i.e. no additional spacing, similar to Carbon port.
* nsterm.h: define KEY_NS_SHOW_PREFS key.
* nsfns.m (ns-popup-prefs-panel): remove.
2009-03-14 Jan Djärv <jan.h.d@swipnet.se> 2009-03-14 Jan Djärv <jan.h.d@swipnet.se>
* sound.c (alsa_configure): Remove call to deprecated * sound.c (alsa_configure): Remove call to deprecated

View file

@ -1379,17 +1379,6 @@ FRAME nil means use the selected frame. */)
} }
DEFUN ("ns-popup-prefs-panel", Fns_popup_prefs_panel, Sns_popup_prefs_panel,
0, 0, "",
doc: /* Pop up the preferences panel. */)
()
{
check_ns ();
[(EmacsApp *)NSApp showPreferencesWindow: NSApp];
return Qnil;
}
DEFUN ("ns-popup-font-panel", Fns_popup_font_panel, Sns_popup_font_panel, DEFUN ("ns-popup-font-panel", Fns_popup_font_panel, Sns_popup_font_panel,
0, 1, "", 0, 1, "",
doc: /* Pop up the font panel. */) doc: /* Pop up the font panel. */)
@ -2729,7 +2718,6 @@ be used as the image of the icon representing the frame. */);
defsubr (&Sns_perform_service); defsubr (&Sns_perform_service);
defsubr (&Sns_convert_utf8_nfd_to_nfc); defsubr (&Sns_convert_utf8_nfd_to_nfc);
defsubr (&Sx_focus_frame); defsubr (&Sx_focus_frame);
defsubr (&Sns_popup_prefs_panel);
defsubr (&Sns_popup_font_panel); defsubr (&Sns_popup_font_panel);
defsubr (&Sns_popup_color_panel); defsubr (&Sns_popup_color_panel);

View file

@ -42,7 +42,6 @@ Author: Adrian Robert (arobert@cogsci.ucsd.edu)
extern Lisp_Object Qns; extern Lisp_Object Qns;
extern Lisp_Object Qnormal, Qbold, Qitalic, Qcondensed, Qexpanded; extern Lisp_Object Qnormal, Qbold, Qitalic, Qcondensed, Qexpanded;
static Lisp_Object Qapple, Qroman, Qmedium; static Lisp_Object Qapple, Qroman, Qmedium;
extern Lisp_Object ns_expand_space;
extern Lisp_Object Qappend; extern Lisp_Object Qappend;
extern int ns_antialias_text, ns_use_qd_smoothing; extern int ns_antialias_text, ns_use_qd_smoothing;
extern float ns_antialias_threshold; extern float ns_antialias_threshold;
@ -658,12 +657,12 @@ nsfont_open (FRAME_PTR f, Lisp_Object font_entity, int pixel_size)
min_height = [sfont ascender] - [sfont descender]; min_height = [sfont ascender] - [sfont descender];
hd = full_height - min_height; hd = full_height - min_height;
if (!NUMBERP (ns_expand_space)) /* standard height, similar to Carbon. Emacs.app: was 0.5 by default. */
error ("No expand space defined"); expand = 0.0;
shrink = 1.0;
/* ns_expand_space = 0.0 is use standard height; less shrink, more expand */ hshrink = 1.0;
expand = XFLOATINT (ns_expand_space) + 0.5;
/*
if (expand < 0.0) if (expand < 0.0)
{ {
shrink = 1 + expand; shrink = 1 + expand;
@ -672,6 +671,7 @@ nsfont_open (FRAME_PTR f, Lisp_Object font_entity, int pixel_size)
} }
else else
shrink = hshrink = 1.0; shrink = hshrink = 1.0;
*/
font_info->underpos = 2; /*[sfont underlinePosition] is often clipped out */ font_info->underpos = 2; /*[sfont underlinePosition] is often clipped out */
font_info->underwidth = [sfont underlineThickness]; font_info->underwidth = [sfont underlineThickness];

View file

@ -317,52 +317,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
@end @end
#endif /* NS_IMPL_COCOA */ #endif /* NS_IMPL_COCOA */
/* ==========================================================================
Running the preferences window
========================================================================== */
@interface EmacsPrefsController : NSObject
{
struct frame *frame;
IBOutlet NSWindow *prefsWindow;
IBOutlet NSPopUpButton *alternateModMenu;
IBOutlet NSPopUpButton *commandModMenu;
#ifdef NS_IMPL_COCOA
IBOutlet NSPopUpButton *controlModMenu;
IBOutlet NSPopUpButton *functionModMenu;
#endif
IBOutlet NSMatrix *cursorTypeMatrix;
IBOutlet NSSlider *expandSpaceSlider;
#ifdef NS_IMPL_COCOA
IBOutlet NSButton *smoothFontsCheck;
IBOutlet NSButton *useQuickdrawCheck;
IBOutlet NSButton *useSysHiliteCheck;
IBOutlet NSButton *confirmQuitCheck;
Lisp_Object prevUseHighlightColor;
#endif
float prevExpandSpace;
#ifdef NS_IMPL_GNUSTEP
/* TODO: remove as soon as someone can edit the .nib to replace the
cursor-blink widget with checkbox conn to confirmQuitCheck */
IBOutlet NSSlider *cursorBlinkSlider;
#endif
}
- (IBAction)cancel: (id)sender;
- (IBAction)ok: (id)sender;
- (IBAction)resetToDefaults: (id)sender;
- (IBAction)runHelp: (id)sender;
- (IBAction)setColors: (id)sender;
- (IBAction)setDefaultFont: (id)sender;
- (void) showForFrame: (struct frame *)f;
- (void) setPanelFromValues;
- (void) setPanelFromDefaultValues;
- (void) setValuesFromPanel;
@end
extern NSArray *ns_send_types, *ns_return_types; extern NSArray *ns_send_types, *ns_return_types;
extern EmacsMenu *mainMenu, *svcsMenu, *dockMenu; extern EmacsMenu *mainMenu, *svcsMenu, *dockMenu;
@ -402,7 +356,7 @@ typedef unsigned long NSUInteger;
#define KEY_NS_SPI_SERVICE_CALL ((1<<28)|(0<<16)|11) #define KEY_NS_SPI_SERVICE_CALL ((1<<28)|(0<<16)|11)
#define KEY_NS_NEW_FRAME ((1<<28)|(0<<16)|12) #define KEY_NS_NEW_FRAME ((1<<28)|(0<<16)|12)
#define KEY_NS_TOGGLE_TOOLBAR ((1<<28)|(0<<16)|13) #define KEY_NS_TOGGLE_TOOLBAR ((1<<28)|(0<<16)|13)
#define KEY_NS_INFO_PREFS ((1<<28)|(0<<16)|14) #define KEY_NS_SHOW_PREFS ((1<<28)|(0<<16)|14)
/* could use list to store these, but rest of emacs has a big infrastructure /* could use list to store these, but rest of emacs has a big infrastructure
for managing a table of bitmap "records" */ for managing a table of bitmap "records" */

View file

@ -136,15 +136,9 @@ Lisp_Object Qalt, Qcontrol, Qhyper, Qmeta, Qsuper;
extern Lisp_Object Qcursor_color, Qcursor_type, Qns; extern Lisp_Object Qcursor_color, Qcursor_type, Qns;
EmacsPrefsController *prefsController; /* Some preferences equivalent to those set by X resources under X are
managed through the OpenStep defaults system. We depart from X
/* Preferences equivalent to those set by X resources under X are managed behavior and refuse to read defaults when started under these
through the OpenStep defaults system. These pertain to behavior of the
graphical interface components. The one difference from X is that the
values below are SET when the user chooses save-options. This makes
things easier for users, but sometimes violates expectations when some
user-set options appear when running under -q/Q. Therefore we depart
from X behavior and refuse to read defaults when started under these
options. */ options. */
/* Set in emacs.c. */ /* Set in emacs.c. */
@ -166,11 +160,6 @@ Lisp_Object ns_control_modifier;
the Function modifer (laptops). May be any of the modifier lisp symbols. */ the Function modifer (laptops). May be any of the modifier lisp symbols. */
Lisp_Object ns_function_modifier; Lisp_Object ns_function_modifier;
/* A floating point value specifying vertical stretch (positive) or shrink
(negative) of text line spacing. Zero means default spacing.
YES indicates 0.5, NO indicates 0.0. */
Lisp_Object ns_expand_space;
/* Control via default 'GSFontAntiAlias' on OS X and GNUstep. */ /* Control via default 'GSFontAntiAlias' on OS X and GNUstep. */
Lisp_Object ns_antialias_text; Lisp_Object ns_antialias_text;
@ -234,7 +223,6 @@ static fd_set select_readfds, t_readfds;
static struct timeval select_timeout; static struct timeval select_timeout;
static int select_nfds; static int select_nfds;
static NSAutoreleasePool *outerpool; static NSAutoreleasePool *outerpool;
static BOOL ns_shutdown_properly = NO;
static struct input_event *emacs_event = NULL; static struct input_event *emacs_event = NULL;
static struct input_event *q_event_ptr = NULL; static struct input_event *q_event_ptr = NULL;
static int n_emacs_events_pending = 0; static int n_emacs_events_pending = 0;
@ -3563,7 +3551,6 @@ ns_set_default_prefs ()
ns_command_modifier = Qsuper; ns_command_modifier = Qsuper;
ns_control_modifier = Qcontrol; ns_control_modifier = Qcontrol;
ns_function_modifier = Qnone; ns_function_modifier = Qnone;
ns_expand_space = make_float (0.0);
ns_antialias_text = Qt; ns_antialias_text = Qt;
ns_antialias_threshold = 10.0; /* not exposed to lisp side */ ns_antialias_threshold = 10.0; /* not exposed to lisp side */
ns_use_qd_smoothing = Qnil; ns_use_qd_smoothing = Qnil;
@ -3838,48 +3825,20 @@ ns_term_init (Lisp_Object display_name)
ns_set_default_prefs (); ns_set_default_prefs ();
if (!ns_no_defaults) if (!ns_no_defaults)
{ {
ns_default ("AlternateModifier", &ns_alternate_modifier,
Qnil, Qnil, NO, YES);
if (NILP (ns_alternate_modifier))
ns_alternate_modifier = Qmeta;
ns_default ("CommandModifier", &ns_command_modifier,
Qnil, Qnil, NO, YES);
if (NILP (ns_command_modifier))
ns_command_modifier = Qsuper;
ns_default ("ControlModifier", &ns_control_modifier,
Qnil, Qnil, NO, YES);
if (NILP (ns_control_modifier))
ns_control_modifier = Qcontrol;
ns_default ("FunctionModifier", &ns_function_modifier,
Qnil, Qnil, NO, YES);
if (NILP (ns_function_modifier))
ns_function_modifier = Qnone;
ns_default ("ExpandSpace", &ns_expand_space,
make_float (0.5), make_float (0.0), YES, NO);
ns_default ("GSFontAntiAlias", &ns_antialias_text, ns_default ("GSFontAntiAlias", &ns_antialias_text,
Qt, Qnil, NO, NO); Qt, Qnil, NO, NO);
tmp = Qnil; tmp = Qnil;
/* this is a standard variable */
ns_default ("AppleAntiAliasingThreshold", &tmp, ns_default ("AppleAntiAliasingThreshold", &tmp,
make_float (10.0), make_float (6.0), YES, NO); make_float (10.0), make_float (6.0), YES, NO);
ns_antialias_threshold = NILP (tmp) ? 10.0 : XFLOATINT (tmp); ns_antialias_threshold = NILP (tmp) ? 10.0 : XFLOATINT (tmp);
ns_default ("UseQuickdrawSmoothing", &ns_use_qd_smoothing,
Qt, Qnil, NO, NO);
ns_default ("UseSystemHighlightColor", &ns_use_system_highlight_color,
Qt, Qnil, NO, NO);
ns_default ("ConfirmQuit", &ns_confirm_quit,
Qt, Qnil, NO, NO);
} }
if (EQ (ns_use_system_highlight_color, Qt)) ns_selection_color = [[NSUserDefaults standardUserDefaults]
{ stringForKey: @"AppleHighlightColor"];
ns_selection_color = [[NSUserDefaults standardUserDefaults] if (ns_selection_color == nil)
stringForKey: @"AppleHighlightColor"];
if (ns_selection_color == nil)
ns_selection_color = NS_SELECTION_COLOR_DEFAULT;
}
else
ns_selection_color = NS_SELECTION_COLOR_DEFAULT; ns_selection_color = NS_SELECTION_COLOR_DEFAULT;
{ {
NSColorList *cl = [NSColorList colorListNamed: @"Emacs"]; NSColorList *cl = [NSColorList colorListNamed: @"Emacs"];
@ -4008,7 +3967,6 @@ ns_term_shutdown (int sig)
if (sig == 0 || sig == SIGTERM) if (sig == 0 || sig == SIGTERM)
{ {
ns_shutdown_properly = YES;
[NSApp terminate: NSApp]; [NSApp terminate: NSApp];
} }
else // force a stack trace to happen else // force a stack trace to happen
@ -4104,9 +4062,15 @@ ns_term_shutdown (int sig)
- (void)showPreferencesWindow: (id)sender - (void)showPreferencesWindow: (id)sender
{ {
if (prefsController == nil) struct frame *emacsframe = SELECTED_FRAME ();
prefsController = [[EmacsPrefsController alloc] init]; NSEvent *theEvent = [NSApp currentEvent];
[prefsController showForFrame: SELECTED_FRAME ()];
if (!emacs_event)
return;
emacs_event->kind = NS_NONKEY_EVENT;
emacs_event->code = KEY_NS_SHOW_PREFS;
emacs_event->modifiers = 0;
EV_TRAILER (theEvent);
} }
@ -4161,47 +4125,38 @@ ns_term_shutdown (int sig)
} }
/* Termination sequences (ns_shutdown_properly): /* Termination sequences:
C-x C-c: C-x C-c:
Cmd-Q: Cmd-Q:
MenuBar | File | Exit: MenuBar | File | Exit:
ns_term_shutdown: 0
-terminate: 1
-appShouldTerminate: 1
Select Quit from App menubar: Select Quit from App menubar:
received -terminate: 0 -terminate
ns_term_shutdown: 0 KEY_NS_POWER_OFF, (save-buffers-kill-emacs)
-terminate: 1 ns_term_shutdown()
-appShouldTerminate: 1
Select Quit from Dock menu: Select Quit from Dock menu:
Logout attempt: Logout attempt:
-appShouldTerminate: 0 -appShouldTerminate
Cancel -> Nothing else Cancel -> Nothing else
Accept -> Accept ->
-terminate: 0
ns_term_shutdown: 0 -terminate
-terminate: 1 KEY_NS_POWER_OFF, (save-buffers-kill-emacs)
-appShouldTerminate: 1 ns_term_shutdown()
*/ */
- (void) terminate: (id)sender - (void) terminate: (id)sender
{ {
if (ns_shutdown_properly) struct frame *emacsframe = SELECTED_FRAME ();
[super terminate: sender];
else if (!emacs_event)
{ return;
struct frame *emacsframe = SELECTED_FRAME ();
emacs_event->kind = NS_NONKEY_EVENT;
if (!emacs_event) emacs_event->code = KEY_NS_POWER_OFF;
return; emacs_event->arg = Qt; /* mark as non-key event */
EV_TRAILER ((id)nil);
ns_shutdown_properly = YES;
emacs_event->kind = NON_ASCII_KEYSTROKE_EVENT;
emacs_event->code = KEY_NS_POWER_OFF;
EV_TRAILER ((id)nil);
}
} }
@ -4209,7 +4164,7 @@ ns_term_shutdown (int sig)
{ {
int ret; int ret;
if (ns_shutdown_properly || NILP (ns_confirm_quit)) if (NILP (ns_confirm_quit)) // || ns_shutdown_properly --> TO DO
return NSTerminateNow; return NSTerminateNow;
ret = NSRunAlertPanel([[NSProcessInfo processInfo] processName], ret = NSRunAlertPanel([[NSProcessInfo processInfo] processName],
@ -6133,203 +6088,6 @@ extern void update_window_cursor (struct window *w, int on);
/* ==========================================================================
EmacsPrefsController implementation
========================================================================== */
@implementation EmacsPrefsController
/* in Tiger+, can just do [popup selectItemWithTag: tag]; */
static void selectItemWithTag (NSPopUpButton *popup, int tag)
{
NSEnumerator *items = [[popup itemArray] objectEnumerator];
NSMenuItem *item;
while (item = [items nextObject])
{
if ([item tag] == tag)
{
[popup selectItem: item];
return;
}
}
}
- init
{
[NSBundle loadNibNamed: @"preferences" owner: self];
return self;
}
- (void) showForFrame: (struct frame *)f
{
frame = f;
[self setPanelFromValues];
[prefsWindow makeKeyAndOrderFront: self];
[prefsWindow display];
}
/* If you change this, change setPanelFromDefaultValues too. */
- (void) setPanelFromValues
{
int cursorType
= ns_lisp_to_cursor_type (get_frame_param (frame, Qcursor_type));
prevExpandSpace = XFLOATINT (ns_expand_space);
#ifdef NS_IMPL_COCOA
prevUseHighlightColor = ns_use_system_highlight_color;
#endif
[expandSpaceSlider setFloatValue: prevExpandSpace];
[cursorTypeMatrix selectCellWithTag: (cursorType == FILLED_BOX_CURSOR ? 1 :
(cursorType == BAR_CURSOR ? 2 :
(cursorType == HBAR_CURSOR ? 3 : 4)))];
selectItemWithTag (alternateModMenu,
parse_solitary_modifier (ns_alternate_modifier));
selectItemWithTag (commandModMenu,
parse_solitary_modifier (ns_command_modifier));
#ifdef NS_IMPL_COCOA
selectItemWithTag (controlModMenu,
parse_solitary_modifier (ns_control_modifier));
selectItemWithTag (functionModMenu,
parse_solitary_modifier (ns_function_modifier));
[smoothFontsCheck setState: (NILP (ns_antialias_text) ? NO : YES)];
[useQuickdrawCheck setState: (NILP (ns_use_qd_smoothing) ? NO : YES)];
[useSysHiliteCheck setState: (NILP (prevUseHighlightColor) ? NO : YES)];
[confirmQuitCheck setState: (NILP (ns_confirm_quit) ? NO : YES)];
#endif
}
/* This and ns_set_default_prefs should be changed together. */
- (void) setPanelFromDefaultValues
{
[expandSpaceSlider setFloatValue: 0.0];
[cursorTypeMatrix selectCellWithTag: 1]; /* filled box */
selectItemWithTag (alternateModMenu, meta_modifier);
selectItemWithTag (commandModMenu, super_modifier);
#ifdef NS_IMPL_COCOA
selectItemWithTag (controlModMenu, ctrl_modifier);
selectItemWithTag (functionModMenu, 0); /* none */
[smoothFontsCheck setState: YES];
[useQuickdrawCheck setState: NO];
[useSysHiliteCheck setState: YES];
#endif
}
- (void) setValuesFromPanel
{
int altTag = [[alternateModMenu selectedItem] tag];
int cmdTag = [[commandModMenu selectedItem] tag];
#ifdef NS_IMPL_COCOA
int ctrlTag = [[controlModMenu selectedItem] tag];
int fnTag = [[functionModMenu selectedItem] tag];
#endif
float expandSpace = [expandSpaceSlider floatValue];
int cursorTag = [[cursorTypeMatrix selectedCell] tag];
Lisp_Object cursor_type = ns_cursor_type_to_lisp
( cursorTag == 1 ? FILLED_BOX_CURSOR
: cursorTag == 2 ? BAR_CURSOR
: cursorTag == 3 ? HBAR_CURSOR : HOLLOW_BOX_CURSOR);
if (expandSpace != prevExpandSpace)
{
ns_expand_space = make_float (expandSpace);
/* TODO: more needed: store needed metrics in nsfont_info, update
frame default font max_bounds and fontp, recompute faces */
/* FRAME_LINE_HEIGHT (frame) *= (expandSpace / prevExpandSpace);
x_set_window_size (frame, 0, frame->text_cols, frame->text_lines); */
prevExpandSpace = expandSpace;
}
store_frame_param (frame, Qcursor_type, cursor_type);
x_set_cursor_type (frame, cursor_type, Qnil); /* FIXME: do only if changed */
ns_alternate_modifier = ns_mod_to_lisp (altTag);
ns_command_modifier = ns_mod_to_lisp (cmdTag);
#ifdef NS_IMPL_COCOA
ns_control_modifier = ns_mod_to_lisp (ctrlTag);
ns_function_modifier = ns_mod_to_lisp (fnTag);
ns_antialias_text = [smoothFontsCheck state] ? Qt : Qnil;
ns_use_qd_smoothing = [useQuickdrawCheck state] ? Qt : Qnil;
ns_use_system_highlight_color = [useSysHiliteCheck state] ? Qt : Qnil;
ns_confirm_quit = [confirmQuitCheck state] ? Qt : Qnil;
if (! EQ (ns_use_system_highlight_color, prevUseHighlightColor))
{
prevUseHighlightColor = ns_use_system_highlight_color;
if (EQ (ns_use_system_highlight_color, Qt))
{
ns_selection_color = [[NSUserDefaults standardUserDefaults]
stringForKey: @"AppleHighlightColor"];
if (ns_selection_color == nil)
ns_selection_color = NS_SELECTION_COLOR_DEFAULT;
}
else
ns_selection_color = NS_SELECTION_COLOR_DEFAULT;
}
#endif /* NS_IMPL_COCOA */
Fcall_interactively (intern ("ns-save-preferences"), Qnil, Qnil);
}
/* buttons */
- (IBAction)cancel: (id)sender
{
[prefsWindow close];
}
- (IBAction)ok: (id)sender
{
[self setValuesFromPanel];
[prefsWindow close];
}
- (IBAction)resetToDefaults: (id)sender
{
[self setPanelFromDefaultValues];
}
- (IBAction)runHelp: (id)sender
{
struct frame *emacsframe = frame;
if (!emacs_event)
return;
ns_raise_frame(frame);
emacs_event->kind = NS_NONKEY_EVENT;
emacs_event->code = KEY_NS_INFO_PREFS;
EV_TRAILER ((id)nil);
}
- (IBAction)setColors: (id)sender
{
Lisp_Object lispFrame;
XSETFRAME (lispFrame, frame);
ns_raise_frame(frame);
Fns_popup_color_panel (lispFrame);
}
- (IBAction)setDefaultFont: (id)sender
{
Lisp_Object lispFrame;
XSETFRAME (lispFrame, frame);
ns_raise_frame(frame);
Fns_popup_font_panel (lispFrame);
}
@end /* EmacsPrefsController */
/* ========================================================================== /* ==========================================================================
@ -6492,11 +6250,6 @@ Set to control, meta, alt, super, or hyper means it is taken to be that key.\n\
Set to none means that the function key is not interpreted by Emacs at all,\n\ Set to none means that the function key is not interpreted by Emacs at all,\n\
allowing it to be used at a lower level for accented character entry."); allowing it to be used at a lower level for accented character entry.");
DEFVAR_LISP ("ns-expand-space", &ns_expand_space,
"Amount by which spacing between lines is expanded (positive)\n\
or shrunk (negative). Zero (the default) means standard line height.\n\
(This variable should only be read, never set.)");
DEFVAR_LISP ("ns-antialias-text", &ns_antialias_text, DEFVAR_LISP ("ns-antialias-text", &ns_antialias_text,
"Non-nil (the default) means to render text antialiased. Only has an effect on OS X Panther and above."); "Non-nil (the default) means to render text antialiased. Only has an effect on OS X Panther and above.");