Update GcalMultiChoice label when format callback changes
Currently the label text is only updated when set_value is called and the new value is different to the current value. So if a format callback is configured after the GcalMultiChoice is created, this won't be applied until the value is changed to something other than the default. The problem in issue #100 is that the default value for "month" is 0=>January. gcal_date_chooser_init sets the format callback and then calls gcal_multi_choice_set_value with value==0 which won't update the label. Fix by having gcal_multi_choice_set_format_callback update the label text with the result of applying the format callback to the current value. Fixes #100
This commit is contained in:
+20
-11
@@ -79,21 +79,13 @@ get_value_string (GcalMultiChoice *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_value (GcalMultiChoice *self,
|
apply_value (GcalMultiChoice *self,
|
||||||
gint value,
|
GtkStackTransitionType transition)
|
||||||
GtkStackTransitionType transition)
|
|
||||||
{
|
{
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
|
|
||||||
value = CLAMP (value, self->min_value, self->max_value);
|
|
||||||
|
|
||||||
if (self->value == value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
self->value = value;
|
|
||||||
|
|
||||||
if (gtk_stack_get_visible_child (GTK_STACK (self->stack)) == self->label1)
|
if (gtk_stack_get_visible_child (GTK_STACK (self->stack)) == self->label1)
|
||||||
{
|
{
|
||||||
name = "label2";
|
name = "label2";
|
||||||
@@ -105,7 +97,7 @@ set_value (GcalMultiChoice *self,
|
|||||||
label = self->label1;
|
label = self->label1;
|
||||||
}
|
}
|
||||||
|
|
||||||
text = get_value_string (self, value);
|
text = get_value_string (self, self->value);
|
||||||
gtk_label_set_text (GTK_LABEL (label), text);
|
gtk_label_set_text (GTK_LABEL (label), text);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
|
|
||||||
@@ -118,6 +110,21 @@ set_value (GcalMultiChoice *self,
|
|||||||
self->wrap || self->value > self->min_value);
|
self->wrap || self->value > self->min_value);
|
||||||
gtk_widget_set_sensitive (self->up_button,
|
gtk_widget_set_sensitive (self->up_button,
|
||||||
self->wrap || self->value < self->max_value);
|
self->wrap || self->value < self->max_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_value (GcalMultiChoice *self,
|
||||||
|
gint value,
|
||||||
|
GtkStackTransitionType transition)
|
||||||
|
{
|
||||||
|
value = CLAMP (value, self->min_value, self->max_value);
|
||||||
|
|
||||||
|
if (self->value == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
self->value = value;
|
||||||
|
|
||||||
|
apply_value (self, transition);
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_VALUE]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_VALUE]);
|
||||||
}
|
}
|
||||||
@@ -489,4 +496,6 @@ gcal_multi_choice_set_format_callback (GcalMultiChoice *self,
|
|||||||
self->format_cb = callback;
|
self->format_cb = callback;
|
||||||
self->format_data = user_data;
|
self->format_data = user_data;
|
||||||
self->format_destroy = destroy;
|
self->format_destroy = destroy;
|
||||||
|
|
||||||
|
apply_value (self, GTK_STACK_TRANSITION_TYPE_NONE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user