[gtk+] GtkModelButton: Update widget state
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkModelButton: Update widget state
- Date: Wed, 2 Jul 2014 19:13:45 +0000 (UTC)
commit 8060ac6dddaf39475f0f4cb1c8b2635c175d2381
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jul 2 15:12:46 2014 -0400
GtkModelButton: Update widget state
We were only setting the state transiently in ::draw, leading
to various drawing anomalies, such as labels not picking up
the appropriate color from BUTTON styles.
gtk/gtkmodelbutton.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c
index 8dab9af..c185163 100644
--- a/gtk/gtkmodelbutton.c
+++ b/gtk/gtkmodelbutton.c
@@ -134,11 +134,14 @@ gtk_model_button_set_accel (GtkModelButton *button,
/* ignore */
}
+static void gtk_model_button_update_state (GtkModelButton *button);
+
static void
gtk_model_button_set_toggled (GtkModelButton *button,
gboolean toggled)
{
button->toggled = toggled;
+ gtk_model_button_update_state (button);
gtk_widget_queue_draw (GTK_WIDGET (button));
}
@@ -566,6 +569,12 @@ get_button_state (GtkModelButton *model_button)
return state;
}
+static void
+gtk_model_button_update_state (GtkModelButton *button)
+{
+ gtk_widget_set_state_flags (GTK_WIDGET (button), get_button_state (button), TRUE);
+}
+
static gint
gtk_model_button_draw (GtkWidget *widget,
cairo_t *cr)
@@ -668,10 +677,39 @@ out:
}
static void
+gtk_model_button_pressed (GtkButton *button)
+{
+ button->priv->button_down = TRUE;
+ gtk_model_button_update_state (GTK_MODEL_BUTTON (button));
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+}
+
+static void
+gtk_model_button_released (GtkButton *button)
+{
+ if (button->priv->button_down)
+ {
+ button->priv->button_down = FALSE;
+ if (button->priv->in_button)
+ gtk_button_clicked (button);
+ gtk_model_button_update_state (GTK_MODEL_BUTTON (button));
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+ }
+}
+
+static void
+gtk_model_button_enter_leave (GtkButton *button)
+{
+ gtk_model_button_update_state (GTK_MODEL_BUTTON (button));
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+}
+
+static void
gtk_model_button_class_init (GtkModelButtonClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ GtkButtonClass *button_class = GTK_BUTTON_CLASS (class);
object_class->set_property = gtk_model_button_set_property;
@@ -683,6 +721,11 @@ gtk_model_button_class_init (GtkModelButtonClass *class)
widget_class->size_allocate = gtk_model_button_size_allocate;
widget_class->draw = gtk_model_button_draw;
+ button_class->pressed = gtk_model_button_pressed;
+ button_class->released = gtk_model_button_released;
+ button_class->enter = gtk_model_button_enter_leave;
+ button_class->leave = gtk_model_button_enter_leave;
+
g_object_class_install_property (object_class, PROP_ACTION_ROLE,
g_param_spec_enum ("action-role", "", "",
GTK_TYPE_MENU_TRACKER_ITEM_ROLE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]