[Xfce4-commits] <midori:master> Render invalid URI in entry with underline in GTK+3
Christian Dywan
noreply at xfce.org
Wed Aug 29 01:10:04 CEST 2012
Updating branch refs/heads/master
to 36c3a4925a1d58c91e76da863b654f8d45d769cd (commit)
from de771db75d4762d33d1f68056ca021c0701f6330 (commit)
commit 36c3a4925a1d58c91e76da863b654f8d45d769cd
Author: Christian Dywan <christian at twotoasts.de>
Date: Tue Aug 28 23:56:58 2012 +0200
Render invalid URI in entry with underline in GTK+3
GTK+2 shows a red background in this case.
katze/katze-utils.c | 32 ++++++++++++++++++++++++++++++++
1 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/katze/katze-utils.c b/katze/katze-utils.c
index 68f2771..1433f43 100644
--- a/katze/katze-utils.c
+++ b/katze/katze-utils.c
@@ -1531,6 +1531,11 @@ katze_uri_entry_changed_cb (GtkWidget* entry,
gboolean valid = midori_uri_is_location (uri);
if (!valid && g_object_get_data (G_OBJECT (entry), "allow_%s"))
valid = uri && g_str_has_prefix (uri, "%s");
+
+ #if GTK_CHECK_VERSION (3, 2, 0)
+ g_object_set_data (G_OBJECT (entry), "invalid", GINT_TO_POINTER (*uri && !valid));
+ gtk_widget_queue_draw (entry);
+ #else
if (*uri && !valid)
{
GdkColor bg_color = { 0 };
@@ -1545,11 +1550,34 @@ katze_uri_entry_changed_cb (GtkWidget* entry,
gtk_widget_modify_base (entry, GTK_STATE_NORMAL, NULL);
gtk_widget_modify_text (entry, GTK_STATE_NORMAL, NULL);
}
+ #endif
if (other_widget != NULL)
gtk_widget_set_sensitive (other_widget, valid);
}
+#if GTK_CHECK_VERSION (3, 2, 0)
+static gboolean
+katze_uri_entry_draw_cb (GtkWidget* entry,
+ cairo_t* cr,
+ GtkWidget* other_widget)
+{
+ const GdkRGBA color = { 0.9, 0., 0., 1. };
+ double width = gtk_widget_get_allocated_width (entry);
+ double height = gtk_widget_get_allocated_height (entry);
+
+ if (!g_object_get_data (G_OBJECT (entry), "invalid"))
+ return FALSE;
+
+ /* FIXME: error-underline-color requires GtkTextView */
+ gdk_cairo_set_source_rgba (cr, &color);
+
+ pango_cairo_show_error_underline (cr, width * 0.15, height / 1.9,
+ width * 0.75, height / 1.9 / 2);
+ return TRUE;
+}
+#endif
+
/**
* katze_uri_entry_new:
* @other_widget: a #GtkWidget, or %NULL
@@ -1572,6 +1600,10 @@ katze_uri_entry_new (GtkWidget* other_widget)
g_themed_icon_new_with_default_fallbacks ("text-html-symbolic"));
g_signal_connect (entry, "changed",
G_CALLBACK (katze_uri_entry_changed_cb), other_widget);
+ #if GTK_CHECK_VERSION (3, 2, 0)
+ g_signal_connect_after (entry, "draw",
+ G_CALLBACK (katze_uri_entry_draw_cb), other_widget);
+ #endif
return entry;
}
More information about the Xfce4-commits
mailing list