diff options
| author | Po Lu | 2022-07-23 17:02:22 +0800 |
|---|---|---|
| committer | Po Lu | 2022-07-23 17:03:04 +0800 |
| commit | 49d16a7eb4932a83259f3c0db848e5181df5539d (patch) | |
| tree | 8b3dab0128443cb4eb46c8b183c82c13747fa860 /src | |
| parent | a24f710395f9777cb9f8b000300e5e9c892d7794 (diff) | |
| download | emacs-49d16a7eb4932a83259f3c0db848e5181df5539d.tar.gz emacs-49d16a7eb4932a83259f3c0db848e5181df5539d.zip | |
Undo C parts of "Don't use the Gtk region face"
This reverts commit a24f710395f9777cb9f8b000300e5e9c892d7794, apart
from the change to faces.el and NEWS.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gtkutil.c | 82 | ||||
| -rw-r--r-- | src/gtkutil.h | 3 | ||||
| -rw-r--r-- | src/pgtkterm.c | 4 | ||||
| -rw-r--r-- | src/xfns.c | 6 |
4 files changed, 93 insertions, 2 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index 87f166bf54d..a6bba096a43 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -727,6 +727,88 @@ get_utf8_string (const char *str) | |||
| 727 | return utf8_str; | 727 | return utf8_str; |
| 728 | } | 728 | } |
| 729 | 729 | ||
| 730 | /* Check for special colors used in face spec for region face. | ||
| 731 | The colors are fetched from the Gtk+ theme. | ||
| 732 | Return true if color was found, false if not. */ | ||
| 733 | |||
| 734 | bool | ||
| 735 | xg_check_special_colors (struct frame *f, | ||
| 736 | const char *color_name, | ||
| 737 | Emacs_Color *color) | ||
| 738 | { | ||
| 739 | bool success_p; | ||
| 740 | bool get_bg; | ||
| 741 | bool get_fg; | ||
| 742 | #ifdef HAVE_GTK3 | ||
| 743 | GtkStyleContext *gsty; | ||
| 744 | GdkRGBA col; | ||
| 745 | char buf[sizeof "rgb://rrrr/gggg/bbbb"]; | ||
| 746 | int state; | ||
| 747 | GdkRGBA *c; | ||
| 748 | unsigned short r, g, b; | ||
| 749 | #else | ||
| 750 | GtkStyle *gsty; | ||
| 751 | GdkColor *grgb; | ||
| 752 | #endif | ||
| 753 | |||
| 754 | get_bg = !strcmp ("gtk_selection_bg_color", color_name); | ||
| 755 | get_fg = !get_bg && !strcmp ("gtk_selection_fg_color", color_name); | ||
| 756 | success_p = false; | ||
| 757 | |||
| 758 | #ifdef HAVE_PGTK | ||
| 759 | while (FRAME_PARENT_FRAME (f)) | ||
| 760 | f = FRAME_PARENT_FRAME (f); | ||
| 761 | #endif | ||
| 762 | |||
| 763 | if (!FRAME_GTK_WIDGET (f) || !(get_bg || get_fg)) | ||
| 764 | return success_p; | ||
| 765 | |||
| 766 | block_input (); | ||
| 767 | #ifdef HAVE_GTK3 | ||
| 768 | gsty = gtk_widget_get_style_context (FRAME_GTK_OUTER_WIDGET (f)); | ||
| 769 | state = GTK_STATE_FLAG_SELECTED | GTK_STATE_FLAG_FOCUSED; | ||
| 770 | |||
| 771 | if (get_fg) | ||
| 772 | gtk_style_context_get_color (gsty, state, &col); | ||
| 773 | else | ||
| 774 | { | ||
| 775 | /* FIXME: Retrieving the background color is deprecated in | ||
| 776 | GTK+ 3.16. New versions of GTK+ don't use the concept of a | ||
| 777 | single background color any more, so we shouldn't query for | ||
| 778 | it. */ | ||
| 779 | gtk_style_context_get (gsty, state, | ||
| 780 | GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c, | ||
| 781 | NULL); | ||
| 782 | col = *c; | ||
| 783 | gdk_rgba_free (c); | ||
| 784 | } | ||
| 785 | |||
| 786 | r = col.red * 65535; | ||
| 787 | g = col.green * 65535; | ||
| 788 | b = col.blue * 65535; | ||
| 789 | #ifndef HAVE_PGTK | ||
| 790 | sprintf (buf, "rgb:%04x/%04x/%04x", r, g, b); | ||
| 791 | success_p = x_parse_color (f, buf, color) != 0; | ||
| 792 | #else | ||
| 793 | sprintf (buf, "#%04x%04x%04x", r, g, b); | ||
| 794 | success_p = pgtk_parse_color (f, buf, color) != 0; | ||
| 795 | #endif | ||
| 796 | #else | ||
| 797 | gsty = gtk_widget_get_style (FRAME_GTK_WIDGET (f)); | ||
| 798 | grgb = (get_bg ? &gsty->bg[GTK_STATE_SELECTED] | ||
| 799 | : &gsty->fg[GTK_STATE_SELECTED]); | ||
| 800 | |||
| 801 | color->red = grgb->red; | ||
| 802 | color->green = grgb->green; | ||
| 803 | color->blue = grgb->blue; | ||
| 804 | color->pixel = grgb->pixel; | ||
| 805 | success_p = 1; | ||
| 806 | #endif | ||
| 807 | unblock_input (); | ||
| 808 | return success_p; | ||
| 809 | } | ||
| 810 | |||
| 811 | |||
| 730 | 812 | ||
| 731 | /*********************************************************************** | 813 | /*********************************************************************** |
| 732 | Tooltips | 814 | Tooltips |
diff --git a/src/gtkutil.h b/src/gtkutil.h index 32b1fedbaa6..190d6628314 100644 --- a/src/gtkutil.h +++ b/src/gtkutil.h | |||
| @@ -179,6 +179,9 @@ extern GdkCursor * xg_create_default_cursor (GdkDisplay *gdpy); | |||
| 179 | extern bool xg_create_frame_widgets (struct frame *f); | 179 | extern bool xg_create_frame_widgets (struct frame *f); |
| 180 | extern void xg_free_frame_widgets (struct frame *f); | 180 | extern void xg_free_frame_widgets (struct frame *f); |
| 181 | extern void xg_set_background_color (struct frame *f, unsigned long bg); | 181 | extern void xg_set_background_color (struct frame *f, unsigned long bg); |
| 182 | extern bool xg_check_special_colors (struct frame *f, | ||
| 183 | const char *color_name, | ||
| 184 | Emacs_Color *color); | ||
| 182 | #ifdef HAVE_PGTK | 185 | #ifdef HAVE_PGTK |
| 183 | extern void xg_create_frame_outer_widgets (struct frame *f); | 186 | extern void xg_create_frame_outer_widgets (struct frame *f); |
| 184 | #endif | 187 | #endif |
diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 54e70255f45..b283cef7cde 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c | |||
| @@ -6913,7 +6913,9 @@ pgtk_defined_color (struct frame *f, const char *name, | |||
| 6913 | int r; | 6913 | int r; |
| 6914 | 6914 | ||
| 6915 | block_input (); | 6915 | block_input (); |
| 6916 | r = pgtk_parse_color (f, name, color_def); | 6916 | r = xg_check_special_colors (f, name, color_def); |
| 6917 | if (!r) | ||
| 6918 | r = pgtk_parse_color (f, name, color_def); | ||
| 6917 | unblock_input (); | 6919 | unblock_input (); |
| 6918 | return r; | 6920 | return r; |
| 6919 | } | 6921 | } |
diff --git a/src/xfns.c b/src/xfns.c index 7d394bd4f50..ce867c1619c 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -670,7 +670,11 @@ x_defined_color (struct frame *f, const char *color_name, | |||
| 670 | Colormap cmap = FRAME_X_COLORMAP (f); | 670 | Colormap cmap = FRAME_X_COLORMAP (f); |
| 671 | 671 | ||
| 672 | block_input (); | 672 | block_input (); |
| 673 | success_p = x_parse_color (f, color_name, color) != 0; | 673 | #ifdef USE_GTK |
| 674 | success_p = xg_check_special_colors (f, color_name, color); | ||
| 675 | #endif | ||
| 676 | if (!success_p) | ||
| 677 | success_p = x_parse_color (f, color_name, color) != 0; | ||
| 674 | if (success_p && alloc_p) | 678 | if (success_p && alloc_p) |
| 675 | success_p = x_alloc_nearest_color (f, cmap, color); | 679 | success_p = x_alloc_nearest_color (f, cmap, color); |
| 676 | unblock_input (); | 680 | unblock_input (); |