[evolution-data-server/gnome-3-38] EBufferTagger: Derive link color from the theme
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-38] EBufferTagger: Derive link color from the theme
- Date: Fri, 13 Nov 2020 11:18:03 +0000 (UTC)
commit 69e8d0d829af1031b2ad379552802e1b1163b5e7
Author: Milan Crha <mcrha redhat com>
Date: Fri Nov 13 12:15:19 2020 +0100
EBufferTagger: Derive link color from the theme
There had been used the 'blue' color, which doesn't look correctly
in dark themes and can be totally wrong for any theme.
Related to https://gitlab.gnome.org/GNOME/gtk/-/issues/3344
src/libedataserverui/e-buffer-tagger.c | 45 ++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
---
diff --git a/src/libedataserverui/e-buffer-tagger.c b/src/libedataserverui/e-buffer-tagger.c
index c52dc78dd..7110139fb 100644
--- a/src/libedataserverui/e-buffer-tagger.c
+++ b/src/libedataserverui/e-buffer-tagger.c
@@ -467,6 +467,47 @@ update_mouse_cursor (GtkTextView *text_view,
}
}
+static void
+textview_style_updated_cb (GtkWidget *textview,
+ gpointer user_data)
+{
+ GtkStyleContext *context;
+ GtkStateFlags state;
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *tag_table;
+ GtkTextTag *tag;
+ GdkRGBA rgba;
+
+ g_return_if_fail (GTK_IS_WIDGET (textview));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
+ tag_table = gtk_text_buffer_get_tag_table (buffer);
+ tag = gtk_text_tag_table_lookup (tag_table, E_BUFFER_TAGGER_LINK_TAG);
+
+ if (!tag)
+ return;
+
+ context = gtk_widget_get_style_context (textview);
+
+ rgba.red = 0;
+ rgba.green = 0;
+ rgba.blue = 1;
+ rgba.alpha = 1;
+
+ state = gtk_style_context_get_state (context);
+ state = state & (~(GTK_STATE_FLAG_VISITED | GTK_STATE_FLAG_LINK));
+ state = state | GTK_STATE_FLAG_LINK;
+
+ gtk_style_context_save (context);
+ /* Remove the 'view' style, because it can "confuse" some themes */
+ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_VIEW);
+ gtk_style_context_set_state (context, state);
+ gtk_style_context_get_color (context, state, &rgba);
+ gtk_style_context_restore (context);
+
+ g_object_set (G_OBJECT (tag), "foreground-rgba", &rgba, NULL);
+}
+
static gboolean
textview_query_tooltip (GtkTextView *text_view,
gint x,
@@ -715,6 +756,9 @@ e_buffer_tagger_connect (GtkTextView *textview)
gtk_widget_set_has_tooltip (GTK_WIDGET (textview), TRUE);
+ g_signal_connect (
+ textview, "style-updated",
+ G_CALLBACK (textview_style_updated_cb), NULL);
g_signal_connect (
textview, "query-tooltip",
G_CALLBACK (textview_query_tooltip), NULL);
@@ -759,6 +803,7 @@ e_buffer_tagger_disconnect (GtkTextView *textview)
gtk_widget_set_has_tooltip (GTK_WIDGET (textview), FALSE);
+ g_signal_handlers_disconnect_by_func (textview, G_CALLBACK (textview_style_updated_cb), NULL);
g_signal_handlers_disconnect_by_func (textview, G_CALLBACK (textview_query_tooltip), NULL);
g_signal_handlers_disconnect_by_func (textview, G_CALLBACK (textview_key_press_event), NULL);
g_signal_handlers_disconnect_by_func (textview, G_CALLBACK (textview_event_after), NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]