summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorDavid Trowbridge <trowbrds@gmail.com>2013-08-19 13:41:39 -0400
committerMatthias Clasen <mclasen@redhat.com>2013-08-19 13:41:39 -0400
commita864f9d052aa66430b5db572b9bb740b5beeb9a8 (patch)
tree94ccd4f7208fe809b8a68821438b87107a772e0b /gtk
parentd5e5616ae626fc68535984cb239f1f497dbf0048 (diff)
downloadgtk+-a864f9d052aa66430b5db572b9bb740b5beeb9a8.tar.gz
Fix GtkEntry drawing to provide visual feedback when editable=FALSE.
GtkEntry currently draws exactly the same no matter what the state of the 'editable' property. This is pretty confusing for users because there's no visual feedback at all, it just seems like their keyboard is broken. This change adds a "read-only" class to the StyleContext, which will continue to allow the user to select/copy the text, but will draw the entry as if it were insensitive, providing some indication that the contents can't be changed. Signed-off-by: David Trowbridge <trowbrds@gmail.com> http://bugzilla.gnome.org/show_bug.cgi?id=694831
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtk-default.css5
-rw-r--r--gtk/gtkentry.c9
-rw-r--r--gtk/gtkstylecontext.h6
3 files changed, 19 insertions, 1 deletions
diff --git a/gtk/gtk-default.css b/gtk/gtk-default.css
index b125cf68e2..5f5f65188c 100644
--- a/gtk/gtk-default.css
+++ b/gtk/gtk-default.css
@@ -54,6 +54,11 @@ GtkTreeView.dnd {
color: shade (@bg_color, 0.7);
}
+.entry.read-only {
+ border-color: shade (@bg_color, 0.7);
+ background-color: shade (@bg_color, 0.9);
+}
+
.entry:selected {
background-color: shade (@bg_color, 0.9);
color: @fg_color;
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 76bb87409d..8c32bd07f1 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -2054,6 +2054,7 @@ gtk_entry_set_property (GObject *object,
case PROP_EDITABLE:
{
gboolean new_value = g_value_get_boolean (value);
+ GtkStyleContext *context = gtk_widget_get_style_context (GTK_WIDGET (entry));
if (new_value != priv->editable)
{
@@ -2067,7 +2068,13 @@ gtk_entry_set_property (GObject *object,
priv->preedit_length = 0;
priv->preedit_cursor = 0;
+
+ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_READ_ONLY);
}
+ else
+ {
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_READ_ONLY);
+ }
priv->editable = new_value;
@@ -3705,7 +3712,7 @@ gtk_entry_draw_frame (GtkWidget *widget,
if (priv->has_frame)
gtk_render_frame (context, cr,
- x, y, width, height);
+ x, y, width, height);
gtk_entry_draw_progress (widget, context, cr);
diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h
index 729613c036..29f3ebfab8 100644
--- a/gtk/gtkstylecontext.h
+++ b/gtk/gtkstylecontext.h
@@ -923,6 +923,12 @@ void gtk_style_context_set_frame_clock (GtkStyleContext *context,
GDK_AVAILABLE_IN_3_8
GdkFrameClock *gtk_style_context_get_frame_clock (GtkStyleContext *context);
+/**
+ * GTK_STYLE_CLASS_READ_ONLY:
+ *
+ * A CSS class used to indicate a read-only state.
+ */
+#define GTK_STYLE_CLASS_READ_ONLY "read-only"
GDK_DEPRECATED_IN_3_8_FOR(gtk_style_context_set_state)
void gtk_style_context_set_direction (GtkStyleContext *context,