From a24f710395f9777cb9f8b000300e5e9c892d7794 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Sat, 23 Jul 2022 10:52:30 +0200 Subject: [PATCH] Don't use the Gtk region face * lisp/faces.el (region): Don't use the Gtk region face, because it produces low contrast combinations (bug#46493). * src/gtkutil.h: * src/gtkutil.c (xg_check_special_colors): Remove. * src/xfns.c (x_defined_color): * src/pgtkterm.c (pgtk_defined_color): Don't call. --- etc/NEWS | 7 +++++ lisp/faces.el | 3 -- src/gtkutil.c | 82 -------------------------------------------------- src/gtkutil.h | 3 -- src/pgtkterm.c | 4 +-- src/xfns.c | 6 +--- 6 files changed, 9 insertions(+), 96 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 666699e8c66..780dbfa51e8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -166,6 +166,13 @@ of 'user-emacs-directory'. * Incompatible changes in Emacs 29.1 +--- +*** The Gtk selection face is no longer used for the region. +The combination of a Gtk-controlled background and a foreground colour +controlled by the internal Emacs machinery led to low-contrast faces +in common default setups. Emacs now uses the same 'region' face on +Gtk and non-Gtk setups. + ** Dired --- diff --git a/lisp/faces.el b/lisp/faces.el index f04ea9115ee..b2589c5c06a 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -2502,9 +2502,6 @@ default." (defface region '((((class color) (min-colors 88) (background dark)) :background "blue3" :extend t) - (((class color) (min-colors 88) (background light) (type gtk)) - :distant-foreground "gtk_selection_fg_color" - :background "gtk_selection_bg_color" :extend t) (((class color) (min-colors 88) (background light) (type ns)) :distant-foreground "ns_selection_fg_color" :background "ns_selection_bg_color" :extend t) diff --git a/src/gtkutil.c b/src/gtkutil.c index a6bba096a43..87f166bf54d 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -727,88 +727,6 @@ get_utf8_string (const char *str) return utf8_str; } -/* Check for special colors used in face spec for region face. - The colors are fetched from the Gtk+ theme. - Return true if color was found, false if not. */ - -bool -xg_check_special_colors (struct frame *f, - const char *color_name, - Emacs_Color *color) -{ - bool success_p; - bool get_bg; - bool get_fg; -#ifdef HAVE_GTK3 - GtkStyleContext *gsty; - GdkRGBA col; - char buf[sizeof "rgb://rrrr/gggg/bbbb"]; - int state; - GdkRGBA *c; - unsigned short r, g, b; -#else - GtkStyle *gsty; - GdkColor *grgb; -#endif - - get_bg = !strcmp ("gtk_selection_bg_color", color_name); - get_fg = !get_bg && !strcmp ("gtk_selection_fg_color", color_name); - success_p = false; - -#ifdef HAVE_PGTK - while (FRAME_PARENT_FRAME (f)) - f = FRAME_PARENT_FRAME (f); -#endif - - if (!FRAME_GTK_WIDGET (f) || !(get_bg || get_fg)) - return success_p; - - block_input (); -#ifdef HAVE_GTK3 - gsty = gtk_widget_get_style_context (FRAME_GTK_OUTER_WIDGET (f)); - state = GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_FOCUSED; - - if (get_fg) - gtk_style_context_get_color (gsty, state, &col); - else - { - /* FIXME: Retrieving the background color is deprecated in - GTK+ 3.16. New versions of GTK+ don't use the concept of a - single background color any more, so we shouldn't query for - it. */ - gtk_style_context_get (gsty, state, - GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c, - NULL); - col = *c; - gdk_rgba_free (c); - } - - r = col.red * 65535; - g = col.green * 65535; - b = col.blue * 65535; -#ifndef HAVE_PGTK - sprintf (buf, "rgb:%04x/%04x/%04x", r, g, b); - success_p = x_parse_color (f, buf, color) != 0; -#else - sprintf (buf, "#%04x%04x%04x", r, g, b); - success_p = pgtk_parse_color (f, buf, color) != 0; -#endif -#else - gsty = gtk_widget_get_style (FRAME_GTK_WIDGET (f)); - grgb = (get_bg ? &gsty->bg[GTK_STATE_SELECTED] - : &gsty->fg[GTK_STATE_SELECTED]); - - color->red = grgb->red; - color->green = grgb->green; - color->blue = grgb->blue; - color->pixel = grgb->pixel; - success_p = 1; -#endif - unblock_input (); - return success_p; -} - - /*********************************************************************** Tooltips diff --git a/src/gtkutil.h b/src/gtkutil.h index 190d6628314..32b1fedbaa6 100644 --- a/src/gtkutil.h +++ b/src/gtkutil.h @@ -179,9 +179,6 @@ extern GdkCursor * xg_create_default_cursor (GdkDisplay *gdpy); extern bool xg_create_frame_widgets (struct frame *f); extern void xg_free_frame_widgets (struct frame *f); extern void xg_set_background_color (struct frame *f, unsigned long bg); -extern bool xg_check_special_colors (struct frame *f, - const char *color_name, - Emacs_Color *color); #ifdef HAVE_PGTK extern void xg_create_frame_outer_widgets (struct frame *f); #endif diff --git a/src/pgtkterm.c b/src/pgtkterm.c index b283cef7cde..54e70255f45 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c @@ -6913,9 +6913,7 @@ pgtk_defined_color (struct frame *f, const char *name, int r; block_input (); - r = xg_check_special_colors (f, name, color_def); - if (!r) - r = pgtk_parse_color (f, name, color_def); + r = pgtk_parse_color (f, name, color_def); unblock_input (); return r; } diff --git a/src/xfns.c b/src/xfns.c index ce867c1619c..7d394bd4f50 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -670,11 +670,7 @@ x_defined_color (struct frame *f, const char *color_name, Colormap cmap = FRAME_X_COLORMAP (f); block_input (); -#ifdef USE_GTK - success_p = xg_check_special_colors (f, color_name, color); -#endif - if (!success_p) - success_p = x_parse_color (f, color_name, color) != 0; + success_p = x_parse_color (f, color_name, color) != 0; if (success_p && alloc_p) success_p = x_alloc_nearest_color (f, cmap, color); unblock_input (); -- 2.39.5