diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-11-20 11:40:55 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-11-20 11:40:55 -0500 |
commit | cf7bb4f2aa18255d52ba97bd12a8930b3b879fc5 (patch) | |
tree | b62ff73d4d1b60034416ce54cbff33619d2b3e34 /gtk | |
parent | 1db5ed0aae4eda188f64e13d81ba65c199195ef6 (diff) | |
download | gtk+-cf7bb4f2aa18255d52ba97bd12a8930b3b879fc5.tar.gz |
spin button: Fix initial button state
We can't use up_panel and down_panel as differentiators for the buttons,
because these window system resources don't exist before realize().
Just use a one-off enum for this purpose.
https://bugzilla.gnome.org/show_bug.cgi?id=758094
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkspinbutton.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index a36a9892aa..159f20fd95 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -170,6 +170,11 @@ * ]| */ +enum { + UP_PANEL, + DOWN_PANEL +}; + struct _GtkSpinButtonPrivate { GtkAdjustment *adjustment; @@ -903,24 +908,18 @@ gtk_spin_button_unmap (GtkWidget *widget) static gboolean gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button, - GdkWindow *panel) + gint panel) { GtkSpinButtonPrivate *priv = spin_button->priv; - GdkWindow *effective_panel; if (priv->wrap) return FALSE; - if (gtk_adjustment_get_step_increment (priv->adjustment) > 0) - effective_panel = panel; - else - effective_panel = panel == priv->up_panel ? priv->down_panel : priv->up_panel; - - if (effective_panel == priv->up_panel && + if (panel == UP_PANEL && (gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_value (priv->adjustment) <= EPSILON)) return TRUE; - if (effective_panel == priv->down_panel && + if (panel == DOWN_PANEL && (gtk_adjustment_get_value (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment) <= EPSILON)) return TRUE; @@ -929,7 +928,7 @@ gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button, static GtkStateFlags gtk_spin_button_panel_get_state (GtkSpinButton *spin_button, - GdkWindow *panel) + gint panel) { GtkStateFlags state; GtkSpinButtonPrivate *priv = spin_button->priv; @@ -946,9 +945,15 @@ gtk_spin_button_panel_get_state (GtkSpinButton *spin_button, } else { - if (priv->click_child == panel) + GdkWindow *panel_win; + + panel_win = panel == UP_PANEL ? priv->up_panel : priv->down_panel; + + if (priv->click_child && + priv->click_child == panel_win) state |= GTK_STATE_FLAG_ACTIVE; - else if (priv->in_child == panel && + else if (priv->in_child && + priv->in_child == panel_win && priv->click_child == NULL) state |= GTK_STATE_FLAG_PRELIGHT; } @@ -962,9 +967,9 @@ update_node_state (GtkSpinButton *spin_button) GtkSpinButtonPrivate *priv = spin_button->priv; gtk_css_node_set_state (priv->up_node, - gtk_spin_button_panel_get_state (spin_button, priv->up_panel)); + gtk_spin_button_panel_get_state (spin_button, UP_PANEL)); gtk_css_node_set_state (priv->down_node, - gtk_spin_button_panel_get_state (spin_button, priv->down_panel)); + gtk_spin_button_panel_get_state (spin_button, DOWN_PANEL)); } static void |