From 1610938f74bd8cee71c0190deb470b5bd102d51f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Sat, 28 Sep 2013 12:01:50 +0200 Subject: [PATCH] Pick up default selection color on OSX when user defaults are not set. * lisp/faces.el (region): Change ns_selection_color to ns_selection_fg_color, add ns_selection_bg_color. * src/nsterm.h (NS_SELECTION_BG_COLOR_DEFAULT): Renamed from NS_SELECTION_COLOR_DEFAULT. (NS_SELECTION_FG_COLOR_DEFAULT): New. * src/nsterm.m (ns_selection_color): Remove. (ns_get_color): Check for ns_selection_(fg|bg)_color using NSColor selectedText(Background)Color. Only for COCOA. (ns_term_init): Remove assignment of ns_selection_color, logic moved to ns_get_color. --- lisp/ChangeLog | 5 +++++ lisp/faces.el | 3 ++- src/ChangeLog | 12 ++++++++++++ src/nsterm.h | 3 ++- src/nsterm.m | 44 +++++++++++++++++++++++++++++++++----------- 5 files changed, 54 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 971cc182448..0affac1deaa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-09-28 Jan Djärv + + * faces.el (region): Change ns_selection_color to + ns_selection_fg_color, add ns_selection_bg_color. + 2013-09-28 Leo Liu * progmodes/octave.el (inferior-octave-completion-table) diff --git a/lisp/faces.el b/lisp/faces.el index b135755f165..589a1e1ca75 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -2259,7 +2259,8 @@ terminal type to a different value." :foreground "gtk_selection_fg_color" :background "gtk_selection_bg_color") (((class color) (min-colors 88) (background light) (type ns)) - :background "ns_selection_color") + :foreground "ns_selection_fg_color" + :background "ns_selection_bg_color") (((class color) (min-colors 88) (background light)) :background "lightgoldenrod2") (((class color) (min-colors 16) (background dark)) diff --git a/src/ChangeLog b/src/ChangeLog index ec36db90dfa..4c298873dcc 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2013-09-28 Jan Djärv + + * nsterm.m (ns_selection_color): Remove. + (ns_get_color): Check for ns_selection_(fg|bg)_color using + NSColor selectedText(Background)Color. Only for COCOA. + (ns_term_init): Remove assignment of ns_selection_color, logic + moved to ns_get_color. + + * nsterm.h (NS_SELECTION_BG_COLOR_DEFAULT): Renamed from + NS_SELECTION_COLOR_DEFAULT. + (NS_SELECTION_FG_COLOR_DEFAULT): New. + 2013-09-28 Eli Zaretskii * xdisp.c (Fdump_tool_bar_row): Ifdef away the body if 'struct diff --git a/src/nsterm.h b/src/nsterm.h index 9f7767b312e..e99ed3d289a 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -911,7 +911,8 @@ extern char gnustep_base_version[]; /* version tracking */ #define NS_SCROLL_BAR_WIDTH_DEFAULT [EmacsScroller scrollerWidth] /* This is to match emacs on other platforms, ugly though it is. */ -#define NS_SELECTION_COLOR_DEFAULT @"LightGoldenrod2"; +#define NS_SELECTION_BG_COLOR_DEFAULT @"LightGoldenrod2"; +#define NS_SELECTION_FG_COLOR_DEFAULT @"Black"; #define RESIZE_HANDLE_SIZE 12 /* Little utility macros */ diff --git a/src/nsterm.m b/src/nsterm.m index 65c67eb9b56..47000da94da 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -179,9 +179,6 @@ static Lisp_Object QUTF8_STRING; no way to control this behavior. */ float ns_antialias_threshold; -/* Used to pick up AppleHighlightColor on OS X */ -NSString *ns_selection_color; - NSArray *ns_send_types =0, *ns_return_types =0, *ns_drag_types =0; NSString *ns_app_name = @"Emacs"; /* default changed later */ @@ -1454,11 +1451,41 @@ ns_get_color (const char *name, NSColor **col) /*fprintf (stderr, "ns_get_color: '%s'\n", name); */ block_input (); - if ([nsname isEqualToString: @"ns_selection_color"]) +#ifdef NS_IMPL_COCOA + if ([nsname isEqualToString: @"ns_selection_bg_color"]) + { + NSString *defname = [[NSUserDefaults standardUserDefaults] + stringForKey: @"AppleHighlightColor"]; + + if (defname != nil) + nsname = defname; + else if ((new = [NSColor selectedTextBackgroundColor]) != nil) + { + *col = [new colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; + unblock_input (); + return 0; + } + else + nsname = NS_SELECTION_BG_COLOR_DEFAULT; + + name = [nsname UTF8String]; + } + else if ([nsname isEqualToString: @"ns_selection_fg_color"]) { - nsname = ns_selection_color; - name = [ns_selection_color UTF8String]; + /* NOTE: OSX applications normally don't set foreground selection, but + text may be unreadable if we don't. + */ + if ((new = [NSColor selectedTextColor]) != nil) + { + *col = [new colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; + unblock_input (); + return 0; + } + + nsname = NS_SELECTION_FG_COLOR_DEFAULT; + name = [nsname UTF8String]; } +#endif // NS_IMPL_COCOA /* First, check for some sort of numeric specification. */ hex[0] = '\0'; @@ -4168,11 +4195,6 @@ ns_term_init (Lisp_Object display_name) ns_antialias_threshold = NILP (tmp) ? 10.0 : XFLOATINT (tmp); } - ns_selection_color = [[NSUserDefaults standardUserDefaults] - stringForKey: @"AppleHighlightColor"]; - if (ns_selection_color == nil) - ns_selection_color = NS_SELECTION_COLOR_DEFAULT; - { NSColorList *cl = [NSColorList colorListNamed: @"Emacs"]; -- 2.39.2