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
This commit is contained in:
Matthias Clasen
2015-11-20 11:40:55 -05:00
parent 1db5ed0aae
commit cf7bb4f2aa

View File

@ -170,6 +170,11 @@
* ]| * ]|
*/ */
enum {
UP_PANEL,
DOWN_PANEL
};
struct _GtkSpinButtonPrivate struct _GtkSpinButtonPrivate
{ {
GtkAdjustment *adjustment; GtkAdjustment *adjustment;
@ -903,24 +908,18 @@ gtk_spin_button_unmap (GtkWidget *widget)
static gboolean static gboolean
gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button, gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button,
GdkWindow *panel) gint panel)
{ {
GtkSpinButtonPrivate *priv = spin_button->priv; GtkSpinButtonPrivate *priv = spin_button->priv;
GdkWindow *effective_panel;
if (priv->wrap) if (priv->wrap)
return FALSE; return FALSE;
if (gtk_adjustment_get_step_increment (priv->adjustment) > 0) if (panel == UP_PANEL &&
effective_panel = panel;
else
effective_panel = panel == priv->up_panel ? priv->down_panel : priv->up_panel;
if (effective_panel == priv->up_panel &&
(gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_value (priv->adjustment) <= EPSILON)) (gtk_adjustment_get_upper (priv->adjustment) - gtk_adjustment_get_value (priv->adjustment) <= EPSILON))
return TRUE; 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)) (gtk_adjustment_get_value (priv->adjustment) - gtk_adjustment_get_lower (priv->adjustment) <= EPSILON))
return TRUE; return TRUE;
@ -929,7 +928,7 @@ gtk_spin_button_panel_at_limit (GtkSpinButton *spin_button,
static GtkStateFlags static GtkStateFlags
gtk_spin_button_panel_get_state (GtkSpinButton *spin_button, gtk_spin_button_panel_get_state (GtkSpinButton *spin_button,
GdkWindow *panel) gint panel)
{ {
GtkStateFlags state; GtkStateFlags state;
GtkSpinButtonPrivate *priv = spin_button->priv; GtkSpinButtonPrivate *priv = spin_button->priv;
@ -946,9 +945,15 @@ gtk_spin_button_panel_get_state (GtkSpinButton *spin_button,
} }
else 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; 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) priv->click_child == NULL)
state |= GTK_STATE_FLAG_PRELIGHT; state |= GTK_STATE_FLAG_PRELIGHT;
} }
@ -962,9 +967,9 @@ update_node_state (GtkSpinButton *spin_button)
GtkSpinButtonPrivate *priv = spin_button->priv; GtkSpinButtonPrivate *priv = spin_button->priv;
gtk_css_node_set_state (priv->up_node, 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_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 static void